本文檔介紹如何把使用者OSS上的全量備份檔案遷移到阿里雲RDS for SQL Server。

本文檔適用於如下以下版本的執行個體:

  • RDS for SQL Server 2012/2016 Web版、企業版的基礎系列(即單機版)
  • RDS for SQL Server 2012/2016標準版、企業版的高可用系列(即雙機版)

關於RDS for SQL Server 2008 R2企業版的高可用系列的資料上雲方法,請參考全量備份資料上雲SQL Server 2008 R2版

限制條件

備份檔案版本

不支援由高版本的備份檔案往低版本做遷移,比如:從SQL Server 2016遷移到SQL Server 2012等。

備份檔案類型限制

不支援差異備份檔案或記錄備份檔案。

備份檔案尾碼名限制

備份檔案名僅支援bak、diff、trn或者log為尾碼名。如果沒有使用本文中的指令碼產生備份檔案,請使用如下尾碼名:

  • bak:表示全量備份檔案
  • diff:表示差異備份檔案
  • trn或者log:表示交易記錄備份

備份檔案命名限制

全量備份檔案名不能包含@或者|等特殊字元,否則會導致資料庫上雲失敗。

注意事項

AliyunRDSImportRole的角色

授予RDS服務帳號訪問OSS的許可權以後,系統會在存取控制RAM的角色管理中建立名為AliyunRDSImportRole的角色,請勿修改或刪除這個角色,否則會導致上雲任務無法下載備份檔案而失敗。如果修改或刪除了這個角色,您需要通過資料上雲嚮導重新授權。

備份檔案命名

全量備份檔案名,不能包含中劃線(|)、@等特殊字元。

刪除OSS上備份檔案

在OSS備份資料恢複上雲任務沒有完成之前,請不要刪除OSS上的備份檔案,否則會導致上雲任務失敗。

前提條件

執行個體空間要求

請確保阿里雲RDS for SQL Server執行個體擁有足夠的儲存空間,如果空間不足,請提前升級執行個體空間,以免因為空白間不足而導致遷入失敗。

目標執行個體中不能存在同名的目標資料庫

您無需先建立目標資料庫。這一點和全量備份資料上雲SQL Server 2008 R2版的要求相反。

如果同名的資料庫已經存在,請先備份該資料庫,刪除該資料庫,再建立遷移任務。

在目標執行個體上建立初始帳號

建議先通過 RDS 控制台建立目標執行個體的初始帳號,如果已經存在初始帳號,請跳過本步驟。如果目標執行個體中不存在初始帳號,OSS備份資料上雲任務也會成功,但是您無法訪問該資料庫,需要參照本文最後章節“常見的錯誤資訊”才能解決。

初始帳號的建立方法,請參考建立資料庫和帳號SQL Server 2012及以上版本 中的第1步至第7步。

準備OSS Bucket

您需要建立與目標執行個體同地區的OSS Bucket。如果Bucket已經存在,請跳過本步驟。建立方法如下:

  1. 登入阿里雲OSS控制台
  2. 單擊儲存空間後面的加號+
  3. 設定Bucket名稱、地區、儲存類型和讀寫權限,單擊確定。(請確保與RDS for SQL Server執行個體位於相同地區,否則會導致後面的步驟中無法選中備份檔案。)如下圖所示。

運行DBCC CHECKDB

請在本地環境對需要上雲的資料庫做DBCC CHECKDB(‘xxx’)檢查,執行完畢後,確保沒有任何的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.

如果發現DBCC CHECKDB有任何錯誤,請先在本地環境修複資料庫,否則會導致上雲失敗。

文本介紹

只需下面簡單三步就可以輕鬆將本機資料遷移到雲資料庫RDS for SQL Server 2012/2016:

  1. 備份本機資料庫
  2. 上傳備份檔案到OSS
  3. 建立資料上雲任務

備份本機資料庫

在對本機資料庫做全量備份之前,請確保已停止寫入資料。備份過程中新寫入的資料將不會被備份。

