在 ReadOnly 和 ReadWrite 模式之间切换 Analysis Services 数据库

当 Analysis Services 数据库管理员(dba)想要更改表格或多维数据库的读/写模式时,通常会出现这种情况。 这些情况通常由业务需求驱动,例如在 Analysis Services 服务器池之间共享数据库,以提供更好的用户体验。

可以通过多种方式来切换数据库模式。 本文档介绍下列常见方案:

  • 使用 SQL Server Management Studio 以交互方式

  • 使用 AMO 以编程方式

  • 使用 XMLA 借助于脚本

过程

使用 Management Studio 以交互方式切换数据库的读写模式

  1. 在 Management Studio 的左侧或右窗格中找到要切换的数据库。

  2. 右键单击该数据库并选择 “属性”。 查找数据库文件夹并记下其位置。 如果数据库存储位置为空,则表明数据库文件夹位于服务器数据文件夹中。

    重要

    一旦分离数据库,Management Studio 将无法再帮助你获取数据库位置。

  3. 右键单击数据库并选择“ 分离...”

  4. 为要分离的数据库分配一个密码,然后单击 “确定” 执行分离命令。

  5. Management Studio 的左侧或右窗格中找到“数据库” 文件夹。

  6. 右键单击 “数据库” 文件夹,然后选择“ 附加...”

  7. “文件夹” 文本框中,键入数据库文件夹的原始位置。 或者,可以使用浏览按钮(...)查找数据库文件夹。

  8. 针对该数据库选择读写模式。

  9. 键入步骤 3 中使用的密码,然后单击 “确定” 执行附加命令。

使用 AMO 以编程方式切换数据库的读写模式

  1. 在 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);

}

}

  1. 在 C# 应用程序中,用必要的参数调用 SwitchReadWrite()

  2. 编译和执行您的代码以移动该数据库。

使用 XMLA 借助于脚本切换数据库的读写模式

  1. 在 Management Studio 的左侧或右窗格中找到要切换的数据库。

  2. 右键单击该数据库并选择 “属性”。 查找数据库文件夹并记下其位置。 如果数据库存储位置为空,则表明数据库文件夹位于服务器数据文件夹中。

    重要

    一旦分离数据库,Management Studio 将无法再帮助你获取数据库位置。

  3. 在 Management Studio 中打开新的 XMLA 选项卡。

  4. 复制下面的 XMLA 脚本模板:

<Detach xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">

<Object>

<DatabaseID>%dbName%</DatabaseID>

<Password>%password%</Password>

</Object>

</Detach>

  1. %dbName% 替换为数据库名称,将 %password% 替换为您的密码。 % 字符是模板的一部分,必须将其删除。

  2. 执行 XMLA 命令。

  3. 在新的 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>

  1. %dbFolder% 替换为数据库文件夹的完整 UNC 路径,将 %ReadOnlyMode% 替换为相应值(ReadOnlyReadWrite),并将 %password% 替换为您的密码。 % 字符是模板的一部分,必须将其删除。

  2. 执行 XMLA 命令。

另请参阅

Attach*
Microsoft.AnalysisServices.Database.Detach*
附加和分离 Analysis Services 数据库
数据库存储位置
数据库 ReadWriteModes
Attach 元素
Detach 元素
ReadWriteMode 元素
DbStorageLocation 元素