RDS SQL Server提供了將本地SQL Server資料庫遷移到阿里雲RDS SQL Server的資料庫上雲方案。您只需將本地SQL Server資料庫的全量備份資料上傳至阿里雲的Object Storage Service服務(OSS),然後通過RDS控制台將全量備份資料上雲至指定RDS SQL Server資料庫中。適用於資料備份、遷移和災備恢複等情境。
前提條件
-
RDS SQL Server執行個體需滿足如下條件:
-
執行個體剩餘空間需大於待上雲的資料檔案。若空間不足,請提前升級執行個體空間。
-
2012及以上版本、2008 R2雲端硬碟:需確保執行個體中不存在與待遷移資料庫名稱相同的資料庫。
-
2008 R2高效能本地碟版本:需確保執行個體中已建立與待遷移資料庫名稱相同的資料庫。
-
-
如果通過RAM使用者登入,需滿足以下條件:
-
RAM帳號具備AliyunOSSFullAccess許可權和AliyunRDSFullAccess許可權。如何為RAM使用者授權,請參見通過RAM對OSS進行許可權管理和通過RAM對RDS進行許可權管理。
-
阿里雲帳號(主帳號)已授權RDS官方服務帳號可以訪問您OSS的許可權。
-
所在阿里雲帳號(主帳號)需手動建立權限原則,然後將許可權添加到RAM帳號中。
-
注意事項
-
遷移層級:本方案僅支援單個資料庫的遷移(資料庫級)。如需遷移多個或所有資料庫,請使用執行個體級遷移方案。
-
版本相容性:備份檔案所在本地SQL Server版本不支援遷移到低版本RDS SQL Server執行個體。
-
許可權管理:授予RDS服務帳號訪問OSS許可權後,系統會在存取控制RAM的角色管理中建立名為
AliyunRDSImportRole的角色,請勿修改或刪除該角色,否則會導致上雲任務失敗。若誤操作,需通過資料上雲嚮導重新授權。 -
帳號管理:遷移完成後,原有資料庫帳號無法使用,需在RDS控制台重新建立帳號。
-
OSS檔案保留:在上雲任務完成前,請勿刪除OSS上的備份檔案,否則會導致任務失敗。
-
備份檔案要求:
-
檔案名稱限制:檔案名稱不得包含特殊字元(如
!@#$%^&*()_+-=),否則會導致上雲失敗。 -
檔案尾碼:RDS支援的備份檔案為
.bak(全量備份)、.diff(差異備份)、.trn或.log(記錄備份),系統無法識別其他檔案類型。 -
檔案類型:僅支援上傳全量備份檔案。不支援差異備份或記錄備份。
-
檔案來源:若來源資料是此前下載的RDS SQL Server全量備份檔案(預設為
.zip格式),需解壓為.bak檔案後再進行上雲操作。
-
費用說明
本方案中僅會產生OSS的相關費用,詳情如下圖所示。
|
情境 |
費用說明 |
|
將本機資料備份檔案上傳至OSS |
不產生費用。 |
|
備份檔案儲存在OSS |
會產生OSS的儲存費用,計費詳情請參見OSS定價。 |
|
將備份檔案從OSS遷移至RDS |
|
準備工作
在本機資料庫環境中執行DBCC CHECKDB語句,以確保資料庫中沒有任何的allocation errors和consistency errors。正常執行結果如下:
...
CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
1. 備份本機資料庫
請根據RDS SQL Server執行個體版本,選擇對應方案。
2012及以上版本、2008 R2雲端硬碟
在對本機資料庫做全量備份之前,請確保已停止寫入資料。備份過程中新寫入的資料將不會被備份。
-
執行如下命令,確認原資料庫當前的復原模式。
SELECT name AS DatabaseName, recovery_model_desc AS RecoveryModel, state_desc AS State FROM sys.databases ORDER BY name;建議您在生產備份以上雲到RDS雲資料庫之前,將資料庫的復原模式改成FULL:
ALTER DATABASE [db_simple] SET RECOVERY FULL WITH NO_WAIT; -
下載備份指令碼,用SSMS(SQL Server Management Studio)開啟備份指令碼。
-
修改指令碼中SELECT語句中的如下參數,位於指令碼中
YOU HAVE TO INIT PUBLIC VARIABLES HERE下。配置項
說明
@backup_databases_list
需要備份的資料庫,多個資料庫以分號(;)或者半形逗號(,)分隔。
@backup_type
備份類型。參數值如下:
-
FULL:全量備份。
-
DIFF:差異備份。
-
LOG:記錄備份。
@backup_folder
備份檔案所在的本地目錄。如不存在,會自動建立。
@is_run
是否執行備份。參數值如下:
-
1:執行備份。
-
0:只做檢查,不執行備份。
-
-
執行備份指令碼。
2008 R2高效能本地碟
-
開啟Microsoft SQL Server Management Studio(SSMS)用戶端。
-
登入待遷移的資料庫。
-
執行如下命令,確認來源資料庫當前的復原模式。
USE master; GO SELECT name, CASE recovery_model WHEN 1 THEN 'FULL' WHEN 2 THEN 'BULK_LOGGED' WHEN 3 THEN 'SIMPLE' END model FROM sys.databases WHERE name NOT IN ('master','tempdb','model','msdb'); GO-
如果返回結果中的
model值不為FULL,請執行步驟4。 -
如果返回結果中的
model值為FULL,請執行步驟5。
-
-
執行如下命令,將來源資料庫的復原模式設定為
FULL。ALTER DATABASE [dbname] SET RECOVERY FULL; GO ALTER DATABASE [dbname] SET AUTO_CLOSE OFF; GO重要復原模式設定為
FULL後,會使SQL Server的日誌資訊增多,請確保具備足夠的硬碟空間。 -
執行如下命令,備份來源資料庫。
本案例中,將dbtestDatabase Backup至backup.bak檔案為例示範。
USE master; GO BACKUP DATABASE [dbtest] to disk ='d:\backup\backup.bak' WITH COMPRESSION,INIT; GO -
執行如下命令,校正備份檔案的完整性。
USE master GO RESTORE FILELISTONLY FROM DISK = N'D:\backup\backup.bak';重要-
如果有結果集返回,代表備份檔案有效。
-
如果提示錯誤,請重新執行備份操作。
-
-
可選:執行如下命令,還原資料庫的復原模式。
重要如果資料庫的復原模式原本就是
FULL,無需執行本步驟。ALTER DATABASE [dbname] SET RECOVERY SIMPLE; GO
2. 上傳備份檔案到OSS
請根據RDS SQL Server執行個體版本,選擇對應方案。
2012及以上版本、2008 R2雲端硬碟
-
將備份檔案上傳至OSS前,您需先在OSS中建立儲存空間Bucket。
-
若OSS中已存在Bucket,請確保該Bucket滿足以下要求:
-
若OSS中沒有Bucket,需要先行建立。(請確保已開通OSS服務)
-
登入OSS管理主控台,單擊Bucket列表,然後單擊建立Bucket。
-
配置如下關鍵參數,其他參數可以保持預設。
重要-
建立的儲存空間主要用於本次資料上雲,只需配置關鍵參數即可,上雲完成後可以及時刪除以避免資料泄露及產生相關費用。
-
建立Bucket時請勿開啟服務端加密。
參數
說明
取值樣本
Bucket 名稱
儲存空間名稱,全域唯一,設定後無法修改。
命名規則:
-
只能包括小寫字母、數字和短劃線(-)。
-
必須以小寫字母或者數字開頭和結尾。
-
長度必須在3~63字元之間。
migratetest
地區
Bucket所屬的地區,如果您通過ECS內網上傳資料至Bucket中,且通過內網將資料恢複至RDS中,則需要三者地區保持一致。
華東1(杭州)
儲存類型
選擇標準儲存。本文上雲操作不支援其他儲存類型的Bucket。
標準儲存
-
-
-
-
上傳備份檔案到OSS。
本機資料庫備份完成後,請將備份檔案上傳到與您的RDS執行個體同地區的OSS Bucket中,兩者處於同一地區時可通過內網互連(不會產生外網流量費用),且資料上傳速度更快。您可以採用如下方法之一:
2008 R2高效能本地碟
-
將備份檔案上傳至OSS前,您需先在OSS中建立儲存空間Bucket。
-
若OSS中已存在Bucket,請確保該Bucket滿足以下要求:
-
若OSS中沒有Bucket,需要先行建立。(請確保已開通OSS服務)
-
登入OSS管理主控台,單擊Bucket列表,然後單擊建立Bucket。
-
配置如下關鍵參數,其他參數可以保持預設。
重要-
建立的儲存空間主要用於本次資料上雲,只需配置關鍵參數即可,上雲完成後可以及時刪除以避免資料泄露及產生相關費用。
-
建立Bucket時請勿開啟服務端加密。
參數
說明
取值樣本
Bucket 名稱
儲存空間名稱,全域唯一,設定後無法修改。
命名規則:
-
只能包括小寫字母、數字和短劃線(-)。
-
必須以小寫字母或者數字開頭和結尾。
-
長度必須在3~63字元之間。
migratetest
地區
Bucket所屬的地區,如果您通過ECS內網上傳資料至Bucket中,且通過內網將資料恢複至RDS中,則需要三者地區保持一致。
華東1(杭州)
儲存類型
選擇標準儲存。本文上雲操作不支援其他儲存類型的Bucket。
標準儲存
-
-
-
-
上傳備份檔案到OSS。
本機資料庫備份完成後,請將備份檔案上傳到與您的RDS執行個體同地區的OSS Bucket中,兩者處於同一地區時可通過內網互連(不會產生外網流量費用),且資料上傳速度更快。您可以採用如下方法之一:
-
設定備份檔案的連結有效時間,並擷取檔案的連結地址。
-
登入OSS 管理主控台。
-
單擊Bucket 列表,然後單擊目標Bucket名稱。
-
在左側導覽列,選擇檔案管理 > 檔案清單。
-
單擊目標Database Backup檔案操作列的詳情,在彈出面板中,將到期時間 (秒)修改為28800秒,即8小時。
重要將備份檔案從OSS遷移至RDS時,需要使用備份檔案的連結地址,如果超過了連結有效時間,將導致資料移轉失敗。
-
單擊複製檔案URL,擷取檔案的連結地址。

-
修改擷取到的資料備份檔案連結地址。
預設擷取的是檔案的外網串連地址,如需通過內網遷移資料,您需要將檔案連結地址中的Endpoint改成內網Endpoint。
例如,備份檔案的連結地址為
http://rdstest.oss-cn-shanghai.aliyuncs.com/testmigraterds_20170906143807_FULL.bak?Expires=15141****&OSSAccessKeyId=TMP****,您需要將連結地址中的oss-cn-shanghai.aliyuncs.com修改為oss-cn-shanghai-internal.aliyuncs.com。重要不同的網路類型、不同地區所對應的內網Endpoint不同。具體詳情,請參見訪問網域名稱和資料中心。
-
3. OSS備份資料匯入RDS
請根據RDS SQL Server執行個體版本,選擇對應方案。
2012及以上版本、2008 R2雲端硬碟
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
-
在左側功能表列中選擇備份恢複。
-
單擊頁面上方的OSS備份資料恢複上雲。
-
在資料匯入嚮導頁面,單擊兩次下一步,進入資料匯入步驟。
說明-
首次使用OSS備份資料恢複上雲功能,需授權RDS帳號訪問OSS,請單擊授權地址並同意授權,否則會因許可權問題導致OSS Bucket下拉式清單為空白。
-
在該頁面選不到目標檔案時,請檢查OSS內備份檔案尾碼是否符合要求(可在本文注意事項查看尾碼要求),並確保RDS執行個體與OSS Bucket處於同一地區。
-
-
設定如下參數。
配置項
說明
資料庫名
備份資料匯入目標RDS執行個體上的資料庫名,名稱需要符合SQL Server官方限制。
重要進行上雲操作前,請確保目標執行個體上不存在與備份檔案指定要還原的資料庫名稱相同的資料庫,也不存在相同名稱的未附加資料庫檔案。若都不存在,則可以使用備份組中同名資料庫檔案名稱還原資料庫。
如果目標執行個體上存在與備份檔案指定要還原的資料庫名稱相同的資料庫,或者存在同名的未附加資料庫檔案,上雲操作將失敗。
OSS Bucket
選擇備份檔案所在的OSS Bucket。
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。
-
單擊確定。
2008 R2高效能本地碟
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
-
在左側導覽列,單擊資料庫管理。
-
找到目標資料庫,單擊操作列的從OSS上的備份檔案遷入。

-
在資料匯入嚮導對話方塊中,閱讀提示內容,單擊下一步。
-
閱讀OSS上傳的相關提示內容,單擊下一步。
-
在備份檔案OSS URL欄中填寫備份檔案在OSS的連結地址,單擊確定。
說明RDS SQL Server 2008 R2高效能本地碟執行個體當前僅支援將全量備份檔案一次性遷入雲上的方案。
4. 查看備份上雲進度
請根據RDS SQL Server執行個體版本,選擇對應方案。
2012及以上版本、2008 R2雲端硬碟
訪問RDS執行個體左側導覽列備份恢複頁面,在備份資料上雲記錄頁簽內查看備份上雲記錄,包括任務狀態、任務開始和結束時間等。預設展示最近一周的記錄,可按需調整時間區間。

任務狀態為失敗時,請查看任務描述或單擊目標遷移任務後面的查看檔案詳情,確認任務失敗的原因並修複,然後重新執行資料移轉。
2008 R2高效能本地碟
訪問RDS執行個體左側導覽列資料上雲頁面,然後找到目標遷移任務來查看資料移轉的進度。
任務狀態為失敗時,請查看任務描述或單擊目標遷移任務後面的查看檔案詳情,確認任務失敗的原因並修複,然後重新執行資料移轉。
常見錯誤
每條備份上雲恢複記錄中都會有任務描述資訊,您可以通過這些描述資訊發現任務失敗或報錯的原因。常見的錯誤資訊如下:
-
同名資料庫已經存在
-
錯誤資訊1:The database (xxx) is already exist on RDS, please backup and drop it, then try again.
-
錯誤資訊2:Database 'xxx' already exists. Choose a different database name.
-
錯誤原因:為了保證RDS SQL Server上資料的安全性,RDS SQL Server不支援同名資料庫的上雲操作。
-
解決方案:如果您確實需要對現有資料庫的資料進行覆蓋,請先自行備份已經存在的資料,然後刪除資料庫,最後再重新執行資料上雲任務。
-
-
使用差異備份檔案
-
錯誤資訊:Backup set (xxx.bak) is a Database Differential backup, we only accept a FULL Backup.
-
錯誤原因:您提供的備份檔案是差異備份,不是全量備份檔案,一次性全量遷入上雲僅支援全量備份檔案,不支援差異備份。
-
-
使用記錄備份檔案
-
錯誤資訊:Backup set (xxx.trn) is a Transaction Log backup, we only accept a FULL Backup.
-
錯誤原因:您提供的備份檔案是記錄備份,不是全量備份檔案,一次性全量遷入上雲僅支援全量備份檔案,不支援記錄備份。
-
-
備份檔案校正失敗
-
錯誤資訊:Failed to verify xxx.bak, backup file was corrupted or newer edition than RDS.
-
錯誤原因:備份檔案損壞或者備份檔案所在的本地環境SQL Server執行個體版本比RDS SQL Server版本高,導致校正失敗。例如將一個SQL Server 2016的備份還原到RDS SQL Server 2012版本,就會報告這個錯誤。
-
解決方案:如果是備份檔案損壞,請在本地環境重新做一個全量備份,重建遷移上雲任務;如果是版本過高,請使用與本地環境版本一致或者更高的RDS SQL Server。
說明如需將已有RDS SQL Server執行個體升級到更高版本,請參見升級資料庫版本。
-
-
DBCC CHECKDB失敗
-
錯誤資訊:DBCC checkdb failed.
-
錯誤原因:DBCC CheckDB檢查操作報錯,說明資料庫在本地環境中已經發生錯誤。
-
解決方案:使用如下命令修複本地環境資料庫錯誤後重新上雲。
重要使用該命令修複錯誤的過程,可能會導致資料丟失。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
-
-
空間不足1
-
錯誤資訊:Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).
-
錯誤原因:RDS執行個體剩餘空間不滿足備份檔案上雲所需要的最小空間要求。
-
解決方案:升級執行個體儲存空間。
-
-
空間不足2
-
錯誤資訊:Not Enough Disk Space, space left xxx MB < bak file xxx MB.
-
錯誤原因:RDS執行個體剩餘空間比備份檔案本身小,不滿足最小空間要求。
-
解決方案:升級執行個體儲存空間。
-
-
登入帳號許可權不足
-
錯誤資訊:Cannot open database "xxx" requested by the login. The login failed.
-
錯誤原因:登入RDS執行個體的使用者帳號無資料庫的存取權限。
-
解決方案:在RDS執行個體帳號管理頁面為使用者帳號授予資料庫訪問或操作許可權。具體詳情,請參見為帳號授權和各類型帳號支援的許可權列表。
-
-
沒有高許可權帳號
-
錯誤資訊:Your RDS doesn’t have any init account yet, please create one and grant permissions on RDS console to this migrated database (xxx).
-
錯誤原因:RDS執行個體不存在高許可權帳號,OSS備份資料上雲任務不知道需要為哪個使用者授權,但是備份檔案已經成功還原到目標執行個體上,所以任務狀態是成功的。
-
解決方案:建立高許可權帳號。
-
-
RAM子帳號操作許可權不足
-
Q1:執行建立資料上雲任務步驟5時,各配置項參數均已填寫完整,但確定按鈕為灰色無法單擊?
-
A1:無法單擊的原因可能是您為RAM使用者,您的帳號許可權不足。請參見本文前提條件,確保相應許可權已授予。
-
Q2:使用RAM子帳號進行
AliyunRDSImportRole授權時提示沒有許可權如何解決? -
A2:使用阿里雲主帳號為RAM子帳號臨時增加AliyunRAMFullAccess許可權解決。
-
-
資料庫名稱與SQL Server系統資料庫重合
-
錯誤資訊:The database (xxx) is mssql system db, change your database name and try again.
-
錯誤原因:指定的資料庫名稱與SQL Server系統資料庫重合(如master、msdb、tempdb、model等)。
-
解決方案:重新指定一個資料庫名稱。
-
-
資料庫名稱與RDS系統資料庫重合
-
錯誤資訊:The database (xxx) is RDS system db, change your database name and try again.
-
錯誤原因:指定的資料庫名稱與RDS SQL Server雲資料庫執行個體的管控資料庫重合(如rdscore等)。
-
解決方案:重新指定一個資料庫名稱。
-
-
資料庫數量超出上限
-
錯誤資訊:The database (xxx) migration failed due to databases count limitation: xxx.
-
錯誤原因:資料庫數量超出上限。
-
解決方案:嘗試減少執行個體上資料庫數量後重試。
-
-
OSS下載連結問題
-
錯誤資訊1:Failed to download backup (xxx) since OSS URL was expired.
-
錯誤資訊2:Failed to download since could not find backup file (xxx) on OSS.
-
錯誤原因:OSS下載連結到期,下載未正確授權RDS服務帳號、無許可權、或檔案不存在。
-
解決方案:檢查OSS檔案是否存在、許可權管理是否正確放開、是否正確授權等問題後重試。
-
-
Striped Backup多檔案問題
-
錯誤資訊:Failed to verify (xxx.bak), error message:The media set has xxx media families but only 1 are provided. All members must be provided. VERIFY DATABASE is terminating abnormally.
-
錯誤原因:原庫備份時使用了Striped Backup特性,把一個全備寫進了多個bak檔案備份檔案裡,通過OSS上雲到RDS時只提供了一個檔案。RDS不支援一次基於多個檔案上雲。
-
解決方案:建議將原庫備份到一個bak檔案後重試。
-
常見返回資訊
|
任務類型 |
任務狀態 |
任務描述 |
說明 |
|
全量備份檔案一次性遷入 |
成功 |
|
上雲成功。 |
|
失敗 |
|
OSS下載URL有效期間到期,導致上雲失敗。 |
|
|
|
備份檔案損壞或者比RDS的版本更高,導致上雲失敗。 |
||
|
|
DBCC checkdb失敗,導致上雲失敗。 |
||
|
|
記錄備份,導致上雲失敗。 |
||
|
|
差異備份,導致上雲失敗。 |
相關API
|
API |
描述 |
|
將OSS上的備份檔案還原到RDS SQL Server執行個體,建立資料上雲任務。 |
|
|
開啟RDS SQL Server備份資料上雲任務的資料庫。 |
|
|
查詢RDS SQL Server執行個體備份資料上雲工作清單。 |
|
|
查詢RDS SQL Server備份資料上雲任務的檔案詳情。 |



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

