すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:自己管理型SQL ServerインスタンスからApsaraDB RDS for SQL Serverインスタンスへのデータの移行

最終更新日:Mar 19, 2024

自己管理型SQL ServerインスタンスからApsaraDB RDS for SQL Serverインスタンスに複数またはすべてのデータベースのデータを移行するために、ApsaraDB RDS for SQL Serverは、データをRDSインスタンスに移行するためのインスタンスレベルの移行方法を提供します。 これらのデータベースの完全バックアップファイルをObject Storage Service (OSS) バケットの同じフォルダーにアップロードし、必要なスクリプトを実行してデータをRDSインスタンスに移行するだけです。

前提条件

  • ソースデータベースは自己管理型のSQL Serverインスタンスです。

  • 移行先RDSインスタンスは、次の要件を満たしています。

    • RDSインスタンスは、SQL Server 2008 R2、SQL Server 2012、またはそれ以降を実行します。 RDSインスタンスの作成方法の詳細については、「ApsaraDB RDS For SQL Serverインスタンスの作成」をご参照ください。

    • RDSインスタンスがSQL Server 2008 R2を実行している場合、データベースはRDSインスタンスに作成されます。 自己管理型SQL Serverインスタンスからデータを移行する各データベースに、RDSインスタンス上で同じ名前の対応データベースがあることを確認します。 また、作成したデータベースが空であることを確認してください。 詳細については、「アカウントとデータベースの作成」をご参照ください。

      説明

      RDSインスタンスがSQL Server 2012以降を実行する場合は、この要件を無視してください。

    • RDSインスタンスの使用可能なストレージは十分です。 使用可能なストレージが不十分な場合は、移行を開始する前にRDSインスタンスのストレージ容量を拡張する必要があります。 詳細については、「ApsaraDB RDS For SQL Serverインスタンスの仕様の変更」をご参照ください。

  • OSSが有効化されています。 詳細については、「OSSの有効化」をご参照ください。

  • RAMユーザーを使用する場合は、次の要件が満たされていることを確認してください。

    • AliyunOSSFullAccessおよびAliyunRDSFullAccessポリシーはRAMユーザーにアタッチされます。 RAMユーザーに権限を付与する方法の詳細については、「RAMを使用してOSS権限を管理する」および「RAMを使用してApsaraDB RDS権限を管理する」をご参照ください。

    • ApsaraDB RDSのサービスアカウントは、Alibaba Cloudアカウントを使用してOSSバケットにアクセスすることで承認されます。

    • カスタムポリシーは、Alibaba Cloudアカウントを使用して手動で作成され、RAMユーザーにアタッチされます。 カスタムポリシーの作成方法の詳細については、「カスタムポリシーの作成」の「JSONタブでカスタムポリシーを作成する」をご参照ください。

      カスタムポリシーには次のコンテンツを使用する必要があります。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ram:GetRole"
                  ],
                  "リソース": "acs:ram:*:*:role/AliyunRDSImportRole" 、
                  "Effect": "Allow"
              }
          ]
      }

制限事項

データ移行には完全バックアップファイルのみを使用できます。

課金

このトピックで説明されている方法を使用してデータを移行する場合、OSSバケットの使用に対してのみ課金されます。

シナリオ

課金ルール

OSSバケットへのバックアップファイルのアップロード

無料です。

OSSバケットにバックアップファイルを保存する

ストレージ料金が請求されます。 詳細については、料金をご覧ください。 OSSのページにアクセスします。

OSSバケットからRDSインスタンスへのバックアップファイルの移行

  • 内部ネットワークを介してOSSバケットからRDSインスタンスにバックアップファイルを移行する場合、料金は発生しません。

  • インターネット経由でバックアップファイルを移行する場合、アウトバウンドインターネットトラフィックに基づいてOSSバケットに対して課金されます。 詳細については、料金をご覧ください。 OSSのページにアクセスします。

