天天看點

自建sqlserver遷移到aliyun的rds for sqlserver實戰

作者:雪竹頻道

一、背景

有些客戶有上雲的需求,需要把線下自建的sqlserver遷移至aliyun的rds for sqlserver。大家第一時間想到的是用dts工具,根據工作經驗,DTS遷移mysql類的資料庫比較成熟,但是遷移sqlserver之類的會有問題。首先面臨的一個問題就是源庫日志膨脹的問題,也就是說是遷移過程中,源庫的日志是不能截斷,否則日志序列會被重置,遷移任務失敗。那有沒有其他的方案呢?下面分享一下通過實體備份還原的方式遷移上雲。

自建sqlserver遷移到aliyun的rds for sqlserver實戰

二、方案

2.1 版本的選擇

SQLSERVER版本的相容原則,是高版本向下相容低版本,在aliyun上選擇rds for sqlserver版本時,目标版本要等于或大于源版本。目前阿裡雲上支援的rds for sqlserver版本如下:

自建sqlserver遷移到aliyun的rds for sqlserver實戰

2.2 腳本備份源庫

DECLARE @name NVARCHAR(256) -- database name  
DECLARE @path NVARCHAR(512) -- path for backup files  
DECLARE @fileName NVARCHAR(512) -- filename for backup  
DECLARE @fileDate NVARCHAR(40) -- used for file name
 
-- specify database backup directory
SET @path = 'E:\backup\'  
 
-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112) 
 
DECLARE db_cursor CURSOR READ_ONLY FOR  
SELECT name 
FROM master.sys.databases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases
AND state = 0 -- database is online
AND is_in_standby = 0 -- database is not read only for log shipping
 
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   
 
WHILE @@FETCH_STATUS = 0   
BEGIN   
   SET @fileName = @path + @name + '.BAK'  
   BACKUP DATABASE @name TO DISK = @fileName  WITH STATS=10, COMPRESSION
 
   FETCH NEXT FROM db_cursor INTO @name   
END   
 
CLOSE db_cursor   
DEALLOCATE db_cursor
           

2.3 建立OSS存儲空間

自建sqlserver遷移到aliyun的rds for sqlserver實戰

建立oss存儲空間的目的是讓rds for sqlserver從oss的bucket讀取備份檔案,以供恢複使用。

1. 登入OSS管理控制台。

2. 單擊Bucket清單,然後單擊建立Bucket。

3. 配置如下關鍵參數,其他參數可以保持預設

4. 說明:建立的存儲空間僅用于本次資料上雲,且上雲後不再使用,是以隻需配置關鍵參數即可,為避免資料洩露及産生相關費用,上雲完成後請及時删除。

參數 說明 取值示例
Bucket 名稱 存儲空間名稱,全局唯一,設定後無法修改。命名規則:隻能包括小寫字母、數字和短劃線(-)。必須以小寫字母或者數字開頭和結尾。長度必須在3~63字元之間。 migratetest
地域 Bucket所屬的地域,如果您通過ECS内網上傳資料至Bucket中,且通過内網将資料恢複至RDS中,則需要三者地域保持一緻。 華東1(杭州)

本地資料庫備份完成後,使用ossbrowser工具将備份檔案上傳到您的OSS Bucket中:

5. 下載下傳ossbrowser,以Windows x64作業系統為例,解壓下載下傳的oss-browser-win32-x64.zip壓縮包,輕按兩下運作oss-browser.exe應用程式。

6. 使用AK登入方式,配置參數AccessKeyId和AccessKeySecret,其他參數保持預設,然後單擊登入

7. 單擊目标Bucket,進入存儲空間

單擊,選擇需要上傳的備份檔案,然後單擊打開,即可将本地檔案上傳至OSS中。

2.4 建立資料上雲任務

自建sqlserver遷移到aliyun的rds for sqlserver實戰

1. 通路RDS執行個體清單,在上方選擇地域,然後單擊目标執行個體ID。

2. 在左側菜單欄中選擇備份恢複。

3. 單擊頁面上方的OSS備份資料恢複上雲。

4. 在資料導入向導頁面,單擊兩次下一步,進入資料導入步驟。

5. 設定如下參數:

配置項 說明
資料庫名 目标資料庫名稱,即資料導入RDS SQL Server執行個體之後的資料庫名,必須和備份中的資料庫名不同。說明 資料庫名稱需要符合SQL Server官方限制。
OSS Bucket 選擇備份檔案所在的OSS Bucket。
OSS子檔案夾名 備份檔案所在的子檔案夾名字。
OSS檔案清單 單擊右側按鈕,可以按照備份檔案名字首模糊查找,會展示檔案名、檔案大小和更新時間。請選擇需要上雲的備份檔案。
上雲方案 打開資料庫(隻有一個全量備份檔案):全量上雲,适合僅有一個完全備份檔案上雲的場景。本操作選擇打開資料庫,此時CreateMigrateTask中的BackupMode = FULL并且IsOnlineDB = True。不打開資料庫(還有差異備份或日志檔案):增量上雲,适合有完全備份檔案加上日志備份(或者差異備份檔案)上雲的場景,此時CreateMigrateTask中的BackupMode = UPDF 并且IsOnlineDB = False。
一緻性檢查方式 異步執行DBCC:在打開資料庫的時候系統不做DBCC CheckDB,會在打開資料庫任務結束以後,異步執行DBCC CheckDB操作,以此來節約打開資料庫操作的時間開銷(資料庫比較大,DBCC CheckDB非常耗時),減少您的業務停機時間。如果您對業務停機時間要求非常敏感,且不關心DBCC CheckDB結果,建議使用異步執行DBCC。此時CreateMigrateTask 中的CheckDBMode = AsyncExecuteDBCheck。同步執行DBCC:相對于異步執行DBCC,有的使用者非常關心DBCC CheckDB的結果,以此來找出使用者線下資料庫資料一緻性錯誤。此時,建議您選擇同步執行DBCC,影響是會拉長打開資料庫的時間。此時CreateMigrateTask 中的CheckDBMode = SyncExecuteDBCheck。

6. 單擊确定。

請耐心等待上雲任務完成,您可以單擊重新整理檢視資料上雲任務最新狀态。

三、常見問題

空間不足

1. 錯誤資訊:Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).

2. 錯誤原因:RDS執行個體剩餘空間不滿足備份檔案上雲所需要的最小空間要求。

3. 解決方法:更新執行個體空間。

權限不足

1. 錯誤資訊:Your RDS doesn’t have any init account yet, please create one and grant permissions on RDS console to this migrated database (XXX).

2. 錯誤原因:RDS執行個體不存在高權限賬号,OSS備份資料上雲任務不知道需要為哪個使用者授權,但是備份檔案已經成功還原到目标執行個體上,是以任務狀态是成功的。

3. 解決方法:建立高權限賬号

繼續閱讀