有一个版本控制系统对于数据库结构的变化?
-
08-06-2019 - |
题
我经常跑到下面的问题。
我工作上有些变化对项目需要新表或列入数据库中。我做的修改数据库,并继续我的工作。通常,我记得写下来的变化,使他们能够复制上的生活的系统。然而,我总是不记得是什么我已经改变了我总是不记得把它写下来。
所以,我让一个推动的活动的系统,并得到一个大的,明显的错误是没有 NewColumnX
,唉。
无论事实,这可能不是最好的做法对于这种情况下,有一个版本控制系统数据库?我不关心的具体数据库的技术。我只是想知道,如果存在)。如果发生这种情况的工作与MS SQL服务器,那么伟大。
解决方案
在红宝石上轨道,有一个概念 移徙 --一个快速的剧本改变该数据库。
你生成迁移文件,其中有的规则,以增加数据库的版本(如增加一个列)和规则,以降级的版本(如消除一列)。每次迁移是编号的,并表跟踪你的当前数据库的版本。
要 迁移了, 你运行命令被称为"db:迁移",这看起来你的版本和应用的需要剧本。你可以迁移到下一个类似的方式。
迁移脚本本身都保存在一个版本控制系统--只要你改变的数据库检查在一个新的脚本,以及任何开发可以用它把自己的本地数据库的最新版本。
其他提示
我的一位老学校,在我使用的源文件,用于创建数据库。实际上有2的文件--项目数据库。sql和项目更新。sql-第一个方案构和持续性的数据,并第二次修改。当然,两者都是以下来源的控制。
当数据库的变化,我第一次更新的主要模式项目数据库。sql,然后再复制所有相关信息的项目更新。sql,例如改变表发言。然后我就可以适用更新的发展数据库,测试中,迭代,直到完成。然后,检查文件中,再次测试,并适用于生产。
此外,我通常有一个表中的数据库-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: $');
然后,添加以下新段:
UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';
的 db_version
只有得到改变当的数据库是重建, db_revision
给了我一个指示如何远数据库是关闭的基线。
我可以继续更新自己的独立文件,但我选择了捣烂他们都在一起,并使用剪切和粘贴提取有关的部分。多一点客房服务,以便,即删除':'from$修订版1.1$冻结它们。
展鹏有一个产品叫 SQL源的控制.它整合了与TFS、SVN,SourceGear库,库亲,善变的,必然,饭桶。
我强烈推荐 SQL三角洲.我只是用它来产生差异的脚本时我做的编码我的功能和检查这些脚本到我源控制工具(反复无常:))
他们有两个SQL服务器和Oracle的版本。
我不知道,没有人提到开放源码工具 liquibase 这是基于Java和应工作的几乎每一个数据库,它支持jdbc。相比轨它使用xml而不是红宝石的执行模式的变化。虽然我不喜欢xml域特定语言的非常酷的利用xml是,liquibase知道怎么回滚某些操作的喜欢
<createTable tableName="USER">
<column name="firstname" type="varchar(255)"/>
</createTable>
所以你不需要来处理这个你自己的
纯sql报表或数据进口也支持。
大多数数据库引擎应该支持倾倒数据库成为一个文件。我知道MySQL不,反正。这将只是一个文本的文件,因此您可以提交到颠复或任何使用。这将会是容易的运行比较上的文件了。
如果你使用SQL服务器,它将难以打败的数据的家伙(又名数据库版本的Visual Studio)。一旦你得到的诀窍,这样做的架构之间进行比较源控制的数据库版本,该版本在生产是一件轻而易举的事。和一个点击,你可以产生比较言.
有一个教学 视频 MSDN上这是非常有益的。
我知道DBMS_METADATA和蟾蜍,但如果有人可以拿出一个数据伙计Oracle然后生活会是真正的甜蜜。
有你的初始创建表发言的版本控制器,然后再添加更改的表声明,但从来没有编辑的文件,只需要更改文件的优质命名的顺序,或者甚至作为一个"改组",这样你就可以找到所有的改变对于一个特定的部署。
最顽强的一部分,我可以看到的,是追踪依赖关系,例如,对于一个特定的部署表B可能需要更新之前表A
Oracle,我用 蟾蜍, ,这可以转储架构的一些离散的文件(例如,一个文件表)。我有一些脚本,管理这个集合中的必然的,但我认为这应该是很容易可行的任何修订控制系统。
看看oracle包DBMS_METADATA.
特别是,以下方法特别有用的:
DBMS_METADATA.GET_DDL
DBMS_METADATA.SET_TRANSFORM_PARAM
DBMS_METADATA.GET_GRANTED_DDL
一旦你熟悉他们如何工作(相当自我解释)可以编写一个简单的脚本来倾倒的结果,这些方法的成文文件的可下放源的控制。祝你好运!
不知道,如果有这么简单MSSQL。
我写我的数据库释放脚本并行编码,并保持释放脚本项目中的特定段SS。如果我做出改变的代码需要的数据库改变,那么我更新的释放脚本在同一时间。释放前,我运行中释放的脚本关于清洁开发db(复制结构明智的生产)和我做最后的测试。
我已经做到了这一关闭和数年--管理(或试图管理)模式版本。最好的办法依赖的工具。如果你可以得到任务的软件工具"架构的管理"你会处于良好状态。Oracle都有其自己的、低劣的工具,也被称为"架构的管理"(混乱多少?) 我不建议。
没有一个自动化工具(见的其他评论在这里对数据哥)然后你就可以使用脚本和言的文件。选办法文件,并按照它严格。我喜欢有能力重新建立的数据库,在任何给定的时刻,所以我希望有一个充满言出口的整个数据库(如果我DBA),或者开发模式(如果我是在产品发展的模式)。
PLSQL开发一个工具,从所有角落找寻自动化,具有一个插件存储库的工作确定的(但不伟大)有些来源的安全。
从网络:
该版本控制插在提供一个紧密的一体化之间PL/SQL开发IDE>>和任何版本控制系统,支持Microsoft SCC接口的规范。>>这包括最流行的版本控制系统,例如Microsoft些章,>>Merant PVC和MKS源的完整性。
ER工作室 可以让你的反向数据库架构的工具,然后你可以把它比作活的数据库。
例如:扭转你的发展架构成ER室--进行比较的生产和它将列出所有的差异。可以脚本的改变,或只是把他们通过自动的。
一旦你有一个架构在ER工作室,可以节省建立脚本或保存它作为一个专有的二元和保存在的版本控制。如果你想回到过去版本的方案,只是检查出来,并把它推到您的数据库平台。
有一个PHP5"数据库的移徙框架"所谓的Ruckusing.我没有用过它,但是 例 显示的想法,如果您使用的语言创建的数据库,并在需要的时候,你只需要追踪来源的文件。
你可以使用 Microsoft SQL服务器的数据的工具 在visual studio脚本生成的数据库对象的一部分SQL服务器项目。然后你可以添加的脚本来源的控制使用的来源控制的整合,是建立成visual studio.此外,SQL服务器项目的让你的验证数据库的目的使用一个编译器而产生的部署脚本来更新现有数据库或建立一个新。
我们使用 MS团队系统数据库的版本 有很好的成功。它整合了与TFS版本控制和Visual Studio或多或少无缝,使我们能够管理存储处,观点,等等, 很容易。冲突的解决可以是一个痛苦,但版本的历史是一旦完成它的完成。此后,迁移到质量保证和生产都非常简单的。
这是公平地说,这是一个版本1.0的产品,但是,并不是没有几个问题。
架构比较Oracle是一个工具,专门设计的迁移变化从我们的Oracle数据库的另一个。请访问以下网址下载的链接,在那里,你将能够使用该软件提供一个功能齐全的审判。
http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm
在缺乏风险投资对于表中的变化,我已经记录他们在一wiki。至少这样我能看到什么时候和为什么它被改变了。这是远非完美,因为不是每个人都是做什么的和我们有很多产品版本在使用,但总比没有好。
我建议一个两种方法。首先,投资在 PowerDesigner 从Sybase.企业版。它可以让你的设计理datamodels,以及一个整体很多。但是,它带有一个储存库,可以让你检查你的模型。每一个新的检查在可以是一个新的版本,它可以比较的任何版本的任何其他版本,甚至是什么在你的数据库。然后,它将本列表的每一个差异和要求它应该迁...然后它建立的脚做到这一点。它不便宜但它是一个讨价还价的价格的两倍,这是投资回报率是约6个月。
其他的想法是把言审计(工作在Oracle).这将创建一个表中的每一个变化。如果你查询的更改时间戳你最后一次移动数据库的变化,以促使到现在,只有一个有序列的一切你所做的工作。几其中条款,以消除零和更改类似创建表foo;随后下降表foo;你可以很容易地建立一个国防部的脚本。为什么保留的更改在维基,这是双重的工作。我们的数据库跟踪它们。
两本书的建议:"重构数据库",由安布勒和Sadalage和"敏捷的数据库技术",由安布勒。
有人提到轨迁移。我认为他们的伟大工作,即使外部的轨道应用程序。我用它们在ASP应用程序与SQL服务器,我们在移动的过程中轨道。你检查移徙脚本本身成的风险.这里的 后通过务实的戴夫*托马斯 该问题。