完全包含的数据库和 Azure SQL 单一数据库有什么区别

What is the difference between a fully contained database & Azure SQL Single database

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

我有几个问题:

在 Azure 中,"single" 是一个部署选项,它将 Azure SQL 数据库与托管池和弹性池区分开来。从包含的角度来看确实没有区别,因为 Single 和 Azure SQL 数据库是一样的。

Azure SQL 数据库本身就提供数据库级用户身份验证等遏制功能。使用本地 SQL 服务器数据库,必须使用 CONTAINMENT=PARTIAL 选择加入 允许数据库级身份验证。

Does making a database as contained database will help in easier migration to Azure SQL single DB ?

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。这通常只有在 object/variables 名称需要区分大小写时才是问题。

可以通过查询 sys.dm_db_uncontained_entities:

来识别现有的未包含引用
SELECT * FROM sys.dm_db_uncontained_entities;

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