Sreeni Paidi, 支持顾问, IBM
Angela Carlson, 支持顾问, IBM
2010 年 8 月 23 日
在一个嵌入式数据库环境中,作为一个数据库管理员,您需要尽量多地自动化维护任务以便可受干扰最少地运行这个数据库。 IBM® DB2® for Linux®, UNIX®, and Windows® 提供了配置、调优和管理数据库的高级自动化特性。这些自动化特性让您可以花费很少的时间管理常规的任务,从而将更多时间用在有助于增加您业务收入以及保持竞争优势的战略性问题上。本教程向您展示了如何自动化 Linux 或 UNIX 上的 DB2 的日常维护任务。
开始之前
在开始之前,先来看看本文所涵盖的内容、前提条件和系统要求。
本文的目的是向您展示如何启用 IBM DB2 9.7 for Linux, UNIX, and Windows 的一些自动特性以及如何自动化一些日常的数据库维护任务。当在一个虚拟环境内嵌入一个 DB2 数据库服务器实例时,这些特性和技巧尤其有用。
本教程涵盖了如下主题:
本教程面向的是 IBM DB2 数据库管理员、应用程序架构师以及开发人员。您应该对使用 UNIX 或 Linux 命令行 shell 安装和配置 DB2 比较熟悉。
要运行本教程中的这些例子,需要一个安装了 DB2 9.7 的 Linux 或 UNIX 系统。而且还必须对操作系统具有根访问权限,对 DB2 具有实例所有者的访问权限。
本教程包括了一个由脚本和策略文件组成的工具箱,可用来启用和配置本教程中所描述的特性。这些脚本和策略文件均打包在一个名为 embed-bundle.zip 的文件中,这个文件可以从本教程的 下载 部分获得。
将 embed-bundle.zip 文件复制到运行着 DB2 的目标计算机,以 DB2 实例所有者(比如,db2inst1)的身份登录到此计算机,并使用清单 1 所示的命令解压缩此工具箱。
清单 1. 解压缩 embed-bundle.zip 工具箱的命令
mv embed-bundle.zip /home/db2inst1 unzip /home/db2inst1/embed-bundle.zip chmod +x /home/db2inst1/embed-bundle/*.sh |
注意:这个工具箱是为运行在 Linux 或 UNIX 上的 DB2 9.7 特别开发的。不过,如果您想要将它用于 Windows 上的 DB2 9.7,也是可以的,做稍许修改即可。
此工具箱内有一个文件,名为 create_mydb.db2,它是一个示例 DB2 脚本。这个脚本会创建一个数据库并修改此数据库的配置以启用本教程中讨论的自动特性。
自动维护
DB2 数据库管理器为执行数据库备份、保持统计信息最新以及在需要的时候重组表和索引提供了自动维护功能。在数据库上执行维护操作对于确保它们针对性能和可恢复性进行优化非常重要。
决定维护操作是否运行以及何时运行会很耗时。但是,自动维护可以帮助您减轻这方面的负担。通过使用自动维护数据库配置参数可简单而灵活地管理自动维护特性的启用。使用 Configure Automatic Maintenance 向导,可以指定维护目标。数据库管理器之后就可以使用这些目标来决定需要执行哪些维护操作,并且在下一个可用的维护窗口期间(时间段由您定义)只运行所需要的那些操作。
DB2 数据库管理器为执行日常的备份操作提供了自动维护功能,否则,需要耗费数据库管理员的大量时间和精力。数据库管理器让您可以定义一个在线/离线维护进度和备份条件。DB2 之后就可以在需要的时候自动执行备份。这些备份在系统失败或硬件更新后可用于恢复数据库。备份对于复制测试或开发环境也非常有用。自动数据库备份有助于确保数据库被定期地进行适当的备份。
本部分介绍了如何为数据库配置自动备份。在新数据库上自动备份是默认禁用的。为了启用数据库上的自动备份,还需要启用自动维护。使用清单 2 内所示的命令来更新数据库配置以启用自动维护和自动备份。
UPDATE DB CFG FOR |
对于每个自动维护任务以及每个维护窗口的配置可包含在一个简单的 XML 文档内,称为一个自动维护策略。在 embed-bundle.zip 工具箱内,这个文件的名称为 DB2MaintenanceWindowPolicy.xml(如清单 3 所示),它定义了一个周一至周五的在线维护窗口和周六及周日晚间的离线维护窗口。
清单 3. DB2MaintenanceWindowPolicy.xml 文件内容
|
使用 sysproc.automaint_set_policyfile 存储过程可以更新这些策略。清单 4 显示了借助此存储过程用在 DB2MaintenanceWindowPolicy.xml 文件内指定的参数更新维护窗口策略的一个例子。工具箱的 backupsetup.sh 脚本中使用了相同的命令。若按如下的指导使用这个工具箱脚本,则无需手动运行此命令。
db2 "call sysproc.automaint_set_policyfile
('MAINTENANCE_WINDOW', ‘DB2MaintenanceWindowPolicy.xml')"
|
自动备份策略也可包含在一个 XML 文档内,用来控制执行的是哪种备份(在线或离线)、备份的位置以及备份的条件(自动备份何时 应该考虑采取一次备份)。在此工具箱内,名为 DB2AutoBackupPolicy.xml 的文件(如清单 5 所示)包含了一个自动备份策略。
清单 5. DB2AutoBackupPolicy.xml 文件内容
|
清单 6 显示了一个借助 sysproc.automaint_set_policyfile 存储过程用在 DB2AutoBackupPolicy.xml 文件内指定的参数设置自动备份策略的例子。 工具箱的 backupsetup.sh 脚本中使用了相同的命令。若按如下的指导使用这个工具箱脚本,则无需手动运行此命令。
db2 "call sysproc.automaint_set_policyfile
('AUTO_BACKUP', 'DB2AutoBackupPolicy.xml')"
|
使用 embed-bundle.zip 工具箱文件按如下步骤设置自动备份:
Syntax: backupsetup.sh |
DB2 提供了 restore 实用工具,用来在出现问题后重新构建一个数据库或表空间。可以用不同的映像替换一个数据库或将备份数据库还原到新数据库。RESTORE DATABASE 命令可以将数据库数据或表空间重建至备份数据库建成时的状态。清单 8 显示了如何使用此命令来还原至最新的备份,清单 9 显示了如何还原至在某个特定时刻所做的一个备份映像。
Syntax: db2 restore db |
Syntax: db2 restore db |
具有准确而完整的数据库统计信息对于高效的数据访问和最佳的工作负载性能非常关键。 DB2 通过其自动表维护功能提供了一种自动统计信息收集的特性,可用来更新和维护相关的数据库统计信息。
为了启用自动统计信息收集,必须通过将 auto_maint 及 auto_tbl_maint 数据库配置参数设置为 ON 来配置数据库的自动维护。之后,可以设置用来定义何时以及想要如何收集这些统计信息的选项,如下所示:
清单 10 显示了为了启用自动统计信息收集功能设置数据库配置参数的示例命令。
清单 10. 更新数据库配置参数来启用自动统计信息收集所需命令
UPDATE DB CFG FOR |
可以使用一个 XML 文档来指定哪个表应该包括以及哪个表不应该包括在自动统计信息收集中。在这个工具箱内,名为 DB2AutoRunstatsPolicy.xml 的文件内包含了一个用来定义过滤条件的样例文件。正如图 11 中所示,AutoRunstatsPolicy.xml 内的过滤条件指定了统计信息应该为所有表收集,包括系统表。
清单 11. DB2AutoRunstatsPolicy.xml 文件内的过滤条件
清单 12 显示了借助 sysproc.automaint_set_policyfile 存储过程用 DB2AutoRunstatsPolicy.xml 文件内指定的参数设置自动 RUNSTATS 策略的一个例子。 工具箱内的 runstatssetup.sh 脚本中使用了相同的命令。若按如下的指导使用这个工具箱脚本,则无需手动运行此命令。
db2 "call sysproc.automaint_set_policyfile('AUTO_RUNSTATS', 'DB2AutoRunstatsPolicy.xml')"
|
使用 embed-bundle.zip 工具箱文件按如下步骤设置自动 RUNSTATS:
Syntax: runstatssetup.sh |
组织良好的表和索引数据对于高效的数据访问和最佳的工作负载性能非常关键。在进行了很多插入、更新和删除操作后, 逻辑上连续的表数据可能会处于非连续的数据页,这会导致数据库管理器必须要执行额外的读操作才能访问数据。当访问从中删除了大量数据行的表中的数据时,额外的读操作也是必须的。可以启用 DB2 服务器来重组系统目录表以及用户表。
由 runstats 实用工具收集的统计信息显示了数据在表内的分布。对这些数据进行分析可以得知何种重组在何时是必须的。
通过使用 reorgchk 实用工具中的公式,该自动重组过程决定需要对表或索引进行重组。 它会定期地评估已对其统计信息进行了更新的表和索引以查看是否需要重组,并且在需要的时候,安排这些操作。
为了启用数据库的自动重组,将配置参数 auto_maint、 auto_tbl_maint 和 auto_reorg 设为 ON。 清单 14 显示了用来设置这些数据库参数以便启用自动数据库重组的样例命令。
UPDATE DB CFG FOR |
可以使用一个 XML 文档来指定数据库的重组策略。在这个工具箱内,名为 DB2AutoReorgPolicy.xml 的文件包含一个样例策略,可以根据如下条件自动地重组数据库中的表和索引内的数据:
清单 15 显示了借助 sysproc.automaint_set_policyfile 存储过程用在 DB2AutoReorgPolicy.xml 文件内指定的参数为数据库指定重组策略的一个例子。 包含在这个工具箱内的 reorgsetup.sh 脚本中使用了相同的命令。若按如下的指导使用这个工具箱脚本,则无需手动运行此命令。
db2 "call sysproc.automaint_set_policyfile('AUTO_REORG', 'DB2AutoReorgPolicy.xml')"
|
使用 embed-bundle.zip 工具箱文件按如下步骤设置自动重组:
Syntax: reorgsetup.sh |
对 DB2 数据库服务器进行静默更新
IBM 会定期地以称为修复包的可安装映像的形式发布对 DB2 的更新。
每个修复包映像包含一个命令行实用工具,称为 installFixPack,可用来静默更新安装于某个指定位置处的 DB2 产品。若此实用工具用在任何 UNIX 或 Linux 平台上,那么安装路径上的每个实例都将会被更新成与修复包映像相同的水平。
在安装 DB2 修复包之前,安装路径上的每个实例的数据库管理器(DBM)都必须停止并且所有 DB2 库都必须已上载完毕。如果这些先决条件得到满足,installFixPack 就会安装这个修复包并且更新安装路径上的每个实例和 DB2 管理服务器(DAS)。无需额外的手动更新。
embed-bundle.zip 工具箱包含一个包装器脚本,称为 silent_fixpackinstall.sh,可用来停止所有的 DB2 服务,使用 installFixPack 实用工具安装修复包及静默更新这个数据库服务器实例。
下载 DB2 修复包的步骤如下:
gunzip imagefile.tar.gz tar -xvf imagefile.tar |
按照如下步骤静默地应用此 DB2 修复包:
清单 18. 如何使用 silent_fixpackinstall.sh 脚本
Syntax: silent_fixpackinstall.sh --imagepath= |
注意: 为了以 DB2 实例所有者身份运行 installFixPack 实用工具,需要将此 DB2 实例所有者用户的名字(比如 db2inst1)添加到目标计算机上的 sudoers 列表。为了实现此目的,当作为根用户登录时,使用 visudo 编辑 /etc/sudoers 文件并将如下这行代码添加到末端:
db2inst1 ALL=(ALL) NOPASSWD:ALL
如果不能将 db2inst1 添加到 sudoers 列表,那么作为 DB2 实例所有者,您必须停止所有 DB2 服务,并以根用户的身份安装这个修复包。请参考此工具箱内的 silent_fixpackinstall.sh 脚本来查看用来停止 DB2 服务的命令。
自调优内存管理器
自调优内存管理器(STTM)是一个 DB2 特性,用来在启用时自动设置几个内存配置参数的值。在没有任何 DBA 介入情况下,STTM 可通过在主要的内存消耗者间动态分配可用内存资源来优化性能。STMM 致力于调优不同页面大小的排序堆、锁定内存、包缓存和缓冲区池。
对于新创建的数据库,STMM 是默认开启的。但是,也可以手动将 STMM 打开或关闭。为了打开 STMM,将 SELF_TUNING_MEM 配置参数设为 ON。 清单 19 显示了手动启用 STMM 所需命令。
UPDATE DB CFG FOR DATABASE |
STMM 开启后,下一个步骤是指定想要 STMM 处理哪些内存参数。为此,需要将那些参数设置为 AUTOMATIC。 清单 20 显示了为某特定参数开启 STTM 所需的命令。
清单 20. 在某特定的数据库参数上启用 STMM 所需命令
UPDATE DB CFG FOR DATABASE |
STMM 还可调优多个缓冲区池。为了让缓冲区池可被 STMM 调优,需要将此缓冲区池的大小设置为 AUTOMATIC。 清单 21 显示了两个用来将缓冲区池大小设为 AUTOMATIC 的命令示例。
ALTER BUFFERPOOL |
自动存储管理
通过自动存储管理,DB2 可以在数据库级别管理存储。在数据库创建时,用户指定一组存储设备供数据库管理器控制。数据库管理器之后会在需要的时候自动创建、扩展并添加容器。有了这个特性,就不再需要使用显式容器定义来手动管理表空间级别的存储。
为了为一个 DB2 数据库启用自动存储管理,需在 CREATE DATABASE 语句上指定 AUTOMATIC STORAGE YES 及存储路径的位置。 清单 22 显示了 CREATE DATABASE 命令的一个例子,它启用了自动存储并创建在 storagePath1 和 storagePath2 上定义的一个存储组。
CREATE DATABASE |
假设您用清单 22 内的命令创建了一个数据库,由您定义的使用自动存储的任何表空间都将自动地具有在 storagePath1 和 storagePath2 这两个位置上定义的容器的存储路径。 清单 23 显示了一个 CREATE TABLESPACE 命令的例子,它可创建一个表空间供自动存储处理。由于您创建的这些新的表空间所在的这个数据库已经启用了自动存储,那么这些表空间默认就会使用自动存储,所以清单 23 中的 MANAGED BY AUTOMATIC STORAGE 子句是可选的。
CREATE TABLESPACE |
在这个例子中,如果 storagePath1 和 storagePath2 均无空间可用,那么可以为 DB2 添加额外的存储路径。清单 24 显示了用来向此存储池添加 storagePath3 的命令示例。在发出此命令后,所有的自动存储表空间都将自动地从这个新路径领取存储。
ALTER DATABASE |
由于在创建新数据库时,自动存储是默认启用的,并且会使用在 dftdbpath 数据库管理器参数内指定的存储路径,因而,如果想要启用自动存储并使用默认的存储路径,则无需通过 CREATE DATABASE 命令指定 AUTOMATIC STORAGE YES 或存储路径。 清单 25 显示了 CREATE DATABASE 命令的一个例子,它可默认启用使用了默认存储路径的自动存储。
CREATE DATABASE |
结束语
本教程的目的是向您展示如何发挥 DB2 9.7 自动特性的强大功能。在按照本教程中的指导使用了其提供的这个工具箱后,您现在应该可以自己启用 DB2 自动特性并自动化日常的维护任务。这就让您能够将 DB2 数据库嵌入到 Linux、UNIX 和 Windows。您可以轻松地定制此工具箱内的策略文件及脚本以满足您自己的需要。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15082138/viewspace-672114/ ,如需转载,请注明出处,否则将追究法律责任。