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

ApsaraDB RDS:完全バックアップのクラウドへの移行

最終更新日:Aug 27, 2026

ApsaraDB RDS for SQL Server は、セルフマネージドの SQL Server データベースを Alibaba Cloud に移行するためのソリューションを提供します。セルフマネージドの SQL Server データベースの完全バックアップデータを Alibaba Cloud Object Storage Service (OSS) にアップロードし、ApsaraDB RDS コンソールから、指定した ApsaraDB RDS for SQL Server データベースに完全バックアップデータをインポートするだけで移行できます。このソリューションは、データバックアップ、データ移行、ディザスタリカバリなどのシナリオに適しています。

前提条件

  • ApsaraDB RDS for SQL Server インスタンスは、次の要件を満たす必要があります:

    • インスタンスの残りのストレージ容量は、移行するデータファイルのサイズよりも大きい必要があります。ストレージ容量が不足している場合は、事前にインスタンスのストレージをアップグレードしてください。

    • インスタンスが SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2 を実行している場合は、移行するデータベースと同じ名前のデータベースがインスタンスに存在しないことを確認してください。

    • インスタンスが高性能ローカルディスクを使用する SQL Server 2008 R2 を実行している場合は、移行するデータベースと同じ名前のデータベースがインスタンスに作成されていることを確認してください。

  • RAM ユーザーとしてログインする場合は、次の要件を満たす必要があります:

    • RAM ユーザーには、AliyunOSSFullAccess と AliyunRDSFullAccess の権限が付与されている必要があります。RAM ユーザーに権限を付与する方法の詳細については、RAM を使用した OSS 権限の管理およびRAM を使用した ApsaraDB RDS 権限の管理をご参照ください。

    • ご使用の Alibaba Cloud アカウント (メインアカウント) で、ApsaraDB RDS 公式サービスアカウントによる OSS リソースへのアクセス権限付与が完了している必要があります。

      クリックして権限付与方法を表示

      1. ApsaraDB RDS インスタンスの 復元 ページに移動し、OSS バックアップデータをクラウド上で復元する をクリックします。

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

        ページ左下に You have authorized the ApsaraDB RDS official service account to access your OSS resources が表示されている場合、権限付与は完了しています。表示されていない場合、権限付与は完了していません。この場合、ページ上の 権限付与アドレス をクリックして権限を付与します。

        image

    • Alibaba Cloud アカウント (メインアカウント) で、手動で権限ポリシーを作成し、そのポリシーを RAM ユーザーにアタッチする必要があります。

      クリックしてポリシーの内容を表示

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

注意事項

  • 移行範囲:このソリューションは、単一データベース (データベースレベル) の移行のみをサポートします。複数のデータベースまたはすべてのデータベースを移行するには、インスタンスレベルの移行ソリューションを使用してください。

  • バージョンの互換性:セルフマネージドの SQL Server 環境で作成されたバックアップファイルは、下位バージョンの ApsaraDB RDS for SQL Server インスタンスには移行できません。

  • 権限管理:ApsaraDB RDS サービスアカウントに OSS へのアクセス権限を付与すると、システムは RAM に AliyunRDSImportRole という名前のロールを作成します。このロールは変更または削除しないでください。変更または削除した場合、移行タスクは失敗します。誤ってロールを変更または削除した場合は、データ移行ウィザードで再度権限を付与してください。

  • アカウント管理:移行完了後、元のデータベースのアカウントは使用できなくなります。ApsaraDB RDS コンソールでアカウントを再度作成してください。

  • OSS ファイルの保持:移行タスクが完了するまで、OSS からバックアップファイルを削除しないでください。削除した場合、タスクは失敗します。

  • バックアップファイルの要件

    • ファイル名:ファイル名に !@#$%^&*()_+-= などの特殊文字を含めることはできません。含まれている場合、移行は失敗します。

    • 拡張子:ApsaraDB RDS は、.bak (完全バックアップ)、.diff (差分バックアップ)、および .trn または .log (ログバックアップ) ファイルを認識できます。

    • ファイルタイプ:ただし、この移行方法でアップロードできるのは完全バックアップファイルのみです。差分バックアップファイルとログバックアップファイルはサポートされていません。

    • ファイルのソース:ソースデータが、以前にダウンロードした ApsaraDB RDS for SQL Server の完全バックアップファイル (デフォルトでは .zip 形式) である場合、データをクラウドに移行する前に .bak ファイルに解凍してください。

課金

このソリューションでは、OSS 関連の料金のみが発生します。詳細については、以下をご参照ください。

image

シナリオ

課金

自己管理データベースのバックアップファイルを OSS にアップロード

無料です。

バックアップファイルを OSS に保存

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

バックアップファイルを OSS から ApsaraDB RDS に移行

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

  • インターネット経由でバックアップファイルを ApsaraDB RDS に移行する場合、OSS アウトバウンドトラフィック料金が発生します。課金の詳細については、「OSS 料金」をご参照ください。

準備

セルフマネージドデータベース環境で DBCC CHECKDB ステートメントを実行し、データベースに 割り当てエラー または 一貫性エラー が含まれていないことを確認します。データベースが正常な状態であれば、次の結果が返されます:

...
CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

1. 自己管理型データベースのバックアップ

ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいて、ソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

説明

自己管理型データベースの完全バックアップを作成する前に、データの書き込みが停止していることを確認してください。バックアップ処理中に書き込まれたデータは、バックアップファイルに含まれません。

  1. 次のコマンドを実行して、ソースデータベースの現在の復旧モデルを確認します。

    SELECT
        name AS DatabaseName,
        recovery_model_desc AS RecoveryModel,
        state_desc AS State
    FROM sys.databases
    ORDER BY name;

    ApsaraDB RDS への移行用に本番バックアップを作成する前に、データベースの復旧モデルを FULL に変更します。

    ALTER DATABASE [db_simple] SET RECOVERY FULL WITH NO_WAIT;
  2. バックアップ スクリプトをダウンロードし、SQL Server Management Studio (SSMS) でバックアップ スクリプトを開きます。

  3. スクリプトで、YOU HAVE TO INIT PUBLIC VARIABLES HERE の下にある SELECT 文の次のパラメーターを変更します。

    パラメーター

    説明

    @backup_databases_list

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

    @backup_type

    バックアップタイプ。有効な値は次のとおりです。

    • FULL:完全バックアップ。

    • DIFF:差分バックアップ。

    • LOG:ログ バックアップ。

    @backup_folder

    バックアップファイルを保存するローカルディレクトリ。ディレクトリが存在しない場合は、自動的に作成されます。

    @is_run

    バックアップを実行するかどうかを指定します。有効な値は次のとおりです。

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

    • 0:チェックのみを実行し、バックアップは実行しません。

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

