如果同步用的是mirror 或 always ON,那么登陆账号和代理任务是没办法自动同步的,如果发生切换,则会出现无法连接新主库和没有代理任务的情况。如果在搭建 mirror 或 alwayson 的时候,提前把 登陆账号和代理任务在没有个副本上都创建好的话,可能会避免这个切换连不上的问题。但这种方法也有一个问题,就是如果在使用图中,开发修改了登陆账号密码或修改了代理任务中的执行内容,那么在发生切换后也会有问题。所以我想问的是,有不有什么方法,可以自动同步登陆用户和代理任务?
1条回答 默认 最新
- 喝茶品人生 2023-06-13 10:26关注
用powershell同步,这是我的同事编写的一揽子小code:
$connectionString = "Data Source=PRIMARY_SERVER;Initial Catalog=master;Integrated Security=True" $replicaConnectionStrings = Invoke-Sqlcmd -ConnectionString $connectionString -Query "SELECT replica_server_name, replica_server_url FROM sys.dm_hadr_availability_replica_states WHERE role_desc = 'SECONDARY'" | ForEach-Object { "Data Source=$($_.replica_server_name);Initial Catalog=master;Integrated Security=True" } $logins = Invoke-Sqlcmd -ConnectionString $connectionString -Query "SELECT name, password_hash, sid, default_database_name, default_language_name FROM sys.server_principals WHERE type_desc = 'SQL_LOGIN'" $proxyAccounts = Invoke-Sqlcmd -ConnectionString $connectionString -Query "SELECT name, credential_id, enabled, description, proxy_id, credential_identity, credential_name FROM msdb.dbo.sysproxies" foreach ($replicaConnectionString in $replicaConnectionStrings) { $replicaLogins = Invoke-Sqlcmd -ConnectionString $replicaConnectionString -Query "SELECT name FROM sys.server_principals WHERE type_desc = 'SQL_LOGIN'" foreach ($login in $logins) { if ($replicaLogins.name -notcontains $login.name) { $sql = "CREATE LOGIN [$($login.name)] WITH PASSWORD = '$($login.password_hash)', SID = $($login.sid), DEFAULT_DATABASE = $($login.default_database_name), DEFAULT_LANGUAGE = $($login.default_language_name)" Invoke-Sqlcmd -ConnectionString $replicaConnectionString -Query $sql } } } foreach ($replicaConnectionString in $replicaConnectionStrings) { $replicaProxyAccounts = Invoke-Sqlcmd -ConnectionString $replicaConnectionString -Query "SELECT name FROM msdb.dbo.sysproxies" foreach ($proxyAccount in $proxyAccounts) { if ($replicaProxyAccounts.name -notcontains $proxyAccount.name) { $sql = "EXEC msdb.dbo.sp_add_proxy @proxy_name=N'$($proxyAccount.name)', @enabled=$($proxyAccount.enabled), @description=N'$($proxyAccount.description)', @credential_name=N'$($proxyAccount.credential_name)', @credential_id=$($proxyAccount.credential_id), @credential_identity=$($proxyAccount.credential_identity)" Invoke-Sqlcmd -ConnectionString $replicaConnectionString -Query $sql } } }
解决 1无用
悬赏问题
- ¥15 linux驱动,linux应用,多线程
- ¥20 我要一个分身加定位两个功能的安卓app
- ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
- ¥15 IAR程序莫名变量多重定义
- ¥15 (标签-UDP|关键词-client)
- ¥15 关于库卡officelite无法与虚拟机通讯的问题
- ¥15 目标检测项目无法读取视频
- ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
- ¥100 求采集电商背景音乐的方法
- ¥15 数学建模竞赛求指导帮助