【決定版】SQL Server 2008におけるコピーのみのバックアップ:種類、用途、作成方法からオプション、注意事項まで徹底解説

2024-07-03

SQL Serverにおけるコピーのみのバックアップオプションとは?

SQL Serverのコピーのみのバックアップは、通常のバックアップとは異なり、通常のバックアップスケジュールとは独立して実行される特殊なバックアップです。通常のバックアップでは、データベースファイルが更新され、その後のバックアップの復元方法に影響します。一方、コピーのみのバックアップは、データベースファイルの静的なコピーを作成するため、その後のバックアップ操作に影響を与えません。

種類

コピーのみのバックアップには、主に以下の2種類があります。

  • コピーのみの完全バックアップ: データベースの完全なコピーを作成します。すべての復旧モデルで使用できます。ただし、差分ベースまたは差分バックアップとして使用することはできません。
  • コピーのみのログバックアップ: トランザクションログの完全なコピーを作成します。完全復旧モデルと一括ログ復旧モデルのみで使用できます。

用途

コピーのみのバックアップは、以下の様な用途で利用されます。

  • 災害復旧: データベースのオフサイトコピーを作成して、災害発生時に備えることができます。
  • テストと開発: テストや開発環境でデータベースの復元を行う際に、本番環境のバックアップに影響を与えずに行うことができます。
  • 監査: 特定の時点におけるデータベースの状態を記録するために使用できます。

作成方法

  • Transact-SQL (T-SQL): BACKUPデータベースコマンドを使用して、COPY_ONLYオプションを指定できます。
  • SQL Server Management Studio (SSMS): SSMSを使用して、グラフィカルインターフェースでコピーのみのバックアップを作成できます。

オプション

コピーのみのバックアップを作成する際には、以下のオプションを指定できます。

  • 場所: バックアップファイルの保存場所を指定します。
  • 圧縮: バックアップファイルを圧縮して、ストレージスペースを節約できます。
  • 暗号化: バックアップファイルを暗号化して、セキュリティを強化できます。

