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

ApsaraDB RDS:自己管理の SQL Server インスタンスの完全バックアップデータを、SQL Server 2008 R2(クラウドディスク搭載)または SQL Server 2012 以降を実行する ApsaraDB RDS インスタンスに移行する

最終更新日:Feb 15, 2025

ApsaraDB RDS for SQL Server インスタンスを使用すると、データをクラウドに簡単に移行できます。自己管理の SQL Server インスタンスにあるソースデータベースの完全バックアップデータを Object Storage Service (OSS) バケットにアップロードし、ApsaraDB RDS コンソールを使用して、ApsaraDB RDS for SQL Server インスタンスのターゲットデータベースに完全バックアップデータを移行するだけです。この機能は、データのバックアップ、移行、ディザスタリカバリなどのシナリオで使用できます。

説明

前提条件

  • RDS インスタンスは、SQL Server 2008 R2(クラウドディスク搭載)または SQL Server 2012 以降を実行しています。RDS インスタンス上のデータベースの名前は、自己管理 SQL Server インスタンスから移行するデータベースの名前とは異なります。RDS インスタンスの作成方法の詳細については、「ApsaraDB RDS for SQL Server インスタンスを作成する」をご参照ください。

    説明

    クラウドディスクを搭載した SQL Server 2008 R2 を実行する ApsaraDB RDS インスタンスは、購入できなくなりました。詳細については、「[EOS/提供終了] クラウドディスクを搭載した SQL Server 2008 R2 を実行する ApsaraDB RDS インスタンスは、2023 年 7 月 14 日から購入できなくなりました」をご参照ください。

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

  • RDS インスタンスに特権アカウントが作成されています。詳細については、「アカウントとデータベースを作成する」をご参照ください。

  • DBCC CHECKDB 文を実行して、自己管理 SQL Server インスタンスで allocation errorsconsistency 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.
  • OSS がアクティブ化されています。詳細については、「OSS をアクティブ化する」をご参照ください。

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

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

    • ApsaraDB RDS のサービスアカウントは、Alibaba Cloud アカウントを使用して OSS バケットにアクセスする権限を与えられています。

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

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

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

        ページの左下隅に [RDS 公式サービスアカウントに OSS へのアクセスを承認しました] と表示されている場合は、サービスアカウントは OSS バケットにアクセスする権限を持っています。そうでない場合は、[承認] をクリックしてサービスアカウントを承認します。

        image

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

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

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

使用上の注意

  • このトピックで説明されている移行方法は、データベース レベルです。一度に 1 つの自己管理データベースの完全バックアップデータのみを RDS インスタンスに移行できます。自己管理 SQL Server インスタンス内の複数のデータベースまたはすべてのデータベースのバックアップデータを一度に移行する場合は、インスタンスレベルの移行方法を使用することをお勧めします。詳細については、「自己管理 SQL Server インスタンスから ApsaraDB RDS for SQL Server インスタンスにデータを移行する」をご参照ください。

  • RDS インスタンスよりも新しいデータベースエンジンバージョンを実行している自己管理 SQL Server インスタンスのバックアップファイルを移行することはできません。たとえば、SQL Server 2016 を実行している自己管理インスタンスのバックアップファイルを、SQL Server 2012 を実行している RDS インスタンスに移行することはできません。

  • ApsaraDB RDS のサービスアカウントに OSS バケットへのアクセスを承認すると、RAM に AliyunRDSImportRole というロールが作成されます。このロールを変更または削除しないでください。このロールを変更または削除すると、OSS バケットからバックアップファイルをダウンロードできなくなります。この場合、移行ウィザードを使用してサービスアカウントを再承認する必要があります。

  • RDS インスタンスは、自己管理 SQL Server インスタンスのアカウントを引き継ぎません。移行が完了したら、ApsaraDB RDS コンソールで RDS インスタンスのアカウントを作成する必要があります。

  • 移行が完了する前に、OSS バケットから完全バックアップファイルを削除しないでください。移行が完了する前に完全バックアップファイルを削除すると、移行は失敗します。

  • インスタンスの完全バックアップデータを移行する場合は、完全バックアップファイルをアップロードします。差分バックアップファイルとログバックアップファイルはサポートされていません。

  • データ移行の失敗を避けるため、完全バックアップファイルの名前に次の特殊文字が含まれていないことを確認してください。! @ # $ % ^ & * ( ) _ + - =

  • バックアップファイルの名前には、接尾辞として bak、diff、trn、または log を付ける必要があります。次のリストは、接尾辞について説明しています。

    • bak: 完全バックアップファイルを示します。

    • diff: 差分バックアップファイルを示します。

    • trn または log: トランザクションのログバックアップファイルを示します。

    説明
    • バックアップファイルが上記の接尾辞を使用していない場合、システムはバックアップファイルのタイプを識別できない可能性があります。これは、後続の操作に影響します。

    • デフォルトでは、RDS インスタンスの完全バックアップファイルは ZIP 形式です。ZIP ファイルをダウンロードした場合は、ZIP ファイルを解凍して、bak という接尾辞が付いた完全バックアップファイルを取得する必要があります。その後、完全バックアップファイルを使用して、データを RDS インスタンスに移行できます。