高性能ローカルディスクを使用する SQL Server 2008 R2

  1. Microsoft SQL Server Management Studio (SSMS) を開きます。

  2. 移行するデータベースにログインします。

  3. 次のコマンドを実行して、ソースデータベースの現在の復旧モデルを確認します。

    USE master;
    GO
    SELECT name, CASE recovery_model
    WHEN 1 THEN 'FULL'
    WHEN 2 THEN 'BULK_LOGGED'
    WHEN 3 THEN 'SIMPLE' END model FROM sys.databases
    WHERE name NOT IN ('master','tempdb','model','msdb');
    GO
    • クエリ結果の model 値が FULL ではない場合、ステップ 4 を実行します。

    • クエリ結果の model 値が FULL の場合、ステップ 5 を実行します。

  4. 次のコマンドを実行して、ソースデータベースの復旧モデルを FULL に設定します。

    ALTER DATABASE [dbname] SET RECOVERY FULL;
    GO
    ALTER DATABASE [dbname] SET AUTO_CLOSE OFF;
    GO
    重要

    復旧モデルを FULL に設定すると、より多くの SQL Server ログが生成されます。 十分なディスク領域があることを確認してください。

  5. 次のコマンドを実行して、ソースデータベースをバックアップします。

    この例では、dbtest データベースを backup.bak ファイルにバックアップします。

    USE master;
    GO
    BACKUP DATABASE [dbtest] to disk ='d:\backup\backup.bak' WITH COMPRESSION,INIT;
    GO
  6. 次のコマンドを実行して、バックアップファイルの整合性を検証します。

    USE master
     GO
     RESTORE FILELISTONLY 
       FROM DISK = N'D:\backup\backup.bak';
    重要
    • 結果セットが返された場合、バックアップファイルは有効です。

    • エラーが報告された場合は、再度バックアップを実行してください。

  7. 任意:次のコマンドを実行して、データベースの復旧モデルを元に戻します。

    重要

    データベースの復旧モデルがすでに FULL の場合、このステップをスキップします。

    ALTER DATABASE [dbname] SET RECOVERY SIMPLE;
    GO

2. バックアップファイルの OSS へのアップロード

