我有一个 SQL Server 数据库 (2008),其中有一些 SQL 用于各种事物的 CLR DLL。
当我使用 SQL 镜像时,这些 DLL 是否被镜像?我们的 DBA 说没有,但我觉得这很疯狂,在网上找不到太多关于它的信息。
是否可以镜像 CLR DLL?
我有一个 SQL Server 数据库 (2008),其中有一些 SQL 用于各种事物的 CLR DLL。
当我使用 SQL 镜像时,这些 DLL 是否被镜像?我们的 DBA 说没有,但我觉得这很疯狂,在网上找不到太多关于它的信息。
是否可以镜像 CLR DLL?
CLR 程序集存储在数据库中,并被镜像为数据库的一部分。每个数据库都有自己的 sys.assemblies 视图,如果您查询 master.sys.assemblies DMV,您将不会在 DMV 中找到其他数据库的程序集。在镜像包含程序集的数据库时,您可能会遇到一些问题。第一个是,如果您有一个外部访问或 UNSAFE 程序集,并且您使用 TRUSTWORTY 位来允许数据库中的程序集,则在故障转移时的恢复过程中会禁用它,因此您必须重新启用它。如果您使用证书对程序集进行签名,则必须手动创建与镜像服务器上的程序集关联的证书和登录名,因为它存储在主服务器中,而不是数据库中。程序集将在那里,您的 SQL 数据库对象也将在那里,但它可能无法正常工作。作为故障转移的一部分,您可能还需要更改数据库所有者名称。
如果您想验证我上面所说的内容,请备份带有程序集的用户数据库,然后将其还原到另一台服务器。您的程序集将成为数据库的一部分。
只是为了给乔纳森所说的添加一个明显的点:您的程序集必须部署在镜像应用程序数据库中,而不是在 msdb 或其他数据库中。