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

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

最終更新日:Dec 06, 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バケットにアクセスすることで承認されます。

      [展開してサービスアカウントを認証する方法を表示する]

      1. RDSインスタンスの詳細ページの左側のナビゲーションウィンドウで、[バックアップと復元] をクリックします。 表示されるページで、[OSSバックアップデータのRDSへの移行] をクリックします。

      2. [インポートガイド] ページで、最初の2つの手順については、[次へ] をクリックして3に進みます。 データのインポート手順。

        ページの左下隅にOSSへのアクセスを許可したRDS公式サービスアカウントが表示されている場合、サービスアカウントはOSSバケットへのアクセスを許可されています。 それ以外の場合は、[権限付与] をクリックしてサービスアカウントを権限付与します。

        image

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

      展開してカスタムポリシーを表示

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

制限事項

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

課金

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

image

シナリオ

課金ルール

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依存パッケージをインストールします。

    方法1: pipコマンドを実行する

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

    方法2: ソースコードを使用する

    # Clone the API repository.
    git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git
    # Install the SDK core repository of Alibaba Cloud.
    cd aliyun-python-sdk-core
    python setup.py install
    # Install the ApsaraDB RDS SDK.
    cd aliyun-python-sdk-rds
    python setup.py install
    # Clone the OSS SDK.
    git clone https://github.com/aliyun/aliyun-oss-python-sdk.git
    cd aliyun-oss-python-sdk
    # Install oss2.
    python setup.py install

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

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

  • バックアップスクリプトを使用して完全バックアップを実行しない場合、生成されるバックアップファイルの名前は、Testdb_FULL_20180518153544.bakなどのDatabase name_Backup type_Backup time.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バケットが作成されている場合は、バケットが次の要件を満たしているかどうかを確認します。

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

    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 {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // Specify the name of the bucket. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the full path of the object. Example: exampledir/exampleobject.txt. Do not include the bucket name in the full path of the object. 
            String objectName = "exampledir/exampleobject.txt";
            // Specify the full path of the local file that you want to upload. 
            String filePath = "D:\\localpath\\examplefile.txt";
            // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
            String region = "cn-hangzhou";
    
            // Create an OSSClient instance. 
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
            
            try {
                // Create an InitiateMultipartUploadRequest object. 
                InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
    
                // The following sample code provides an example on how to specify the request headers when you initiate a multipart upload task: 
                 ObjectMetadata metadata = new ObjectMetadata();
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
                // Specify the caching behavior of the web page for the object. 
                // metadata.setCacheControl("no-cache");
                // Specify the name of the downloaded object. 
                // metadata.setContentDisposition("attachment;filename=oss_MultipartUpload.txt");
                // Specify the content encoding format of the object. 
                // metadata.setContentEncoding(OSSConstants.DEFAULT_CHARSET_NAME);
                // Specify whether existing objects are overwritten by objects that have the same names when the multipart upload task is initiated. In this example, this parameter is set to true, which indicates that existing objects cannot be overwritten by objects with the same names. 
                // metadata.setHeader("x-oss-forbid-overwrite", "true");
                // Specify the server-side encryption method that you want to use to encrypt each part of the object that you want to upload. 
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
                // Specify the algorithm that you want to use to encrypt the object. If you do not specify this parameter, the object is encrypted by using AES-256. 
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_DATA_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
                // Specify the ID of the customer master key (CMK) that is managed by Key Management Service (KMS). 
                // metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID, "9468da86-3509-4f8d-a61e-6eab1eac****");
                // Specify the storage class of the object. 
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);
                // Specify one or more tags for the object. 
                // metadata.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
                // request.setObjectMetadata(metadata);
    
                // Specify ContentType based on the object type. If you do not specify this parameter, the default value of ContentType is used, which is application/oct-srream. 
                if (metadata.getContentType() == null) {
                    metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
                }
    
                // Initiate the multipart upload task. 
                InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
                // Obtain the upload ID. 
                String uploadId = upresult.getUploadId();
                // Cancel the multipart upload task or list uploaded parts based on the upload ID. 
                // If you want to cancel a multipart upload task based on the upload ID, obtain the upload ID after you call the InitiateMultipartUpload operation to initiate the multipart upload task.  
                // If you want to list the uploaded parts in a multipart upload task based on the upload ID, obtain the upload ID after you call the InitiateMultipartUpload operation to initiate the multipart upload task but before you call the CompleteMultipartUpload operation to complete the multipart upload task. 
                // System.out.println(uploadId);
    
                // partETags is a set of PartETags. A PartETag consists of the part number and ETag of an uploaded part. 
                List<PartETag> partETags =  new ArrayList<PartETag>();
                // Specify the size of each part, which is used to calculate the number of parts of the object. Unit: bytes. 
                final long partSize = 1 * 1024 * 1024L;   // Set the part size to 1 MB. 
    
                // Calculate the number of parts based on the size of the uploaded data. In the following sample code, a local file is used as an example to describe how to use the File.length() method to obtain the size of the uploaded data. 
                final File sampleFile = new File(filePath);
                long fileLength = sampleFile.length();
                int partCount = (int) (fileLength / partSize);
                if (fileLength % partSize != 0) {
                    partCount++;
                }
                // Upload all parts. 
                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);
                    // Specify the input stream of the multipart upload task. 
                    // In the following sample code, a local file is used as an example to describe how to create a FIleInputstream and use the InputStream.skip() method to skip the specified data. 
                    InputStream instream = new FileInputStream(sampleFile);
                    instream.skip(startPos);
                    uploadPartRequest.setInputStream(instream);
                    // Specify the part size. The size of each part except for the last part must be greater than or equal to 100 KB. 
                    uploadPartRequest.setPartSize(curPartSize);
                    // Specify part numbers. Each part has a part number that ranges from 1 to 10,000. If the part number that you specify does not fall within the specified range, OSS returns the InvalidArgument error code. 
                    uploadPartRequest.setPartNumber( i + 1);
                    // Parts are not necessarily uploaded in order and can be uploaded from different OSS clients. OSS sorts the parts based on the part numbers and combines the parts into a complete object. 
                    UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                    // Each time a part is uploaded, OSS returns a result that contains the PartETag of the part. The PartETag is stored in partETags. 
                    partETags.add(uploadPartResult.getPartETag());
                }
    
    
                // Create a CompleteMultipartUploadRequest object. 
                // When you call the CompleteMultipartUpload operation, you must provide all valid PartETags. After OSS receives the PartETags, OSS verifies all parts one by one. After all parts are verified, OSS combines these parts into a complete object. 
                CompleteMultipartUploadRequest completeMultipartUploadRequest =
                        new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);
    
                // The following sample code provides an example on how to configure the access control list (ACL) of the object when you initiate a multipart upload task: 
                // completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.Private);
                // Specify whether to list all parts that are uploaded by using the current upload ID. For OSS SDK for Java 3.14.0 and later, you can set PartETags in CompleteMultipartUploadRequest to null only when you list all parts uploaded to the OSS server to combine the parts into a complete object. 
                // Map<String, String> headers = new HashMap<String, String>();
                // If you set x-oss-complete-all to yes in the request, OSS lists all parts that are uploaded by using the current upload ID, sorts the parts by part number, and then performs the CompleteMultipartUpload operation. 
                // If you set x-oss-complete-all to yes in the request, the request body cannot be specified. If you specify the request body, an error is reported. 
                // headers.put("x-oss-complete-all","yes");
                // completeMultipartUploadRequest.setHeaders(headers);
    
                // Complete the multipart upload task. 
                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: 移行スクリプトを実行して移行タスクを完了する

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

  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>

    Parameters

    パラメーター

    説明

    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 ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -k LTAIQ**** -s BMkIUhroub******** -i rm-2zesz5774ud8s**** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
  4. 移行タスクの進行状況を表示します。

    1. ApsaraDB RDSコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、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 "接続なし" "または" 。

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': 'アクセスしたバケットはあなたのものではありません。' 、'Code': 'AccessDenied' 、'RequestId': 'xx'}}}

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

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

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

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

