全部產品
Search
文件中心

ApsaraDB RDS:SQL Server執行個體層級遷移上雲

更新時間:Nov 15, 2024

RDS SQL Server提供了執行個體層級的資料庫遷移上雲方案,支援將自建SQL Server的多庫或所有庫的全量資料遷移至阿里雲RDS SQL Server。您只需先備份自建SQL Server的所有資料庫,並將完整備份檔案上傳到OSS Bucket(儲存空間)的同一檔案夾中,然後執行遷移上雲指令碼即可。

說明

如果您的上雲遷移層級為資料庫,即每次只需完成一個資料庫遷移上雲,SQL Server提供了以下三種基於OSS的資料庫上雲方案:

前提條件

  • 源端資料庫需為自建SQL Server。

  • 目標端RDS SQL Server執行個體需滿足如下條件:

    • 執行個體版本為2008 R2、2012及以上。如需建立執行個體,請參見建立RDS SQL Server執行個體

    • 執行個體版本為RDS SQL Server 2008 R2時,需要在目標RDS執行個體中建立與待遷移資料庫名稱相同的資料庫,並保持資料庫為空白。如何建立資料庫,請參見建立資料庫和帳號

      說明

      2012及以上版本的執行個體,無需執行本步驟。

    • RDS SQL Server執行個體擁有足夠的儲存空間。如果空間不足,請提前升級執行個體空間。具體操作,請參見變更配置

  • 已開通OSS服務。具體操作,請參見開通OSS服務

  • 如果通過RAM使用者登入,則必須滿足以下條件:

    • RAM帳號具備AliyunOSSFullAccess許可權和AliyunRDSFullAccess許可權。如何為RAM使用者授權,請參見通過RAM對OSS進行許可權管理通過RAM對RDS進行許可權管理

    • 阿里雲帳號(主帳號)已授權RDS官方服務帳號可以訪問您OSS的許可權。

      點擊展開查看授權方法

      1. 前往RDS執行個體詳情頁備份恢複頁面,單擊OSS備份資料恢複上雲按鈕。

      2. 資料匯入嚮導頁面單擊兩次下一步,進入3. 資料匯入步驟。

        若該頁面左下角顯示您已授權RDS官方服務帳號可以訪問您OSS的許可權,則表示已授權。否則表示還未授權,單擊該頁面的授權地址同意授權即可。

        image

    • 所在阿里雲帳號(主帳號)需手動建立權限原則,然後將許可權添加到RAM帳號中。如何建立權限原則,請參見通過指令碼編輯模式建立自訂權限原則

      點擊展開查看策略內容

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ram:GetRole"
                  ],
                  "Resource": "acs:ram:*:*:role/AliyunRDSImportRole",
                  "Effect": "Allow"
              }
          ]
      }

限制條件

本方案僅支援全量遷移上雲,暫不支援增量遷移上雲。

費用說明

本方案中僅會產生OSS的相關費用,詳情如下圖所示。

情境

費用說明

將本機資料備份檔案上傳至OSS

不產生費用。

備份檔案儲存在OSS

會產生OSS的儲存費用,計費詳情請參見OSS定價

將備份檔案從OSS遷移至RDS

  • 通過內網遷移至RDS,不產生費用。

  • 通過外網遷移至RDS,OSS會產生外網流出流量的費用,計費詳情請參見OSS定價

準備工作

  1. 安裝Python2.7.18版本,詳情請參見Python官網

  2. 確認Python安裝成功並查看版本。

    Windows作業系統

    執行c:\Python27\python.exe -V查看Python版本,若輸出內容為Python 2.7.18表示您已安裝成功。

    如果提示“不是內部或外部命令”,請在Path環境變數中增加Python的安裝路徑和pip命令的目錄。

    配置Path變數

    Mac、Linux或Unix作業系統

    執行python -V查看Python版本,若輸出內容為Python 2.7.18表示您已安裝成功。

  3. 選擇下述方法之一,安裝SDK依賴包:

    方式一:使用pip安裝

    pip install aliyun-python-sdk-rds
    pip install oss2

    方式二:使用源碼安裝

    # 複製OpenAPI
    git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git
    # 安裝阿里雲SDK核心庫
    cd aliyun-python-sdk-core
    python setup.py install
    # 安裝阿里雲RDS SDK
    cd aliyun-python-sdk-rds
    python setup.py install
    # 複製阿里雲OSS SDK
    git clone https://github.com/aliyun/aliyun-oss-python-sdk.git
    cd aliyun-oss-python-sdk
    # 安裝阿里雲OSS2 SDK
    python setup.py install

