FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

Red Gate 的 SQL Source Control 工具简介

  • 2014-11-12
  • 本文字数:4177 字

    阅读完需:约 14 分钟

现代化应用程序的开发者必然要与源代码控制打交道,这一点已是毋庸置疑的。在软件开发中使用源代码控制的好处已经得到了广泛与长期的理解,即使是开发者中的业余爱好者也会倾向于使用某种源代码控制系统。但一段时间以来,人们总是认为数据库的源代码控制是难以实现的,时至今日,它也没有成为一种得到广泛应用的一般实践。

其实,如今要实现数据库的源代码控制,不仅是可能的,而且也很方便。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 的对象。你可以选择创建一个过滤器,将这些对象摒弃在外,这些对象就不会出现在 CommitGet 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

2014-11-12 02:092397
用户头像

发布了 428 篇内容, 共 169.0 次阅读, 收获喜欢 36 次。

关注

评论

发布
暂无评论
发现更多内容

Plato Farm有望通过Elephant Swap,进一步向外拓展生态

鳄鱼视界

Prometheus 运维工具 Promtool (三)Debug 功能

耳东@Erdong

Prometheus 7月月更 Promtool

2200字详细讲解计算机网络的“流量管理员”:QoS 服务质量

wljslmz

流量控制 QoS 网络技术 7月月更

Okaleido Tiger 7.27日登录Binance NFT,首轮已获不俗成绩

BlockChain先知

Docker 安装 Minio 搭建属于自己的文件服务器

宁在春

Docker Minio 7月月更

第五届数字中国奖项出炉,昇腾人工智能融合赋能平台斩获十佳首展成果奖

Geek_2d6073

聊聊自动化测试的度量指标

老张

自动化测试 质量度量

【函数式编程实战】(七) Collection在Java8和9中的增强

小明Java问道之路

Lambda collection Stream API 7月月更 签约计划第三季

【函数式编程实战】(八) 如何将你的代码重构

小明Java问道之路

设计模式 函数式编程 7月月更 签约计划第三季 Lambda表达式

次轮Okaleido Tiger即将登录Binance NFT,引发社区热议

鳄鱼视界

车联网的数据安全该怎么保护

Geek_99967b

小程序 物联网

参数解析与跳石板

未见花闻

7月月更

提前批到底影不影响正式批?

KEY.L

7月月更

Plato Farm全新玩法,套利ePLATO稳获超高收益

EOSdreamer111

OPPO 自研大规模知识图谱及其在数智工程中的应用

NebulaGraph

知识图谱 NebulaGraph

平成千字文(へいせいせんじもん)    (平成12年9月10日 石渡 明 作)  宇宙広遠 銀河永久 日月運行 不乱無休 地球公転 季節変移 黄道星座 太陽年周 故郷群島 南熱北冷 海洋温暖 気候順良 青空飛雲 諸野深緑 湖泉静息 谷川清流 春桜一面 新芽

贾献华

7月月更

React 学习记录2📝

程序员海军

React 7月月更

Mybatis中LRU缓存实现

ue4

mybatis LRU mybatis源码

关于 StatefulWidget,你不得不知道的原理和要点!

岛上码农

flutter ios 前端 安卓开发 签约计划第三季

次轮Okaleido Tiger即将登录Binance NFT,引发社区热议

股市老人

在灯塔工厂点亮5G,宁德时代抢先探路中国智造

脑极体

数据资产管理的概念

奔向架构师

数据资产 7月月更

《TiDB 6.x in Action》发布,凝聚社区集体智慧的 6.x 实践汇总!

TiDB 社区干货传送门

数据库 分布式数据库 TiDB

Bootstrap的导航元素和Well详解【前端Bootstrap框架】

恒山其若陋兮

7月月更

小程序怎样助力智能家居生态新模式

Geek_99967b

物联网

Plato Farm通过LaaS协议Elephant Swap,为社区用户带来全新体验

股市老人

ES6 类聊 JavaScript 设计模式之行为型(一)

devpoint

JavaScript 设计模式 ECMAScript 6 7月月更

模块8(消息队列存储消息数据的mysql表格)

Geek_701557

Okaleido Tiger 7.27日登录Binance NFT,首轮已获不俗成绩

EOSdreamer111

【函数式编程实战】(九) Optional实战大全

小明Java问道之路

java8 Optional Stream API 7月月更 签约计划第三季

MPLS基础知识概述

穿过生命散发芬芳

MPLS 7月月更

  • 扫码添加小助手
    领取最新资料包
Red Gate的SQL Source Control工具简介_数据库_David Atkinson_InfoQ精选文章