お使いの ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいてソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

  1. バックアップファイルを OSS にアップロードする前に、OSS にバケットを作成する必要があります。

    • OSS にバケットが既に存在する場合、そのバケットが次の要件を満たしていることを確認してください:

      • バケットのストレージクラス標準ストレージです。低頻度アクセス、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスはサポートされていません。

      • バケットでサーバー側の暗号化が有効になっていないこと。

    • OSS にバケットが存在しない場合は、まずバケットを作成します。 (OSS がアクティベートされていることを確認してください)

      1. OSS コンソールにログインし、バケット をクリックし、次に バケットの作成 をクリックします。

      2. 次の主要なパラメーターを設定し、他のパラメーターはデフォルト値のままにします。

        重要
        • このバケットは、今回のデータ移行でのみ使用されため、主要なパラメーターを設定するだけで済みます。データ漏洩や追加料金の発生を防ぐため、移行完了後は速やかにバケットを削除してください。

        • バケットを作成する際は、サーバー側の暗号化を有効にしないでください。

        パラメーター

        説明

        [バケット名]

        バケットの名前。名前はグローバルに一意である必要があり、バケット作成後は変更できません。

        命名規則:

        • 名前には、小文字、数字、ハイフン (-) のみを含めることができます。

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

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

        migratetest

        [リージョン]

        バケットが存在するリージョン。ECS インスタンスから内部ネットワーク経由でバケットにデータをアップロードし、内部ネットワーク経由で ApsaraDB RDS インスタンスにデータを復元する場合、ECS インスタンス、バケット、ApsaraDB RDS インスタンスが同じリージョンに存在することを確認してください。

        中国 (杭州)

        [ストレージタイプ]

        標準ストレージ を選択します。このトピックで説明する移行操作は、他のストレージクラスのバケットをサポートしていません。

        Standard

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

    自己管理型データベースのバックアップが完了したら、ApsaraDB RDS インスタンスと同じリージョンにある OSS バケットにバックアップファイルをアップロードします。バケットと ApsaraDB RDS インスタンスが同じリージョンにある場合、内部ネットワーク経由で通信できます。この場合、インターネットトラフィック料金は発生せず、データはより高速にアップロードされます。次のいずれかの方法を使用できます:

    ossbrowser を使用したファイルのアップロード (推奨)

    1. ossbrowser をダウンロードします。

    2. この例では、Windows x64 を使用します。ダウンロードした oss-browser-win32-x64.zip パッケージを解凍し、oss-browser.exe アプリケーションをダブルクリックします。

    3. ログイン方法として アクセスキー を選択し、Access Key ID および Access Key Secret パラメーターを設定し、その他のパラメーターはデフォルト値のままにして、ログイン をクリックします。

      説明

      AccessKey は、データセキュリティを確保するための ID 認証に使用されます。AccessKey は機密情報として扱ってください。

      Log on to ossbrowser

    4. 宛先のバケットをクリックして、バケットに移動します。Open the bucket

    5. Upload icon をクリックし、アップロードするバックアップファイルを選択して、[開く] をクリックします。ローカルファイルが OSS にアップロードされます。

    OSS コンソールを使用したファイルのアップロード

    説明

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

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

    2. バケット をクリックし、次に宛先バケットの名前をクリックします。Open the bucket in the console

    3. ファイルリスト で、Upload File をクリックします。Upload a file in the console

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

    5. ページの下部にあるUpload Fileをクリックします。ローカルバックアップファイルは OSS にアップロードされます。

    OSS API を使用したファイルのアップロード (Python 3 プロジェクトの例)

    説明

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

    # -*- coding: utf-8 -*-
    """
    Alibaba Cloud OSS Python SDK v2
    依存関係: pip install alibabacloud-oss-v2
    """
    
    import os
    import sys
    from pathlib import Path
    import alibabacloud_oss_v2 as oss
    from alibabacloud_oss_v2 import exceptions as oss_ex
    
    
    def get_client_from_env(region: str, endpoint: str | None = None) -> oss.Client:
        """
        環境変数から v2 クライアントを作成します。
        - リージョンの使用を優先しますが (推奨)、カスタムエンドポイントもサポートします (任意)。
        - AK と STS の両方と互換性があります:
            * AK: OSS_ACCESS_KEY_ID / OSS_ACCESS_KEY_SECRET が必要です
            * STS: OSS_SESSION_TOKEN も必要です (古い変数 OSS_SECURITY_TOKEN と互換性あり)
        """
        # 互換性:ユーザーが古い変数 OSS_SECURITY_TOKEN を使用する場合、v2 が期待する OSS_SESSION_TOKEN にマッピングします
        sec_token_legacy = os.getenv("OSS_SECURITY_TOKEN")
        if sec_token_legacy and not os.getenv("OSS_SESSION_TOKEN"):
            os.environ["OSS_SESSION_TOKEN"] = sec_token_legacy
    
        ak = os.getenv("OSS_ACCESS_KEY_ID")
        sk = os.getenv("OSS_ACCESS_KEY_SECRET")
        st = os.getenv("OSS_SESSION_TOKEN")  # STS トークン (任意)
    
        if not (ak and sk):
            raise ValueError("No valid AK found. Set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables. "
                             "If using STS, also set OSS_SESSION_TOKEN (or the old name OSS_SECURITY_TOKEN).")
    
        # 使用する認証情報のタイプを示します
        if st:
            print("STS Token (OSS_SESSION_TOKEN) detected. Using STS credentials.")
        else:
            print("No STS Token detected. Using AccessKey (AK) credentials.")
    
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 基本的なネットワーク設定
        cfg.region = region  # 例:'cn-hangzhou'
        if endpoint:
            # 任意:カスタムエンドポイント (例:内部ネットワーク、アクセラレーション、専用ドメイン)
            cfg.endpoint = endpoint
    
        # ここに他の設定を追加することもできます。例:cfg.use_accelerate_endpoint = True
        return oss.Client(cfg)
    
    
    def resumable_upload_file_v2(
        client: oss.Client,
        bucket_name: str,
        object_key: str,
        file_path: str,
        part_size: int = 1 * 1024 * 1024,
        parallel_num: int = 4,
        checkpoint_dir: str | None = None,
    ):
        """
        レジュームアップロードを伴う並列マルチパートアップロードを実装します。
    
        :param client: 初期化済みの oss.Client
        :param bucket_name: 宛先バケット名
        :param object_key: 宛先オブジェクトキー (バケット名なし)
        :param file_path: ローカルファイルのフルパス
        :param part_size: パートサイズ (バイト単位)、デフォルトは 1 MB
        :param parallel_num: 同時アップロードスレッド数、デフォルトは 4
        :param checkpoint_dir: チェックポイント情報を保存するディレクトリ。None の場合、レジュームアップロードは無効になります
        """
        file_path = str(file_path)
        if not Path(file_path).exists():
            raise FileNotFoundError(f"Error: Local file not found. Check the file_path configuration: {file_path}")
    
        # Uploader を構築します。checkpoint_dir が指定されているかどうかに基づいてレジュームアップロードを有効にします
        if checkpoint_dir:
            uploader = client.uploader(
                enable_checkpoint=True,
                checkpoint_dir=checkpoint_dir,
                part_size=part_size,
                parallel_num=parallel_num,
            )
        else:
            uploader = client.uploader(
                part_size=part_size,
                parallel_num=parallel_num,
            )
    
        print(f"ファイルのアップロードを開始します: {file_path}")
        print(f"宛先バケット: {bucket_name}")
        print(f"宛先オブジェクト: {object_key}")
        print(f"パートサイズ: {part_size} バイト, 同時実行数: {parallel_num}")
        if checkpoint_dir:
            print(f"レジュームアップロード: 有効 (checkpoint_dir={checkpoint_dir})")
        else:
            print("レジュームアップロード: 無効 (有効にするには checkpoint_dir を設定してください)")
    
        # アップロードを実行します (Uploader はサイズに基づいてマルチ/シングルパートの並列アップロードを自動的に選択します)
        result = uploader.upload_file(
            oss.PutObjectRequest(bucket=bucket_name, key=object_key),
            filepath=file_path,
        )
    
        print("-" * 30)
        print("ファイルは正常にアップロードされました!")
        print(f"HTTP ステータス: {result.status_code}")
        print(f"ETag: {result.etag}")
        print(f"リクエスト ID: {result.request_id}")
        # CRC-64 チェックサム。v2 はデフォルトでデータ検証を有効にします
        print(f"CRC64: {result.hash_crc64}")
        print("-" * 30)
    
    
    def main():
        # コード例を実行する前に、対応する環境変数が設定されていることを確認してください。
        # macOS/Linux:
        #   AK 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_AK_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_AK_SECRET
        #   STS 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_STS_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_STS_SECRET
        #     export OSS_SECURITY_TOKEN=YOUR_STS_TOKEN
        #
        # Windows:
        #   Powershell: $env:OSS_ACCESS_KEY_ID="YOUR_AK_ID"
        #   cmd: set OSS_ACCESS_KEY_ID=YOUR_AK_ID
    
        # ===================== パラメーター (必要に応じて変更) =====================
        # リージョンの例:'cn-hangzhou'。リージョンの使用を推奨します
        region = "cn-hangzhou"
    
        # 任意:カスタムエンドポイント (内部ネットワーク、専用ドメイン、アクセラレーションドメイン名など)
        # 例:'https://oss-cn-hangzhou.aliyuncs.com'
        endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    
        # バケットとオブジェクト
        bucket_name = "examplebucket"
        object_key = "test.bak"
    
        # アップロードするローカルファイルのフルパス。
        # Windows の例:r'D:\localpath\examplefile.txt' (先頭の r に注意)
        # macOS/Linux の例:'/Users/test/examplefile.txt'
        file_path = r"D:\oss\test.bak"
    
        # パートサイズと同時実行数
        part_size = 1 * 1024 * 1024  # デフォルトは 1 MB。OSS は最小パートサイズとして 100 KB を要求します
        parallel_num = 4
    
        # レジュームアップロードディレクトリ (None を渡すと無効になります。書き込み可能なディレクトリを指定することを推奨します)
        checkpoint_dir = str(Path.cwd() / ".oss_checkpoints")
        # =================== パラメーターの終わり ===================
    
        print("スクリプトの実行を開始します...")
        try:
            client = get_client_from_env(region=region, endpoint=endpoint)
            # レジュームアップロードが有効な場合、ディレクトリが存在することを確認します
            if checkpoint_dir:
                Path(checkpoint_dir).mkdir(parents=True, exist_ok=True)
    
            resumable_upload_file_v2(
                client=client,
                bucket_name=bucket_name,
                object_key=object_key,
                file_path=file_path,
                part_size=part_size,
                parallel_num=parallel_num,
                checkpoint_dir=checkpoint_dir,
            )
        except FileNotFoundError as e:
            print(e)
        except oss_ex.ServiceError as e:
            # OSS サーバーから返されたエラー
            print("\nOSS サーバー側でエラーが発生しました。")
            print(f"HTTP ステータス: {getattr(e, 'status_code', 'N/A')}")
            print(f"エラーコード: {getattr(e, 'code', 'N/A')}")
            print(f"メッセージ: {getattr(e, 'message', 'N/A')}")
            print(f"リクエスト ID: {getattr(e, 'request_id', 'N/A')}")
            print(f"エンドポイント: {getattr(e, 'request_target', 'N/A')}")
        except oss_ex.BaseError as e:
            # SDK クライアント側のエラー
            print("\nOSS SDK クライアント側でエラーが発生しました。")
            print(str(e))
        except Exception as e:
            print(f"\n不明なエラーが発生しました: {e}")
    
    
    if __name__ == "__main__":
        main()

