SQL Server 2005 支持可伸缩共享数据库

文章翻译 文章翻译
文章编号: 910378 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

简介

Microsoft SQL Server 2005 Enterprise Edition 支持可伸缩共享数据库。本文是“可伸缩共享数据库”主题的预览,该主题将在 SQL Server 联机丛书以后的更新中发布。

更多信息

可伸缩共享数据库

使用可伸缩共享数据库可以通过存储区域网络 (SAN) 将只读报告数据库附加到多个服务器实例。报告数据库是根据一个或多个专用于报告目的的生产数据库生成的只读数据库。要成为可伸缩共享数据库,报告数据库必须驻留在一个或多个专用的只读卷上。这些只读卷的主要目的是主持报告数据库或一组经过协调的报告数据库。这些卷称为报告卷。

优点

可伸缩共享数据库具有以下优点:
  • 使用商品服务器提供报告数据库的负载扩展。可伸缩共享数据库是使只读数据集市或数据仓库用于多个服务器实例以达到报告目的(如运行查询或使用 SQL Server 2005 Reporting Services)的一种节省成本的方式。
  • 提供负载隔离。每个服务器都使用自己的内存、CPU 和 tempdb 数据库。
  • 保证在所有服务器实例配置相同的情况下,所有服务器中的报告数据视图都相同。例如,所有服务器都将使用单一的排序规则。

    注意:可以选择更新另一报告卷上的报告数据库。有关更多信息,请参见“最大化可伸缩共享数据库的可用性”部分。

限制

对于可伸缩共享数据库存在以下限制:
  • 数据库必须在只读卷上。
  • 可以通过 SAN 访问数据文件。
  • 只有 Microsoft Windows Server 2003 Service Pack 1 (SP1) 或更高版本的 Windows Server 2003 支持可伸缩共享数据库。

报告数据库的更新周期

对报告数据库使用可伸缩共享数据库时,所涉及的更新周期分为三个阶段:
  • 生成阶段:报告数据库的更新周期从生成阶段开始。管理员必须在生产系统上装载报告卷并使其可以读/写,然后才能生成报告数据库。当卷处于读/写状态时,只能在一个系统上装载卷。如果在多个系统上装载卷,可能会造成文件系统损坏。然后管理员使用 SQL Server 2005 提供的用于复制数据或数据库的某种数据复制方法生成数据库。生成数据库后,管理员将卷设置为只读,然后将其卸载。
  • 附加阶段:生成阶段之后是附加阶段。附加阶段使得数据库可以用作可伸缩共享数据库。必须分别在每个报告服务器上执行附加阶段。要将报告数据库配置为可伸缩共享数据库,管理员需要将只读报告卷通过 SAN 装载到报告服务器上。管理员在确定每个卷都设置为只读之后,将附加 SQL Server 实例上的报告数据库。SQL Server 实例上的报告数据库也称为报告服务器实例。由于每个报告卷都是只读的,因此附加数据库时会将其设置为只读。此时,报告数据库就变为可以由客户端使用报告服务器进行访问的可伸缩共享数据库。

    注意:如果更新报告数据库时使用另一个报告卷,则必须在滚动升级和同步升级之间进行选择。有关更多信息,请参见“最大化可伸缩共享数据库的可用性”部分。
  • 分离阶段:第三个阶段是分离阶段。通常,报告数据库最终将变得陈旧。必须刷新数据库以保持报告数据为最新。分离阶段是将陈旧的报告数据库作为可伸缩共享数据库从服务中删除的过程。在特定报告服务器上必须完成分离阶段,然后才能在该服务器上使用更新的报告数据库。必须刷新报告数据库时,必须将其从所有服务器实例中分离。要开始分离阶段,数据库管理员首先要从所有服务器实例上停止正在进入数据库的查询负载。在每个服务器实例上,数据库管理员获取独占访问数据库的权限,然后将其分离。之后,数据库管理员将从每个主机系统卸载卷。分离阶段完成时,报告卷会从 SAN 断开连接。
