首页 / 知识
关于sql:是否存在用于数据库结构更改的版本控制系统?
2023-04-11 13:25:00

Is there a version control system for database structure changes?我经常遇到以下问题。 我正在对项目进行一些更改,这些更改需要数据库中的新表或新列。 我进行数据库修改并继续我的工作。 通常,我记得记下更改,以便可以在实时系统上复制它们。 但是,我并不总是记得自己所做的更改,也并非总是记得写下来。
因此,我尝试使用实时系统,并得到一个很大的明显错误,即没有 不管这可能不是这种情况的最佳实践,是否存在数据库的版本控制系统? 我不在乎特定的数据库技术。 我只想知道是否存在。 如果碰巧可以与MS SQL Server一起使用,那就太好了。 在Ruby on Rails中,有一个迁移的概念-一种用于更改数据库的快速脚本。 您生成一个迁移文件,该文件具有增加数据库版本的规则(例如,添加列)和具有降级版本的规则(例如,删除列)。 每个迁移都有编号,并且有一个表跟踪您当前的数据库版本。 要向上迁移,请运行一个名为" db:migrate"的命令,该命令将查看您的版本并应用所需的脚本。 您可以通过类似的方式向下迁移。 迁移脚本本身保存在版本控制系统中-每当您更改数据库时,都需要签入新脚本,任何开发人员都可以应用该脚本将其本地db更新到最新版本。 我有点老套,因为我使用源文件来创建数据库。实际上有2个文件-project-database.sql和project-updates.sql-第一个用于架构和持久性数据,第二个用于修改。当然,两者都在源代码控制之下。
当数据库更改时,我首先在project-database.sql中更新主模式,然后将相关信息复制到project-updates.sql中,例如ALTER TABLE语句。 > > > > >
> >
> > > > Redgate有一个称为SQL Source Control的产品。 它与TFS,SVN,SourceGear Vault,Vault Pro,Mercurial,Perforce和Git集成。 MyBatis(以前称为iBatis)具有模式迁移工具,可在命令行上使用。 它是用Java编写的,尽管可以与任何项目一起使用。
我想知道没有人提到基于Java的开放源代码工具liquibase,它几乎适用于所有支持jdbc的数据库。 与rails相比,它使用xml代替ruby来执行模式更改。 尽管我不喜欢xml用于特定领域的语言,但是xml的非常酷的优点是liquibase知道如何回滚某些操作,例如
所以您不需要自己处理 还支持纯sql语句或数据导入。 我强烈建议使用SQL delta。 当我完成功能编码并使用我的源代码控制工具(Mercurial :)将这些脚本签入后,我只用它来生成差异脚本。 它们同时具有SQL Server和Oracle版本。 大多数数据库引擎应支持将数据库转储到文件中。 无论如何,我知道MySQL确实如此。 这只是一个文本文件,因此您可以将其提交给Subversion或任何使用的文件。 对文件运行diff也很容易。 如果您使用的是SQL Server,将很难击败Data Dude(又名Visual Studio的数据库版本)。 一旦掌握了它,就可以轻松地对数据库的源代码控制版本和生产版本进行模式比较。 只需单击一下,就可以生成差异DDL。 在MSDN上有一个指导性视频,非常有用。 我知道DBMS_METADATA和Toad,但是如果有人可以提出Oracle的Data Dude,那么生活将会非常美好。 对于Oracle,我使用Toad,它可以将架构转储到多个离散文件(例如,每个表一个文件)。 我有一些脚本可以在Perforce中管理此集合,但是我认为它几乎可以在任何版本控制系统中轻松实现。 将最初的创建表语句放在版本控制器中,然后添加alter table语句,但不要编辑文件,最好按顺序甚至是"变更集"命名更多的alter文件,因此您可以找到特定部署的所有变更。 我看到的最困难的部分是跟踪依赖关系,例如,对于特定的部署表B,可能需要在表A之前进行更新。 看一下oracle包DBMS_METADATA。 特别地,以下方法特别有用:
一旦熟悉了它们的工作原理(很容易解释),您就可以编写一个简单的脚本将这些方法的结果转储到可以置于源代码控制下的文本文件中。 祝好运! 不知道对于MSSQL是否有这么简单的东西。 ER Studio允许您将数据库架构反向到该工具中,然后可以将其与实时数据库进行比较。 示例:将您的开发架构反向到ER Studio中-将其与生产进行比较,它将列出所有差异。 它可以编写更改脚本,也可以自动推送更改。 在ER Studio中拥有架构后,您可以保存创建脚本或将其保存为专有二进制文件并将其保存在版本控制中。 如果您想回到该方案的旧版本,只需将其签出并将其推送到您的数据库平台即可。
我与编码并行编写了数据库发行脚本,并将发行脚本保留在SS的项目特定部分中。 如果我更改了需要更改数据库的代码,那么我将同时更新发行脚本。 PLSQL Developer是All Arround Automations的工具,它具有一个用于存储库的插件,该插件可以在Visual Source Safe中正常运行(但效果不佳)。
|
最新内容
相关内容
关于c#:找不到导入的项目“ C:Microso
关于c#:找不到导入的项目“ C:Microsoft.CSharp.targets”,关于c#:找不到导入的项目“ C:Microsoft.CSharp.targets”,错误,项目,尝试,收关于语言不可知:如何将代码贡献回开
关于语言不可知:如何将代码贡献回开源项目?,关于语言不可知:如何将代码贡献回开源项目?,开源项目,如果您,我会,做什么,How to contribute关于dvcs:不同的分布式版本控制系统
关于dvcs:不同的分布式版本控制系统一起工作,关于dvcs:不同的分布式版本控制系统一起工作,控制,安装程序,办公室,源代码,Different Dis关于不可知的语言:项目中的国际化
关于不可知的语言:项目中的国际化,关于不可知的语言:项目中的国际化,开发人员,知识,国际化,我对,Internationalization in your projec