End*_*ssa 119 sql database oracle version-control
我经常遇到以下问题.
我正在对需要数据库中的新表或列的项目进行一些更改.我进行数据库修改并继续我的工作.通常,我记得记下这些更改,以便可以在实时系统上复制它们.但是,我并不总是记得我改变了什么,我也不记得写下来.
所以,我推动了现场系统并得到一个很大的,明显的错误,没有NewColumnX,呃.
无论这可能不是这种情况的最佳实践,是否有数据库的版本控制系统?我不关心具体的数据库技术.我只是想知道一个是否存在.如果它恰好适用于MS SQL Server,那么很棒.
Kal*_*lid 62
在Ruby on Rails中,有一个迁移的概念- 一个更改数据库的快速脚本.
您生成一个迁移文件,该文件具有增加db版本的规则(例如添加列)和规则以降级版本(例如删除列).每次迁移都会编号,表会跟踪您当前的db版本.
要进行迁移,请运行名为"db:migrate"的命令,该命令将查看您的版本并应用所需的脚本.您可以以类似的方式向下迁移.
迁移脚本本身保存在版本控制系统中 - 每当您更改数据库时,都会检入新脚本,并且任何开发人员都可以应用它来将其本地数据库带到最新版本.
dar*_*7yl 30
我有点老了,因为我使用源文件来创建数据库.实际上有2个文件 - project-database.sql和project-updates.sql - 第一个用于架构和持久数据,第二个用于修改.当然,两者都受源头控制.
当数据库发生更改时,我首先更新project-database.sql中的主模式,然后将相关信息复制到project-updates.sql,例如ALTER TABLE语句.然后我可以将更新应用到开发数据库,测试,迭代直到完成.然后,签入文件,再次测试,并申请生产.
另外,我通常在db - Config中有一个表 - 例如:
SQL
CREATE TABLE Config
(
cfg_tag VARCHAR(50),
cfg_value VARCHAR(100)
);
INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');
Run Code Online (Sandbox Code Playgroud)
然后,我将以下内容添加到更新部分:
UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';
Run Code Online (Sandbox Code Playgroud)
在db_version当数据库被重新创建仅得到改变,并db_revision给了我一个指示DB多远是关闭的基线.
我可以将更新保存在他们自己的单独文件中,但我选择将它们全部混合在一起并使用剪切和粘贴来提取相关部分.更多的内务管理是有序的,即从$ Revision 1.1 $中删除':'来冻结它们.
Cha*_*ick 12
MyBatis(以前称为iBatis)具有模式迁移,可在命令行上使用.它是用java编写的,但可以用于任何项目.
为了实现良好的数据库变更管理实践,我们需要确定一些关键目标.因此,MyBatis Schema Migration System(或简称MyBatis Migrations)寻求:
End*_*ssa 12
Redgate有一个名为SQL Source Control的产品.它集成了TFS,SVN,SourceGear Vault,Vault Pro,Mercurial,Perforce和Git.
Kar*_*ell 11
我想知道没有人提到基于Java的开源工具liquibase,它几乎适用于支持jdbc的每个数据库.与rails相比,它使用xml而不是ruby来执行架构更改.虽然我不喜欢用于特定领域语言的xml,但xml非常酷的优点是liquibase知道如何回滚某些操作,如
<createTable tableName="USER">
<column name="firstname" type="varchar(255)"/>
</createTable>
Run Code Online (Sandbox Code Playgroud)
所以你不需要自己动手
还支持纯sql语句或数据导入.
Rya*_*Fox 10
大多数数据库引擎都应支持将数据库转储到文件中.无论如何,我知道MySQL确实如此.这只是一个文本文件,因此您可以将其提交给Subversion或您使用的任何内容.在文件上运行差异也很容易.
在版本控制器中创建初始create table语句,然后添加alter table语句,但永远不要编辑文件,只需按顺序命名理想命名的更多文件,或者甚至作为"更改集",这样您就可以找到特定部署的所有更改.
我能看到的最难的部分是跟踪依赖关系,例如,对于特定部署表B可能需要在表A之前更新.
看一下oracle包DBMS_METADATA.
特别是,以下方法特别有用:
DBMS_METADATA.GET_DDLDBMS_METADATA.SET_TRANSFORM_PARAMDBMS_METADATA.GET_GRANTED_DDL一旦熟悉它们的工作方式(非常自我解释),您就可以编写一个简单的脚本,将这些方法的结果转储到可以置于源代码管理下的文本文件中.祝好运!
不确定MSSQL是否有这么简单的东西.
我与编码并行编写数据库发布脚本,并将发布脚本保存在SS中的项目特定部分.如果我对需要更改数据库的代码进行了更改,那么我会同时更新发布脚本.在发布之前,我运行在一个干净的dev的分贝(复制结构从生产聪明)发行脚本,做就可以了我的最终测试.
小智 7
我已经做了很多年 - 管理(或试图管理)架构版本.最好的方法取决于您拥有的工具.如果您可以获得Quest Software工具"Schema Manager",那么您将处于良好状态.Oracle有自己的劣质工具,也称为"架构管理器"(令人困惑的很多?)我不推荐.
如果没有自动化工具(请参阅此处有关Data Dude的其他评论),那么您将直接使用脚本和DDL文件.选择一种方法,记录它,并严格遵循它.我喜欢能够在任何给定时刻重新创建数据库,所以我更喜欢整个数据库的完整DDL导出(如果我是DBA),或者开发人员模式(如果我在产品中) - 发展模式).
PLSQL Developer是All Arround Automations的一个工具,它有一个存储库插件,可以使用Visual Source Safe工作正常(但不是很好).
来自网络:
Version Control Plug-In提供了PL/SQL Developer IDE >>与支持Microsoft SCC接口规范的任何版本控制系统之间的紧密集成.>>这包括最流行的版本控制系统,如Microsoft Visual SourceSafe,>> Merant PVCS和MKS Source Integrity.
http://www.allroundautomations.com/plsvcs.html
| 归档时间: |
|
| 查看次数: |
30418 次 |
| 最近记录: |