注意事項

  • コピーのみのバックアップは、差分ベースまたは差分バックアップとして使用することはできません。
  • コピーのみの完全バックアップを復元するには、最新のトランザクションログバックアップも必要です。
  • コピーのみのバックアップは、定期的なバックアップスケジュールの一部としてではなく、必要に応じてのみ作成する必要があります。

    補足

    • SQL Server 2008でも、上記のコピーのみのバックアップオプションを利用できます。
    • 本記事は、あくまで概要説明であり、詳細については公式ドキュメントを参照することを推奨します。



    SQL Server 2008におけるコピーのみのバックアップサンプルコード

    BACKUP DATABASE MyDatabase
    TO DISK = 'C:\MyBackup\MyDatabase_Full.bak'
    WITH NOFORMAT,
    MEDIANAME = 'MyDatabase_Full',
    STATS = 10
    COPY_ONLY;
    

    このコードの説明:

    • BACKUP DATABASE MyDatabase: バックアップ対象のデータベースを指定します。
    • TO DISK = 'C:\MyBackup\MyDatabase_Full.bak': バックアップファイルの保存場所を指定します。
    • WITH NOFORMAT: フォーマット指定なしでバックアップを作成します。
    • MEDIANAME = 'MyDatabase_Full': メディアセットの名前を指定します。
    • STATS = 10: バックアップ統計情報の更新間隔を10ページごとに設定します。
    • COPY_ONLY: コピーのみのバックアップを作成します。

    SSMS を使用したコピーのみの完全バックアップ

    1. SSMSでデータベースを右クリックし、「タスク」>「バックアップ」を選択します。
    2. 「バックアップ設定」ページで、「バックアップの種類」を「完全」に、「コピーのみのバックアップ」チェックボックスをオンにします。
    3. その他のオプションを設定して、「OK」をクリックします。
    • 上記のコードはあくまで一例であり、必要に応じてオプションを変更する必要があります。
    • バックアップ操作を実行する前に、必ず十分な権限を持っていることを確認してください。



    SQL Server 2008でコピーのみのバックアップを作成するその他の方法

    Windows Server バックアップツールを使用して、SQL Server 2008 データベースのコピーのみのバックアップを作成することもできます。この方法は、SQL Server の専門知識がなくても、簡単にバックアップを作成できるという利点があります。

    手順:

    1. Windows Server バックアップツールを開きます。
    2. 「バックアップまたは復元」をクリックして、「バックアップ」を選択します。
    3. 「バックアップする項目を選択」ページで、「追加」をクリックして、バックアップ対象のデータベースを選択します。
    4. 「バックアップオプション」ページで、「バックアップの種類」を「コピーのみ」に設定します。

    VSS を使用する

    Volume Shadow Copy Service (VSS)を使用して、SQL Server 2008 データベースのコピーのみのバックアップを作成することもできます。VSSは、Windows オペレーティングシステムに組み込まれた機能で、アプリケーションを停止せずに一貫したボリュームのバックアップを作成することができます。

    1. コマンドプロンプトを開きます。
    2. 以下のコマンドを実行します。
    wbadmin start backup -backupTarget:C:\MyBackup -volume:E: -vssFull -vssCopyOnly
    
    • wbadmin start backup: WBAdmin コマンドラインツールを使用してバックアップを開始します。
    • -backupTarget:C:\MyBackup: バックアップファイルの保存場所を指定します。
    • -volume:E:: バックアップ対象のボリュームを指定します。
    • -vssFull: VSSを使用して完全なバックアップを作成します。
    • VSS を使用するには、VSS ライターが SQL Server 2008 でインストールされていることを確認する必要があります。
    • VSS バックアップは、SQL Server のネイティブバックアップほど高速ではない場合があります。

    sql-server database sql-server-2008


    SELECT COUNT(1) vs INFORMATION_SCHEMA:テーブルのレコード数を取得する最適な方法は?

    SELECT COUNT(1) FROM table_nameは、指定されたテーブル内のレコード数を取得するSQLクエリです。これは、テーブル全体にあるデータの量を把握したい場合に役立ちます。詳細解説SELECT COUNT(1):COUNT(1)は、テーブル内のレコード数をカウントする関数です。1を指定するのは、カウント対象となる列を明確にするためです。...


    SQLiteクエリで単一引用符をエスケープする方法

    単一引用符は、SQLiteクエリにおいて以下の2つの意味を持ちます。文字列リテラルの開始と終了クエリ内の識別子を囲む例えば、以下のクエリは、name列が'John'という値を持つレコードをすべて選択します。この場合、'John'は単一引用符で囲まれており、文字列リテラルであることを示しています。...


    SQLインポート・エクスポートツールを使ってSQLiteデータベースをエクスポート・インポートする方法

    ここでは、AndroidでSQLiteデータベースを簡単にエクスポート・インポートする方法を2つご紹介します。Room は、Androidでデータベースを扱うためのライブラリです。Roomを使用している場合は、以下の手順でデータベースファイルを直接コピーすることで、簡単にエクスポート・インポートできます。...


    SQL Serverで「Partition Function COUNT() OVER possible using DISTINCT」を活用して個別値を効率的にカウントする方法

    SQL Server 2008以降では、ウィンドウ関数 COUNT() と DISTINCT を組み合わせて、パーティションごとの個別値の個数 をカウントすることができます。これは、分析対象となるデータセットが膨大な場合に特に役立ちます。この機能を活用することで、以下の操作が可能になります。...


    Entity Framework .Remove() と .DeleteObject() のサンプルコード

    Entity Framework における . Remove() と .DeleteObject() は、どちらもエンティティを削除するために使用されるメソッドですが、いくつかの重要な違いがあります。.Remove()DbContext クラスのメソッド...