エラーコードHTTPステータスコードエラー説明説明403 InvalidDBName指定されたデータベース名は許可されていません。 指定されたデータベース名が無効な場合に返されるエラーメッセージ。 たとえば、データベースの名前がシステムデータベースの名前と同じである場合、データベースの名前は無効です。 403 IncorrectDBInstanceState現在のDBインスタンスの状態は、この操作をサポートしていません。 RDSインスタンスが必要な状態でない場合に返されるエラーメッセージ。 たとえば、RDSインスタンスは作成中の状態です。 400 IncorrectDBInstanceType現在のDBインスタンスタイプはこの操作をサポートしていません。 RDSインスタンスがSQL Serverを実行していない場合に返されるエラーメッセージ。 400 IncorrectDBInstanceLockMode現在のDBインスタンスロックモードはこの操作をサポートしていません。 RDSインスタンスが操作をサポートしていないロック状態にある場合に返されるエラーメッセージ。 400 InvalidDBName.NotFound指定1つ以上のDB名が存在しないか、DBステータスがサポートされません。 指定されたデータベースが見つからない場合に返されるエラーメッセージ。 SQL Server 2008 R2: データ移行前にRDSインスタンスにデータベースを作成します。 自己管理インスタンスからデータを移行する各データベースに、RDSインスタンス上に同じ名前の対応データベースがあることを確認します。 SQL Server 2012以降: 自己管理インスタンスからデータを移行する各データベースに、RDSインスタンス上に同じ名前の対応データベースがないことを確認します。 400 IncorrectDBType現在のDBタイプはこの操作をサポートしていません。 RDSインスタンスで実行されるデータベースエンジンで操作がサポートされていない場合に返されるエラーメッセージ。 400 IncorrectDBState現在のDB状態はこの操作をサポートしていません。 データベースが作成中であるか、別の移行タスクからデータを受信している場合に返されるエラーメッセージ。 400 UploadLimitExceeded UploadTimesQuotaExceeded: このDBの1日のアップロード時間を超えています。 1日に1つのデータベースで実行されたデータ移行タスクの数が20を超えた場合に返されるエラーメッセージ。 400 ConcurrentTaskExceeded許可された量を超える同時タスク。 1つのデータベースでその日に実行されたデータ移行タスクの数が500を超えた場合に返されるエラーメッセージ。 400ファイル拡張子はサポートしていません。 バックアップファイルのファイル名拡張子が無効な場合に返されるエラーメッセージ。 400 InvalidOssUrl指定されたoss urlは無効です。 OSSバケットからバックアップファイルをダウンロードするために指定されたURLが無効な場合に返されるエラーメッセージ。 400 BakFileSizeExceeded許可されたbakファイルサイズを超える。 バックアップファイルの合計サイズが3テラバイトを超えた場合に返されるエラーメッセージ。 400 FileSizeExceeded DBインスタンスの許容ファイルサイズを超えます。 バックアップファイルから復元されたデータのサイズがRDSインスタンスの使用可能なストレージを超えている場合に返されるエラーメッセージ。.

エラーコード

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インスタンスのバックアップデータ移行タスクのバックアップファイルの詳細を照会します。