RDS SQL Server提供了執行個體層級的資料庫遷移上雲方案,支援將自建SQL Server的多庫或所有庫的全量資料遷移至阿里雲RDS SQL Server。您只需先備份自建SQL Server的所有資料庫,並將完整備份檔案上傳到OSS Bucket(儲存空間)的同一檔案夾中,然後執行遷移上雲指令碼即可。
前提條件
源端需為自建SQL Server資料庫。
目標端RDS SQL Server執行個體需滿足如下條件:
如果通過RAM使用者登入,需滿足以下條件:
RAM帳號具備AliyunOSSFullAccess許可權和AliyunRDSFullAccess許可權。如何為RAM使用者授權,請參見通過RAM對OSS進行許可權管理和通過RAM對RDS進行許可權管理。
阿里雲帳號(主帳號)已授權RDS官方服務帳號可以訪問您OSS的許可權。
所在阿里雲帳號(主帳號)需手動建立權限原則,然後將許可權添加到RAM帳號中。
限制條件
本方案僅支援全量遷移上雲,暫不支援增量遷移上雲。
費用說明
本方案中僅會產生OSS的相關費用,詳情如下圖所示。
情境 | 費用說明 |
將本機資料備份檔案上傳至OSS | 不產生費用。 |
備份檔案儲存在OSS | 會產生OSS的儲存費用,計費詳情請參見OSS定價。 |
將備份檔案從OSS遷移至RDS |
|
準備工作
1. 安裝Python 3
訪問Python官網(選擇3.12及以上版本)下載並安裝適合業務系統的安裝包。
Windows:安裝過程中建議勾選
Add python.exe to PATH,避免後續手動設定環境變數。macOS/Linux:可通過官網安裝包安裝,或使用系統包管理器(如Homebrew、apt、dnf等)部署,以官網為準。
2. 驗證Python安裝與版本
不同系統與發行方式的可執行名可能不同(python、python3、py)。建議按順序嘗試,並以實際輸出為準。
3. 安裝SDK依賴包
pip install alibabacloud_rds20140815
pip install alibabacloud-oss-v2
pip install alibabacloud_tea_openapi
pip install alibabacloud_tea_util1. 備份自建SQL Server所有資料庫
為保障資料一致性,在執行全量備份期間,請勿寫入新的資料,請提前安排以免影響業務運行。
如果您不使用備份指令碼來執行備份,備份檔案必須按照
資料庫名稱_備份類型_備份時間.bak的格式來命名,例如Testdb_FULL_20180518153544.bak,否則會導致備份報錯。
下載備份指令碼。
雙擊備份指令碼,使用Microsoft SQL Server Management Studio(SSMS)用戶端開啟。SSMS的串連方法,請參見官方文檔。
根據業務需求,修改如下參數。
配置項
說明
@backup_databases_list
需要備份的資料庫,多個資料庫以分號(;)或者半形逗號(,)分隔。
@backup_type
備份類型,取值如下:
FULL:全量備份。
DIFF:差異備份。
LOG:記錄備份。
重要本方案中,取值需為FULL。
@backup_folder
備份檔案所在的本地目錄。如不存在,會自動建立。
@is_run
是否執行備份,取值:
1:執行備份。
0:僅執行檢查,不執行備份。
運行備份指令碼,資料庫將備份至指定的目錄中。

2. 上傳備份檔案到OSS
將備份檔案上傳至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中,兩者處於同一地區時可通過內網互連(不會產生外網流量費用),且資料上傳速度更快。您可以採用如下方法之一:
3. 執行上雲指令碼將資料庫遷移至RDS
解壓後執行如下命令,瞭解該指令碼需要傳入的參數資訊。
python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -h結果如下:
RDSSQLCreateMigrateTasksBatchly.py -k <access_key_id> -s <access_key_secret> -i <rds_instance_id> -e <oss_endpoint> -b <oss_bucket> -d <directory>參數說明如下:
參數
說明
access_key_id
目標RDS執行個體所屬的阿里雲帳號的AccessKey ID。
access_key_secret
目標RDS執行個體所屬的阿里雲帳號的AccessKey Secret。
rds_instance_id
目標RDS執行個體ID。
oss_endpoint
備份檔案所屬的儲存空間的Endpoint地址。
oss_bucket
備份檔案所屬的儲存空間名稱。
directory
備份檔案在OSS儲存空間中的目錄。如果是根目錄,請傳入
/。執行遷移上雲指令碼,完成遷移任務。
本樣本以將OSS儲存空間(名稱為
testdatabucket)的Migrationdata目錄中所有滿足條件的備份檔案,全量遷移到RDS SQL Server執行個體(執行個體ID為rm-2zesz5774ud8s****)為例。python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -k yourAccessKeyID -s yourAccessKeySecret -i rm-2zesz5774ud8s**** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
4. 查看遷移任務進度
請根據RDS SQL Server執行個體版本,選擇對應方案。
2012及以上版本
訪問RDS執行個體左側導覽列備份恢複頁面,在備份資料上雲記錄頁簽內查看備份上雲記錄,包括任務狀態、任務開始和結束時間等。預設展示最近一周的記錄,可按需調整時間區間。

