关于数据库对象是否应该受版本控制的SO社区wiki已经有一些讨论.但是,我没有看到很多关于为数据库对象创建构建自动化过程的最佳实践的讨论.
这对我的团队来说是一个有争议的讨论点 - 特别是在评估数据库部署自动化方法的优势和风险时,开发人员和DBA通常有不同的目标,方法和关注点.
我想听听SO社区关于哪些实践在现实世界中有效的一些想法.
我意识到这有点主观,哪些实践真的是最好的,但我认为一个关于哪些工作可能对许多人有帮助的良好对话.
以下是我在此主题中关注领域的一些预告片问题.这些并不是一个明确的清单 - 而是人们帮助理解我正在寻找的东西的起点.
你们在你选择的源代码管理系统中跟踪存储过程和数据库架构吗?
当您进行更改(添加表,更新存储过程,如何将更改导入源代码管理?
我们在工作中使用SQL Server,并且我已经开始使用darc进行版本控制,但我对一般策略以及任何方便的工具都很好奇.
编辑:哇,谢谢所有伟大的建议,伙计们!我希望我能选择多个"已接受的答案"!
版本控制数据库对象的最佳方法是什么?我正在使用Visual Studio 2005/2008和SQL server 2005.我更喜欢可以与SVN一起使用的解决方案.
svn sql-server version-control stored-procedures visual-studio
我环顾了古尔,但没有找到任何好的答案.它是否将数据存储在一个大文件中?使用哪些方法来使数据访问更快,而不仅仅是读取和写入常规文件?
我们的团队第一次遇到了没有版本控制的麻烦.我们如何才能将存储过程至少添加到版本控制中?我们正在开发的当前系统主要依赖于SP.
是否有任何易于安装/使用(在unix上)的数据库迁移工具,如Rails迁移?我真的很喜欢这个想法,但是纯粹安装ruby/rails来管理我的数据库迁移似乎有些过分.
我正在开发一个托管在Google Code上的小项目,使用SVN进行源代码管理.这是我第一次使用源代码控制,我对实际应该提交到存储库的内容感到有点困惑.我的项目很简单:一个用C#编写的类库项目.我写的实际代码是单个文件.
我的问题是:我应该提交整个项目(包括调试,发布,属性等目录)还是我的主.cs文件?
(注意自我:不要使用Subversion战斗一段时间后不能复位库),它看起来像我终于有工作与目录奠定了正常.
我的DBA刚刚失去了他在我们的开发数据库上做的一些开发工作.可怜的家伙.很自然地,我们的经理在我们的状态会议上问他如何发生这种情况以及我们如何避免将来发生这种情况."源头控制可以缓解这个问题"我建议...... dba的回应; "不,我们只是更频繁地备份服务器".现在,我想帮助我的DBA了解源代码控制是什么以及它如何与该架构上的数据库架构和开发相结合.
以前我试过向他解释一下,表和存储过程背后的源代码并没有什么特别之处,它应该在源代码控制系统中(在本例中为TFS).但他只是没有咬人.现在,虽然这个错误是在最近的记忆中,但我想再次尝试.
所以我的问题是,你知道我可以传递给我的DBA的任何好建议,甚至可能有一些资源解释你将如何迁移数据库模式以进行源代码控制并在构建中找到适当的位置部署过程?
关于环境的几个事实:
澄清: 过去,我们一直在与其他DBA一起使用DB Ghost和其他变更管理解决方案.我们甚至拥有VS DB版的许可证!问题是让DBA甚至考虑这种为数据库开发的方式.他真的是老派(即从环境到环境手动迁移),不幸的是他是唯一一个对这个特定数据库有所了解的人.
sql-server version-control tfs database-design build-process
我一直在想如何将所有存储过程放在源代码控制下的SQL 2000上.
我们正在使用Subversion来处理所有正常的源代码,所以如果使用Subversion解决问题会很好.
你有什么想法?
更新16-02-2009:这是我用于导出所有存储过程的vbs脚本:
Set con = CreateObject("ADODB.Connection")
con.ConnectionString = "*** Database connection string here ***"
con.Open
Set rs = CreateObject("ADODB.RecordSet")
rs.ActiveConnection = con
strSQL = "SELECT ROUTINE_NAME, ROUTINE_DEFINITION " & _
"FROM INFORMATION_SCHEMA.routines " & _
"WHERE ROUTINE_NAME NOT LIKE 'dt_%' " & _
"ORDER BY 1"
Set fso = CreateObject("Scripting.FileSystemObject")
rs.Open strSQL
While Not rs.Eof
filename = rs("ROUTINE_NAME") & ".sql"
routineSQL = rs("ROUTINE_DEFINITION")
Set tf = fso.CreateTextFile(filename, True)
tf.Write routineSQL
tf.Close
set tf = Nothing
rs.MoveNext
Wend …Run Code Online (Sandbox Code Playgroud) 警告:长期问题.
[题]
如果策略是每个数据库都有一个分支,如下面的问题所述,其中脚本受版本控制.
在尝试整合到较少的分支时,如何管理数据迁移问题?
这只是您在数据迁移过程中产生的成本吗?
实际上,必须在迁移时创建转换脚本.
有没有更好的办法?
我们可以同时解决这两个问题吗?
什么是最佳做法?
[背景]
在我的工作场所,我们有一个有3个分支的产品.主线有"最新和最大"的变化,没有必要准备发布.
由于这些分支,实际上有3个版本的数据库.代码版本控制相当容易,但数据库版本控制似乎很难.
阅读您是否对数据库项使用源代码管理? 似乎最好的方法是导出每个对象/表的所有创建脚本.注意:根据文章,您可以在一个大脚本或多个脚本或混合脚本中管理它.
我同意这一点,并询问为什么没有这样做.
目前,DBA拒绝将脚本分支到分支.除了懒惰作为借口之外,原因是节省了数据迁移的时间.实际上,所有版本都强制维护数据库更改.
所有脚本都受版本控制,仅在主线中维护.版本A和版本B有自己的特殊文件,说明哪些更改脚本在其各自的分支上运行.当存在更改脚本时会出现问题,例如应用于版本A但版本B仅需要部分更改.开发人员可以通知DBA更新文件,该文件指示要为每个分支应用哪些补丁.对于需要进行过多手动干预的更改脚本,需要手动应用部分更改脚本.
要在版本A上更新数据库,所有补丁都将使用版本A提取,以便应用文件补丁.
[SCENARIO]
希望这是有道理的.
我刚读了关于SO的以下文章;
我们正在使用Sitecore,并且通常将3个标准数据库附加到我们的MSSQL服务器.我们有Core,Master和Web数据库.在Sitecore后端开发不同模板的过程中,我们都使用一个数据库,只使用Sitecore CMS发布我们的数据库更改.例如,当我创建一个datatemplate时,我的同事会在刷新他的"内容树"时看到相同的datatemplate.从我在上面链接的帖子中读到的内容当您有多个版本的源代码和不同的数据库时,需要使用数据库源代码控制.是否需要将我们的数据库置于源代码管理之下?看看这一点,知道Sitecore实际上是处理项目到不同数据库等的发布,我们都通过Sitecore CMS在同一个数据库上工作,我认为这不需要.
好吧,相对而言,它们并不经常改变,但积极的一面是你可以查看一个网站并期望它在本地机器上运行并且看起来正常.
你是做什么?