1. 備份自建SQL Server所有資料庫

重要
  • 為保障資料一致性,在執行全量備份期間,請勿寫入新的資料,請提前安排以免影響業務運行。

  • 如果您不使用備份指令碼來執行備份,備份檔案必須按照資料庫名稱_備份類型_備份時間.bak的格式來命名,例如Testdb_FULL_20180518153544.bak,否則會導致備份報錯。

  1. 下載備份指令碼

  2. 雙擊備份指令碼,使用Microsoft SQL Server Management Studio(SSMS)用戶端開啟。SSMS的串連方法,請參見官方文檔

  3. 根據業務需求,修改如下參數。

    點擊展開查看樣本

    SELECT
        /**
        * Databases list needed to backup, delimiter is : or ,
        * empty('') or null: means all databases excluding system database
        * example: '[testdb]: TestDR, Test, readonly'
        **/
        @backup_databases_list = N'[dtstestdata],[testdb]'
        @backup_type = N'FULL',                    -- Backup Type? FULL: FULL backup; DIFF: Differential backup; LOG: Log backup
        @backup_folder = N'C:\BACKUP'              -- Backup folder to store backup files.
        @is_run = 1                                -- Check or run? 1, run directly; 0, just check

    配置項

    說明

    @backup_databases_list

    需要備份的資料庫,多個資料庫以分號(;)或者半形逗號(,)分隔。

    @backup_type

    備份類型,取值如下:

    • FULL:全量備份。

    • DIFF:差異備份。

    • LOG:記錄備份。

    重要

    本方案中,取值需為FULL

    @backup_folder

    備份檔案所在的本地目錄。如不存在,會自動建立。

    @is_run

    是否執行備份,取值:

    • 1:執行備份。

    • 0:僅執行檢查,不執行備份。

  4. 運行備份指令碼,資料庫將備份至指定的目錄中。

    備份指令碼執行結果

2. 上傳備份檔案到OSS

重要

