
# 创建备份迁移任务
当用户的数据库的IP地址不能暴露在公网上，但是选择专线网络进行数据库迁移，又担心成本过高的时，可以选择DRS提供的备份迁移功能将SQL Server备份文件恢复到目标数据库。备份迁移可以帮助您在云服务不触碰源数据库的情况下，实现数据迁移。
#### 操作视频
<video controls="controls" preload="none" id="object7118423192519" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/DRS/1725935084116452093.mp4" title="创建DRS备份迁移任务" poster="https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002409288705.jpg" height="400.0000" width="700.0000"></video>
#### 操作流程
| 操作步骤                                                                   | 说明                                                                                               |
|:---|:---|
| [准备工作]                             | 注册华为账号并开通华为云，实名认证，准备待恢复的数据文件、目标数据库等。                                                             |
| [创建备份迁移任务]                         | 创建备份迁移任务，将备份文件数据恢复到目标数据库。                                                                        |
| [手动配置Login账号、DBlink连接、Agent JOB等信息] | 备份文件里仅保存数据库级信息，在SQL Server实例中还有一些配置需要主动识别并手工完成迁移，如login，权限，DBlink，job等，如果源数据库包含这部分配置，需要进行迁移补充工作。 |
   
 #### 准备工作
在进行备份迁移前，需要参考如下内容，提前进行华为账号、待恢复的数据文件、目标数据库的准备工作。
- [注册华为账号]
  准备华为账号，创建用户并赋权使用DRS。
  1. 打开[华为云网站](https://www.huaweicloud.com/)。
  
  2. 单击"注册"，根据提示信息完成注册。
  
  3. 勾选服务条款， 单击"开通"。 
     系统提示开通成功。
     
     
  
  4. 实名认证，请参考： 
     - 个人账号：[实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0077914254.html)
     
     - 企业账号：[实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0077914253.html)
     
     
     
     
  
  5. 注册华为云账号后，如果需要对华为云上的资源进行精细管理，请使用统一身份认证服务（Identity and Access Management，简称IAM）创建IAM用户及用户组，并授权，以使得IAM用户获得具体的操作权限，更多操作，请参见[创建用户组、用户并授予DRS权限](https://support.huaweicloud.com/prepare-drs/drs_08_0012.html)。
   
- [备份文件准备]
  
  - 如果为RDS for SQL Server全量备份文件： 用户已有的Microsoft SQL Server数据库实例需要存在全量备份，如果没有，请参考《云数据库 RDS用户指南》中的"[创建手动备份](https://support.huaweicloud.com/usermanual-rds-mssql/rds_11_0010.html)"章节，创建一个所需实例的全量备份。
    
  
  - 如果为本地及其他云Microsoft SQL Server数据库备份文件：
    1. 准备一个OBS桶，如果没有，则首先需要创建，相关操作请参见《对象存储服务控制台指南》中"[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)"章节。
    
    2. 将备份文件上传到OBS桶，并注意备份文件名称格式的正确性。上传备份文件的方法请参见《对象存储服务控制台指南》中"[上传文件](https://support.huaweicloud.com/usermanual-obs/obs_03_1002.html)"章节。
     
   
- [目标数据库准备]
  
  参考RDS for SQL Server[购买实例](https://support.huaweicloud.com/usermanual-rds-mysql/rds_10_0028.html)章节内容，准备目标数据库。
 #### 创建备份迁移任务
1. 进入[创建DRS迁移任务页面](https://console.huaweicloud.com/drs/?#/drs/backup/create/create?isPre=)。
2. 在"选定备份"页面填写任务信息。 
   图1基本信息   
   ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002075800789.png "点击放大")
   
   
   | 参数   | 示例                  | 参数说明          |
   |:---|:---|:---|
   | 区域   | 华北-北京四              | 当前所在的区域。      |
   | 项目   | 华北-北京四              | 当前区域下可以选择的项目。 |
   | 任务名称 | DRS-BackupMigration | 迁移任务的名称。      |
   | 描述   | 暂不填写                | 任务描述。         |
      
   
   
3. 填选备份文件信息，单击"下一步"。 
   图2备份文件信息   
   ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002055086697.png "点击放大")
   
   
   | 参数     | 示例                       | 参数说明                                                                                                                                                                    |
   |:---|:---|:---|
   | 数据库类型  | **Microsoft SQL Server** | 默认为Microsoft SQL Server。                                                                                                                                                |
   | 备份文件来源 | **RDS全量备份**              | 选择备份文件的来源，支持OBS自建桶和RDS全量备份。                                                                                                                                             |
   | 企业项目   | **default**              | 对于已成功关联企业项目的用户，仅需在"企业项目"下拉框中选择目标项目。 更多关于企业项目的信息，请参见[《企业管理用户指南》](https://support.huaweicloud.com/usermanual-em/zh-cn_topic_0108763975.html)。 |
   | 标签     | **暂不添加**                 | 对DRS任务的标识。使用标签可方便管理您的任务。                                                                                                                                                |
   | 备份文件   | **backup-e48a-restore**  | 选择需要恢复的备份文件，[备份文件准备]中的全量备份文件。                                                                                                        |
      
   
   
4. 在"选定目标"页面，填选数据库信息，单击"下一步"。 
   - 目标RDS实例名称：选择[目标数据库准备]中创建的 RDS for SQL Server实例
   
   - 待还原数据库名称：全部
   
   
   
   
5. 在"信息确认"页面核对配置详情后，勾选协议，单击"下一步"。 
   SQL Server自身的工作原理是备份文件恢复到新的数据库后，非聚集索引表的索引信息将会失效需要立即重建。如果源数据库里存在大量非聚集索引表，备份迁移后请在目标库进行索引重建，以避免数据库未来使用中性能出现重大下降。
   
   
6. 在"备份迁移管理"页面任务列表中，观察对应的恢复任务的状态为"恢复中"，恢复成功后，任务状态显示"成功"。
 
 #### 手动配置Login账号、DBlink连接、Agent JOB等信息
备份文件里仅保存数据库级信息，在SQL Server实例中还有一些配置需要主动识别并手工完成迁移，如Login账号、DBlink连接、Agent JOB、关键配置项，如果源数据库包含这部分配置，需要按照以下内容进行迁移补充工作。
- [Login账号]
  Login账号即SQL Server的实例级账号，主要用于用户管理用户服务器权限与数据库权限。一个用户通常会有多个该类型账号，用户迁移到RDS for SQL Server实例后，需要手动将自己本地的Login账号同步在实例上进行创建，以下方法将介绍如何在本云RDS for SQL Server实例上创建同名，同密码的Login账号，并进行授权操作。
  1. 登录源数据库实例。
  
  2. 执行以下SQL，获取本地实例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')
     ```
     获取的执行脚本如下：
     图3获取执行脚本   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002046122538.jpg "点击放大")
     
     
  
  3. 参考[通过DAS连接RDS for SQL Server实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_02.html)，连接目标数据库。
  
  4. 复制[2]中获取到的执行脚本，目标端直接执行。
     
     创建出来和源数据库中密码一致的Login账号。
     
     
  
  5. 在目标数据库执行以下脚本，将新建的Login账号和用户迁移过来的数据库用户权限进行映射（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
     ```
     ![](https://support.huaweicloud.com/qs-drs/public_sys-resources/note_3.0-zh-cn.png)
     以上脚本执行完成后，用户即可在自己的新实例上看到同名的登录账号，并且密码跟权限是完全跟本地一致的。
     
     
   
- [DBLink连接]
  DBLink连接指SQL Server支持用户通过创建DBLink连接的方式，跟外部实例上的数据库进行交互，这种方式可以极大地方便用户不同实例间，不同数据库类型之间的数据库查询、同步、比较，所以大部分用户都会在本地实例上用到该服务，但是迁移上云后，本地DBLink是不会自动同步到云上实例的，还需要简单地手动进行同步。
  1. 通过微软提供的官方Microsoft SQL Server Management Studio客户端工具连接本地实例。
  
  2. 单击"服务器对象 \> 链接服务器"，找到当前实例的DBLink链接。 
     图4查看DBLink链接   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002046137648.jpg)
     
     
  
  3. 选中链接服务器，右键单击"编写链接服务器脚本为 \> CREATE到 \> 新查询编辑器窗口"。
     
     在弹出的对象资源管理信息页新窗口中，可以看到当前实例上所有DBLink的创建脚本。
     图5自动创建脚本   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002082136929.jpg "点击放大")
     
     
  
  4. 参考[通过DAS连接RDS for SQL Server实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_02.html)，连接目标数据库。
  
  5. 单击"SQL操作 \> SQL查询"。
  
  6. 将[3]中获取的脚本复制到窗口中。
  
  7. 修改脚本中@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
     ```
     ![](https://support.huaweicloud.com/qs-drs/public_sys-resources/note_3.0-zh-cn.png)
     以上脚本为范例，创建的脚本可能包含大量系统默认配置项，但是每个DBLink仅需保留以下两个关键脚本即可执行成功，同时需要注意重新输入账号连接密码。
     
     
  
  8. 单击"执行SQL"，在目标数据库执行修改后的脚本。 
     消息返回"执行成功"表示完成操作。
     
     
   
- [Agent JOB]
  Agent JOB又名SQL Server代理服务，可以方便用户快速地在实例上创建定时任务，帮助用户进行日常运维和数据处理工作，用户在本地的JOB需要手动进行脚本迁移。
  1. 通过微软提供的官方Microsoft SQL Server Management Studio客户端工具连接本地实例。
  
  2. 单击"SQL Server代理 \> 作业"，找到当前实例上的所有JOB任务。 
     图6查看作业   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002046490928.jpg "点击放大")
     
     
  
  3. 选中JOB任务，右键单击"编写作业脚本为 \> DROP和CREATE到 \> 新查询编辑器窗口"。
     
     在弹出的对象资源管理信息页新窗口中，可以看到所有JOB任务的创建脚本。
     图7创建脚本   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002082442081.jpg "点击放大")
     
     
  
  4. 参考[通过DAS连接RDS for SQL Server实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_02.html)，连接目标数据库。
  
  5. 单击"SQL操作 \> SQL查询"。
  
  6. 将[3]中获取的脚本复制到窗口中。
  
  7. 修改如下几个关键项，以保障你的创建成功。 
     - 注意修改每个JOB上的Ower账号： 例如：
       @owner_login_name=N'rdsuser'
       
     
     - 注意修改每个JOB上的实例名称： 例如：
       @server=N'实例IP'
       @server_name = N'实例IP'
       
     
     
     ![](https://support.huaweicloud.com/qs-drs/public_sys-resources/note_3.0-zh-cn.png)
     新建JOB的Owner账号十分重要，在RDS SQL Server上，仅有该JOB的Owner可以看到实例上自己的JOB，别的Login账号是看不到无法操作的，所以建议所有的JOB Owner尽量是同一个账号方便管理。
     
     
  
  8. 单击"执行SQL"，在目标数据库执行修改后的脚本。 
     消息返回"执行成功"表示完成操作。
     
     
   
- [关键配置项]
  用户将数据库还原到RDS for SQL Server实例上之后，本地的一些重要配置项也需要进行同步确认，避免影响业务的正常使用。
  1. tempdb：临时数据库的文件配置需要进行同步。 推荐配置为8个临时文件，注意路径一定要确保在D:\\RDSDBDATA\\Temp\\
     通过在目标数据库端执行如下脚本添加临时数据库的文件配置：
     ```
     USE [master]
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb1', FILENAME = N'D:\RDSDBDATA\Temp\tempdb1.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb2', FILENAME = N'D:\RDSDBDATA\Temp\tempdb2.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb3', FILENAME = N'D:\RDSDBDATA\Temp\tempdb3.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb4', FILENAME = N'D:\RDSDBDATA\Temp\tempdb4.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb5', FILENAME = N'D:\RDSDBDATA\Temp\tempdb5.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb6', FILENAME = N'D:\RDSDBDATA\Temp\tempdb6.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdb7', FILENAME = N'D:\RDSDBDATA\Temp\tempdb7.ndf' , SIZE = 65536KB , FILEGROWTH = 65536KB )
     GO
     ```
     图8检查临时文件   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002040493882.jpg "点击放大") 
  
  2. 数据库隔离级别：请确认原实例上数据库的隔离级别是否开启，并同步到RDS SQL Server实例，快照隔离参数有2个，分别是：
     - 读提交快照（Is Read Committed Snapshot On）
     
     - 允许快照隔离（Allow Snapshot Isolation）
     
     
     若原实例上数据库的隔离级别是开启的，您可以通过在目标数据库端执行如下脚本开启数据库的隔离级别：
     ```
     USE [DBName]
     GO
     ALTER DATABASE [DBName] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT
     GO
     ALTER DATABASE [DBName] SET ALLOW_SNAPSHOT_ISOLATION ON
     GO
     ```
     
  
  3. 实例最大并行度：实例最大并行度在RDS for SQL Server实例上默认设置为0，用户也可以根据自己本地原来的设置项进行同步设置，避免不同环境下业务场景出现异常。 右击本地实例选择属性，在服务器属性弹出框中选择高级，然后在右侧找到最大并行度（max degree of parallelism）设置项，确认本地实例设置值，并同步在目标RDS for SQL Server实例管理的参数组中进行修改。
     图9查看本地实例最大并行度值   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002040652160.jpg "点击放大")
     登录本云实例控制台，在实例管理页，单击目标实例名称，进入基本信息页签，切换至"参数修改"，搜索最大并行度（max degree of parallelism）并进行修改。
     图10修改目标RDS for SQL Server实例的最大并行度   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002076612981.png "点击放大") 
  
  4. 迁移上云的数据库恢复模式是否为完整（FULL）模式，如果不是需要进行修改。 右击数据库选择属性，在弹出数据库属性框中选择选项，并在右侧确认该数据库恢复模式为完整（FULL），保证该数据库高可用和备份策略可执行。
     图11检查数据库恢复模式   
     ![](https://support.huaweicloud.com/qs-drs/zh-cn_image_0000002076691597.png "点击放大") 
   