課金

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

シナリオ

課金ルール

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

無料。

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

ストレージ料金が発生します。詳細については、OSS の料金ページをご覧ください。

OSS バケットから RDS インスタンスにバックアップファイルを移行する

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

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

ステップ 1: 自己管理インスタンスのソースデータベースをバックアップする

説明

完全バックアップを実行する前に、自己管理インスタンスのソースデータベースへのすべてのデータ書き込みを停止する必要があります。完全バックアッププロセス中に自己管理データベースに書き込まれたデータはバックアップできません。

  1. バックアップスクリプト をダウンロードし、SQL Server Management Studio (SSMS) を使用してバックアップスクリプトを開きます。

  2. ビジネス要件に基づいてパラメータを変更します。次の表は、バックアップスクリプトのパラメータについて説明しています。

    パラメータ

    説明

    @backup_databases_list

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

    @backup_type

    バックアップタイプ。有効な値:

    • FULL: 完全バックアップ

    • DIFF: 増分バックアップ

    • LOG: ログバックアップ

    @backup_folder

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

    @is_run

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

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

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

    説明

    バックアップスクリプトの YOU HAVE TO INIT PUBLIC VARIABLES HERE セクションの SELECT 文で、上記のパラメータを変更します。

  3. バックアップスクリプトを実行します。

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

重要