任務狀態為失敗時,請查看任務描述或單擊目標遷移任務後面的查看檔案詳情,確認任務失敗的原因並修複,然後重新執行資料移轉。
2008 R2
訪問RDS執行個體左側導覽列資料上雲頁面,然後找到目標遷移任務來查看資料移轉的進度。
任務狀態為失敗時,請查看任務描述或單擊目標遷移任務後面的查看檔案詳情,確認任務失敗的原因並修複,然後重新執行資料移轉。
常見錯誤
錯誤提示 | 原因 | 解決方案 |
| 調用OpenAPI時使用的AccessKey ID不正確。 | |
| 調用OpenAPI時使用的AccessKey Secret不正確。 | |
| 本方案僅支援RDS SQL Server,不支援其他引擎。 | 將RDS SQL Server作為遷移的目標執行個體。 |
| RDS執行個體ID不存在。 | 檢查傳入的RDS執行個體ID是否正確。 |
| Endpoint錯誤,導致串連失敗。 | 檢查傳入的Endpoint是否正確。 |
| OSS Bucket(儲存空間)不存在。 | 檢查傳入的OSS Bucket是否正確。 |
| OSS Bucket中對應的檔案夾不存在或檔案夾中沒有滿足條件的Database Backup檔案。 | 檢查OSS Bucket中檔案夾是否存在,同時檢查該檔案夾中是否存在滿足條件的Database Backup檔案。 |
| 備份檔案的名稱不符合規範。 | 如果您不使用備份指令碼來執行備份,備份檔案必須按照 |
| 子帳號許可權不足。 | 需要為子帳號授予OSS和RDS的使用許可權(即AliyunOSSFullAccess和AliyunRDSFullAccess許可權)。 |
| 調用OpenAPI返回了錯誤資訊。 | 根據錯誤碼和錯誤資訊來分析具體原因。 |
OpenAPI錯誤碼
HTTP Status Code | Error | Description | 說明 |
403 | InvalidDBName | The specified database name is not allowed. | 非法的資料庫名字,不允許使用系統資料庫名。 |
403 | IncorrectDBInstanceState | Current DB instance state does not support this operation. | RDS執行個體狀態不正確。例如,執行個體狀態為建立中。 |
400 | IncorrectDBInstanceType | Current DB instance type does not support this operation. | 不支援的引擎,該功能僅支援RDS SQL Server。 |
400 | IncorrectDBInstanceLockMode | Current DB instance lock mode does not support this operation. | 資料庫鎖定狀態不正確。 |
400 | InvalidDBName.NotFound | Specified one or more DB name does not exist or DB status does not support. | 資料庫不存在。
|
400 | IncorrectDBType | Current DB type does not support this operation. | 資料庫類型不支援該操作。 |
400 | IncorrectDBState | Current DB state does not support this operation. | 資料庫狀態不正確,例如,資料庫在建立中或者正在上雲任務中。 |
400 | UploadLimitExceeded | UploadTimesQuotaExceeded: Exceeding the daily upload times of this DB. | 上雲次數超過限制,每個執行個體每個庫每天不超過20次上雲操作。 |
400 | ConcurrentTaskExceeded | Concurrent task exceeding the allowed amount. | 上雲次數超過限制,每個執行個體每天上雲總次數不超過500次。 |
400 | IncorrectFileExtension | The file extension does not support. | 備份檔案的尾碼名錯誤。 |
400 | InvalidOssUrl | Specified oss url is not valid. | 提供的OSS下載連結地址不可用。 |
400 | BakFileSizeExceeded | Exceeding the allowed bak file size. | Database Backup檔案超過限制,最大不超過3TB。 |
400 | FileSizeExceeded | Exceeding the allowed file size of DB instance. | 還原備份檔案後將超過當前執行個體的儲存空間。 |
相關API
API | 描述 |
將OSS上的備份檔案還原到RDS SQL Server執行個體,建立資料上雲任務。 | |
開啟RDS SQL Server備份資料上雲任務的資料庫。 | |
查詢RDS SQL Server執行個體備份資料上雲工作清單。 | |
查詢RDS SQL Server備份資料上雲任務的檔案詳情。 |



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