高性能ローカルディスクを使用する SQL Server 2008 R2

  1. バックアップファイルを OSS にアップロードする前に、OSS にバケットを作成する必要があります。

    • OSS にバケットが既に存在する場合、そのバケットが次の要件を満たしていることを確認してください:

      • バケットのストレージクラス標準ストレージです。低頻度アクセス、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスはサポートされていません。

      • バケットでサーバー側の暗号化が有効になっていないこと。

    • OSS にバケットが存在しない場合は、まずバケットを作成します。 (OSS がアクティベートされていることを確認してください)

      1. OSS コンソールにログインし、バケット をクリックし、次に バケットの作成 をクリックします。

      2. 次の主要なパラメーターを設定し、他のパラメーターはデフォルト値のままにします。

        重要
        • このバケットは、今回のデータ移行でのみ使用されため、主要なパラメーターを設定するだけで済みます。データ漏洩や追加料金の発生を防ぐため、移行完了後は速やかにバケットを削除してください。

        • バケットを作成する際は、サーバー側の暗号化を有効にしないでください。

        パラメーター

        説明

        [バケット名]

        バケットの名前。名前はグローバルに一意である必要があり、バケット作成後は変更できません。

        命名規則:

        • 名前には、小文字、数字、ハイフン (-) のみを含めることができます。

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

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

        migratetest

        [リージョン]

        バケットが存在するリージョン。ECS インスタンスから内部ネットワーク経由でバケットにデータをアップロードし、内部ネットワーク経由で ApsaraDB RDS インスタンスにデータを復元する場合、ECS インスタンス、バケット、ApsaraDB RDS インスタンスが同じリージョンに存在することを確認してください。

        中国 (杭州)

        [ストレージタイプ]

        標準ストレージ を選択します。このトピックで説明する移行操作は、他のストレージクラスのバケットをサポートしていません。

        Standard

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

    自己管理型データベースのバックアップが完了したら、ApsaraDB RDS インスタンスと同じリージョンにある OSS バケットにバックアップファイルをアップロードします。バケットと ApsaraDB RDS インスタンスが同じリージョンにある場合、内部ネットワーク経由で通信できます。この場合、インターネットトラフィック料金は発生せず、データはより高速にアップロードされます。次のいずれかの方法を使用できます:

    ossbrowser を使用したファイルのアップロード (推奨)

    1. ossbrowser をダウンロードします。

    2. この例では、Windows x64 を使用します。ダウンロードした oss-browser-win32-x64.zip パッケージを解凍し、oss-browser.exe アプリケーションをダブルクリックします。

    3. ログイン方法として アクセスキー を選択し、Access Key ID および Access Key Secret パラメーターを設定し、その他のパラメーターはデフォルト値のままにして、ログイン をクリックします。

      説明

      AccessKey は、データセキュリティを確保するための ID 認証に使用されます。AccessKey は機密情報として扱ってください。

      Log on to ossbrowser

    4. 宛先のバケットをクリックして、バケットに移動します。Open the bucket

    5. Upload icon をクリックし、アップロードするバックアップファイルを選択して、[開く] をクリックします。ローカルファイルが OSS にアップロードされます。

    OSS コンソールを使用したファイルのアップロード

    説明

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

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

    2. バケット をクリックし、次に宛先バケットの名前をクリックします。Open the bucket in the console

    3. ファイルリスト で、Upload File をクリックします。Upload a file in the console

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

    5. ページの下部にあるUpload Fileをクリックします。ローカルバックアップファイルは OSS にアップロードされます。

    OSS API を使用したファイルのアップロード (Python 3 プロジェクトの例)

    説明

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

    # -*- coding: utf-8 -*-
    """
    Alibaba Cloud OSS Python SDK v2
    依存関係: pip install alibabacloud-oss-v2
    """
    
    import os
    import sys
    from pathlib import Path
    import alibabacloud_oss_v2 as oss
    from alibabacloud_oss_v2 import exceptions as oss_ex
    
    
    def get_client_from_env(region: str, endpoint: str | None = None) -> oss.Client:
        """
        環境変数から v2 クライアントを作成します。
        - リージョンの使用を優先しますが (推奨)、カスタムエンドポイントもサポートします (任意)。
        - AK と STS の両方と互換性があります:
            * AK: OSS_ACCESS_KEY_ID / OSS_ACCESS_KEY_SECRET が必要です
            * STS: OSS_SESSION_TOKEN も必要です (古い変数 OSS_SECURITY_TOKEN と互換性あり)
        """
        # 互換性:ユーザーが古い変数 OSS_SECURITY_TOKEN を使用する場合、v2 が期待する OSS_SESSION_TOKEN にマッピングします
        sec_token_legacy = os.getenv("OSS_SECURITY_TOKEN")
        if sec_token_legacy and not os.getenv("OSS_SESSION_TOKEN"):
            os.environ["OSS_SESSION_TOKEN"] = sec_token_legacy
    
        ak = os.getenv("OSS_ACCESS_KEY_ID")
        sk = os.getenv("OSS_ACCESS_KEY_SECRET")
        st = os.getenv("OSS_SESSION_TOKEN")  # STS トークン (任意)
    
        if not (ak and sk):
            raise ValueError("No valid AK found. Set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables. "
                             "If using STS, also set OSS_SESSION_TOKEN (or the old name OSS_SECURITY_TOKEN).")
    
        # 使用する認証情報のタイプを示します
        if st:
            print("STS Token (OSS_SESSION_TOKEN) detected. Using STS credentials.")
        else:
            print("No STS Token detected. Using AccessKey (AK) credentials.")
    
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 基本的なネットワーク設定
        cfg.region = region  # 例:'cn-hangzhou'
        if endpoint:
            # 任意:カスタムエンドポイント (例:内部ネットワーク、アクセラレーション、専用ドメイン)
            cfg.endpoint = endpoint
    
        # ここに他の設定を追加することもできます。例:cfg.use_accelerate_endpoint = True
        return oss.Client(cfg)
    
    
    def resumable_upload_file_v2(
        client: oss.Client,
        bucket_name: str,
        object_key: str,
        file_path: str,
        part_size: int = 1 * 1024 * 1024,
        parallel_num: int = 4,
        checkpoint_dir: str | None = None,
    ):
        """
        レジュームアップロードを伴う並列マルチパートアップロードを実装します。
    
        :param client: 初期化済みの oss.Client
        :param bucket_name: 宛先バケット名
        :param object_key: 宛先オブジェクトキー (バケット名なし)
        :param file_path: ローカルファイルのフルパス
        :param part_size: パートサイズ (バイト単位)、デフォルトは 1 MB
        :param parallel_num: 同時アップロードスレッド数、デフォルトは 4
        :param checkpoint_dir: チェックポイント情報を保存するディレクトリ。None の場合、レジュームアップロードは無効になります
        """
        file_path = str(file_path)
        if not Path(file_path).exists():
            raise FileNotFoundError(f"Error: Local file not found. Check the file_path configuration: {file_path}")
    
        # Uploader を構築します。checkpoint_dir が指定されているかどうかに基づいてレジュームアップロードを有効にします
        if checkpoint_dir:
            uploader = client.uploader(
                enable_checkpoint=True,
                checkpoint_dir=checkpoint_dir,
                part_size=part_size,
                parallel_num=parallel_num,
            )
        else:
            uploader = client.uploader(
                part_size=part_size,
                parallel_num=parallel_num,
            )
    
        print(f"ファイルのアップロードを開始します: {file_path}")
        print(f"宛先バケット: {bucket_name}")
        print(f"宛先オブジェクト: {object_key}")
        print(f"パートサイズ: {part_size} バイト, 同時実行数: {parallel_num}")
        if checkpoint_dir:
            print(f"レジュームアップロード: 有効 (checkpoint_dir={checkpoint_dir})")
        else:
            print("レジュームアップロード: 無効 (有効にするには checkpoint_dir を設定してください)")
    
        # アップロードを実行します (Uploader はサイズに基づいてマルチ/シングルパートの並列アップロードを自動的に選択します)
        result = uploader.upload_file(
            oss.PutObjectRequest(bucket=bucket_name, key=object_key),
            filepath=file_path,
        )
    
        print("-" * 30)
        print("ファイルは正常にアップロードされました!")
        print(f"HTTP ステータス: {result.status_code}")
        print(f"ETag: {result.etag}")
        print(f"リクエスト ID: {result.request_id}")
        # CRC-64 チェックサム。v2 はデフォルトでデータ検証を有効にします
        print(f"CRC64: {result.hash_crc64}")
        print("-" * 30)
    
    
    def main():
        # コード例を実行する前に、対応する環境変数が設定されていることを確認してください。
        # macOS/Linux:
        #   AK 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_AK_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_AK_SECRET
        #   STS 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_STS_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_STS_SECRET
        #     export OSS_SECURITY_TOKEN=YOUR_STS_TOKEN
        #
        # Windows:
        #   Powershell: $env:OSS_ACCESS_KEY_ID="YOUR_AK_ID"
        #   cmd: set OSS_ACCESS_KEY_ID=YOUR_AK_ID
    
        # ===================== パラメーター (必要に応じて変更) =====================
        # リージョンの例:'cn-hangzhou'。リージョンの使用を推奨します
        region = "cn-hangzhou"
    
        # 任意:カスタムエンドポイント (内部ネットワーク、専用ドメイン、アクセラレーションドメイン名など)
        # 例:'https://oss-cn-hangzhou.aliyuncs.com'
        endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    
        # バケットとオブジェクト
        bucket_name = "examplebucket"
        object_key = "test.bak"
    
        # アップロードするローカルファイルのフルパス。
        # Windows の例:r'D:\localpath\examplefile.txt' (先頭の r に注意)
        # macOS/Linux の例:'/Users/test/examplefile.txt'
        file_path = r"D:\oss\test.bak"
    
        # パートサイズと同時実行数
        part_size = 1 * 1024 * 1024  # デフォルトは 1 MB。OSS は最小パートサイズとして 100 KB を要求します
        parallel_num = 4
    
        # レジュームアップロードディレクトリ (None を渡すと無効になります。書き込み可能なディレクトリを指定することを推奨します)
        checkpoint_dir = str(Path.cwd() / ".oss_checkpoints")
        # =================== パラメーターの終わり ===================
    
        print("スクリプトの実行を開始します...")
        try:
            client = get_client_from_env(region=region, endpoint=endpoint)
            # レジュームアップロードが有効な場合、ディレクトリが存在することを確認します
            if checkpoint_dir:
                Path(checkpoint_dir).mkdir(parents=True, exist_ok=True)
    
            resumable_upload_file_v2(
                client=client,
                bucket_name=bucket_name,
                object_key=object_key,
                file_path=file_path,
                part_size=part_size,
                parallel_num=parallel_num,
                checkpoint_dir=checkpoint_dir,
            )
        except FileNotFoundError as e:
            print(e)
        except oss_ex.ServiceError as e:
            # OSS サーバーから返されたエラー
            print("\nOSS サーバー側でエラーが発生しました。")
            print(f"HTTP ステータス: {getattr(e, 'status_code', 'N/A')}")
            print(f"エラーコード: {getattr(e, 'code', 'N/A')}")
            print(f"メッセージ: {getattr(e, 'message', 'N/A')}")
            print(f"リクエスト ID: {getattr(e, 'request_id', 'N/A')}")
            print(f"エンドポイント: {getattr(e, 'request_target', 'N/A')}")
        except oss_ex.BaseError as e:
            # SDK クライアント側のエラー
            print("\nOSS SDK クライアント側でエラーが発生しました。")
            print(str(e))
        except Exception as e:
            print(f"\n不明なエラーが発生しました: {e}")
    
    
    if __name__ == "__main__":
        main()
  3. バックアップファイルの URL の有効期間を設定し、バックアップファイルの URL を取得します。

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

    2. バケット をクリックし、宛先バケットの名前をクリックします。

    3. 左側のナビゲーションペインで、ファイル管理 > ファイルリスト を選択します。

    4. 移行先データベースのバックアップファイルの「操作」列にある詳細をクリックし、表示されるパネルで[有効期限 (秒)]を 28800 秒 (8 時間) に変更します。

      重要

      バックアップファイルの URL は、バックアップファイルを OSS から ApsaraDB RDS に移行する際に必要です。移行が完了する前に URL の有効期限が切れると、データ移行は失敗します。

    5. オブジェクト URL のコピー をクリックすると、バックアップファイルの URL を取得できます。

      Copy file URL

    6. バックアップファイルの URL を変更します。

      取得した URL は、デフォルトではファイルのパブリック URL です。内部ネットワーク経でデータを移行するには、ファイル URL のエンドポイントを内部エンドポイントに変更します。

      たとえば、バックアップファイルの URL が http://rdstest.oss-cn-shanghai.aliyuncs.com/testmigraterds_20170906143807_FULL.bak?Expires=15141****&OSSAccessKeyId=TMP**** の場合、URL の oss-cn-shanghai.aliyuncs.comoss-cn-shanghai-internal.aliyuncs.com に変更します。

      重要

      内部エンドポイントは、ネットワークタイプとリージョンによって異なります。詳細については、「リージョンとエンドポイント」をご参照ください。

