生成或刷新报表数据库

本主题说明了如何生成或刷新要用作可缩放共享数据库的报表数据库。如下图所示,报表数据库可能为生产数据库的副本,或者它可能包含从一个或多个生产数据库中导入的报表数据。生成或刷新报表数据库的过程称为“生成阶段”或“刷新阶段”,具体取决于是生成新的报表数据库还是刷新陈旧的报表数据库。

可缩放共享数据库的生存时期开始于针对一个报表卷集生成新的报表数据库。最终,报表数据会因过时而不能使用,这时的报表数据库称为“陈旧”数据库。陈旧的报表数据库会作为每个更新循环的一部分进行刷新。刷新“陈旧的报表数据库”需要更新其数据或生成一个全新的数据库版本。

若要生成或刷新报表数据库,可以使用 SQL Server 提供的任意一种数据复制方法来复制数据或数据库。有关详细信息,请参阅本主题后面的“生成或刷新报表数据库的方法”。

生成或刷新报表数据库的方法

注意注意

生成或刷新报表数据库之前,必须将它的报表卷集装入生产服务器,并且必须将每个卷标记为可读写。有关此过程中所有步骤的说明,请参阅本主题后面的“生成阶段或刷新阶段的步骤”。

SQL Server 2005 及更高版本支持下列用于生成或刷新报表数据库的方法:

  • SQL Server Integration Services (SSIS)

    可以通过运行 SSIS 包和使用执行 SQL 任务或传输数据库任务来创建或复制数据库:

    • 执行 SQL 任务将从包中运行 SQL 语句或存储过程。使用执行 SQL 任务创建数据库的方法是:首先运行 CREATE DATABASE 语句,然后在一个或多个表或视图中执行复制操作来填充数据库。有关详细信息,请参阅SSIS 执行 SQL 任务

    • 传输数据库任务可以在同一个服务器实例中或在两个实例之间复制数据库。有关详细信息,请参阅传输数据库任务

    注意注意

    也可以使用 SQL Server 导入和导出向导来创建数据库,但是必须复制至少一个表或视图。有关详细信息,请参阅使用 SQL Server 导入和导出向导移动数据

  • 备份和还原

    可以将生产数据库的备份还原到报表卷。这需要将完整数据库备份还原和恢复到报表卷。

    • 如果要使用相同的驱动器号,则请将报表卷装入其他主机上并连接到服务器实例以还原数据库。

    • 如果报表卷使用生产卷以外的驱动器号,则必须将 WITH MOVE 子句添加到 RESTORE DATABASE 语句中,指定还原数据库路径名中报表卷的驱动器号。

    有关使用备份和还原复制数据库的信息,请参阅通过备份和还原来复制数据库

  • 复制生产数据库

    手动复制数据库或使用复制数据库向导的分离和附加方法前,必须使数据库脱机,复制过后,再将它恢复联机。但是,复制数据库向导另外提供了一种方法,称为 SMO 传输方法,即当数据库处于联机状态时对其进行复制。尽管 SMO 传输方法比分离和附加方法慢,但是它具有保留活动的数据库连接的优点。

    有关详细信息,请参阅使用复制数据库向导

注意注意

我们建议您在生成报表数据库时,始终为生产数据库和报表数据库使用相同的路径名,如有可能,还要为已装入到报表服务器的生产卷和报表卷使用相同的驱动器号。

这样可能有益于优化报表数据库以达到预期的查询工作负荷。此类优化可能包括:

  • 根据需要更新或重新创建受影响的表和索引的统计信息。

  • 使用填充因子 100 重新生成索引。

  • 将报表数据库置于简单恢复模式下并执行检查点以截断事务日志并保存日志空间。

注意注意

有关如何将报表数据库用作可缩放共享数据库的指南,请参阅确保可缩放共享数据库有一个正确的环境

数据库准备就绪后,必须将报表卷标记为只读并从生产服务器上将它们卸除。有关详细信息,请参阅本主题后面的“生成阶段或刷新阶段的步骤”。

生成阶段或刷新阶段的步骤

注意注意

刷新报表数据库之前,必须从所有报表服务器上将其报表卷集卸除。有关详细信息,请参阅分离可缩放共享数据库

若要生成或刷新报表数据库,请在生产服务器上执行下列操作:

  1. 使用硬件供应商的实用工具,公开对应于每个报表卷的逻辑单元号码 (LUN) 以使生产服务器可访问到该卷。如果数据库使用多个报表卷,则针对每个卷执行此步骤。

  2. 装入每个报表卷并将其标记为可读写。用于显示计算机中所有磁盘和卷的 DiskPart list volumes 命令对于卷信息的获取非常有用。若要使用 DiskPart 实用工具装入卷,请在命令提示符下,输入下列命令:

    DiskPart

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

    DISKPART> assign letter=<驱动器号>

    DISKPART> attribute clear readonly

    DISKPART> exit

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

  3. 如果要刷新现有的报表数据库,则执行下列操作:

  4. 生成或刷新数据库。

    管理员使用任意一种生成或刷新报表数据库的方法生成或刷新数据库。报表数据库可以使用任何有效的数据库名称。有关详细信息,请参阅本主题前面的“生成或更新数据库的方法”。

    注意注意

    在报表数据库中,我们建议在默认情况下将 PAGE_VERIFY 设置为 CHECKSUM。有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)

  5. 从生产服务器实例中分离数据库。

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

    sp_detach_db @dbname='<database_name>'
    

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

    注意注意

    默认情况下,sp_detach_db 运行 UPDATE STATISTICS 以对统计信息进行重新抽样。但是,有些实现可能要求您分别运行 UPDATE STATISTICS 和 FULL SCAN 选项。

  6. 将每个报表卷标记为只读并将它从生产服务器上卸除。

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

    DiskPart

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

    DISKPART> attribute set readonly

    DISKPART> remove

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

    重要说明重要提示

    报表卷必须为只读状态才能从生产服务器上卸除它。

现在,可将报表数据库用作可缩放共享数据库。有关详细信息,请参阅将报表数据库附加为可缩放共享数据库