手动配置信息 本章节内容主要介绍手动配置信息 操作场景 目前从本地或虚拟机通过DRS备份迁移功能直接迁移到本云RDS for SQL Server实例上,在迁移完成后还需要针对Login账号,DBLink,AgentJOB,关键配置进行识别,并手动完成相关同步工作。 Login账号 Login账号即SQL Server的实例级账号,主要用于用户管理用户服务器权限与数据库权限。一个用户通常会有多个该类型账号,用户迁移到RDS for SQL Server实例后,需要手动将自己本地的Login账号同步在实例上进行创建,以下方法将介绍如何在本云RDS for SQL Server实例上创建同名,同密码的Login账号,并进行授权操作。 1.通过以下脚本获取本地实例Login账号创建脚本,获取到的脚本可以直接在目标端上执行,以创建同名,同密码的Login账号。 SELECT 'IF (SUSERID('+QUOTENAME(SP.name,'''')+') IS NULL) BEGIN CREATE LOGIN ' +QUOTENAME(SP.name)+ CASE WHEN SP.typedesc 'SQLLOGIN' THEN ' WITH PASSWORD ' +CONVERT(NVARCHAR(MAX),SL.passwordhash,1)+ ' HASHED,SID' +CONVERT(NVARCHAR(MAX),SP.SID,1)+',CHECKEXPIRATION ' CASE WHEN SL.isexpirationchecked 1 THEN 'ON' ELSE 'OFF' END +', CHECKPOLICY ' +CASE WHEN SL.ispolicychecked 1 THEN 'ON,' ELSE 'OFF,' END ELSE ' FROM WINDOWS WITH' END ' DEFAULTDATABASE[' +SP.defaultdatabasename+ '], DEFAULTLANGUAGE[' +SP.defaultlanguagename+ '] END;' as CreateLogin FROM sys.serverprincipals AS SP LEFT JOIN sys.sqllogins AS SL ON SP.principalid SL.principalid WHERE SP.type 'S' AND SP.name NOT LIKE ' % ' AND SP.name NOT LIKE 'NT AUTHORITY%' AND SP.name NOT LIKE 'NT SERVICE%' AND SP.name NOT IN ('rdsadmin','rdsbackup','rdsuser','rdsmirror','public') 2.执行1脚本可获取如下执行脚本。 图1 获取执行脚本 3.复制2中的执行脚本在目标端直接执行,创建出来的Login账号跟原实例密码一致。 4.将新建的Login账号跟用户当前RDS SQL Server实例上的迁移过来的数据库用户权限进行映射(mapping),以保证该账号在当前实例上的权限一致性,执行脚本如下。 declare @DBName nvarchar(200) declare @Loginname nvarchar(200) declare @SQL nvarchar(MAX) set @Loginname 'TestLogin7' //输入Login名称逐个执行 declare DBNameCursor cursor for select quotename(name)from sys.databases where databaseid > 4 and state 0 and name not like '%$%' and name <> 'rdsadmin' open DBNameCursor fetch next from DBNameCursor into @DBName WHILE @@FETCHSTATUS 0 begin SET @SQL' USE '+ (@DBName)+ ' if exists(select top 1 1 from sys.sysusers where name '''+ @LoginName +''') begin ALTER USER '+@Loginname+' with login '+@Loginname+'; end ' print @SQL EXEC (@SQL) fetch next from DBNameCursor into @DBName end close DBNameCursor deallocate DBNameCursor 说明: 以上脚本执行完成后,用户即可在自己的新实例上看到同名的登录账号,并且密码跟权限是完全跟本地一致的。 DBLink连接 DBLink连接指SQL Server支持用户通过创建DBLink连接的方式,跟外部实例上的数据库进行交互,这种方式可以极大的方便用户不同实例间,不同数据库类型之间的数据库查询,同步,比较,所以大部分用户都会在本地实例上用到该服务,但是迁移上云后,本地DBLink是不会自动同步到云上实例的,还需要简单的手动进行同步。 1.通过微软提供的官方Microsoft SQL Server Management Studio客户端工具连接本地实例与云上实例,同时在“服务器对象 > 链接服务器”下找到当前实例的DBLink链接。 图2 查看DBLink链接 2.选中链接服务器,然后按F7,会自动弹出对象资源管理信息页,在该页面中可以方便你快速的自动创建脚本。 图 自动创建脚本 3.在新窗口中,可以看到当前实例上所有DBLink的创建脚本,仅需复制该脚本到目标实例上,并修改@rmtpassword上的密码即可执行创建操作。 USE [master] GO / Object: LinkedServer [DRSTESTREMOTE] Script Date: 2019/5/25 17:51:50 / EXEC master.dbo.spaddlinkedserver @server N'DRSTESTREMOTE', @srvproductN'', @providerN'SQLNCLI', @datasrcN'DESKTOPB18JH5TSQLSERVER2016EE' / For security reasons the linked server remote logins password is changed with