準備

  1. Python 2.7.18をインストールします。 詳細については、Python公式Webサイトをご覧ください。

  2. Python 2.7.18がインストールされているか確認します。

    • Windows オペレーティングシステム

      c:\Python27\python.exe -Vコマンドを実行して、Pythonのバージョンを確認します。 Python 2.7.18が表示されている場合、Python 2.7.18がインストールされます。

      上記のコマンドが内部コマンドでも外部コマンドでもないことをシステムが求めた場合は、Pythonインストールパスとpipコマンドパスをpath環境変数に追加します。

      配置Path变量

    • Mac、Linux、またはUnixオペレーティングシステム

      python -Vコマンドを実行して、Pythonのバージョンを確認します。 Python 2.7.18が表示されている場合、Python 2.7.18がインストールされます。

  3. 次のいずれかの方法を使用して、SDK依存パッケージをインストールします。

    • pipコマンドを実行する

      pip install aliyun-python-sdk-rds
      pipインストールoss2 
    • ソースコードを使用する

      # APIリポジトリをクローンします。
      git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git
      # Alibaba CloudのSDKコアリポジトリをインストールします。
      cd aliyun-python-sdk-core
      python setup.pyインストール
      # ApsaraDB RDS SDKをインストールします。
      cd aliyun-python-sdk-rds
      python setup.pyインストール
      # OSS SDKのクローンを作成します。
      git clone https://github.com/aliyun/aliyun-oss-python-sdk.git
      cd aliyun-oss-python-sdk
      # oss2をインストールします。
      python setup.pyインストール 

手順1: 自己管理型SQL Serverインスタンスのすべてのデータベースのバックアップ

重要
  • データの整合性のため、完全バックアップ中はこれらのデータベースへのデータ書き込みを停止することをお勧めします。

  • バックアップスクリプトを使用して完全バックアップを実行しない場合、生成されるバックアップファイルの名前は、Testdb_FULL_20180518153544.bakなどのDatabase name_Backup type_Backup time.bakの形式に従う必要があります。 名前が別の形式の場合、バックアップは失敗します。

  1. バックアップスクリプトファイルをダウンロードします。

  2. Microsoft SQL Server Management Studio (SSMS) を使用して、バックアップスクリプトファイルをダブルクリックして開きます。 接続にSSMSを使用する方法の詳細については、「公式ドキュメント」をご参照ください。

  3. 次のパラメーターを設定します。

    パラメーター

    説明

    @backup_databases_list

    バックアップするデータベースの名前。 複数のデータベースを指定する場合は, データベース名をセミコロン (;) またはコンマ (,) で区切ります。

    @backup_type

    バックアップの種類。 有効な値:

    • FULL: 完全バックアップ

    • DIFF: 増分バックアップ

    • LOG: ログバックアップ

    重要

    この例では、値はFULLである必要があります。

    @backup_folder

    自己管理データベースのバックアップファイルを格納するために使用されるディレクトリ。 指定されたディレクトリが存在しない場合、システムは自動的にディレクトリを作成します。

    @is_run

    バックアップまたはチェックを実行するかどうかを指定します。 有効な値:

    • 1: バックアップを実行します。

    • 0: チェックを実行します。

    例:

    SELECT
        /**
        * バックアップに必要なデータベースリスト、区切り文字は: または、
        * 空 ('') またはnull: システムデータベースを除くすべてのデータベースを意味します
        * 例: '[testdb]: TestDR, Test, readonly'
        **/
        @ backup_databases_list = N'[dtstestdata],[testdb]'
        @ backup_type = N'FULL, -- バックアップタイプ? FULL: フルバックアップ; DIFF: 差分バックアップ; ログ: ログバックアップ
        @ backup_folder = N'C:\BACKUP' -- バックアップファイルを保存するためのバックアップフォルダ。
        @ is_run = 1 -- チェックまたは実行? 1、直接実行; 0、ちょうどチェック 
  4. バックアップスクリプトを実行して、指定したデータベースをバックアップし、バックアップファイルを指定したディレクトリに保存します。

    备份脚本执行结果

手順2: バックアップファイルをOSSバケットにアップロードする

重要

