代码之家  ›  专栏  ›  技术社区  ›  joshcomley

使用SQL Server镜像时是否镜像了CLR DLL?

  •  3
  • joshcomley  · 技术社区  · 15 年前

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

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

    是否可以镜像CLR DLL?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Jonathan Kehayias    15 年前

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

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

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

        2
  •  1
  •   Remus Rusanu    15 年前

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