应在 AlwaysOn 可用性组的每个主数据库和相应的辅助数据库上定期维护相同的用户登录名和 SQL Server 代理作业集。 必须在承载可用性组可用性副本的每个 SQL Server 实例上重现登录名和作业。
SQL Server 代理作业
您需要手动将相关作业从承载原始主副本的服务器实例复制到承载原始辅助副本的服务器实例上。 对于所有数据库,您需要在每个相关作业开始时添加逻辑,以使该作业仅在主数据库上执行,也就是说,仅在逻辑副本是数据库的主副本时执行。
托管可用性组可用性副本的服务器实例可能以不同的方式进行配置,并使用不同的磁带驱动器号等。 每个可用性副本的作业必须允许可能存在的此类差异。
请注意,备份作业可以使用 sys.fn_hadr_is_preferred_backup_replica 函数根据可用性组备份首选项确定本地副本是否是备份的首选副本。 使用维护计划向导创建的备份作业默认使用此函数。 对于其他备份作业,我们建议您将此函数用作您的备份作业中的一个条件,以便仅在首选副本上执行它们。 有关详细信息,请参阅“活动辅助副本:次要副本上的备份”(AlwaysOn 可用性组)。
登录名
如果使用包含的数据库,则可以在数据库中配置包含的用户,并且对于这些用户,无需在承载辅助副本的服务器实例上创建登录名。 对于非包含的可用性数据库,需要为承载可用性副本的服务器实例上的登录名创建用户。 有关详细信息,请参阅 CREATE USER (Transact-SQL)。
如果您的任何应用程序使用 SQL Server 身份验证或本地 Windows 登录,请参阅本主题后面的使用 SQL Server 身份验证或本地 Windows 登录的应用程序登录。
注释
SQL Server 登录名未定义或服务器实例上错误定义的数据库用户无法登录到该实例。 这样的用户被称为此服务器实例上的数据库的“孤立用户” 。 如果给定服务器实例上存在孤立用户,您可以随时设置用户登录名。 有关详细信息,请参阅孤立用户故障排除 (SQL Server)。
其他元数据
在托管给定可用性组的辅助副本的各个服务器实例上,需要重新创建的信息不仅仅包括登录名和作业。 例如,可能需要重新创建服务器配置设置、凭据、加密数据、权限、复制设置、Service Broker 应用程序、触发器(在服务器级别),等等。 有关详细信息,请参阅当数据库在其他服务器实例上可用时管理元数据 (SQL Server)。
使用 SQL Server 身份验证或本地 Windows 登录名的应用程序的登录名
如果某一应用程序使用 SQL Server 身份验证或本地 Windows 登录名,则不匹配的 SID 可能会阻止该应用程序的登录名在 SQL Server的远程实例上解析。 不匹配的 SID 将导致该登录名成为远程服务器实例上的孤立用户。 当应用程序连接到发生故障转移后的镜像数据库或日志传送数据库,或是连接到从备份初始化的复制订阅服务器数据库时,就可能会发生此问题。
为了避免此问题,我们建议您在设置此类应用程序时采取预防措施,以便使用由 SQL Server的远程实例承载的数据库。 预防措施包括将登录名和密码从 SQL Server 的本地实例传输到 SQL Server的远程实例。 有关如何防止此问题的详细信息,请参阅知识库文章918992-如何在 SQL Server 实例之间传输登录名和密码)。
注释
这个问题会影响不同计算机上的 Windows 本地帐户。 但是,这个问题不会在域帐户上发生,因为 SID 在每台计算机上都是相同的。
有关详细信息,请参阅 与数据库镜像和日志传送有关的孤立用户 (数据库引擎博客)。