3. OSS バックアップデータの ApsaraDB RDS へのインポート

お使いの ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいてソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

  1. RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
  2. 左側メニューで、復元 を選択します。

  3. ページ上部の OSS バックアップデータをクラウド上で復元する をクリックします。

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

    説明
    • OSS バックアップデータ移行機能を初めて使用する場合、ApsaraDB RDS サービスアカウントに OSS へのアクセス権限を付与する必要があります。権限付与アドレス をクリックし、権限付与を確認してください。そうしないと、権限の問題で OSS バケット ドロップダウンリストが空になります。

    • ページに移行対象のファイルが表示されない場合は、OSS 内のバックアップファイルの拡張子が要件を満たしているか、また、ApsaraDB RDS インスタンスと OSS バケットが同じリージョンにあるかを確認してください (このトピックの「注意事項」で拡張子の要件を確認できます)。

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

    パラメーター

    説明

    [データベース名]

    移行先の ApsaraDB RDS インスタンスで、バックアップデータをインポートするデータベースの名前。名前は SQL Server の公式の命名規則に従う必要があります。

    重要
    • データをクラウドに移行する前に、移行先インスタンスにバックアップファイルから復元するデータベースと同じ名前のデータベースが存在しないこと、および同じ名前のアタッチされていないデータベースファイルが存在しないことを確認してください。どちらも存在しない場合、バックアップセット内の移行先データベース名と同じ名前のデータベースファイルを使用してデータベースを復元できます。

    • 移行先インスタンスに、バックアップファイルから復元するデータベースと同じ名前のデータベースが存在する場合、または同じ名前のアタッチされていないデータベースファイルが存在する場合、移行は失敗します。

    [OSS バケット]

    バックアップファイルが保存されている OSS バケットを選択します。

    [OSS ファイル]

    右側の Search icon アイコンをクリックして、ファイル名プレフィックスでバックアップファイルを検索します。各ファイルのファイル名、ファイルサイズ、更新時刻が表示されます。移行したいバックアップファイルを選択します。

    [クラウド移行計画]

    • [データベースを開く (完全バックアップファイルは 1 件のみ)]:完全移行。このオプションは、1 つの完全バックアップファイルのみを使用して移行するシナリオに適しています。この例では、[データベースを開く (完全バックアップファイルは 1 件のみ)] を選択します。この場合、CreateMigrateTask API の BackupMode = FULL および IsOnlineDB = True になります。

    • [データベースを開かない (差分バックアップまたはログファイルがあります)]:増分移行。このオプションは、完全バックアップファイルとログバックアップファイルまたは差分バックアップファイルを一緒に使用して移行するシナリオに適しています。この場合、CreateMigrateTask API の BackupMode = UPDF および IsOnlineDB = False になります。

    [整合性のチェックメソッド]

    • 非同期 DBCC:システムはデータベースを開くときに DBCC CHECKDB を実行しません。代わりに、データベースを開くタスクが完了した後に非同期で DBCC CHECKDB を実行します。これにより、データベースを開くための時間的オーバーヘッドが削減され (DBCC CHECKDB は大規模なデータベースでは時間がかかります)、サービス停止時間が短縮されます。サービスがダウンタイムの影響を非常に受けやすく、DBCC CHECKDB の結果が不要な場合は、非同期 DBCC を使用してください。この場合、CreateMigrateTask API の CheckDBMode = AsyncExecuteDBCheck になります。

    • 同期 DBCC:非同期 DBCC と比較して、同期 DBCC は DBCC CHECKDB の結果を重視し、自己管理型データベースのデータの整合性エラーを特定したいユーザーに適しています。この場合、データベースを開くのに必要な時間が増加します。この場合、CreateMigrateTask API の CheckDBMode = SyncExecuteDBCheck になります。

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

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

    説明

    データ移行が完了すると、システムは ApsaraDB RDS インスタンスの 自動バックアップポリシー に基づいて、指定されたバックアップ時間にバックアップを開始します。バックアップ時間は手動で変更できます。生成されたバックアップセットには移行されたデータが含まれます。ApsaraDB RDS インスタンスの 復元 ページでバックアップセットを表示できます。

    バックアップ時間に達していないが、できるだけ早くクラウドでバックアップを生成したい場合は、手動バックアップを実行できます。

