Share via


スケーラブルな共有データベースのデタッチ

時間の経過に伴いレポート データが古くなって役に立たなくなると、そのレポート データベースは古いレポート データベースと呼ばれます。スケーラブルな共有データベースを更新するには、3 つのフェーズから成る更新サイクルを実施することになりますが、その最初のフェーズがデタッチ フェーズです。基本的にデタッチ フェーズでは、古いレポート データベースをデタッチし、レポート サーバーからレポート ボリュームのマウントを解除します。あるサーバー インスタンスからデタッチすると、古いレポート データベースは、そのサーバー インスタンス上でスケーラブルな共有データベースでなくなります。

デタッチ フェーズの手順

このフェーズでは、各レポート サーバーで次の手順を実行します。

  1. 必要に応じて、データベースに対する新しいクエリを無効にし、実行中のクエリは猶予を設けて終了させます。詳細については、このトピックの「古いレポート データベースをデタッチするための準備」を参照してください。

  2. 各サーバー インスタンスからデータベースをデタッチします。

    そのためには、次の Transact-SQL ステートメントを使用します。

    sp_detach_db @dbname='<database_name>'
    
    sp_detach_db @dbname='<database_name>'
    

    <database_name> はデータベースの名前です。

  3. 各レポート サーバー上でレポート ボリュームのセットのマウントを解除します。

    DiskPart ユーティリティを使用してボリュームのマウントを解除するには、コマンド プロンプトで次のコマンドを入力します。

    DiskPart

    DISKPART> select volume=<drive-number>

    DISKPART> remove

    DISKPART> exit

    ここで、<drive-letter> は、レポート ボリュームに割り当てられたドライブ文字です。データベースが複数のレポート ボリュームを使用する場合は、ボリュームごとにこの手順を実行します。

  4. レポート ボリュームに対応する論理ユニット番号 (LUN) をマスクし、レポート サーバーから見えないようにします。そのためには、ハードウェア ベンダーのユーティリティを使用します。データベースが複数のレポート ボリュームを使用する場合は、ボリュームごとにこの手順を実行します。

注意

デタッチ フェーズは、あるレポート ボリュームのセットに対する更新サイクルの最初のフェーズです。しかし、古いバージョンのレポート データベースと新しいバージョンのレポート データベース用に 2 つのレポート ボリュームのセットを交互に使用することもできます。これにより、2 つのボリューム セットのデタッチ フェーズとアタッチ フェーズをオーバーラップさせることが可能になります。詳細については、「スケーラブルな共有データベースの可用性の最大化」を参照してください。

古いレポート データベースをデタッチするための準備

古いバージョンのデータベースを置き換える際には、レポート環境のビジネス要件を考慮することが大切です。現在実行中のクエリを完了させることと、できるだけ迅速に更新を終えることの、どちらのビジネス要件がより重要かを評価する必要があります。

より重要な要件に基づいて、各レポート サーバー上でデタッチ フェーズを管理する方法を決定することができます。

  • クエリを完了させる

    実行中のすべてのクエリを保護するには、たとえば I/O 動作を止めるなどして、デタッチ フェーズの最初でデータベースに対するトランザクションの流れを止めます。次に、各サーバー インスタンス上で、実行中のクエリがすべて完了するのを待ちます。すべてのサーバー インスタンスからデータベースをデタッチしたら、レポート ボリュームをマウント解除できます。

  • できるだけ迅速に更新を行う

    更新を迅速に完了するには、クエリをすぐに停止するか指定した秒数後に停止することにより、各サーバー インスタンス上でデータベースへの排他的なアクセスを獲得します。停止されたクエリは、更新されたバージョンのデータベースをアタッチした後で再開することができます。

    たとえば、残っているすべてのクエリを停止する前に、実行中のクエリに対して 60 秒の猶予を与えるには、次の Transact-SQL ステートメントを使用します。

    USE master;
    ALTER DATABASE AdventureWorks2008R2
    SET SINGLE_USER
    WITH ROLLBACK AFTER 60;
    GO
    
    USE master;
    ALTER DATABASE AdventureWorks2008R2
    SET SINGLE_USER
    WITH ROLLBACK AFTER 60;
    GO
    

    これで各サーバー インスタンスからデータベースをデタッチし、各レポート サーバーからレポート ボリュームのマウントを解除することができます。

詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

この時点で、マウント解除されたレポート ボリュームのセットは、更新サイクルの次のフェーズである構築フェーズまたは更新フェーズに進むことができます。

また、現在マウントされているレポート ボリュームのセットに対するデタッチ フェーズを開始する前に、別のレポート ボリュームのセット上でデータベースを更新することもできます。詳細については、「スケーラブルな共有データベースの可用性の最大化」を参照してください。