【问题标题】:What is the difference between a fully contained database & Azure SQL Single database完全包含的数据库和 Azure SQL 单一数据库有什么区别
【发布时间】:2020-06-10 00:00:58
【问题描述】:

当一个数据库被完全包含时,它的所有对象都在数据库边界内。它也在数据库级别管理连接。 Contained Database

我有几个问题:

  • 如果我在 Azure SQL 单一数据库中托管包含的数据库,那么什么是 Azure SQL 单一数据库和包含数据库之间的区别 作为 Azure SQL 单数据库?

  • 为什么我们有一个单独的产品作为 Azure SQL 单一数据库,当 包含的数据库也是类似的东西吗?

  • 将数据库设为包含数据库是否有助于更轻松 迁移到 Azure SQL 单一数据库?

【问题讨论】:

    标签: sql-server azure azure-sql-database self-contained


    【解决方案1】:

    在 Azure 中,“单一”是一种部署选项,可将 Azure SQL 数据库与托管池和弹性池区分开来。从包容的角度来看确实没有区别,因为 Single 和 Azure SQL 数据库是一回事。

    Azure SQL 数据库固有地提供了数据库级用户身份验证等包含功能。对于本地 SQL Server 数据库,必须选择加入 CONTAINMENT=PARTIAL 允许数据库级别的身份验证。

    将数据库作为包含数据库是否有助于更轻松地迁移到 Azure SQL 单一数据库?

    CONTAINMENT=PARTIAL 允许在本地版本中进行数据库级身份验证,从而促进数据库安全主体的迁移。只要用户数据库实体保持在数据库边界内并且不需要包含数据库(例如 CDC)中不可用的功能,迁移通常很容易。

    不过,需要考虑的是部分 contained databases implicitly use catalog collation Latin1_General_100_CI_AS_KS_WS_SC,而 Azure SQL 数据库目录排序规则必须是所选的 DATABASE_DEFAULT 排序规则或 SQL_Latin1_General_CP1_CI_AS。这通常只有在需要对象/变量名称区分大小写时才会出现。

    可以通过查询sys.dm_db_uncontained_entities来识别现有的未包含引用:

    SELECT * FROM sys.dm_db_uncontained_entities;
    

    上述查询还将识别需要手动检查的动态 SQL 引用。

    【讨论】:

    • 您能否详细说明,为什么 Azure SQL 数据库被部分包含。另外,我们如何判断数据库是否完全包含?
    • @VenkataramanR,我的回答并没有像我应该说的那样清楚,但我的基本意思是 Azure SQL 数据库中默认提供数据库级身份验证等包含的功能,而本地数据库需要选择加入PARTIAL 遏制选项。您可以使用SELECT * FROM sys.dm_db_uncontained_entities; 识别未包含的实体。我现在开始我的日常工作,但当我回来时会改进我的答案。
    • 当然。谢谢。只是想要一个清晰的解释,以便将来对其他人有所帮助。一旦你更新了答案,我会接受答案。
    • 感谢您花时间回答。我已接受答案
    猜你喜欢
    • 2019-05-15
    • 2021-03-01
    • 1970-01-01
    • 2011-12-08
    • 2013-12-28
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多