您可以按已知的方式執行全量備份,或者使用如下方法進行全量備份:

  1. 下載備份指令碼,用SSMS開啟備份指令碼。
  2. 根據實際情況,修改如下4個參數:
    配置項 說明
    @backup_databases_list 需要備份的資料庫,多個資料庫以分號或者逗號分隔。
    @backup_type 備份類型。參數值如下:
    • FULL:全量備份;
    • DIFF:差異備份;
    • LOG:記錄備份。
    @backup_folder 備份檔案所在的本地目錄。如不存在,會自動建立。
    @is_run 是否執行備份。參數值如下:
    • 1:執行備份;
    • 0:只做檢查,不執行備份。
  3. 執行備份指令碼。

上傳備份檔案到OSS

本機資料庫備份完成後,需要將備份檔案上傳到使用者自己的OSS Bucket中。

方法一:使用ossbrowser工具上傳

推薦使用ossbrowser工具上傳備份檔案到OSS,具體請參考 ossbrowser

方法二:使用OSS控制台上傳

如果備份檔案小於5GB,可以直接使用OSS控制台上傳。具體請參考使用OSS控制台上傳

方法三:使用OSS API上傳

如果您有全自動無人幹預的上雲需求,請使用OSS OpenAPI,通過斷點續傳的方式上傳備份檔案到OSS Bucket,具體請參考斷點續傳

建立資料上雲任務

  1. 登入RDS控制台
  2. 選擇目標執行個體所在地區。
  3. 單擊目標執行個體的ID,進入基本資料頁面。
  4. 在左側功能表列中選擇備份恢複
  5. 單擊右上方OSS備份資料恢複上雲
  6. 如果您是第一次使用OSS備份資料恢複上雲功能,需要給RDS官方服務帳號授予訪問OSS的許可權:
    1. 單擊資料匯入嚮導第三項資料匯入頁面中的授權地址,如下圖所示:
    2. 跳轉到RAM授權頁面,請單擊同意授權,完成授權。

  7. 授權完畢後,在資料匯入嚮導第三步資料匯入頁面設定如下參數,單擊確認產生OSS備份資料上雲任務。
    配置項 說明
    資料庫名 目標執行個體上的目標資料庫名。
    OSS Bucket 選擇備份檔案所在的OSS Bucket。
    OSS子檔案夾名 備份檔案所在的子檔案夾名字。
    OSS檔案清單 單擊右側放大鏡按鈕,可以按照備份檔案名首碼模糊尋找,會展示檔案名稱、檔案大小和更新時間。請選擇需要上雲的備份檔案。
    上雲方案
    • 開啟資料庫(只有一個全量備份檔案):全量上雲,指使用者僅有一個完全備份檔案上雲RDS for SQL Server的情境。本操作選擇開啟資料庫,此時CreateMigrateTask 中的BackupMode=FULL並且IsOnlineDB = True
    • 不開啟資料庫(還有差異備份或記錄檔):增量上雲,使用者有全量備份檔案和差異或者記錄備份檔案,增量上雲RDS for SQL Server的情境。預設選中,此時CreateMigrateTask 中的BackupMode=UPDF 並且IsOnlineDB = False
    一致性檢查方式
    • 非同步執行DBCC:在開啟資料庫的時候系統不做DBCC CheckDB,會在開啟資料庫任務結束以後,非同步執行DBCC CheckDB操作,以此來節約開啟資料庫操作的時間開銷(資料庫比較大,DBCC CheckDB非常耗時),減少使用者的業務停機時間。如果,您對業務停機時間要求非常敏感,且不關心DBCC CheckDB結果,建議使用非同步執行DBCC。此時CreateMigrateTask 中的CheckDBMode=SyncExecuteDBCheck
    • 同步執行DBCC:相對於非同步執行DBCC,有的使用者非常關心DBCC CheckDB的結果,以此來找出使用者線下資料庫資料一致性錯誤。此時,建議您選擇同步執行DBCC,影響是會拉長開啟資料庫的時間。預設選項,此時CreateMigrateTask 中的CheckDBMode=AsyncExecuteDBCheck


    您可以不斷單擊重新整理按鈕,來查看資料上雲任務最新狀態。如果上雲失敗,請根據任務描述提示排查錯誤,可參考本文的常見錯誤部分。

