建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

天地志鹏

发帖: 17粉丝: 5

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-5-29 11:14:10 2523 1 楼主 显示全部楼层
[Microsoft SQL Server] 用户将本地SQL Server数据库,通过DRS备份迁移到华为云SQL Server后,还需要手动同步事项

背景说明:

目前用户从本地或虚拟机通过DRS备份还原功能直接迁移到华为云SQL Server实例上,在迁移完成后还需要针对Login账号,DBLinkAgentJOB这,关键配置,四个场景进行识别,并手动完成相关同步工作。

 

操作说明:

用户通过DRS的备份还原功能迁移SQL Server数据库上云是目前最简单,最快捷的方式,但是迁移到RDS SQL Server实例上的仅仅是自己本地的数据库文件,实例级的内容尚未进行完全同步,根据分析,需要同步的地方主要有:登录名/Login;连接服务器/DBLinkSQL Server代理服务/AgentJOB关键配置项

Login账号:即SQL Server的实例级账号,主要用于管理用户服务器权限与数据库权限,一个用户通常会有多个该类型账号,用户迁移到RDS SQL Server实例后,需要人工将自己本地的Login账号同步在实例上进行创建,以下方法将教你如何在RDS实例上创建同名,同密码的Login账号,并进行授权操作。

1.通过以下脚本获取本地实例Login账号创建脚本,获取到的脚本可以直接在目标端上执行,以创建同名,同密码的Login账号:

 SELECT 'IF (SUSER_ID('+QUOTENAME(SP.name,'''')+') IS NULL) BEGIN CREATE LOGIN ' +QUOTENAME(SP.name)+

  CASE

WHEN SP.type_desc = 'SQL_LOGIN' THEN ' WITH PASSWORD = ' +CONVERT(NVARCHAR(MAX),SL.password_hash,1)+ ' HASHED,SID=' +CONVERT(NVARCHAR(MAX),SP.SID,1)+',CHECK_EXPIRATION = '

+ CASE WHEN SL.is_expiration_checked = 1 THEN 'ON' ELSE 'OFF' END +', CHECK_POLICY = ' +CASE WHEN SL.is_policy_checked = 1 THEN 'ON,' ELSE 'OFF,' END

ELSE ' FROM WINDOWS WITH'

END

  +' DEFAULT_DATABASE=[' +SP.default_database_name+ '], DEFAULT_LANGUAGE=[' +SP.default_language_name+ '] END;' as CreateLogin

FROM sys.server_principals AS SP LEFT JOIN sys.sql_logins AS SL

ON SP.principal_id = SL.principal_id

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.执行以上脚本可获取如下执行脚本:

image.png

3.Copy如上执行脚本在目标端直接执行,创建出来的Login账号跟原实例密码一致

4.同时我们需要将新建的Login账号跟用户当前RDS SQL Server实例上的迁移过来的数据库用户权限进行mapping,以保证该账号在当前实例上的权限一致性,执行脚本如下:

declare @DBName nvarchar(200)

declare @Login_name nvarchar(200)

declare @SQL nvarchar(MAX)

set @Login_name = 'TestLogin7' --输入Login名称逐个执行

declare DBName_Cursor cursor for

select quotename(name)from sys.databases where  database_id > 4 and state = 0

and name not like '%$%'

and name <> 'rdsadmin'

open DBName_Cursor

fetch next from DBName_Cursor into @DBName

WHILE @@FETCH_STATUS= 0

begin

  SET @SQL='    USE '+ (@DBName)+ '

        if exists(select top 1 1 from sys.sysusers where name = '''+ @Login_Name +''')

        begin

          ALTER USER '+@Login_name+' with login = '+@Login_name+';     

        end

        '

print @SQL

  EXEC (@SQL)

  fetch next from DBName_Cursor into @DBName

end

close DBName_Cursor

deallocate DBName_Cursor

 

备注:以上脚本执行完成后,用户即可在自己的新实例上看到同名的登录账号,并且密码跟权限是完全跟本地一致的。

 

DBLink连接:SQL Server支持用户通过创建DBLink连接的方式,跟外部实例上的数据库进行交互,这种方式可以极大的方便用户不同实例间,不同数据库类型之间的数据库查询,同步,比较,所以大部分用户都会在本地实例上用到该服务,但是迁移上云后,你本地DBLink是不会自动同步到云上实例的,还需要你简单的手动操作下。

1.通过微软提供的官方SSMS客户端工具连接你的本地实例与线上实例,同时在服务器对象-->连接服务器下找到你当前实例的DBLink连接。

image.png

2.选中链接服务器,然后点击F7,会自动弹出对象资源管理信息页,在该页面中可以方便你快速的自动创建Create脚本,具体如下:

image.png

 

3.接着你可以在新窗口中看到你当前实例上所有DBLink的创建脚本,仅需Copy该脚本到目标实例上,并修改@rmtpassword上的密码即可执行创建操作。

USE [master]

GO

 

/****** Object:  LinkedServer [DRS_TEST_REMOTE]    Script Date: 2019/5/25 17:51:50 ******/

EXEC master.dbo.sp_addlinkedserver @server = N'DRS_TEST_REMOTE', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'DESKTOP-B18JH5T\SQLSERVER2016EE'

 /* For security reasons the linked server remote logins password is changed with ######## */

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'DRS_TEST_REMOTE',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########'

GO

 

备注:以下脚本为范例,创建的脚本可能包含大量系统默认配置项,但是每个DBLink仅需保留以下两个关键脚本即可执行成功,同时需要注意重新输入账号连接密码

 

Agent JOB又名SQL Server代理服务,可以方便用户快速的在实例上创建定时任务,帮助用户进行日常运维和数据处理工作,用户在本地的JOB需要人工进行脚本迁移RDS SQL Server实例上,操作步骤如下。

1.通过微软提供的官方SSMS客户端工具连接你的本地实例与线上实例,同时在SQL Server代理-->作业下找到你当前实例上的所有JOB任务:

image.png

2.点击选中SQL Server代理下的作业,然后点击F7,可以在对象资源管理器中看到所有的JOB作业,全部选中后店家创建脚本到新窗口:

image.png

3.Copy新窗口中的T-SQL创建脚本到新实例上,然后注意修改如下几个关键项,以保障你的创建成功:

a.注意修改你的每个JOB上的Ower账号:

例如:@owner_login_name=N'rdsuser'

b.注意修改你的每个JOB上的实例名称:

例如:

@server=N'实例IP'

@server_name = N'实例IP'

 

备注:

1.新建JOBOwner账号十分重要,在RDS SQL Server上,仅有该JOBOwner可以看到实例上自己的JOB,别的Login账号是看不到无法操作的,所以建议所有的JOB Owner尽量是同一个账号方便管理。

2.sys打头的JOB属于系统JOB不需要进行同步,请注意识别。

 

关键配置:用户将数据库还原到RDS SQL Server实例上之后,本地的一些重要配置项也需要进行同步确认,避免迁移后再新的环境中遭遇水土不服的情况。

1.tempdb:临时数据库的文件配置需要进行同步,请注意Check

推荐配置为8个临时文件,注意路径一定要确保在

D:\RDSDBDATA\Temp\

image.png

 

2.数据库隔离级别:请确认原实例上数据库的隔离级别是否开启,并同步到RDS SQL Server实例,快照隔离参数有2个,分别是:

读提交快照/Is Read Committed Snapshot On

允许快照隔离/Allow Snapshot Isolation

 

3.实例最大并行度:实例最大并行度在RDS SQL Server实例上默认设置为0,用户也可以根据自己本地原来的设置项进行同步设置,避免不同环境下业务场景出现异常:

右击本地实例点击属性,在服务器属性弹出矿中选择高级,然后在右侧找到最大并行度(max degree of parallelism)设置项,确认本地实例设置值,并同步在实例管理的参数组选中中进行修改。

image.png

备注:最大并行度用户无法在RDS SQL Server实例上直接修改,因为我们已经回收了实例级参数组的设置权限,用户需要在华为云实例控制台的实例管理页上找到参数修改项进行修改。

image.png

4.迁移上云的数据库恢复模式是否为FULL模式,如果不是请改正:

右击数据库选择属性,在弹出数据库属性框中选择选项,并在右侧确认该数据库恢复模式为FULL,保证该数据库高可用和备份策略可执行。

image.png


                

举报
分享

分享文章到朋友圈

分享文章到微博

小路~

发帖: 28粉丝: 7

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2019-5-29 11:16:44 沙发 显示全部楼层

点赞

点赞 回复 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册