OSS バケットが作成されている場合は、バケットが次の要件を満たしていることを確認してください。

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

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

  1. OSS バケットが使用できない場合は、OSS バケットを作成します。

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

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

    3. 次のパラメータを設定します。その他のパラメータについては、デフォルト値を保持します。

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

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

      パラメータ

      説明

      [バケット名]

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

      命名規則:

      • 名前に使用できるのは、小文字、数字、ハイフン (-) のみです。

      • 小文字または数字で開始および終了する必要があります。

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

      migratetest

      [リージョン]

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

      中国 (杭州)

      [ストレージタイプ]

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

      標準

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

    自己管理 SQL Server インスタンスの完全バックアップが完了したら、次のいずれかの方法を使用して、生成された完全バックアップファイルを OSS バケットにアップロードする必要があります。OSS バケットと RDS インスタンスは同じリージョン に存在する必要があります。こうすることで、バックアップファイルは RDS インスタンスからバケットに内部ネットワーク経由でアップロードされるため、高速でインターネットトラフィック料金も発生しません。

    方法 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.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    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 {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            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。完全なパスにバケット名を含めないでください。
            String objectName = "exampledir/exampleobject.txt";
            // アップロードするローカルファイルの完全なパスを指定します。
            String filePath = "D:\\localpath\\examplefile.txt";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 オブジェクトを作成し、Content-Type パラメータを指定します。
                ObjectMetadata metadata = new ObjectMetadata();
                if (metadata.getContentType() == null) {
                    metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
                }
                System.out.println("Content-Type: " + metadata.getContentType());
    
                // メタデータをアップロードリクエストにバインドします。
                request.setObjectMetadata(metadata);
    
                // フラグメントアップロードタスクを初期化します。
                InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
                // アップロード ID を取得します。
                String uploadId = upresult.getUploadId();
    
                // 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 ~ 10,000 の範囲のフラグメント番号があります。指定したフラグメント番号が指定した範囲内にない場合、OSS は InvalidArgument エラーコードを返します。
                    uploadPartRequest.setPartNumber(i + 1);
                    // フラグメントは必ずしも順番にアップロードされるわけではなく、異なる OSS クライアントからアップロードできます。OSS は、フラグメント番号に基づいてフラグメントをソートし、フラグメントを結合して完全なオブジェクトを作成します。
                    UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                    // フラグメントがアップロードされると、OSS は PartETag を含む結果を返します。PartETag は partETags に保存されます。
                    partETags.add(uploadPartResult.getPartETag());
    
                    // 入力ストリームを無効にします。
                    instream.close();
                }
    
                // CompleteMultipartUploadRequest オブジェクトを作成します。
                // CompleteMultipartUpload 操作を呼び出すときは、すべての有効な partETag を指定する必要があります。OSS は PartETag を受信した後、すべてのフラグメントを 1 つずつ検証します。すべてのフラグメントが検証されると、OSS はこれらのフラグメントを結合して完全なオブジェクトを作成します。
                CompleteMultipartUploadRequest completeMultipartUploadRequest =
                        new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);
    
                // フラグメントアップロードタスクを完了します。
                CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
                System.out.println("アップロード成功、ETag:" + completeMultipartUploadResult.getETag());
    
            } catch (OSSException oe) {
                System.out.println("OSSException が発生しました。これは、リクエストが 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 ce) {
                System.out.println("ClientException が発生しました。これは、クライアントが OSS と通信しようとしているときに、"
                        + "ネットワークにアクセスできないなど、重大な内部問題が発生したことを意味します。");
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

ステップ 3: 移行タスクを作成する

  1. インスタンス ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[バックアップとリストア] をクリックします。

  3. ページの右上隅にある [OSS バックアップデータを RDS に移行する] をクリックします。

  4. [インポートガイド] ウィザードで、[次へ] を 2 回クリックします。

    説明

    OSS ベースの移行ウィザードを初めて使用する場合は、ApsaraDB RDS のサービスアカウントに OSS バケットへのアクセスを承認する必要があります。この場合、[承認] をクリックして承認を完了する必要があります。そうでない場合、[データのインポート] ステップの [OSS バケット] ドロップダウンリストは空になります。

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

    パラメータ

    説明

    [データベース名]

    RDS インスタンスのターゲットデータベースの名前を入力します。ターゲットデータベースは、自己管理 SQL Server インスタンスのソースデータベースから移行されたデータを保存するために使用されます。ターゲットデータベースの名前は、オープンソース SQL Server の要件を満たしている必要があります。

    重要
    • 移行前に、ターゲット RDS インスタンス上のデータベースの名前が、指定したバックアップファイルを使用してリストアするデータベースの名前と異なることを確認する必要があります。また、指定したバックアップファイルを使用してリストアするデータベースと同じ名前のデータベースファイルが、ターゲット RDS インスタンス上のデータベースに追加されていないことを確認する必要があります。上記の両方の要件が満たされている場合は、バックアップセット内のデータベースファイルを使用してデータベースをリストアできます。データベースファイルの名前は、リストアするデータベースと同じ名前にする必要があることに注意してください。

    • 上記の要件のいずれかが満たされていない場合、移行は失敗します。

    [OSS バケット]

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

    [OSS サブフォルダ名]

    完全バックアップファイルを保存する OSS サブフォルダの名前。

    [OSS ファイル]

    インポートする完全バックアップファイル。検索ボックスにプレフィックスを入力し、放大镜 アイコンをクリックすると、あいまい一致モードで完全バックアップファイルを検索できます。名前にプレフィックスが含まれる各完全バックアップファイルの名前、サイズ、更新時刻が表示されます。クラウドに移行するバックアップファイルを選択します。

    [クラウド移行方法]

    • 即時アクセス (完全バックアップ): 完全バックアップファイルのみを移行する場合は、この移行計画を選択します。この例では、[即時アクセス (完全バックアップ)] を選択します。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。BackupMode = FULL および IsOnlineDB = True

    • アクセス保留中 (増分バックアップ): 完全バックアップファイルとログまたは差分バックアップファイルを移行する場合は、この移行方法を選択します。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。BackupMode = UPDF および IsOnlineDB = False

    [整合性チェックモード]

    • 非同期 DBCC: DBCC CHECKDB 文は、ターゲットデータベースが開かれた後に実行されます。これにより、ターゲットデータベースを開くのに必要な時間が短縮され、アプリケーションのダウンタイムが最小限に抑えられます。ターゲットデータベースが大きい場合、DBCC CHECKDB 文の実行に時間がかかります。アプリケーションがダウンタイムに敏感だが、DBCC CHECKDB 文の結果に鈍感な場合は、この整合性チェックモードを選択することをお勧めします。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。CheckDBMode = AsyncExecuteDBCheck

    • 同期 DBCC: DBCC CHECKDB 文は、ターゲットデータベースが開かれるのと同時に実行されます。DBCC CHECKDB 文の結果に基づいてソースデータベースとターゲットデータベース間の整合性エラーを特定する場合は、この整合性チェックモードを選択することをお勧めします。ただし、ターゲットデータベースを開くのに必要な時間が長くなります。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。CheckDBMode = SyncExecuteDBCheck

  6. [OK] をクリックします。

    移行タスクが完了するまで待ちます。[更新] をクリックすると、移行タスクの最新の状態を表示できます。移行タスクが失敗した場合は、移行タスクの説明に基づいて失敗のトラブルシューティングを行うことができます。詳細については、「一般的なエラー」をご参照ください。

    説明

    移行が完了すると、システムは自動バックアップに指定した時点の RDS インスタンスをバックアップします。自動バックアップの時点は手動で調整できます。詳細については、「ApsaraDB RDS for SQL Server インスタンスをバックアップする」をご参照ください。生成されたバックアップセットには、移行されたデータが含まれています。RDS インスタンスの [バックアップとリストア] ページでバックアップセットを表示できます。

    自動バックアップの時点に達していないが、バックアップファイルが必要な場合は、RDS インスタンスを手動でバックアップできます。詳細については、「ApsaraDB RDS for SQL Server インスタンスをバックアップする」をご参照ください。

ステップ 4: 移行タスクを表示する

移行タスクの詳細を表示するには、[バックアップとリストア] ページに移動し、[バックアップデータのクラウド移行レコード] タブをクリックします。デフォルトでは、このタブには過去 1 週間の移行タスクが表示されます。

一般的なエラー

[バックアップとリストア] ページの [バックアップデータのアップロード履歴] タブにある各移行タスクレコードには、タスクの説明が含まれています。移行タスクが失敗した場合、またはエラーが報告された場合は、タスクの説明に基づいて失敗またはエラーのトラブルシューティングを行うことができます。次の一般的なエラーが発生する可能性があります。

  • RDS インスタンスの既存のデータベースの名前がソースデータベースと同じです。

    • エラーメッセージ 1: The database (xxx) is already exist on RDS, please backup and drop it, then try again.

    • エラーメッセージ 2: Database 'xxx' already exists. Choose a different database name.

    • 原因: RDS インスタンスの既存のデータベースの名前がソースデータベースと同じである場合、移行はサポートされていません。このメカニズムは、データのセキュリティを確保するために設計されています。

    • 解決策: RDS インスタンスの既存のデータベースを上書きする場合は、データベースをバックアップし、RDS インスタンスからデータベースを削除してから、移行タスクを再度作成して実行します。

  • 差分バックアップファイルが使用されています。

    • エラーメッセージ: 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.

    • 原因: 完全バックアップファイルが破損しているか、自己管理インスタンスが RDS インスタンスよりも新しい SQL Server バージョンを実行しています。たとえば、自己管理インスタンスが SQL Server 2016 を実行し、RDS インスタンスが SQL Server 2012 を実行している場合に、このエラーが発生します。

    • 解決策: 完全バックアップファイルが破損している場合は、自己管理 SQL Server インスタンスで完全バックアップを再度実行します。次に、移行タスクを再度作成して実行します。自己管理インスタンスが RDS インスタンスよりも新しい SQL Server バージョンを実行している場合は、自己管理インスタンスと同じバージョンまたはそれ以降のバージョンを実行している別の RDS インスタンスを選択します。

      説明

      既存の RDS for SQL Server インスタンスのメジャーエンジンバージョンをアップグレードするには、「メジャーエンジンバージョンをアップグレードする」をご参照ください。

  • DBCC CHECKDB 文が失敗しました。

    • エラーメッセージ: DBCC checkdb failed.

    • 原因: 自己管理 SQL Server インスタンスで割り当てエラーまたは整合性エラーが発生しています。

    • 解決策: 自己管理 SQL Server インスタンスで次の文を実行してエラーを修正します。次に、移行タスクを再度作成して実行します。

      重要

      この解決策を使用して問題を修正すると、データが失われる可能性があります。

      DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
  • RDS インスタンスの使用可能なストレージ容量が不十分です。

    • エラー 1

      • エラーメッセージ: Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).

      • 原因: RDS インスタンスの使用可能なストレージ容量が、完全バックアップファイルを使用してデータをリストアするために必要な最小ストレージ容量よりも少なくなっています。

      • 解決策: RDS インスタンスのストレージ容量を拡張します。詳細については、「ApsaraDB RDS for SQL Server インスタンスの仕様を変更する」をご参照ください。

    • エラー 2

      • エラーメッセージ: Not Enough Disk Space, space left xxx MB < bak file xxx MB.

      • 原因: RDS インスタンスの使用可能なストレージ容量が、完全バックアップファイルのサイズよりも少なくなっています。

      • 解決策: RDS インスタンスのストレージ容量を拡張します。詳細については、「ApsaraDB RDS for SQL Server インスタンスの仕様を変更する」をご参照ください。

  • ログインアカウントに必要な権限がありません。

    • エラーメッセージ: Cannot open database "xxx" requested by the login. The login failed.

    • 原因: RDS インスタンスにログインするために使用したアカウントに、データベースへのアクセス権がありません。

    • 解決策: RDS インスタンスの [アカウント] ページに移動し、アカウントにデータベースへのアクセス権または管理権限を付与します。詳細については、「アカウントの権限を変更する」および「ApsaraDB RDS for SQL Server インスタンスのアカウント権限」をご参照ください。

  • RDS インスタンスに特権アカウントが作成されていません。

    • エラーメッセージ: Your RDS doesn't have any init account yet, please create one and grant permissions on RDS console to this migrated database (xxx).

    • 原因: RDS インスタンスに特権アカウントが作成されていません。その結果、移行タスクは承認が必要なアカウントを見つけることができません。ただし、完全バックアップファイルは RDS インスタンスにリストアされており、移行タスクは成功しています。

    • 解決策: RDS インスタンスに特権アカウントを作成します。詳細については、「特権アカウントまたは標準アカウントを作成する」をご参照ください。

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

    • エラー 1

      • エラー: ステップ 3: 移行タスクを作成する のサブステップ 5 で説明されているパラメータは正しく設定されていますが、[OK] ボタンは選択不可になっています。

      • 原因: 必要な権限のない RAM ユーザーを使用しています。

      • 解決策: このトピックの「前提条件」セクションを参照して、RAM ユーザーに必要な権限を付与します。

    • エラー 2

      • エラー: RAM ユーザーに AliyunRDSImportRole 権限を付与する権限がないことを示すメッセージが表示されます。

      • 原因: 使用している RAM ユーザーに必要な権限がありません。

      • 解決策: Alibaba Cloud アカウントを使用して、RAM ユーザーに AliyunRAMFullAccess 権限を付与します。詳細については、「RAM を使用して ApsaraDB RDS 権限を管理する」をご参照ください。

関連操作

操作

説明

CreateMigrateTask

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

CreateOnlineDatabaseTask

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

DescribeMigrateTasks

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

DescribeOssDownloads

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