注意:要最大化报告数据的可用性,建议采用的最佳做法是在两个报告卷之间交替更新周期。第一个报告卷仍装载到报告服务器时,可以将另一个卷装载到生产服务器,然后生成报告数据库的最新版本。有关更多信息,请参见“最大化可伸缩共享数据库的可用性”部分。

注意:每个阶段都包含一系列必须由具有数据库管理员权限的用户执行的步骤。在本文中将此类用户称为数据库管理员。

重要说明:要配置可伸缩共享数据库,SAN 环境必须已正常运行。

可伸缩共享数据库示例

在后续更新周期中,可以更新或重建数据库。首选方法取决于业务要求。可以通过以下两种方式使用可伸缩共享数据库:
  • 数据集市数据库:使用可伸缩共享数据库的最简单方式是数据集市数据库。定期从数据仓库的内容中提取数据集市数据库,并将其用于报告。要更新数据集市数据库,请丢弃数据库,然后用新版本替换它。
  • 从可更新数据库进行报告:如果从其进行报告的数据库不必是从源数据库转换而来的,则该数据库可以定期更新。要定期更新数据库,请创建生产数据库的完整备份,然后在报告卷上还原该数据库备份。

确保环境符合可伸缩共享数据库的要求

可伸缩共享数据库必须位于可以通过 SAN 访问的只读卷上。报告服务器必须运行以下软件:
  • Windows Server 2003 SP1 或更高版本的 Windows Server 2003
  • SQL Server 2005 Enterprise Edition 或更高版本的 SQL Server 2005
为了可以获得支持,建议将可伸缩共享数据库的配置限制为最多八个服务器实例。但是,SQL Server 2005 并不限制可以同时访问可伸缩共享数据库的实例的数量。通常,每个服务器实例都在单独的报告服务器上运行。但是,也支持在一个报告服务器上运行多个报告服务器实例。

配置环境

要确保环境支持可伸缩共享数据库,建议遵循以下准则:
  • 确保特定报告数据库的报告服务器均在相同的操作系统上运行。每当升级报告服务器时,就会升级为相同可伸缩共享数据库提供服务的其他任何报告服务器。例如,如果将 Windows 或 SQL Server 2005 的软件更新或 Service Pack 应用于任一报告服务器,则相同的软件更新或 Service Pack 会应用于所有报告服务器。

    注意:通常,只要及时完成滚动升级,就可以执行报告服务器的滚动升级。
  • 可伸缩共享数据库是在最多八个 SQL Server 2005 Enterprise Edition 服务器实例的并发访问负载下进行测试的。SQL Server 2005 不强制限制实例数量。但是,对于每个共享数据库,建议将可伸缩共享数据库的配置限制为最多八个服务器实例。
  • 如果生产数据库的数据文件跨越多个卷,则必须使用相同数量的报告卷。相反,由于报告数据库被设置为只读,因此其日志文件可以在报告卷上与数据文件共存。
  • 要简化生成或更新报告数据库的过程,建议报告数据库的路径与生产数据库相同。这包括对报告卷使用相同的驱动器号和对数据库使用相同的目录路径。例如,如果生产数据库在 E:\SQLdata 上,则使用 E 作为报告卷的驱动器号(如果可能)。此外,使用 \SQLdata 作为报告数据库的目录(如果可能)。但是,具有显式路径的脚本可以处理任何差异。如果报告卷使用了不同于生产卷的驱动器号,则可能必须进行以下修改:
    • 如果通过还原数据库备份来生成报告数据库,则 RESTORE DATABASE 语句必须有 WITH MOVE 子句,该子句指定还原的数据文件的完整路径。
    • 如果报告数据库是生产数据库的副本,则 CREATE DATABASE 语句的 FOR ATTACH 子句必须列出全部文件。FOR ATTACH 子句还必须在附加报告数据库时指定其完整路径。这始终是最佳做法。

      注意:作为最佳做法,请在将报告卷装载到报告服务器上时在每个服务器上都使用相同的驱动器号。这种做法有助于管理不同服务器上的卷。
  • 报告数据库必须位于可以从所有报告服务器通过 SAN 访问的只读卷上:
    • 将报告卷装载到报告服务器上之后,确保正确装载了报告卷,且可以访问数据文件。为此,请在命令提示符处输入 DIR <drive-letter>:\<database-directory>,其中 <drive-letter> 是分配给报告卷的驱动器号,而 <database-directory> 指定卷上数据库的数据文件的位置。在每个报告服务器上都运行此测试,以确保所有服务器都收到相同的结果。
    • 要确保已将报告数据库设置为只读,请尝试在卷上创建文件。最简单的方法是尝试在卷上复制或保存纯文本文件。尝试会失败,因为卷是只读的。

      注意:如果要手动执行这些步骤,建议在每个报告服务器上重新装载报告卷的每个更新周期中重复这些测试。如果为这些步骤编写了脚本,以便在生产服务器和报告服务器之间来回移动报告卷,则确信脚本正常运行之后,不再需要进行测试。

