现代化应用程序的开发者必然要与源代码控制打交道,这一点已是毋庸置疑的。在软件开发中使用源代码控制的好处已经得到了广泛与长期的理解,即使是开发者中的业余爱好者也会倾向于使用某种源代码控制系统。但一段时间以来,人们总是认为数据库的源代码控制是难以实现的,时至今日,它也没有成为一种得到广泛应用的一般实践。
其实,如今要实现数据库的源代码控制,不仅是可能的,而且也很方便。SQL 开发者、商业智能开发者以及 DBA 都已经开始认识到它的好处,了解到它如何帮助软件团队工作得更好更快、并且协作程度更高。那么,它又如何转变为商业利益呢?
对于客户来说,SQL Source Control 是一个强大的生产力推进器,对于还没有对数据库进行版本控制的客户,这一工具会让他们失去一切偷懒的借口。它的使用方式非常方便!某些客户可能已经针对该问题推出了自己的解决方案,或者是选择手动地进行数据复制,并跟踪数据 Schema 的变化,对于他们来说,这一产品能够使他们节省大量的时间。移动鼠标、单击、搞定!
- Rob Sobers, 来自于 Fog Creek 的专业服务主管
源代码控制会对你的业务起到什么帮助
如果你对源代码控制(也叫做版本控制)还不熟悉,那你真是非常走运,因为在 InfoQ 上有着不计其数的资源会为你介绍这一思想。如果你已经了解了源代码控制是什么,以及它的工作方式,那么希望你也同时了解到在你的软件团队中使用源代码控制的商业价值。
管理的可见度 —— 源代码控制维护了详细的变更历史,同时也经常能够配合缺陷跟踪系统的使用。比方说,SQL Source Control 就允许你将数据库任务与微软的 Team Foundation Server 中的“工作项”相关联。
备份、恢复与回滚 —— 你的数据库与数据仓库中存放了大量的(甚至是全部的)重要业务信息。能够掌握数据的变化历史,并让维护它的团队能够高效地开展工作非常重要,正如你的备份与恢复策略一样重要。
审记与合规 —— 合规性检查是影响到整个组织的事,包括财务部门、CIO、以及每个开发人员与数据库管理员。比方说,合规审记会要求 DBA 对数据库的所有变更进行负责,并且需要递交所有变更的细节内容。
SQL Source Control 概况
使数据库符合合规检查的第一步,是由源代码控制所提供的变更追踪功能。对于维护一个健壮的审查跟踪与风险管理来说,这一步也是必不可少的。如果你已经搭建好了一套版本控制系统,那就能够通过 SQL Source Control 很方便地将数据库与这套系统进行整合了。
除了能够与微软 Team Foundation Server 进行整合之外,Red Gate 还与各个在业界中处于领先地位的源代码控制系统的提供商(例如 Fog Creek、SourceGrea、Collabnet 和 Perforce)进行了合作,以确保你能够从你的版本控制系统中获得最好的结果。
高效性与可扩展性
可扩展性的提升体现在能用同等数量的资源做到更多的事,因此高效的工具与流程是必不可少的。源代码控制极大地简化了变更管理的工作,让开发者们的工作速度更快,因此它对于分布于不同地区的团队来说显得尤为重要。虽然 DBA、数据库开发者与应用程序开发者往往不在一起办公,但它们从本质上都属于同一个团队。至少,SQL Source Control 这样的工具能够让这些成员在同一个平台上工作,简化部署流程,为复杂的流程增加自动化与重复操作的功能。
购置成本
各种源代码控制系统的购置成本往往都是不同的,但有一点是不变的,一个系统越是容易使用,学习与实现的速度就越快,也能够更快地体现其价值。
作为一个数据库源代码控制工具,SQL Source Control 能够利用标准的开发环境,与现有的源代码控制系统进行整合,因此应用程序与数据库的开发者也不需要改变他们的工作方式。这个工具的设计初衷就是简单而便于使用。这就意味着采用它的难度很低,无需对基础架构作出额外调整的要求,因此它的购置成本是比较低廉的。
上手练习
简单地说,SQL Source Control 能够将数据库与你的源代码控制系统进行连接,因此你可以在 SQL Server Management Studio 中直接提交变更。让我们简单地演练一下数据库源代码控制的安装过程,并且分析一下你希望你的团队所采用的工作流程。
我假设你已经搭建了一个源代码控制库,并且你的应用程序开发者已经开始提交代码了。
将一个数据库连接到源代码控制
首先,你需要将数据库与你的源代码控制库进行连接。如果你不想使用现有的数据库来测试 SQL Source Control 的功能,那你也可以使用脚本创建一个包含各种对象的临时数据库。
先在 Object Explorer 中选择一个数据库,然后在 SQL Source Control 中的Setup标签页,点击“Link this database to source control”这个链接:
(单击图片以放大)
在 Setup__ 标签页中,选择将数据库与源代码控制系统进行连接。
在“将数据库与源代码控制进行连接”对话框中,选择你的的源代码控制系统,并提供关于你准备接入数据库的源代码库。如果想了解更多信息以及示例,请参与 SQL Source Control 文档中“将数据库与源代码控制进行连接”的有关章节。
选择一种开发模式
当数据库成功连接之后,你需要告诉 SQL Source Control 你的团队将使用哪种开发模式:
- 独占式
- 在这种模式下,每个开发者会得到该数据库的一份拷贝,所有工作在该数据库中进行
- 共享式
- 所有开发者都在一个单独的数据库中进行开发工作
为团队选择不同的开发模式,SQL Source Control 的行为也会有少许的不同,但关键的一点在于,这项工具本身的设计原则是适应团队现有工作流的需求,而不是让团队来适应这项新工具的使用方式。
准备就绪?
当你提供了源代码库的细节,并选择了开发模式之后,单击“连接”。随后在 Object Explorer 中的数据库图标会产生变化,表示该数据库已经与源代码控制建立起了连接:
在Object Explorer__ 中,已经与源代码控制建立连接的数据库
进行你的第一次提交
当你将数据库与源代码控制进行连接之后,你就可以准备进行第一次提交了(也称为初次提交)。这一过程会将你的数据库内容复制到源代码控制当中。在进行初次提交时,打开 Commit标签页,其中会列出目前尚未提交至源代码控制的所有数据库变更:
(单击图片以放大)
在Commit changes__ 标签页中,初次尝试将数据库对象提交至源代码控制
对于某些类型的数据库对象,你也许并不打算将它们提交至源代码控制中,例如某种特定类型的对象(例如自定义函数与视图),或者是属于某个特定schema 的对象。你可以选择创建一个过滤器,将这些对象摒弃在外,这些对象就不会出现在 Commit或Get latest标签页中了。
右键单击网格并选择编辑过滤规则,就可以创建一个过滤器。要了解更多信息,可以参照 SQL Source Control 文档中关于“用过滤器排除对象”的相关章节。现在请确保你选择了所有对象,填写一条提交信息(例如“初次提交”),随后单击“提交”。
提交一次变更
现在尝试着对数据库进行一次小改动,例如为某张表添加一个新字段。当完成改动之后,进入 Commit标签页,就会在整个待提交变更列表中找到这次改动信息:
(单击以放大图片)
在Commit Changes__ 标签页中,你可以查看到尚未提交到源代码控制中的所有变更,并且可以逐行地查看不同之处。
在下方的面板中,你能够看到新对象的SQL 创建脚本与源代码控制中的对象之间的不同之处。在提交变更时,编写一条提交信息,并点击 Commit即可。在获取变更或检查历史时,变更信息会很有帮助,它能够帮助你的团队快速地理解每次变更的具体内容。
获取某个变更
现在尝试一下从源代码控制中获取数据库最新变更。首先将某个空数据库连接到当前与你的数据库已经建立连接的同一个源代码库,随后当你进入Get latest标签页后,你会看到所有等待从源代码控制中获取的数据库变更:
(单击图片以放大)
_ 在Get latest_标签页中获取数据库变更
当你单击Get latest后,新的数据库就会得到更新,其内容与之前的数据库完全相同。
设置 SQL Source Control 选择
Setting SQL Source Control options
你可以对 SQL Source Control 进行配置,以配合你的开发流程需要:
将选项改动与团队进行分享
当你编辑了某个选项之后,在Commit标签页中将看到这个选择,它将作为一个变更被提交:
(单击图片以放大)
_ 在Commit changes_标签页中,将某个 SQL Source Control__ 选项分享给你的团队
当你提交变更之后,其它团队成员就能够在Get latest标签页中获取到你的选项。这样就能够保证每个人都能够在相同的选项之下进行工作。
接下来一步呢?
干得漂亮——现在你已经了解了 SQL Source Control 中所有的基础内容了。那么接下来呢?如果你的团队已接受了数据库源代码控制的概念,那么接下来就是为每个人设置好工具,并将每个人的数据库指向同一个源代码库。
不过,多数团队都打算进行进一步的探索,以确认他们的投入是值得的。为了帮助你的团队作出决定,我们准备了一份指南,收集了大量的免费文章、电子书和视频教程。因此你就可以实现以下目标:
- 向你的 DBA 展示如何通过源代码控制,保护生产环境的数据安全
- 帮助不熟悉源代码的成员学习基础知识
- 解释数据库源代码控制为业务带来的各种优势:
- 时间与金钱上的节约
- 更高的合规性
- 能够更快、更可靠地将新产品交付给客户
结论
为数据库实现源代码控制能够帮助开发者、DBA 与商业智能专家更高效地开展工作,最终得以节约成本,并让他们能够专注于高质量的工作中。由于缺乏可行的解决方案所导致的问题是一种令人无奈成本浪费,由于应用程序开发的不一致性,所导致的低效性会常常被低估。
如今,实现数据库源代码控制是非常方便的,因此不必再接受这方面的妥协了。数据库开发也能够享用到应用程序代码开发的相同便利性,你的业务能够渐渐减少成本,并且数据库与应用程序开发者能够应用相同的高效工作流。
关于作者
从 2005 年开始,David Atkinson就开始致力于 SQL Server 上的工具应用了,他最初的工作是 SQL 比较与部署工具方面的产品管理(并且最近又回到了类似的工作岗位上)。David 一直致力于提高 SQL Source Control 产品的成熟度,并扩大它的市场。他的新使命是将持续集成与其它 Agile 实践的各种优点引入数据库开发团队中。如果你仍认为管理关系型数据库的变更是一项困难的任务,那说明他的使命尚未完成。请在 twitter 上向他提交 bug,他会更努力地实现这一目标的。
查看英文原文: Article: Introduction to Red Gate’s SQL Source Control
评论