分离可缩放共享数据库

最终,报表数据会因过时而不能使用,这时的报表数据库称为“陈旧”数据库。更新可缩放共享数据库涉及一个以分离阶段开始的三阶段更新循环。实际上,“分离阶段”涉及分离陈旧报表数据库,以及从报表服务器上卸除报表卷。从给定服务器实例分离后,陈旧报表数据库将不再是该服务器实例上的可缩放共享数据库。

分离阶段的步骤

在此阶段,将针对每台报表服务器执行下列操作:

  1. 可选择性地禁用此数据库中的新查询,并允许当前查询顺利完成。有关详细信息,请参阅本主题后面的“分离陈旧报表数据库的准备策略”。

  2. 从每个服务器实例分离数据库。

    可使用下面的 Transact-SQL 语句完成此操作:

    sp_detach_db @dbname='<database_name>'
    

    其中,<database_name> 为数据库的名称。

  3. 卸除每台报表服务器上的报表卷集。

    若要使用 DiskPart 实用工具卸除卷,请在命令提示符下输入下列命令:

    DiskPart

    DISKPART> select volume=<驱动器编号>

    DISKPART> remove

    DISKPART> exit

    其中,<驱动器号> 为分配给报表卷的号。如果数据库使用多个报表卷,则针对每个卷执行此步骤。

  4. 屏蔽与报表卷相对应的逻辑单元号码 (LUN),使报表服务器无法识别该号码。若要执行此操作,请使用硬件供应商提供的实用工具。如果数据库使用多个报表卷,则针对每个卷执行此步骤。

注意注意

对于给定的报表卷集,分离阶段是更新循环的第一个阶段。但是,对于陈旧版本和新版本的报表数据库,可使用两个交替使用的报表卷集。从而允许将两个卷集的分离和更新阶段重叠。有关详细信息,请参阅 最大化可缩放共享数据库的可用性

分离陈旧报表数据库的准备策略

替换陈旧版本的数据库时,必须考虑报表环境的业务要求。应该评估下列哪个业务要求更重要:允许当前运行的查询执行完毕,或者尽快完成更新。

根据哪个业务要求更重要,可以决定如何管理每台报表服务器上的分离阶段。

  • 允许查询执行完毕

    若要保留所有正在进行的查询,请将事务流程停止于数据库(例如停止 I/O 活动),以便开始分离阶段。然后,在每个服务器实例上,等待所有当前查询执行完毕。当数据库与所有服务器实例分离后,即可卸除报表卷。

  • 尽快更新数据库。

    为了尽快完成更新,需要立即终止或在指定秒数后终止查询,从而获取对每个服务器实例上数据库的独占访问权限。附加刷新版本的数据库之后,即可重新启动终止的查询。

    例如,若要在终止所有剩余查询前使当前查询在 60 秒内完成,请使用下面的 Transact-SQL 语句:

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

    现在可以将数据库从每个服务器实例中分离出来,并从每台报表服务器上卸除一个或多个报表卷。

有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)

此时,已卸除的报表卷集准备开始下一个更新循环的生成或刷新阶段。

或者,针对当前安装的报表卷集开始分离阶段前,可在备用的报表卷集上刷新数据库。有关详细信息,请参阅最大化可缩放共享数据库的可用性