阶段 1:生成阶段

生成或刷新可伸缩共享数据库

必须手动生成和刷新报告数据库。此过程是报告数据库更新周期的第一个阶段,称为生成阶段。生成阶段可能包括更新陈旧的数据库或生成新版本。

通常,报告数据库的当前版本最终会变得陈旧。必须定期刷新报告数据库以保持报告数据为最新。

完成生成阶段

可以通过更新现有数据库中过时的数据或通过重建数据库来刷新陈旧的报告数据库。

注意:必须将现有报告数据库从每个报告服务器实例中分离,然后才能刷新该数据库。此外,必须从每个报告服务器中卸载报告卷。有关更多信息,请参见“分离可伸缩共享数据库”部分。

要刷新陈旧的报告数据库,请在生产服务器上按照下列步骤操作:
  1. 使用硬件供应商的实用工具取消屏蔽对应于报告卷的逻辑单位号 (LUN)。此操作使得生产服务器可以访问卷。
  2. 装载报告卷,然后将其标记为读/写。要使用 Diskpart 命令行实用工具装载卷,请在命令提示符处输入以下命令:DiskPart
    DISKPART> select volume=<drive-number>
    DISKPART> assign letter=<drive-letter>
    DISKPART> attribute clear readonly
    DISKPART> exit

    在此步骤中,<drive-number> 是由 Windows 分配的卷编号,而 <drive-letter> 是分配给报告卷的驱动器号。
  3. 如果要刷新现有报告数据库,请按照下列步骤操作:
    1. 将数据库附加到服务器实例。通常为生产服务器实例。
      CREATE DATABASE <database_name> ON <filespec_list>
         FOR ATTACH
      
    2. 使用以下 Transact-SQL 语句将数据库设置为读/写访问。
      ALTER DATABASE <database_name> SET READ_WRITE
      有关更多信息,请参见 SQL Server 2005 联机丛书。
  4. 生成数据库。

    要刷新报告数据库,可以更新过期数据、重建数据库或执行您认为刷新数据所需的任何其他操作。管理员使用任意一种 SQL Server 2005 提供用于复制数据或数据库的数据复制方法生成数据库。有关更多信息,请参见“生成或更新数据库的方法”部分。

    注意:在报告数据库中,建议将“页验证”设置为默认值“校验和”。要更改此设置,请使用 ALTER DATABASE。
  5. 使用以下 Transact-SQL 语句将数据库设置为只读。
    ALTER DATABASE <database_name> SET READ_ONLY
  6. 使用以下 Transact-SQL 语句分离数据库。
    sp_detach_db @dbname='<database_name>'
    在此步骤中,<database_name> 是数据库的名称。
  7. 将卷标记为只读,然后从生产服务器中卸载该卷。要使用 Diskpart 命令行实用工具卸载卷,请在命令提示符处输入以下命令。
    DiskPart
    DISKPART> select volume=<drive-number>
    DISKPART> attribute set readonly
    DISKPART> remove
    
    在此步骤中,<drive-number> 是由 Windows 分配的卷编号,而 <drive-letter> 是分配给报告卷的驱动器号。
  8. 使用硬件供应商的实用工具屏蔽对应于报告卷的 LUN。此操作使得生产服务器无法访问卷。