如果OSS中已經建立了Bucket,請檢查Bucket是否滿足如下要求:

  • 請確儲存儲備份檔案的OSS Bucket儲存類型為標準儲存。不能是低頻訪問儲存、Archive Storage、冷Archive Storage、深度冷Archive Storage。更多詳情,請參見儲存類型概述

  • 請確保Bucket未開啟資料加密。更多詳情,請參見資料加密

  1. 建立儲存空間Bucket。

    1. 登入OSS管理主控台

    2. 單擊Bucket列表,然後單擊建立Bucket

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

      重要
      • 建立的儲存空間僅用於本次資料上雲,且上雲後不再使用,因此只需配置關鍵參數即可,為避免資料泄露及產生相關費用,上雲完成後請及時刪除。

      • 建立Bucket時請勿開啟資料加密。更多詳情,請參見資料加密

      參數

      說明

      取值樣本

      Bucket 名稱

      儲存空間名稱,全域唯一,設定後無法修改。

      命名規則:

      • 只能包括小寫字母、數字和短劃線(-)。

      • 必須以小寫字母或者數字開頭和結尾。

      • 長度必須在3~63字元之間。

      migratetest

      地區

      Bucket所屬的地區,如果您通過ECS內網上傳資料至Bucket中,且通過內網將資料恢複至RDS中,則需要三者地區保持一致。

      華東1(杭州)

      儲存類型

      選擇標準儲存。本文上雲操作不支援其他儲存類型的Bucket。

      標準儲存

  2. 上傳備份檔案到OSS。

    說明

    當RDS執行個體和OSS的Bucket在同一地區時,二者可以通過內網互連,且資料上傳速度更快,並且不會產生外網流量費用。因此,在上傳備份檔案時,建議將檔案上傳至與目標RDS執行個體在同一地區的Bucket上。

    本機資料庫備份完成後,需要將備份檔案上傳到您的OSS Bucket中,您可以採用如下方法之一:

    使用ossbrowser工具上傳(推薦)

    1. 下載ossbrowser

    2. 以Windows x64作業系統為例,解壓下載的oss-browser-win32-x64.zip壓縮包,雙擊運行oss-browser.exe應用程式。

    3. 使用AK登入方式,配置參數AccessKeyIdAccessKeySecret,其他參數保持預設,然後單擊登入登入ossbrowser

      說明

      AccessKey用於身分識別驗證,確保資料安全,請妥善保管,如何建立及擷取,請參見建立AccessKey

    4. 單擊目標Bucket,進入儲存空間。進入bucket中

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

    使用OSS控制台上傳

    說明

    如果備份檔案小於5 GB,建議您直接通過OSS控制台上傳備份檔案。

    1. 登入OSS管理主控台

    2. 單擊Bucket列表,然後單擊目標Bucket名稱。網頁進入bucket

    3. 檔案清單中,單擊上傳檔案網頁上傳檔案

    4. 您可以將備份檔案拖拽至待上傳檔案地區,也可以單擊掃描檔案,選擇需要上傳的備份檔案。網頁掃描檔案

    5. 單擊頁面下方的上傳檔案,即可將本地備份檔案上傳至OSS中。

    使用OSS API分區上傳

    說明

    如果備份檔案大於5 GB,建議您調用OSS API採用分區上傳的方式將備份檔案上傳到OSS Bucket中。

    本樣本以Java專案為例,從環境變數中擷取訪問憑證代碼。運行本程式碼範例之前,請先配置環境變數。如何配置訪問憑證,請參見配置訪問憑證。更多樣本,請參見分區上傳

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.internal.Mimetypes;
    import com.aliyun.oss.model.*;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            // Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // 填寫Bucket名稱,例如examplebucket。
            String bucketName = "examplebucket";
            // 填寫Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。
            String objectName = "exampledir/exampleobject.txt";
            // 待上傳本地檔案路徑。
            String filePath = "D:\\localpath\\examplefile.txt";
            // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
            String region = "cn-hangzhou";
    
            // 建立OSSClient執行個體。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
            
            try {
                // 建立InitiateMultipartUploadRequest對象。
                InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
    
                // 如果需要在初始化分區時佈建要求頭,請參考以下範例程式碼。
                 ObjectMetadata metadata = new ObjectMetadata();
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
                // 指定該Object的網頁緩衝行為。
                // metadata.setCacheControl("no-cache");
                // 指定該Object被下載時的名稱。
                // metadata.setContentDisposition("attachment;filename=oss_MultipartUpload.txt");
                // 指定該Object的內容編碼格式。
                // metadata.setContentEncoding(OSSConstants.DEFAULT_CHARSET_NAME);
                // 指定初始化分區上傳時是否覆蓋同名Object。此處設定為true,表示禁止覆蓋同名Object。
                // metadata.setHeader("x-oss-forbid-overwrite", "true");
                // 指定上傳該Object的每個part時使用的伺服器端加密方式。
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
                // 指定Object的密碼編譯演算法。如果未指定此選項,表明Object使用AES256密碼編譯演算法。
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_DATA_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
                // 指定KMS託管的使用者主要金鑰。
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID, "9468da86-3509-4f8d-a61e-6eab1eac****");
                // 指定Object的儲存類型。
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);
                // 指定Object的對象標籤,可同時設定多個標籤。
                // metadata.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
                // request.setObjectMetadata(metadata);
    
                // 根據檔案自動化佈建ContentType。如果不設定,ContentType預設值為application/oct-srream。
                if (metadata.getContentType() == null) {
                    metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
                }
    
                // 初始化分區。
                InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
                // 返回uploadId。
                String uploadId = upresult.getUploadId();
                // 根據uploadId執行取消分區上傳事件或者列舉已上傳分區的操作。
                // 如果您需要根據uploadId執行取消分區上傳事件的操作,您需要在調用InitiateMultipartUpload完成初始化分區之後擷取uploadId。 
                // 如果您需要根據uploadId執行列舉已上傳分區的操作,您需要在調用InitiateMultipartUpload完成初始化分區之後,且在調用CompleteMultipartUpload完成分區上傳之前擷取uploadId。
                // System.out.println(uploadId);
    
                // partETags是PartETag的集合。PartETag由分區的ETag和分區號組成。
                List<PartETag> partETags =  new ArrayList<PartETag>();
                // 每個分區的大小,用於計算檔案有多少個分區。單位為位元組。
                final long partSize = 1 * 1024 * 1024L;   //1 MB。
    
                // 根據上傳的資料大小計算分區數。以本地檔案為例,說明如何通過File.length()擷取上傳資料的大小。
                final File sampleFile = new File(filePath);
                long fileLength = sampleFile.length();
                int partCount = (int) (fileLength / partSize);
                if (fileLength % partSize != 0) {
                    partCount++;
                }
                // 遍曆分區上傳。
                for (int i = 0; i < partCount; i++) {
                    long startPos = i * partSize;
                    long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                    UploadPartRequest uploadPartRequest = new UploadPartRequest();
                    uploadPartRequest.setBucketName(bucketName);
                    uploadPartRequest.setKey(objectName);
                    uploadPartRequest.setUploadId(uploadId);
                    // 設定上傳的分區流。
                    // 以本地檔案為例說明如何建立FIleInputstream,並通過InputStream.skip()方法跳過指定資料。
                    InputStream instream = new FileInputStream(sampleFile);
                    instream.skip(startPos);
                    uploadPartRequest.setInputStream(instream);
                    // 設定分區大小。除了最後一個分區沒有大小限制,其他的分區最小為100 KB。
                    uploadPartRequest.setPartSize(curPartSize);
                    // 設定分區號。每一個上傳的分區都有一個分區號,取值範圍是1~10000,如果超出此範圍,OSS將返回InvalidArgument錯誤碼。
                    uploadPartRequest.setPartNumber( i + 1);
                    // 每個分區不需要按順序上傳,甚至可以在不同用戶端上傳,OSS會按照分區號排序組成完整的檔案。
                    UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                    // 每次上傳分區之後,OSS的返回結果包含PartETag。PartETag將被儲存在partETags中。
                    partETags.add(uploadPartResult.getPartETag());
                }
    
    
                // 建立CompleteMultipartUploadRequest對象。
                // 在執行完成分區上傳操作時,需要提供所有有效partETags。OSS收到提交的partETags後,會逐一驗證每個分區的有效性。當所有的資料分區驗證通過後,OSS將把這些分區組合成一個完整的檔案。
                CompleteMultipartUploadRequest completeMultipartUploadRequest =
                        new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);
    
                // 如果需要在完成分區上傳的同時設定檔案存取權限,請參考以下範例程式碼。
                // completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.Private);
                // 指定是否列舉當前UploadId已上傳的所有Part。僅在Java SDK為3.14.0及以上版本時,支援通過服務端List分區資料來合并完整檔案時,將CompleteMultipartUploadRequest中的partETags設定為null。
                // Map<String, String> headers = new HashMap<String, String>();
                // 如果指定了x-oss-complete-all:yes,則OSS會列舉當前UploadId已上傳的所有Part,然後按照PartNumber的序號排序並執行CompleteMultipartUpload操作。
                // 如果指定了x-oss-complete-all:yes,則不允許繼續指定body,否則報錯。
                // headers.put("x-oss-complete-all","yes");
                // completeMultipartUploadRequest.setHeaders(headers);
    
                // 完成分區上傳。
                CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
                System.out.println(completeMultipartUploadResult.getETag());
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