查看備份上雲記錄

您也可以查看一段時間內的備份上雲記錄,具體操作如下:

進入備份恢複頁面,選擇備份上雲恢複記錄,預設會展示最近一周的記錄。當然,您同樣可以修改時間範圍來查看特定時間段內的上雲恢複記錄。

常見錯誤

每一條備份上雲恢複記錄中,都會有任務描述資訊,可以通過這些描述資訊提示來發現任務失敗或報錯的原因,常見的錯誤資訊如下:

同名資料庫已經存在

  • 錯誤資訊:The database (xxx) is already exist on RDS, please backup and drop it, then try again.

  • 錯誤原因:為了保證使用者RDS for SQL Server上資料的安全性,我們不予許RDS for 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 for SQL Server版本更高,導致校正失敗。比如:使用者想將一個來自於SQL Server 2016的備份還原到RDS for SQL Server 2012版本,就會報告這個錯誤。

  • 解決方案:如果是備份檔案損壞,請在本地環境重新做一個全量備份,重建遷移上雲任務;如果是版本過高,請使用與本地環境版本一致或者更高的RDS for SQL Server,比如:將使用者本地環境的SQL Server 2012備份上雲到RDS for SQL Server 2016上。

DBCC CHECKDB失敗

  • 錯誤資訊:DBCC checkdb failed

  • 錯誤原因:使用者備份檔案還原到RDS for SQL Server上,DBCC CheckDB檢查操作報錯,說明使用者資料庫在本地環境中已經有錯誤發生。

  • 解決方案:

    1. 使用如下命令修複本地環境資料庫錯誤(注意:使用該命令修複錯誤的過程,可能會導致使用者資料丟失。):
      DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
    2. 重新對資料庫做一個全量備份。
    3. 將新的全量備份檔案上傳到OSS。
    4. 在RDS控制台重新執行OSS上雲步驟。

OSS下載連結到期

OSS下載連結到期錯誤僅針對RDS for SQL Server 2008 R2高可用版本。

  • 錯誤資訊:Failed to download backup file since OSS URL was expired.

  • 錯誤原因:OSS下載連結地址到期導致備份檔案下載失敗。使用者在共用OSS上備份檔案下載連結地址時,設定的有效期間過短,導致檔案還未下載完畢,連結地址到期。

  • 解決方案:

    • 方法一:將備份檔案OSS共用連結地址的有效期間設定為更大的值或者最大值18個小時,方法如下截圖所示:

    • 方法二:將OSS上的Database Backup檔案直接修改為公用讀取,方法如下圖所示。

      说明 修改為公用讀取的Database Backup檔案,是永久可以下載的,所以存在安全風險,請使用者在完成備份檔案上雲後,將該檔案還原為私人屬性。

空間不足1

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

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

  • 解決方案:使用者升級執行個體空間。

空間不足2

  • 錯誤資訊:Not Enough Disk Space, space left xxx MB < bak file xxx MB

  • 錯誤原因:使用者執行個體剩餘空間比備份檔案本身還要小,不滿足最小空間要求。

  • 解決方案:使用者升級執行個體空間。

沒有初始帳號

  • 錯誤資訊: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備份資料上雲任務不知道需要為哪個使用者授權。但是,備份檔案已經成功還原到目標實力上,所以任務狀態是成功的。

  • 解決方案:

    1. 建立初始帳號,具體操作請參考建立資料庫和帳號SQL Server 2012及以上版本中的第1步至第7步。
    2. 重設初始帳號密碼,具體操作請參考重設密碼
    3. 使用初始帳號訪問上雲的資料庫,也可以執行為其他使用者授權等操作。