Analysis Services データベースの ReadOnly モードと ReadWrite モードの切り替え
Analysis Services のデータベース管理者 (DBA) が、テーブル データベースまたは多次元データベースの読み取り/書き込みモードを変更することは少なくありません。こうした状況は、Analysis Services サーバーのプール間でデータベースを共有することでユーザー エクスペリエンスを改善するなどのビジネス上のニーズによって頻繁に発生します。
データベース モードを切り替える方法は複数あります。 このドキュメントでは、次の一般的なシナリオについて説明します。
SQL Server Management Studio の対話的な使用
AMO を使用したプログラム
XMLA を使用したスクリプト
手順
Management Studio を使用してデータベースの読み取り/書き込みモードを対話的に切り替えるには
Management Studio の左側または右側のペインで切り替えるデータベースを指定します。
データベースを右クリックし、[プロパティ] をクリックします。 データベース フォルダーを検索し、場所を確認します。 データベースのストレージの場所が空の場合は、データベース フォルダーがサーバー データ フォルダー内にあることを示しています。
重要 データベースがデタッチされるとすぐに、Management Studio では、データベースの位置を取得できなくなります。
データベースを右クリックし、[デタッチ] をクリックします。
デタッチするデータベースにパスワードを割り当て、[OK] をクリックしてデタッチ コマンドを実行します。
Management Studio の左側または右側のペインで、[データベース] フォルダーを探します。
[データベース] フォルダーを右クリックし、[アタッチ] をクリックします。
[フォルダー] ボックスに、データベース フォルダーの元の場所を入力します。 または、参照ボタン ([ ]) を使用して、データベース フォルダーを探すこともできます。
データベースの読み取り/書き込みモードを選択します。
手順 3. で使用したパスワードを入力し、[OK] をクリックしてアタッチ コマンドを実行します。
プログラムで AMO を使用してデータベースの読み取り/書き込みモードを切り替えるには
- C# アプリケーションで、次のサンプル コードを調整して、指定されたタスクを完了します。
private void SwitchReadWrite(Server server, string dbName,
ReadWriteMode dbReadWriteMode)
{
if (server.Databases.ContainsName(dbName))
{
Database db;
string databaseLocation;
db = server.Databases[dbName];
databaseLocation = db.DbStorageLocation;
if (databaseLocation == null)
{
string dataDir = server.ServerProperties["DataDir"].Value;
String[] possibleFolders = Directory.GetDirectories(dataDir, string.Concat(dbName,"*"), SearchOption.TopDirectoryOnly);
if (possibleFolders.Length > 1)
{
List<String> sortedFolders = new List<string>(possibleFolders.Length);
sortedFolders.AddRange(possibleFolders);
sortedFolders.Sort();
databaseLocation = sortedFolders[sortedFolders.Count - 1];
}
else
{
databaseLocation = possibleFolders[0];
}
}
db.Detach();
server.Attach(databaseLocation, dbReadWriteMode);
}
}
C# アプリケーションで、必要なパラメーターを指定して SwitchReadWrite() を呼び出します。
コードをコンパイルして実行し、データベースを移動します。
XMLA を使用したスクリプトでデータベースの読み取り/書き込みモードを切り替えるには
Management Studio の左側または右側のペインで切り替えるデータベースを指定します。
データベースを右クリックし、[プロパティ] をクリックします。 データベース フォルダーを検索し、場所を確認します。 データベースのストレージの場所が空の場合は、データベース フォルダーがサーバー データ フォルダー内にあることを示しています。
重要 データベースがデタッチされるとすぐに、Management Studio では、データベースの位置を取得できなくなります。
Management Studio で、新しい XMLA タブを開きます。
次の XMLA 用のスクリプト テンプレートをコピーします。
<Detach xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>%dbName%</DatabaseID>
<Password>%password%</Password>
</Object>
</Detach>
%dbName% をデータベースの名前に置き換え、%password% をパスワードに置き換えます。 テンプレートに含まれている文字 % は削除する必要があります。
XMLA コマンドを実行します。
新しい XMLA タブに、次の XMLA 用のスクリプト テンプレートをコピーします。
<Attach xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Folder>%dbFolder%</Folder>
<ReadWriteMode xmlns="https://schemas.microsoft.com/analysisservices/2008/engine/100">%ReadOnlyMode%</ReadWriteMode>
</Attach>
%dbFolder% をデータベース フォルダーの完全な UNC パスに置き換え、%ReadOnlyMode% を対応する値 ReadOnly または ReadWrite に置き換え、%password% をパスワードに置き換えます。 テンプレートに含まれている文字 % は削除する必要があります。
XMLA コマンドを実行します。
関連項目
参照
Attach