3. 執行遷移上雲指令碼將資料庫遷移至RDS

  1. 下載SQL Server遷移上雲指令碼

  2. 解壓後執行如下命令,瞭解該指令碼需要傳入的參數資訊。

    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儲存空間中的目錄。如果是根目錄,請傳入/

  3. 執行遷移上雲指令碼,完成遷移任務。

    本樣本以將OSS儲存空間(名稱為testdatabucket)的Migrationdata目錄中所有滿足條件的備份檔案,全量遷移到RDS SQL Server執行個體(執行個體ID為rm-2zesz5774ud8s****)為例。

    python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -k LTAIQ**** -s BMkIUhroub******** -i rm-2zesz5774ud8s**** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
  4. 在RDS控制台查看遷移任務的執行進度。

    1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

    2. 根據RDS執行個體的版本,選擇下述操作步驟:

      RDS SQL Server 2008 R2

      單擊左側導覽列的資料上雲,您可以查看到所有提交的遷移上雲任務。

      說明

      可以單擊右上方的重新整理來查看遷移上雲任務的最新狀態。

      RDS SQL Server 2012及以上版本

      單擊左側導覽列的備份復原,然後單擊備份資料上雲記錄頁簽。

      說明

      預設會展示最近一周的記錄,您可以選擇時間範圍來查看特定時間段內的上雲恢複記錄。