OSSバケットが作成されている場合は、バケットが次の要件を満たしているかどうかを確認します。

  • OSSバケットのストレージクラスはStandardです。 ストレージクラスは、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブにすることはできません。 詳細については、「概要」をご参照ください。

  • OSSバケットのデータ暗号化は有効になっていません。 詳細については、「データ暗号化」をご参照ください。

  1. OSSバケットを作成します。

    1. OSSコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、[バケットの作成] をクリックします。

    3. 次のパラメーターを設定します。 他のパラメーターのデフォルト値を保持します。

      重要
      • 作成されたOSSバケットはデータ移行にのみ使用され、データ移行が完了すると使用されなくなります。 キーパラメーターのみを設定する必要があります。 データのリークや過剰なコストを防ぐために、できるだけ早い機会にデータ移行が完了した後にOSSバケットを削除することを推奨します。

      • OSSバケットの作成時にデータ暗号化を有効にしないでください。 詳細については、「データ暗号化」をご参照ください。

      パラメーター

      説明

      バケット名

      OSS バケットの名前。 名前はグローバルに一意であり、設定後に変更することはできません。

      命名規則:

      • 名前には、小文字、数字、およびハイフン (-) を使用できます。

      • 先頭と末尾は小文字または数字である必要があります。

      • 名前の長さは 3 ~ 63 文字である必要があります。

      migratetest

      リージョン

      OSS バケットの名前です。 内部ネットワークを介してElastic Compute Service (ECS) インスタンスからOSSバケットにデータをアップロードし、内部ネットワークを介してRDSインスタンスにデータを復元する場合は、OSSバケット、ECSインスタンス、およびRDSインスタンスが同じリージョンにあることを確認してください。

      中国 (杭州)

      ストレージクラス

      バケットのストレージクラス。 [標準] を選択します。 このトピックで説明するクラウド移行操作は、他のストレージクラスのバケットでは実行できません。

      標準

  2. バックアップファイルをOSSバケットにアップロードします。

    説明

    RDSインスタンスとOSSバケットが同じリージョンにある場合、内部ネットワークを介して相互に通信できます。 内部ネットワークを使用してバックアップデータをアップロードできます。 この方法は高速で、インターネットトラフィックの料金は発生しません。 ターゲットRDSインスタンスと同じリージョンにあるOSSバケットにバックアップファイルをアップロードすることを推奨します。

    自己管理型SQL Serverインスタンスの完全バックアップが完了したら、次のいずれかの方法を使用して、生成された完全バックアップファイルをOSSバケットにアップロードする必要があります。

    方法1: ossbrowserツールを使用する (推奨)

    1. ossbrowserのダウンロード。 詳細については、「ossbrowserへのインストールとログイン」をご参照ください。

    2. ダウンロードしたoss-browser-win32-x64.zipのパッケージを64ビットWindowsオペレーティングシステムで解凍します。 次に、oss-browser.exeをダブルクリックしてプログラムを実行します。 例として、64ビットWindowsオペレーティングシステムを使用します。

    3. [AKログイン] タブで、[AccessKeyId] および [AccessKeySecret] パラメーターを設定し、他のパラメーターのデフォルト値を保持し、[ログイン] をクリックします。登录ossbrowser

      説明

      AccessKeyペアは、Alibaba CloudアカウントのIDを確認し、データセキュリティを確保するために使用されます。 AccessKeyペアの機密を保持することを推奨します。 AccessKeyペアを作成および取得する方法の詳細については、「AccessKeyペアの作成」をご参照ください。

    4. OSSバケットの名前をクリックします。进入bucket中

    5. 上传图标アイコンをクリックしてアップロードするバックアップファイルを選択し、[開く] をクリックしてバックアップファイルをOSSバケットにアップロードします。

    方法 2: OSS コンソールを使用する

    説明

    バックアップファイルのサイズが5 GB未満の場合は、OSSコンソールでバックアップファイルをアップロードすることを推奨します。

    1. OSS コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、バケットポリシーを設定するバケットの名前をクリックします。网页进入bucket

    3. [オブジェクト] ページで、[オブジェクトのアップロード] をクリックします。网页上传文件

    4. バックアップファイルを [アップロードするファイル] セクションにドラッグするか、[ファイルの選択] をクリックしてアップロードするバックアップファイルを選択します。网页扫描文件

    5. ページの下部で、[オブジェクトのアップロード] をクリックして、バックアップファイルをOSSバケットにアップロードします。

    方法3: OSS APIを呼び出す

    説明

    バックアップファイルのサイズが5 GBを超える場合は、OSS APIを呼び出して、マルチパートアップロードを使用してバックアップファイルをOSSバケットにアップロードすることを推奨します。

    この例では、Javaプロジェクトを使用して、環境変数からアクセス資格情報を取得する方法を説明します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。 サンプルコードの詳細については、「マルチパートアップロード」をご参照ください。

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.int ernal.Mimetypesをインポートします。com.aliyun.oss.mo delをインポートします。*;
    java.io. ファイルをインポートします。java.io.FileInputStreamをインポートします。java.io.InputStreamをインポートします。java.util.ArrayListをインポートします。java.util.Listをインポートします。public classデモ {
    
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。 例: examplebucket. 
            String bucketName = "examplebucket";
            // オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。 
            文字列objectName = "exampledir/exampleobject.txt";
            // アップロードするローカルファイルのパスを指定します。 
            String filePath = "D :\\ localpath\\examplefile.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
            try {
                // InitiateMultipartUploadRequestオブジェクトを作成します。 
                InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
    
                // 次のコードは、マルチパートアップロードタスクを開始するときにリクエストヘッダーを指定する方法の例を示しています。 
                 ObjectMetadata metadata = new ObjectMetadata();
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
                // オブジェクトのwebページのキャッシュ動作を指定します。 
                // metadata.setCacheControl("no-cache");
                // オブジェクトのダウンロード時にオブジェクトの名前を指定します。 
                // metadata.setContentDisposition("attachment;filename=oss_MultipartUpload.txt");
                // オブジェクトのコンテンツのエンコード形式を指定します。 
                // metadata.setContentEncoding(OSSConstants.DEFAULT_CHARSET_NAME);
                // マルチパートアップロードタスクの開始時に、既存のオブジェクトが同じ名前のオブジェクトで上書きされるかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、アップロードするオブジェクトと同じ名前の既存のオブジェクトが上書きされないことを示します。 
                // metadata.setHeader("x-oss-forbid-overwrite", "true");
                // アップロードするオブジェクトの各部分の暗号化に使用するサーバー側の暗号化方法を指定します。 
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
                // オブジェクトの暗号化に使用されるアルゴリズムを指定します。 このパラメーターを設定しない場合、オブジェクトはAES-256を使用して暗号化されます。 
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_DATA_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
                // key Management Service (KMS) が管理するカスタマーマスターキー (CMK) のIDを指定します。 
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID、"9468da86-3509-4f8d-a61e-6eab1eac ****");
                // オブジェクトのストレージクラスを指定します。 
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS、StorageClass.Standard);
                // オブジェクトのタグを指定します。 オブジェクトに対して一度に複数のタグを指定できます。 
                // metadata.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
                // request.setObjectMetadata (メタデータ);
    
                // オブジェクトタイプに基づいてContentTypeを指定します。 このパラメーターを指定しない場合、ContentTypeフィールドのデフォルト値はapplication/oct-srreamです。 
                if (metadata.getContentType() == null) {
                    metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
                }
    
                // マルチパートアップロードタスクを開始します。 
                InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
                // アップロードIDを取得します。 
                String uploadId = upresult.getUploadId();
                // マルチパートアップロードタスクをキャンセルするか、アップロードIDに基づいてアップロードされたパーツをリストします。 
                // アップロードIDに基づいてマルチパートアップロードタスクをキャンセルする場合は、InitiateMultipartUpload操作を呼び出してマルチパートアップロードタスクを開始した後にアップロードIDを取得します。  
                // アップロードIDに基づいてマルチパートアップロードタスクでアップロードされたパーツを一覧表示する場合は、InitiateMultipartUpload操作を呼び出してマルチパートアップロードタスクを開始した後、CompleteMultipartUpload操作を呼び出してマルチパートアップロードタスクを完了する前に、アップロードIDを取得します。 
                // System.out.println(uploadId);
    
                // partETags is a set of PartETags. PartETagは、アップロードされたパーツのパーツ番号とETagで構成されます。 
                List<PartETag> partETags =  new ArrayList<PartETag>();
                // 各パーツのサイズを指定します。 部品サイズは、オブジェクトの部品数を計算するために使用されます。 単位:バイト 
                final long partSize = 1*1024 * 1024L; // パーツサイズを1 MBに設定します。 
    
                // アップロードされたデータのサイズに基づいて部品数を計算します。 次のコードでは、ローカルファイルを例として使用して、file. length() メソッドを使用してアップロードされたデータのサイズを取得する方法を示します。 
                final File sampleFile=新しいファイル (filePath);
                long fileLength = sampleFile.length();
                int partCount = (int) (fileLength / partSize);
                if (fileLength % partSize != 0) {
                    partCount++;
                }
                // すべての部品をアップロードします。 
                for (int i = 0; i <recordCount; 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〜10,000の範囲の部品番号を有する。 指定した数値が範囲内にない場合、OSSはInvalidArgumentエラーコードを返します。 
                    uploadPartRequest.setPartNumber( i + 1);
                    // 部品は順番にアップロードされません。 パーツは、さまざまなOSSクライアントからアップロードできます。 OSSは、部品番号に基づいて部品をソートし、部品を結合して完全なオブジェクトを取得します。 
                    UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                    // 部品がアップロードされると、PartETagを含む結果が返されます。 The PartETag is stored in partETags. 
                    partETags.add(uploadPartResult.getPartETag());
                }
    
    
                // CompleteMultipartUploadRequestオブジェクトを作成します。 
                // CompleteMultipartUpload操作を呼び出すときは、すべての有効なPartETagsを指定する必要があります。 OSSがpartETagsを受信すると、OSSはすべてのパーツを1つずつ検証します。 すべての部品が検証された後、OSSはこれらの部品を完全なオブジェクトに結合します。 
                CompleteMultipartUploadRequest completeMultipartUploadRequest =
                        new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);
    
                // マルチパートアップロードタスクが完了したときにオブジェクトのアクセス制御リスト (ACL) を設定する方法の例を次のコードに示します。 
                // completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.Private);
                // 現在のアップロードIDを使用してアップロードされたすべてのパーツを一覧表示するかどうかを指定します。 OSS SDK For Java 3.14.0以降の場合、CompleteMultipartUploadRequestのpartETagsをnullに設定できるのは、OSSサーバーにアップロードされたすべてのパーツをリストして、パーツを完全なオブジェクトに結合する場合のみです。 
                // Map<String, String> headers = new HashMap<String, String>();
                // リクエストでx-oss-complete-allをyesに設定した場合、現在のアップロードIDを使用してアップロードされたすべてのパーツが一覧表示され、パーツ番号でパーツが並べ替えられ、CompleteMultipartUpload操作が実行されます。 
                // リクエストでx-oss-complete-allをyesに設定した場合、リクエスト本文は指定できません。 リクエスト本文を指定すると、エラーが報告されます。 
                // headers.put("x-oss-complete-all","yes");
                // completeMultipartUploadRequest.setHeaders(headers);
    
                // マルチパートアップロードタスクを完了します。 
                CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
                System.out.println(completeMultipartUploadResult.getETag());
            } catch (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

ステップ3: 移行スクリプトを実行して移行タスクを完了する

  1. 移行スクリプトパッケージをダウンロードします。

  2. 移行スクリプトパッケージを解凍し、次のコマンドを実行して、指定する必要があるパラメーターを表示します。

    python ~ /ダウンロード /RDSSQLCreateMigrateTasksBatchly.py -h

    同様の結果が返されます。

    RDSSQLCreateMigrateTasksBatchly.py -k <access_key_id> -s <access_key_secret> -i <rds_instance_id> -e <oss_endpoint> -b <oss_bucket> -d <ディレクトリ>
    表 1 パラメーターの説明

    パラメーター

    説明

    access_key_id

    RDSインスタンスが属するAlibaba CloudアカウントのAccessKey ID。

    access_key_secret

    RDSインスタンスが属するAlibaba CloudアカウントのAccessKeyシークレット。

    rds_instance_id

    RDS インスタンスの ID

    oss_endpoint

    バックアップファイルを格納するOSSバケットのエンドポイント。 エンドポイントの取得方法の詳細については、「バケットの概要」をご参照ください。

    oss_bucket

    バックアップファイルを格納するOSSバケットの名前。

    directory

    OSSバケット内のバックアップファイルを保存するフォルダー。 バックアップファイルがルートフォルダに保存されている場合は、スラッシュ (/) を入力します。

  3. 移行スクリプトを実行して、移行タスクを完了します。

    移行スクリプトを実行して、指定された条件を満たすすべてのバックアップファイルを、testdatabucketという名前のOSSバケットのMigrationdataフォルダーから、IDがrm-2zesz5774ud8s **** のRDSインスタンスに移行できます。

    python ~ /ダウンロード /RDSSQLCreateMigrateTasksBatchly.py -k LTAIQ **** -s BMkIUhroub *********-i rm-2zesz5774ud8s **** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
  4. 移行タスクの進行状況を表示します。

    1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
    2. RDSインスタンスのSQL Serverバージョンに基づいて、次の手順を実行します。

      RDS SQL Server 2008 R2

      表示されるページの左側のナビゲーションウィンドウで、[クラウドへのデータベース移行] をクリックします。 送信したすべての移行タスクを表示できます。

      説明

      ページの右上隅にある [更新] をクリックすると、移行タスクの最新のステータスが表示されます。

      SQL Server 2012以降

      表示されるページの左側のナビゲーションウィンドウで、バックアップと復元 をクリックします。 次に、バックアップデータのアップロード履歴 タブをクリックします。

      説明

      デフォルトでは、過去7日間の移行レコードが表示されます。 時間範囲を指定して、指定した時間範囲の移行タスクを表示できます。

(共通エラーコード 29~31 など)

エラーメッセージ

原因

解決策

HTTPステータス: 404エラー: InvalidAccessKeyId。NotFound指定されたアクセスキーが見つかりません。 RequestID: XXXXXXXXXXXXXXX

API操作の呼び出しに使用されるAccessKey IDが無効です。

有効なAccessKey IDとAccessKey secretを使用します。 詳細については、「AccessKeyペアに関するFAQ」をご参照ください。

HTTPステータス: 400エラー: IncompleteSignatureリクエスト署名がAliyun標準に準拠していません。 署名するサーバー文字列は次のとおりです。...

API操作の呼び出しに使用されるAccessKeyシークレットが無効です。

RDSエンジンはサポートしていません。これはRDS SQL Serverエンジンのみです。

データを移行するRDSインスタンスは、SQL Serverを実行しません。

SQL Serverを実行するRDSインスタンスを使用します。

[XXX] を指定できませんでした。

RDSインスタンスのIDが存在しません。

RDSインスタンスのIDが有効かどうかを確認します。 RDSインスタンスのIDが無効な場合は、有効なインスタンスIDを入力します。

{'status': -2、'request-id': ''、'details': " RequestError: またはHTTPConnectionPool(host='xxxxxxxxxxxxxxx' 、port=80): urlで最大再試行を超えました: /?bucketInfo= (NewConnectionError('<urllib3.connection. TPConnection) によって発生しました) "" Errnno8 "接続なし" "または" 、Erno8"

OSSバケットへの接続に使用されるエンドポイントが無効です。

OSSバケットへの接続に使用されるエンドポイントが有効かどうかを確認します。 エンドポイントが無効な場合は、有効なエンドポイントを入力します。 エンドポイントの取得方法の詳細については、「バケットの概要」をご参照ください。

{'status': 404,'-id': 'xxxxxxxxx', 'details': {'HostId': 'xxxxxxxxx', 'Message': 'The specified bucket does not exist.', 'Code': 'NoSuchBucket', 'RequestId': 'xxxxxx', 'Bucketaas ': 's'-ec-test}}}

OSSバケットは存在しません。

入力されたOSSバケットの名前が有効かどうかを確認します。 入力した名前が無効な場合は、有効な名前を入力します。

[xxxxxxxxx] フォルダーのOSSバケット [xxxxxx] にはバックアップファイルがありません。

必要なフォルダーがOSSバケットに存在しないか、指定された条件を満たすバックアップファイルがフォルダーに含まれていません。

OSSバケットにフォルダーが存在するかどうか、および指定された条件を満たすバックアップファイルがフォルダーに含まれているかどうかを確認します。 フォルダーがOSSバケットに存在せず、指定された条件を満たすバックアップファイルがフォルダーに含まれていない場合は、OSSバケットにフォルダーを作成し、指定された条件を満たすバックアップファイルをインポートします。

警告!!!!! 、[autotest_2005_ent_broken_full_dbcc_failed.bak] はバックアップファイルではありません。

バックアップファイルの名前が命名規則を満たしていません。

バックアップスクリプトを使用して完全バックアップを実行しない場合、生成されるバックアップファイルの名前は、Testdb_FULL_20180518153544.bakなどのDatabase name_Backup type_Backup time.bakの形式に従う必要があります。

HTTPステータス: 403エラー: Forbidden.RAMユーザーが指定されたリソースを操作する権限がないか、この操作が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': 'xx'}}

RAMユーザーに必要な権限がありません。

AliyunOSSFullAccessおよびAliyunRDSFullAccessポリシーをRAMユーザーにアタッチします。 RAMユーザーを権限付与する方法の詳細については、「RAMユーザーの権限付与」をご参照ください。

OPENAPIレスポンスエラー!!!!! : HTTPステータス: <Httpステータスコード> エラー: <エラー> <説明> 。 RequestID: 32BB6886-775E-4BB7-A054-635664 ****

API操作が呼び出されるとエラーが発生します。

[エラーコード] に記載されているエラー情報に基づいて、特定のエラー原因を分析します。

表 2. エラーコード

HTTPステータスコード

エラー

説明

説明

403

InvalidDBName

The specified database name is not allowed.

指定されたデータベース名が無効な場合に返されるエラーメッセージ。 たとえば、データベースの名前がシステムデータベースの名前と同じである場合、データベースの名前は無効です。

403

IncorrectDBInstanceState

Current DB instance state does not support this operation.

RDSインスタンスが必要な状態でない場合に返されるエラーメッセージ。 たとえば、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.

RDSインスタンスが操作をサポートしていないロック状態にある場合に返されるエラーメッセージ。

400

InvalidDBName.NotFound

Specified one or more DB name does not exist or DB status does not support.

指定されたデータベースが見つからない場合に返されるエラーメッセージ。

  • SQL Server 2008 R2: データ移行前にRDSインスタンスにデータベースを作成します。 自己管理インスタンスからデータを移行する各データベースに、RDSインスタンス上に同じ名前の対応データベースがあることを確認します。

  • SQL Server 2012以降: 自己管理インスタンスからデータを移行する各データベースに、RDSインスタンス上に同じ名前の対応データベースがないことを確認します。

400

IncorrectDBType

Current DB type does not support this operation.

RDSインスタンスで実行されるデータベースエンジンで操作がサポートされていない場合に返されるエラーメッセージ。

400

IncorrectDBState

Current DB state does not support this operation.

データベースが作成中であるか、別の移行タスクからデータを受信している場合に返されるエラーメッセージ。

400

UploadLimitExceeded

UploadTimesQuotaExceeded: Exceeding the daily upload times of this DB.

1日に1つのデータベースで実行されたデータ移行タスクの数が20を超えた場合に返されるエラーメッセージ。

400

ConcurrentTaskExceeded

Concurrent task exceeding the allowed amount.

1つのデータベースでその日に実行されたデータ移行タスクの数が500を超えた場合に返されるエラーメッセージ。

400

IncorrectFileExtension

The file extension does not support.

バックアップファイルのファイル名拡張子が無効な場合に返されるエラーメッセージ。

400

InvalidOssUrl

Specified oss url is not valid.

OSSバケットからバックアップファイルをダウンロードするために指定されたURLが無効な場合に返されるエラーメッセージ。

400

BakFileSizeExceeded

Exceeding the allowed bak file size.

バックアップファイルの合計サイズが3テラバイトを超えた場合に返されるエラーメッセージ。

400

FileSizeExceeded

Exceeding the allowed file size of DB instance.

バックアップファイルから復元されたデータのサイズがRDSインスタンスの使用可能なストレージを超えている場合に返されるエラーメッセージ。

関連する API 操作

API 操作

説明

CreateMigrateTask

データ移行タスクを作成します。

CreateOnlineDatabaseTask

バックアップデータの移行先のデータベースをApsaraDB RDS for SQL Serverインスタンスで開きます。

DescribeMigrateTasks

ApsaraDB RDS for SQL Serverインスタンスのバックアップデータを移行するために作成されたタスクを照会します。

DescribeOssDownloads

ApsaraDB RDS for SQL Serverインスタンスのバックアップデータ移行タスクのバックアップファイルの詳細を照会します。