如果 $true,则按名称匹配

Showcase, discuss, and inspire with creative America Data Set.
Post Reply
Bappy11
Posts: 477
Joined: Sun Dec 22, 2024 9:27 am

如果 $true,则按名称匹配

Post by Bappy11 »

您是否曾遇到过 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 实例名称

如果为空,脚本将查找可用性组辅助或镜像伙伴。脚本将应用于辅助服务器。如果存在多个副本,脚本将应用于这些副本。



如果提供了辅助实例名称,它将直接在其上应用脚本。这是您要使用的参数,尤其是用于日志传送或刷新过程或迁移
Post Reply