高性能ローカルディスクを使用する SQL Server 2008 R2

  1. RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
  2. 左側メニューで、データベース管理 をクリックします。

  3. 移行先のデータベースを見つけ、アクション 列の OSSからバックアップファイルを移行します をクリックします。

  4. インポートガイド ダイアログボックスで、メッセージを読み、次へ をクリックします。

  5. OSS アップロードに関するメッセージを読み、次へ をクリックします。

  6. バックアップファイルOSS URL フィールドに、バックアップファイルの OSS URL を入力し、OK をクリックします。

    Enter the OSS URL of the backup file

    説明

    ApsaraDB RDS for SQL Server インスタンスのうち、高性能ローカルディスクを使用する SQL Server 2008 R2 を実行しているものは、完全バックアップファイルを一度にクラウドへ移行するソリューションのみをサポートします。

4. View the backup migration progress

Select a solution based on the version of your ApsaraDB RDS for SQL Server instance.

SQL Server 2012 or later, or SQL Server 2008 R2 with cloud disks

Go to the [復元] page in the left-side navigation pane of the ApsaraDB RDS instance, and then view the backup migration records on the [クラウド上へのデータバックアップの記録] tab. The records include the task status, task start time, and task end time. By default, the records of the last week are displayed. You can change the time range as needed.

