2011-05-09 31 views

回答

8

正在开发它们以使系统之间的数据库迁移更容易(包括数据库和SQL Azure上的数据库,他们需要移动以平衡资源)。任何依赖于数据库外部的依赖被认为是一种风险,因为它是额外的脚手架,必须与数据库一起使用 - 容易遗忘,容易出错,容易失去同步。

例如,在迪纳利这些问题都得到解决:

  • 今天,当您将数据库移动到另一台服务器,你还必须迁移在服务器级别的所有SQL登录 - 这可能是一个痛苦特别是当SID不同步时。使用包含的数据库,当数据库备份,分离,镜像,复制等时,与SQL Server登录无关的数据库级用户可以随时随地使用。非常简单。

  • 如果你有归类的数据库从服务器排序规则不同,你可能会发现你有整理的冲突,当你加入或执行与#TEMP表等操作,因为获得创建#TEMP表将继承服务器整理,而不是调用数据库。虽然可以通过在每个列引用上指定COLLATE子句(包含数据库)来解决该问题,但#tempdb会继承调用数据库的排序规则,覆盖服务器排序规则。

  • THROW()几乎可以归入此类别 - 因为您不再需要使用sys.messages来存储自定义消息。这不像上述两个问题那么常见,但是如果没有要求保持sys.messages同步,它肯定会使迁移到新的服务器更好地工作。这不限于包含的数据库,但它起着相同的作用。

  • 对于不符合“遏制”标准的事情,有一个DMV可以向您显示一些事情列表,如果您将它们移动到另一台服务器,这些事件可能会中断。例如,对三部分或四部分名称的调用。

在未来的版本中,还会解决其他问题。例如:

  • SQL Server代理是外部依赖项。当您将数据库移动到其他服务器时,引用该数据库的SQL代理作业不会自动随数据库一起移动,您必须确定哪些数据库受到影响并自行编写它们(它不像携带msdb那样简单太)。在未来的SQL Server版本中,我设想(a)每个数据库都能够拥有自己的代理,或者(b)代理将被移至OS级架构,其中一些转换层会告诉您数据库的位置是,而不是必须让代理生活在同一台机器上。当我们谈论Azure,地理位置不同的网络等时,后一个选项会变得复杂。

  • 链接服务器也是外部依赖项。这可以通过数据库级​​别的链接服务器轻松解决 - 尤其是因为这些仅仅是同义词容器/指针。

还有其他人,但那些是沉重的击球手。

相关问题