常見錯誤

錯誤提示

原因

解決方案

HTTP Status: 404 Error:InvalidAccessKeyId.NotFound Specified access key is not found. RequestID: XXXXXXXXXXXXXXXXX

調用OpenAPI時使用的AccessKey ID不正確。

傳入正確的AccessKey ID和AccessKey Secret,查看方法請參見存取金鑰常見問題

HTTP Status: 400 Error:IncompleteSignature The request signature does not conform to Aliyun standards. server string to sign is:......

調用OpenAPI時使用的AccessKey Secret不正確。

RDS engine doesn't support, this is only for RDS SQL Server engine.

本方案僅支援RDS SQL Server,不支援其他引擎。

將RDS SQL Server作為遷移的目標執行個體。

Couldn't find specify RDS [XXX].

RDS執行個體ID不存在。

檢查傳入的RDS執行個體ID是否正確。

{'status': -2, 'request-id': '', 'details': "RequestError: HTTPConnectionPool(host='xxxxxxxxxxxxxxxxx', port=80): Max retries exceeded with url: /?bucketInfo= (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10e996490>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))"}

Endpoint錯誤,導致串連失敗。

檢查傳入的Endpoint是否正確,擷取方法請參見儲存空間概覽

{'status': 404,'-id': 'xxxxxxxxx', 'details': {'HostId': 'xxxxxxxxx', 'Message': 'The specified bucket does not exist.', 'Code': 'NoSuchBucket', 'RequestId': 'xxxxxxxx', 'BucketName': 'aaaatp-test-on-ecs'}}

OSS Bucket(儲存空間)不存在。

檢查傳入的OSS Bucket是否正確。

There is no backup file on OSS Bucket [xxxxxx] under [xxxxxxxxx] folder, check please.

OSS Bucket中對應的檔案夾不存在或檔案夾中沒有滿足條件的Database Backup檔案。

檢查OSS Bucket中檔案夾是否存在,同時檢查該檔案夾中是否存在滿足條件的Database Backup檔案。

Warning!!!!!, [autotest_2005_ent_broken_full_dbcc_failed.bak] is not backup file, filtered.

備份檔案的名稱不符合規範。

如果您不使用備份指令碼來執行備份,備份檔案必須按照資料庫名稱_備份類型_備份時間.bak的格式來命名,例如Testdb_FULL_20180518153544.bak

HTTP Status: 403 Error:Forbidden.RAM The user is not authorized to operate the specified resource, or this operation does not support RAM. RequestID: xxxxx{'status': 403, 'request-id': 'xxxx', 'details': {'HostId': 'atp-test-on-ecs.oss-cn-beijing.aliyuncs.com', 'Message': 'The bucket you visit is not belong to you.', 'Code': 'AccessDenied', 'RequestId': 'xxxx'}}

子帳號許可權不足。

需要為子帳號授予OSS和RDS的讀寫權限(即AliyunOSSFullAccessAliyunRDSFullAccess許可權)。關於授權操作方法,請參見為RAM使用者授權

OPENAPI Response Error !!!!! : HTTP Status: <Http Status Code> Error:<Error> <Description>. RequestID: 32BB6886-775E-4BB7-A054-635664****

調用OpenAPI返回了錯誤資訊。

根據錯誤碼和錯誤資訊來分析具體原因,詳情請參見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.

資料庫不存在。

  • RDS SQL Server 2008R2需要先建立同名資料庫。

  • RDS SQL Server 2012及以上版本,要求不能存在同名的資料庫。

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

描述

CreateMigrateTask

將OSS上的備份檔案還原到RDS SQL Server執行個體,建立資料上雲任務。

CreateOnlineDatabaseTask

開啟RDS SQL Server備份資料上雲任務的資料庫。

DescribeMigrateTasks

查詢RDS SQL Server執行個體備份資料上雲工作清單。

DescribeOssDownloads

查詢RDS SQL Server備份資料上雲任務的檔案詳情。