image

説明

If [タスクステータス] is [失敗], check [タスクの説明] or click [ファイルの詳細を表示します] next to the destination migration task to identify and fix the cause of the failure, and then perform the data migration again.

SQL Server 2008 R2 with high-performance local disks

Go to the data migration page in the left-side navigation pane of the ApsaraDB RDS instance, and then find the destination migration task to view the progress of the data migration.

説明

If [タスクステータス] is [失敗しました], check [タスクの説明] or click [ファイルの詳細を表示します] next to the destination migration task to identify and fix the cause of the failure, and then perform the data migration again.

一般的なエラー

各バックアップ移行の記録には、タスクの説明が含まれています。タスクの説明から、タスクの失敗やエラーの原因を特定できます。よくあるエラーメッセージは次のとおりです:

  • 同名のデータベースの存在

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

    • 原因:ApsaraDB RDS for SQL Server は、データの安全性を確保するため、既存のデータベースと同じ名前のデータベースへのデータ移行をサポートしていません。

    • 対処方法:既存データベースのデータを上書きする場合は、既存データをバックアップし、データベースを削除してから、データ移行タスクを再度実行してください。

  • 差分バックアップの使用

    • エラーメッセージ:Backup set (xxx.bak) is a Database Differential backup, we only accept a FULL Backup.

    • 原因:指定されたバックアップセットが、完全バックアップではなく差分バックアップです。完全バックアップの一括移行では、完全バックアップのみがサポートされ、差分バックアップはサポートされていません。

  • トランザクションログバックアップの使用

    • エラーメッセージ:Backup set (xxx.trn) is a Transaction Log backup, we only accept a FULL Backup.

    • 原因:指定されたバックアップセットが、完全バックアップではなくトランザクションログバックアップです。完全バックアップの一括移行では、完全バックアップのみがサポートされ、トランザクションログバックアップはサポートされていません。

  • バックアップファイルの検証失敗

    • エラーメッセージ:Failed to verify xxx.bak, backup file was corrupted or newer edition than RDS.

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

    • 対処方法:バックアップファイルが破損している場合は、自己管理環境で別の完全バックアップを作成し、移行タスクを再作成してください。自己管理環境の SQL Server インスタンスのバージョンが ApsaraDB RDS for SQL Server インスタンスのバージョンより新しい場合は、同じバージョンまたはそれ以降のバージョンを実行する ApsaraDB RDS for SQL Server インスタンスを使用してください。

      説明

      既存の ApsaraDB RDS for SQL Server インスタンスをより新しいバージョンにアップグレードする方法については、「Upgrade database version」をご参照ください。

  • DBCC CHECKDB の実行失敗

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

    • 原因:DBCC CHECKDB が失敗しました。これは、自己管理環境のデータベースでエラーが発生していることを示しています。

    • 対処方法:次のコマンドを実行して自己管理環境のデータベースエラーを修正し、データを再度移行してください。

      重要

      このコマンドを使用したエラー修正処理では、データ損失が発生する可能性があります。

      DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
  • ストレージ容量の不足 1

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

    • 原因:ApsaraDB RDS インスタンスのストレージの空き容量が、バックアップファイルの移行に必要な最小ストレージ容量を満たしていません。

    • 対処方法:インスタンスのストレージ容量をアップグレードしてください。

  • ストレージ容量の不足 2

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

    • 原因:ApsaraDB RDS インスタンスのストレージの空き容量がバックアップファイルのサイズより小さく、最小ストレージ容量要件を満たしていません。

    • 対処方法:インスタンスのストレージ容量をアップグレードしてください。

  • ログインアカウントの権限不足

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

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

    • 対処方法:ApsaraDB RDS インスタンスの アカウント管理 ページで、アカウントにデータベースへのアクセス権限または管理権限を付与してください。詳細については、「Modify the permissions of an account」および「Account permissions in an ApsaraDB RDS for SQL Server instance」をご参照ください。

  • 特権アカウントの不在

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

    • 原因:ApsaraDB RDS インスタンスに特権アカウントが存在しません。移行タスクは、移行後のデータベースに対して権限を付与すべきアカウントを判別できません。ただし、バックアップファイルは移行先インスタンスに復元されます。そのため、タスクステータスは Success になります。

    • 対処方法:特権アカウントを作成してください。

  • RAM ユーザーの操作権限不足

    • Q1:データ移行タスクの作成手順のステップ 5 を実行する際、すべてのパラメーターを設定しましたが、OK ボタンがグレーアウトしてクリックできません。どうすればよいですか?

    • A1:RAM ユーザーとしてログインしており、アカウントの権限が不足しているため、ボタンをクリックできない可能性があります。このトピックの 前提条件 を確認し、必要な権限が付与されていることを確認してください。

    • Q2:RAM ユーザーで AliyunRDSImportRole に権限を付与しようとすると、permission denied メッセージが表示されます。どうすればよいですか?

    • A2:Alibaba Cloud のメインアカウントを使用して、RAM ユーザーに AliyunRAMFullAccess 権限を一時的に付与してください。

  • SQL Server システムデータベース名と同一のデータベース名

    • エラーメッセージ:The database (xxx) is mssql system db, change your database name and try again.

    • 原因:指定したデータベース名が、master、msdb、tempdb、model などの SQL Server システムデータベースの名前と同じです。

    • 対処方法:別のデータベース名を指定してください。

  • RDS インスタンスのシステムデータベース名と同一のデータベース名

    • エラーメッセージ:The database (xxx) is RDS system db, change your database name and try again.

    • 原因:指定したデータベース名が、rdscore などの ApsaraDB RDS for SQL Server インスタンスの管理データベースの名前と同じです。

    • 対処方法:別のデータベース名を指定してください。

  • データベース数の上限超過

    • エラーメッセージ:The database (xxx) migration failed due to databases count limitation: xxx.

    • 原因:データベース数が上限を超えています。

    • 対処方法:インスタンス上のデータベース数を減らしてから、再試行してください。

  • OSS ダウンロード URL の問題

    • エラーメッセージ 1:Failed to download backup (xxx) since OSS URL was expired.

    • エラーメッセージ 2:Failed to download since could not find backup file (xxx) on OSS.

    • 原因:OSS のダウンロード URL の有効期限が切れている、ApsaraDB RDS のサービスアカウントに権限が付与されていない、RAM ユーザーの権限が不足している、またはファイルが存在しません。

    • 対処方法:OSS にファイルが存在するか、権限が正しく付与されているか、権限が有効であるかを確認し、再試行してください。

  • ストライプバックアップの問題

    • エラーメッセージ:Failed to verify (xxx.bak), error message:The media set has xxx media families but only 1 are provided. All members must be provided. VERIFY DATABASE is terminating abnormally.

    • 原因:ソースデータベースのバックアップ作成時にストライプバックアップ機能が使用されています。この場合、完全バックアップは複数の .bak ファイルに分割されますが、OSS から ApsaraDB RDS へデータを移行する際に 1 つのファイルしか指定されていません。ApsaraDB RDS では、複数ファイルを一度に使用した移行はサポートされていません。

    • 対処方法:ソースデータベースを 1 つの .bak ファイルにバックアップしてから、再試行してください。

