您是否曾遇到过 AlwaysOn 可用性组故障转移到辅助服务器的情况?后来您发现一些重要工作丢失了;或者由于未在辅助服务器上创建或更新链接服务器,导致程序失败;或者某些登录不起作用!
AlwaysOn 可用性组功能可使数据库保持同步以实现高可用性,但非容器对象需要手动复制。该脚本的目的是在副本或独立服务器之间同步非容器对象(登录、链接服务器和作业)。此脚本可自动同步这些对象并使故障转移无缝进行,从而减少人力(和错误)。
此外,它可以在镜像或日志传送的服务器之间使用,因为它已用于我的一些客户端/
有三个基于 PowerShell 的脚本可帮助复制三种对象类型:作业、链接服务器和登录。我将其保留为三部分,以便每个脚本都可以根据个人需求轻松定制。我已在下面列出了脚本的详细信息。
同步链接服务器
链接服务器使用密码编写脚本并应用于辅助服务器。PowerShell 脚本将在辅助服务器上应用链接服务器时解密远程密码。
是的,没错,远程密码将被解密,因此您不需要知道远程登录的密码。我的几个客户已经使用此脚本(稍作修改)来识别前一位员工在链接服务器中设置的密码,但未记录在案。
需要许可
DAC 与 MSSQL 实例的连接
(需要访问注册表项)
专属管理员
DAC 连接至 MSSQL 实例。运行此脚本的帐户应该能够以专用管理员身份登录。
系统管理员 MSSQL 实例的 Sysadmin 权限
本地管理员权限 计算机上的本地管理员权限,用于访问注册表以解密密码
参数
$实例名称 必填,字符串。
值:执行脚本的 SQL 实例的名称。如果您从 SQL 代理作业运行脚本,则当步骤类型为 CMD 时,可以使用“$(ESCAPE_SQUOTE(SRVR))”
$重新创建链接服务器
可选,布尔值
值 $true/$false,默认为 $false
如果 $true,则按名称匹配的现有链接服务器将被删除,并且将应用新的脚本。
如果为 $false,则跳过已存在的链接服务器。
$SCRIPTasFILE 可选,字符串
值:脚本应存储在文件中的路径
为每个带有代码的对象创建一个 .sql 文件。为了安全起见,密码被哈希 (####) 替换
$secondary
可选,字符串
值:辅助/副本 SQL 实例名称
如果为空,脚本将查找可用性组辅助或镜像伙伴。脚本将应用于辅助服务器。如果存在多个副本,脚本将应用于这些副本。
如果提供了辅助实例名称,它将直接在其上应用脚本。这是您要使用的参数,尤其是用于日志传送或刷新过程或迁移
命令:
script_SYNC_Linkedserver.ps1 -instanceName(必需)-RECREATELINKEDSERVERS(可选)
-SCRIPTasFILE(可选)-secondary(可选)
例子:
通过作业运行且步骤类型为 CMD 时可以使用 blow 命令
c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe “C:\Scripts\AOAG_SYNC_linkedservers-jobs-logins\script_SYNC_Linkedserver.ps1"
-instanceName $(ESCAPE_SQUOTE(SRVR))
-SCRIPTasFILE "C:\Scripts"
-RECREATELINKEDSERVERS $true
-secondary "LABSQL******\K*****S"
同步登录
我修改了 sp_revlogin 脚本以与 powershell 脚本配合使用。与链接服务器一样,它将识别副本并将脚本应用于所有副本。
执行脚本的账户所需的权限
系统管理员 MSSQL 实例的 Sysadmin 权限
参数
$实例名称 必填,字符串。
值:执行脚本的 SQL 实例的名称。如果您从 SQL 代理作业运行脚本,则当步骤类型为 CMD 时,可以使用“$(ESCAPE_SQUOTE(SRVR))”
$重新创建登录
可选,布尔值
值 $true/$false,默认为 $false
如果 $true,则按名称匹配的现有登录将被删除并创建。
如果为 $false,则跳过已存在的登录。
$SCRIPTasFILE 可选,字符串
值:脚本应存储在文件中的路径
为每个对象创建一个带有代码的 .sql 文件。密码按照 sp_revlogins 的方式加密
$secondary
可选,字符串
值:辅助/副本 SQL 实例名称
如果为空,脚本将查找可用性组辅助或镜像伙伴。脚本将应用于辅助服务器。如果存在多个副本,脚本将应用于这些副本。
如果提供了辅助实例名称,它将直接在其上应用脚本。这是您要使用的参数,尤其是用于日志传送或刷新过程或迁移
$排除登录
可选,字符串
值:要从同步中排除的登录的逗号分隔列表。
命令:
script_SYNC_Logins.ps1 -instanceName(必需)-RECREATELOGINS(可选)
-SCRIPTasFILE(可选)-secondary(可选)
例子:
c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe <path>\script_SYNC_Logins.ps1
-instanceName "Srv01"
-SCRIPTasFILE "X:\folder"
-RECREATELOGINS $false
-secondary "Srv02" (only to sync between two independent servers)]
c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
W:\Datavail_Scripts\Powershell\script_SYNC_Logins.ps1
-instanceName $(ESCAPE_SQUOTE(SRVR))
-SCRIPTasFILE "W:\Datavail_Scripts\Objects_Scripts"
-RECREATELOGINS $true
-excludelogins “GODDBA,domain\account’
同步作业
使用 SQL Server 管理对象 (SMO) 编写作业脚本。您可以选择在创建作业后是否应在辅助服务器上禁用该作业。此外,您还可以指定作业类别以同步选择性作业。
执行脚本的账户所需的权限
系统管理员 MSSQL 实例的 Sysadmin 权限
参数
$实例名称 必填,字符串。
值:执行脚本的 SQL 实例的名称。如果您从 SQL 代理作业运行脚本,则当步骤类型为 CMD 时,可以使用“$(ESCAPE_SQUOTE(SRVR))”
$重新创建工作
可选,布尔值
值 $true/$false,默认为 $false
如果为 $false,则跳过已存在的登录。
$SCRIPTasFILE 可选,字符串
值:脚本应存储在文件中的路径
为每个对象创建一个带有代码的 .sql 文件。密码 科威特电报数据 按照 sp_revlogins 的方式加密
$secondary
可选,字符串
值:辅助/副本 SQL 实例名称
如果为空,脚本将查找可用性组辅助或镜像伙伴。脚本将应用于辅助服务器。如果存在多个副本,脚本将应用于这些副本。
如果提供了辅助实例名称,它将直接在其上应用脚本。这是您要使用的参数,尤其是用于日志传送或刷新过程或迁移