スケーラブルな共有データベースのデタッチ
時間の経過に伴いレポート データが古くなって役に立たなくなると、そのレポート データベースは古いレポート データベースと呼ばれます。スケーラブルな共有データベースを更新するには、3 つのフェーズから成る更新サイクルを実施することになりますが、その最初のフェーズがデタッチ フェーズです。基本的にデタッチ フェーズでは、古いレポート データベースをデタッチし、レポート サーバーからレポート ボリュームのマウントを解除します。あるサーバー インスタンスからデタッチすると、古いレポート データベースは、そのサーバー インスタンス上でスケーラブルな共有データベースでなくなります。
デタッチ フェーズの手順
このフェーズでは、各レポート サーバーで次の手順を実行します。
必要に応じて、データベースに対する新しいクエリを無効にし、実行中のクエリは猶予を設けて終了させます。詳細については、このトピックの「古いレポート データベースをデタッチするための準備」を参照してください。
各サーバー インスタンスからデータベースをデタッチします。
そのためには、次の Transact-SQL ステートメントを使用します。
sp_detach_db @dbname='<database_name>'
<database_name> はデータベースの名前です。
各レポート サーバー上でレポート ボリュームのセットのマウントを解除します。
DiskPart ユーティリティを使用してボリュームのマウントを解除するには、コマンド プロンプトで次のコマンドを入力します。
DiskPart
DISKPART> select volume=<drive-number>
DISKPART> remove
DISKPART> exit
ここで、<drive-letter> は、レポート ボリュームに割り当てられたドライブ文字です。データベースが複数のレポート ボリュームを使用する場合は、ボリュームごとにこの手順を実行します。
レポート ボリュームに対応する論理ユニット番号 (LUN) をマスクし、レポート サーバーから見えないようにします。そのためには、ハードウェア ベンダのユーティリティを使用します。データベースが複数のレポート ボリュームを使用する場合は、ボリュームごとにこの手順を実行します。
注意 |
---|
デタッチ フェーズは、あるレポート ボリュームのセットに対する更新サイクルの最初のフェーズです。しかし、古いバージョンのレポート データベースと新しいバージョンのレポート データベース用に 2 つのレポート ボリュームのセットを交互に使用することもできます。これにより、2 つのボリューム セットのデタッチ フェーズとアタッチ フェーズをオーバーラップさせることが可能になります。詳細については、「スケーラブルな共有データベースの可用性の最大化」を参照してください。 |
古いレポート データベースをデタッチするための準備
古いバージョンのデータベースを置き換える際には、レポート環境のビジネス要件を考慮することが大切です。現在実行中のクエリを完了させることと、できるだけ迅速に更新を終えることの、どちらのビジネス要件がより重要かを評価する必要があります。
より重要な要件に基づいて、各レポート サーバー上でデタッチ フェーズを管理する方法を決定することができます。
クエリを完了させる
実行中のすべてのクエリを保護するには、たとえば I/O 動作を止めるなどして、デタッチ フェーズの最初でデータベースに対するトランザクションの流れを止めます。次に、各サーバー インスタンス上で、実行中のクエリがすべて完了するのを待ちます。すべてのサーバー インスタンスからデータベースをデタッチしたら、レポート ボリュームをマウント解除できます。
できるだけ迅速に更新を行う
更新を迅速に完了するには、クエリをすぐに停止するか指定した秒数後に停止することにより、各サーバー インスタンス上でデータベースへの排他的なアクセスを獲得します。停止されたクエリは、更新されたバージョンのデータベースをアタッチした後で再開することができます。
たとえば、残っているすべてのクエリを停止する前に、実行中のクエリに対して 60 秒の猶予を与えるには、次の Transact-SQL ステートメントを使用します。
USE master; ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK AFTER 60; GO
これで各サーバー インスタンスからデータベースをデタッチし、各レポート サーバーからレポート ボリュームのマウントを解除することができます。
詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。
この時点で、マウント解除されたレポート ボリュームのセットは、更新サイクルの次のフェーズである構築フェーズまたは更新フェーズに進むことができます。
また、現在マウントされているレポート ボリュームのセットに対するデタッチ フェーズを開始する前に、別のレポート ボリュームのセット上でデータベースを更新することもできます。詳細については、「スケーラブルな共有データベースの可用性の最大化」を参照してください。