一般的な返信メッセージ

タスクタイプ

タスクステータス

タスクの説明

説明

完全バックアップファイルの 1 回限りの移行

Success

成功

移行に成功しました。

失敗

OSS URL の有効期限が切れていたため、バックアップファイルのダウンロードに失敗しました。

OSS ダウンロード URL の有効期間が切れたため、移行に失敗しました。

バックアップが破損しているか、RDS よりも新しいため、検証に失敗しました。

バックアップファイルが破損しているか、RDS バージョンよりも新しいバージョンで作成されているため、移行に失敗しました。

DBCC checkdb failed

DBCC CHECKDB 操作が失敗したため、移行に失敗しました。

autotest_2008r2_std_testmigrate_log.trn はトランザクションログバックアップです。完全バックアップのみを受け付けます。

トランザクションログバックアップファイルが使用されたため、移行に失敗しました。

autotest_2008r2_std_testmigrate_diff.bak はデータベース差分バックアップです。フルバックアップのみを受け付けます。

差分バックアップファイルが使用されたため、移行に失敗しました。

関連 API オペレーション

API

説明

CreateMigrateTask

OSS から ApsaraDB RDS for SQL Server インスタンスにバックアップファイルを復元し、バックアップデータ移行タスクを作成します。

CreateOnlineDatabaseTask

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

DescribeMigrateTasks

ApsaraDB RDS for SQL Server インスタンスのバックアップデータ移行タスクの一覧を照会します。

DescribeOssDownloads

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