现在,可以将报告数据库用作可伸缩共享数据库。有关更多信息,请参见“附加可伸缩共享数据库”部分。

生成或刷新数据库的方法

注意:生成报告数据库时,建议对生产数据库和报告数据库始终使用相同的路径。此外,建议在报告服务器上装载卷时对生产和报告卷使用相同的驱动器号(如果可能)。

SQL Server 2005 当前支持以下用于将数据转移到数据库中或用于转移整个数据库的方法:
  • SQL Server Integration Services:可以通过运行 Integration Services 软件包和使用“执行 SQL”任务或“传输数据库”任务来创建或复制数据库:
    • “执行 SQL”任务从软件包运行 SQL 语句或存储过程。使用“执行 SQL”任务时,可以运行 CREATE DATABASE 语句来创建数据库。然后可以通过在一个或多个表或视图中进行复制来填充数据库。
    • “传输数据库”任务可以在同一服务器实例中或不同实例间复制数据库。

      注意:也可以使用 SQL Server 导入和导出向导来创建数据库,但必须复制至少一个表或视图。
  • 备份和还原:可以在报告卷上还原生产数据库的备份。为此,请将完整的数据库备份还原并恢复到报告卷上:
    • 如果使用相同的驱动器号,请将报告卷装载到不同的主机上,然后连接到该处的服务器实例以还原数据库。
    • 如果报告卷使用不同于生产卷的驱动器号,则 RESTORE DATABASE 语句必须有 WITH MOVE 子句,该子句在还原的数据库的路径中指定报告卷的驱动器号。
  • 将生产数据库复制到报告卷上:必须使数据库脱机,然后才能手动复制数据库或使用复制数据库向导的分离和附加方法。复制数据库之后,将数据库恢复为联机状态。但是,复制数据库向导提供了一种替代方法。SMO 传输方法即使在数据库保持联机状态时也可复制数据库。尽管 SMO 传输方法比分离和附加方法慢,但 SMO 传输方法保留了到数据库的活动连接。
有关这些数据复制方法的更多信息,请参见 SQL Server 2005 联机丛书。

报告数据库准备就绪时,必须完成生成阶段。有关更多信息,请参见“阶段 1:生成阶段”部分。

阶段 2:附加阶段

附加可伸缩共享数据库

生成或更新报告数据库并从生产服务器中卸载报告卷之后,管理员必须使数据库可以用作可伸缩共享数据库。此过程称为附加阶段。

完成附加阶段

在此阶段中,管理员必须执行以下步骤:
  1. 使用硬件供应商的实用工具取消屏蔽对应于报告卷的 LUN。此操作使得客户端可以从每个报告服务器访问卷。
  2. 在每个报告服务器上,装载对应于 LUN 的卷。

    注意:要简化生成或更新报告数据库的过程,建议始终使用与生产卷相同的驱动器号来装载其报告卷。例如,如果生产数据库在生产服务器的驱动器 E 上,则报告卷应该在每个报告服务器上也都装载为驱动器 E(如果可能)。

    要使用 Diskpart 命令行实用工具装载卷,请在命令提示符处输入以下命令。
    DiskPart
    DISKPART> select volume=<drive-number>
    DISKPART> assign letter=<drive-letter>
    DISKPART> exit
    
    在此步骤中,<drive-number> 是由 Windows 分配的卷编号,而 <drive-letter> 是在报告服务器上要用于报告卷的驱动器号。

    注意:报告卷必须是只读的。建议将该卷标记为只读,然后再从生产服务器将其卸载。如果没有将卷标记为只读,请在第一个报告服务器上装载卷之后将其设置为只读。有关更多信息,请参见“阶段 1:生成阶段”部分。

    作为最佳做法,应该确保在将报告卷装载到每个报告服务器之后,该卷可以作为只读卷通过 SAN 进行访问。有关更多信息,请参见“确保环境符合可伸缩共享数据库的要求”部分。
  3. 将数据库附加到每个报告服务器上的报告服务器实例。有关更多信息,请参见 SQL Server 2005 联机丛书。
