1. 概述
由于存储过程、函数、包等代码保存在数据库服务端里且只有最后修改记录,如每次更新代码后,都会覆盖之前的记录,在没有版本控制的情况下,数据库的更改很容易意外导致表被覆盖、数据丢失或bug,导致更新后很难找回以前的代码记录。为了便于管理Oracle 数据库中的存储过程、函数、包等代码版本,通过 Source Control for Oracle + Git 的方式进行代码管理,就能很容易追踪到是谁改了什么,什么时候改的,为什么改的。如果发生冲突,可以在提交更改之前比较差异。
Source Control for Oracle 有以下特点:
- 可以看到对文件的每一次更改的历史记录,如更改了什么,谁更改了它,以及为什么更改它
- 可以很容易地恢复到文件的早期版本,因此错误可以很容易地恢复,并且没有尝试的风险
- 团队可以在同一个文件上工作,而不会相互阻塞或覆盖他们的更改
- 团队可以在一个单一的、共享的文件库中工作,而不必不断地来回发送文件
Source Control for Oracle 的使用步骤如下:
- 安装和配置:下载并安装 Source Control for Oracle。然后安装与配置版本控制系统(如 Git、SVN 或 TFS)。
- 创建新项目:在 Source Control for Oracle 中创建一个新的源代码控制项目,指定要控制的 Oracle 数据库对象和静态数据。
- 检查工作:从版本控制系统中检出最新的数据库对象和静态数据,确保你的工作环境是最新的。
- 进行更改:在数据库连接客户端(如 SQL Developer)中进行数据库对象和静态数据的更改。Source Control for Oracle 会自动跟踪这些更改。
- 提交更改:在 Object Explorer 中,选择要提交的更改,输入提交信息,然后点击提交按钮。这样更改的操作就会被记录到版本控制系统中。
- 合并和分支:可以使用版本控制系统的功能来合并分支、解决冲突等。
- 查看历史记录:通过 Source Control for Oracle,可以查看每个更改的详细记录,包括更改的对象、更改者和时间。
2. 相关软件下载
- source-control-for-oracle
- git
- tortoisegit
- net-framework-4-7-2(提示缺少 .net 4.7.2 时才需要先安装)
3. 安装 Source Control for Oracle
安装时候注意是否缺少 .net 4.7.2,其余的安装步骤很简单,都按下一步就好了。
4. 同步数据库代码
-
打开 【Source Control for Oracle】进行创建源码项目,如下图:
-
连接数据库可以使用 TNS 连接或者输入相关连接信息,这里使用的是手动连接,大家根据自身环境进行相应修改,如下图:
-
先在需要进行版本控制的电脑上创建一个代码的根目录,如 D:\sql。(如果已有 svn 或 git,可以选择对应的选项)。
-
选择对应的数据库用户
-
创建 TUSER 目录
-
创建完成
-
保存所有文件,保存成功后,D:\sql目录下会生成一个 TUSER 文件夹
-
保存后如下图,至此已经将数据库里的过程、函数与表结构等脚本都保存在 sql 目录下了。再根据 Git 进行版本控件。
5. 安装Git
- 安装 PortableGit-2.35.1.2-64-bit.7z.exe(安装步骤很简单,都按下一步就好了)
6. 安装 TortoiseGit
- 安装 TortoiseGit-2.13.0.1-64bit.msi(安装步骤很简单,都按下一步就好了)
- 安装 TortoiseGit-LanguagePack-2.13.0.0-64bit-zh_CN.msi(安装步骤很简单,都按下一步就好了)
7. 创建版本库
-
配置 git.exe 路径 与 用户信息
-
在刚才创建的sql目录,右键创建版本库
-
提交初始版本
8. 后续代码更新操作
代码更新情形一: 本地文件夹脚本有变动,数据库里没变动,需要将本地脚本更新到数据库中,同时变动的代码也要提交到 git 仓库里。
- 如更新 student.sql,将更新文件复制到 D:\sql\TUSER\Tables 目录下
- 启动 Source Control for Oracle ,刷新代码最新同步状态,对比查看更新前后状态,确认无误后更新脚本到数据库中.
- 将更新后的脚本提交到 git 仓库中,进行版本管理。
代码更新情形二: 本地文件夹脚本没有变动,代码已在数据库里更改,需要将数据库里的脚本同步到本地文件夹中,同时变动的代码也要提交到 git 仓库里。
代码更新情况三: 本地文件夹脚本有更改,同时也在数据库里更改,需要比后使用其中一个版本或手工合并版本后再同步到数据库中,并提交到代码仓库中。