3

我有一个 SQL Server 数据库 (2008),其中有一些 SQL 用于各种事物的 CLR DLL。

当我使用 SQL 镜像时,这些 DLL 是否被镜像?我们的 DBA 说没有,但我觉得这很疯狂,在网上找不到太多关于它的信息。

是否可以镜像 CLR DLL?

4

2 回答 2

4

CLR 程序集存储在数据库中,并被镜像为数据库的一部分。每个数据库都有自己的 sys.assemblies 视图,如果您查询 master.sys.assemblies DMV,您将不会在 DMV 中找到其他数据库的程序集。在镜像包含程序集的数据库时,您可能会遇到一些问题。第一个是,如果您有一个外部访问或 UNSAFE 程序集,并且您使用 TRUSTWORTY 位来允许数据库中的程序集,则在故障转移时的恢复过程中会禁用它,因此您必须重新启用它。如果您使用证书对程序集进行签名,则必须手动创建与镜像服务器上的程序集关联的证书和登录名,因为它存储在主服务器中,而不是数据库中。程序集将在那里,您的 SQL 数据库对象也将在那里,但它可能无法正常工作。作为故障转移的一部分,您可能还需要更改数据库所有者名称。

http://sqlblog.com/blogs/jonathan_kehayias/archive/2008/03/06/clr-safety-issues-after-database-restore-to-new-server.aspx

如果您想验证我上面所说的内容,请备份带有程序集的用户数据库,然后将其还原到另一台服务器。您的程序集将成为数据库的一部分。

于 2009-07-13T12:41:41.813 回答
1

只是为了给乔纳森所说的添加一个明显的点:您的程序集必须部署在镜像应用程序数据库中,而不是在 msdb 或其他数据库中。

于 2009-07-13T16:17:06.450 回答