报告数据库现在可用作可伸缩共享数据库,且可以继续进行查询。

阶段 3:分离阶段

分离可伸缩共享数据库

通常,报告数据库的当前版本最终会变得陈旧,因而必须刷新以保持报告数据为最新。从服务中将陈旧的报告数据库作为可伸缩共享数据库删除的过程称为分离阶段。此阶段是报告数据库更新周期的第三个也是最后一个阶段。在特定报告服务器上必须完成分离阶段,然后才能在该服务器上使用更新的报告数据库。

完成分离阶段

在此阶段中,管理员必须在每个报告服务器上执行以下步骤:
  1. 禁用数据库上的新查询,然后让当前查询正常完成(如果可能)。
  2. 使用 sp_detach_db @dbname='<database_name>' 命令将数据库从每个报告服务器实例分离。

    在此步骤中,<database_name> 是数据库的名称。有关 sp_detach_db 命令的更多信息,请参见 SQL Server 2005 联机丛书。
  3. 在每个报告服务器上卸载报告卷。要使用 Diskpart 命令行实用工具卸载卷,请在命令提示符处输入以下命令。
    DiskPart
    DISKPART> select volume <drive-number>
    DISKPART> remove
    
    在此步骤中,<drive-letter> 是分配给报告卷的驱动器号。
  4. 使用硬件供应商的实用工具屏蔽对应于报告卷的 LUN。此操作使得客户端无法从每个报告服务器访问卷。

分离陈旧的报告数据库的替代策略

替换数据库的陈旧版本时,必须考虑报告环境的业务要求。应该评估所在环境中需要优先考虑以下哪种业务要求:
  • 保留当前运行的事务,直到其完成。
  • 在有限的时间范围内完成更新。
基于要优先考虑的要求,可以决定如何在每个报告服务器上管理分离阶段。可以使用以下方式管理分离阶段:
  • 分离报告服务器之前,先完成事务:要保留所有正在进行的事务,必须停止将 I/O 活动传入报告卷以开始分离阶段。然后,在每个报告服务器实例上等到所有当前事务都完成后,分离数据库。当数据库已从所有服务器实例分离时,可以卸载报告卷。
  • 在有限的时间范围内更新数据库:在这种情况下,应该在每个服务器实例上获取独占访问数据库的权限,终止时间比您的时间范围长。如果在终止时间内有查询未完成,则会停止这些查询。这些查询必须等到更新重新启动之后才能继续。停止查询之后,可以从每个服务器实例分离数据库,然后从每个报告服务器中卸载报告卷。
此时,已经准备就绪,可以进行下一个生成阶段。另一种方式是,如果已刷新了另一报告卷上的数据库(正如我们所建议),则现在可以为其他卷执行附加阶段。有关更多信息,请参见“最大化可伸缩共享数据库的可用性”部分。

最大化可伸缩共享数据库的可用性

要最大化报告数据的可用性,建议在两个报告卷之间交替更新周期。第一个报告卷仍装载到报告服务器时,可以将另一个卷装载到生产服务器,然后生成报告数据库的最新版本。

如果在另一个报告卷上更新报告数据库,请考虑以下选项:
  • 如果希望所有报告数据库对客户端都返回相同的结果,则必须从所有服务器实例分离原来的副本,然后才能将新副本附加到任一服务器实例。
  • 如果可以接受在更新报告数据库时客户端在不同的服务器实例上收到不同的结果,则可以执行报告数据库的滚动升级。一次将在一个报告服务器上完成更新周期。

所有报告服务器的高时效要求同步更新

本部分介绍了取决于业务要求的多种更新可伸缩共享数据库内容的策略:
  • 必须保持所有报告服务器都同步。
  • 必须在有限的时间范围内完成更新。此时间范围比保留当前运行的事务更重要。
在所有报告服务器上同步数据库时,报告数据库在数据库陈旧版本的分离阶段和新版本的附加阶段之间不可用。

要在所有报告服务器实例上同步更新周期,并在有限的时间范围内完成更新周期,请按照下列步骤操作:
  1. 要保持内容同步,必须在所有报告服务器上完成分离阶段,然后才能更新报告服务器。如果任何服务器上有任何长时间运行的查询处于活动状态,则必须将其停止。
  2. 从所有服务器实例卸载第一个报告卷之后,可以开始更新报告服务器。在每个报告服务器上,装载包含报告数据库更新版本的其他卷。将该版本附加到本地报告服务器实例。在特定实例上附加数据库后,在此实例上就可以重新启动已停止的事务。

报告服务器的滚动升级

使用滚动升级可以在其他报告服务器上的陈旧报告数据库临时保持可用时刷新报告服务器上的报告数据库。一段时间内,数据库的陈旧版本和刷新的版本同时可用。根据业务要求,可以在有限的时间范围内进行滚动升级,或者滚动升级可以相对不限截止时间,以使当前事务完成。

使事务在滚动升级之前完成

在此策略中,滚动升级允许数据库管理员在刷新其他报告服务器上的数据库时等待报告服务器上长时间运行的事务完成。此策略可解决以下业务需求:
  • 报告服务器不必保持同步。这样可以实现陈旧报告数据库和更新的报告数据库之间的滚动升级。
  • 完成更新的时间不受限制,即截止时间没有保留当前运行的事务重要。
要执行这种形式的滚动升级,请一次在一个服务器实例上执行下列步骤:
  1. 要保留所有正在进行的事务,必须停止将 I/O 活动传入报告卷以开始分离阶段。如果长时间运行的查询延迟了服务器实例上的升级,请等待查询完成,然后再使服务器实例脱机。
  2. 在此服务器实例上完成所有事务之后,分离报告数据库。
  3. 从所有服务器实例分离特定的报告数据库之后,将报告数据库的更新版本附加到该服务器实例。
  4. 要使服务器实例可以再次用于报告查询,请附加更新的数据库副本。

在有限时间内完成滚动升级

在此策略中,滚动升级使得数据库管理员在某些报告服务器上暂时让数据库的陈旧版本保持对新查询可用,从而维持报告服务不中断。在其他报告服务器上更新数据库时,服务保持不中断。此策略可解决以下业务需求:
  • 报告服务器不必保持同步。这样可以实现陈旧报告数据库和更新的报告数据库之间的滚动升级。
  • 必须在有限的时间范围内完成更新。此截止时间比保留当前运行的事务更为重要。
要执行这种形式的滚动升级,请一次在一台报告服务器上执行下列步骤:
  1. 停止将 I/O 活动传入到报告卷,并且可以选择等待短暂事务在服务器实例上完成,然后再分离其报告数据库。
  2. 在该服务器上完成分离阶段。有关更多信息,请参见“分离可伸缩共享数据库”部分。
  3. 使报告数据库的更新版本可以再次用于报告查询。有关更多信息,请参见“附加可伸缩共享数据库”部分。
此类滚动升级可保证总体报告功能从不中断。使用此策略,您可以在某些服务器实例上暂时接受较长时间运行的事务。但是,由于给出了更新所有报告数据库的有限的时间范围,因此如果长时间运行的查询严重延迟了服务器实例上的升级,则必须停止该查询。查询可以等到在服务器实例的报告数据库刷新后在该同一实例上重新运行,也可以在更新的服务器上更快地重新开始。

参考

要下载 SQL Server 2005 联机丛书,请访问下面的 Microsoft 下载中心网站:
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=be6a2c5d-00df-4220-b133-29c1e0b6585f

属性

文章编号: 910378 - 最后修改: 2007年11月20日 - 修订: 2.1
这篇文章中的信息适用于:
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
关键字:?
kbinfo kbtshoot kbsql2005engine KB910378
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com