DB2最新维护手册_第1页
DB2最新维护手册_第2页
DB2最新维护手册_第3页
DB2最新维护手册_第4页
DB2最新维护手册_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DB2维护手册目录DB2维护手册1一、DB2入门-数据库实例5二、DB2日常维护日操作201、检查管理服务器是否启动212、检查DB2实例是否已经启动213、查看表空间状态是否正常214、查看表的状态225、查看磁盘空间236、检查存储管理软件是否正常237、检查数据库备份是否正常248、检查归档日志是否正确归档了249、查看缓冲池的命中率2410、查看当前运行最频繁的SQL,其命中率是否正常2411、查看当前连接的应用程序,有没有非法连接2512、检查有没有死锁2513、对表和索引进行runstats2514、检查表是否需要重组2515、对需要重组的表进行重组26三、DB2日常维护月操作27

2、1、查看DB2日志272、检查备份和日志是否都保存好了27四、DB2日常维护季度操作271、通过快照监控器,查看系统性能如何272、数据库补丁级别28五、注意事项281、不要删除活动日志文件282、注意交易日志存储空间283、按照系统的实际工作量配置日志空间294、设置正确数据库代码页295、检查许可证(License)安装情况306、创建数据库前调整好系统时间307、不要随便执行 chown (chmod) R (UNIX/Linux)308、在归档日志模式下使用LOAD记得加NONRECOVERABLE参数31六、附:以脱机方式重组表31七、附:索引重组32八、收集和更新统计信息的准则35

3、九、附:使用 CLP 捕获数据库运行状况快照39十、IBM DB2 日常维护汇总41十一、DB2常用命令集51一、 DB2入门-数据库实例在本文中,我使用 DB2 来指代 DB2 通用数据库 V8.1 for UNIX、Linux 和 Windows。在 DB2 中,实例提供了独立的环境,可在其中创建数据库对象并针对这些对象运行应用程序。由于这些环境是独立的,所以两个或更多的单独实例的对象可以有相同的名称。在 图 1中,有一个名为“MYDB2”的数据库,它与实例“DB2”相关;还有一个同名的数据库,但它与实例“MyInst”相关。实例允许用户具有用于生产、测试和开发目的的不同环境。以下是一些与

4、实例相关的命令:通过从命令行处理器(CLP)发出下列命令来显式地创建实例:                         db2icrt <instance name>在 Windows 平台上首次安装 DB2 时,缺省情况下会创建一个称为“DB2”的实例。在 UNIX 环境中,如果您选择创建实例,那么缺省的实例名称为“db2inst1”。 要删除实例,

5、请使用这条命令:                         db2idrop <instance name>要启动实例,请使用这条命令:                   

6、0;     db2start要停止实例,请使用这条命令:                         db2stop创建了实例后,就会生成到 DB2 代码的链接。对于 图 1中的示例而言,已创建了实例“DB2”和实例“MyInst”,两者都链接至同一段 DB2 代码。 V8 之前,曾有两种实例类型:“DB2”类型和“DAS

7、”类型。V8 中已经除去了 DAS 类型的实例;它的功能已经被作为服务器进程集成到产品中了。和许多其它关系数据库管理系统(RDBMS)一样,DB2 使用不同的机制来管理、监视和控制 DB2 系统的行为。这些机制包括:环境变量环境变量是在操作系统级别上定义的变量。例如,在 Windows 2000® 平台中,您可以为一个变量创建新的项,或者通过选择 Control Panel -> System -> Advanced Tab -> Environment Variables 来编辑现有变量的值。在 UNIX 中,您通常可以将安装了 DB2 之后所提供的脚本 db2p

8、rofile (Bourne 或 Korn shell)或 db2cshrc (C shell)添加到 .login 或 .profile UNIX 初始化文件中。 db2profile/db2cshrc 文件包含了“export”UNIX 命令,这些命令能确保每次调用 shell 时就传递一个 UNIX 环境变量。最常使用的 DB2 环境变量是“DB2INSTANCE”变量。该环境变量允许您指定当前活动实例,所有命令都将应用于该实例。对于本例而言,如果将 DB2INSTANCE 设置成“MyInst”,那么发出命令“ create database mydb ”会创建出与实例“MyInst”

9、相关的数据库。但是如果您想创建与实例“DB2”相关的该数据库,那么首先您必须将 DB2INSTANCE 变量的值更改成“DB2”。使用控制面板(在 Windows 中)db2profile(在 UNIX 中)来设置环境变量的值,将保证您下次打开窗口会话时该值不变;但是,如果您想在给定的窗口会话中临时更改该值,那么在 Windows 中您可以使用操作系统的“ set ”命令,或者在 UNIX 中使用“export”命令。例如,在 Windows 平台中,下面这个命令:set DB2INSTANCE=DB2 会将环境变量 DB2INSTANCE 的值设置成“DB2”。使用 set 命令时

10、常犯的错误是在等号(=)前后留有空格。绝对不能有空格!要查看该变量的当前设置,您可以使用下面三个方法中的任何一个:echo %DB2INSTANCE%  (Windows only)set DB2INSTANCEdb2 get instance 要获取系统中您可以执行的所有可用实例的列表,请发出下面这个命令:db2ilist DB2 概要注册表在 Windows 平台上使用 DB2 时,单词“注册表(Registry)”的使用往往会造成混淆。DB2 概要注册表(Profile Registry)变量与 Windows 注册表变量没有任何关系。过去,对某些环境变量进

11、行更改时,会要求用户重新引导机器。如果所有 DB2 变量都已被定义成环境变量,那么对变量值进行更改将会很麻烦。因此,当时决定将大多数 DB2 变量组成一个专门的 DB2 注册表,在其中进行更改无需重新引导机器。DB2 概要注册表分成四类;但是下面这两个是最常用的:DB2 全局级概要注册表(Global-Level Profile Registry) DB2 实例级概要注册表(Instance-Level Profile Registry) 两者的主要区别(您从它们的名称就可以看出)是变量适用的级别。全局级概要注册表变量的值适用于所有实例。因此,可以从图中看到,该注册表画在了两个实例框的外面。实

12、例级概要注册表变量的值适用于特定的实例。因此,您可以看到 图中那两个实例每个内部都有单独的“Instance-Level Profile Registry”框。要查看所设置的当前注册表变量,请从 CLP 发出下面这个命令:db2set -all 您可能会得到类似下面这样的输出:i DB2INSTPROF=C:PROGRAM FILESSQLLIBg DB2SYSTEM=RAULCHONG 正如您可能已经猜测到的那样,i 表明该变量是在实例级上定义的,而 g 表明它是在全局级上定义的。以下是一些与变量相关的命令:要查看可以在 DB2 中进行定义的所有注册表变量,请使用这个命令

13、: db2set -lr 要在全局级上设置特定变量(在这个示例中为 DB2INSTPROF )的值,请使用: db2set DB2INSTPROF="C:PROGRAM FILESSQLLIB" -g 要在实例级上为实例“MyInst”设置变量,请使用: db2set DB2INSTPROF="C:MY FILESSQLLIB"      -i MyInst请注意上面的示例,在两个级别(实例级和全局级)上设置了同一个变量。当注册表变量在不同级别上进行定义时,DB2 总是会选择最低级别的

14、值;在本例中,它将选择实例级的值。 db2set 命令和前一节中的 set 命令一样,等号(=)前后不该留有空格。某些注册表变量为了使更改生效,要求您停止和启动实例( db2stop/db2start )。另一些注册表变量则没有这个需求。为了安全起见,建议您在对注册表变量作了更改后总是停止和启动实例。配置参数配置参数是在两个不同的级别(实例级和数据库级)上定义的。每个级别上的变量都是不同的(不象注册表变量那样可以在不同级别上定义相同的变量)。在实例级上,变量被存储在数据库管理器配置文件(dbm cfg)中;对这些变量所作的更改会影响与该实例相关的“所有”数据库,这就是图中显示了 dbm cfg

15、 框(每个实例定义了一个),并且该框都显示在数据库框外面的原因。以下是一些与配置参数相关的命令:要从 CLP 查看 dbm cfg 的内容,请发出下面这个命令: db2 get dbm cfg要更新特定变量的值,请发出下面这个命令: db2 update dbm cfg using <parameter> <value>  例如: db2 update dbm cfg using INTRA_PARALLEL YES  V8 之前,对“所有”dbm cfg 变量所作的更改都要求您停止和启动实例( db2stop/db2start )。现在,V8 中有

16、大约 40的参数是“可联机配置的”参数;也就是说,不再需要停止和启动实例了。请参考“DB2 V8 管理指南(DB2 V8 Administration Guide)”以获取更多详细信息。在数据库级别上,变量被存储在数据库配置文件(db cfg)中;对这些变量所作的更改会影响特定的数据库。从 图 1中,您可以看到每个定义的数据库内部都有一个 db cfg 框。要查看 db cfg 的内容,请从 CLP 发出下面这个命令: db2 get db cfg for <dbname> 例如:db2 get db cfg for mydb1 要更新特定变量的值,请发出下面这

17、个命令: db2 update db cfg for <dbname> using <parameter> <value> 例如:db2 update db cfg for mydb1 using MINCOMMIT 3  V8 之前,对“所有”db cfg 变量进行更改都要求您断开与该数据库的所有连接;然后,在进行第一个新连接时,这些更改将生效。V8 中有大约 50的参数可以进行联机配置;也就是说,无需为了使更改生效而断开到数据库的所有连接。请参考“DB2 V8 管理指南(DB2 V8 Administration Guide)”以获取

18、更多详细信息。在 DB2 中,目录是存储有关数据库及其连接信息的二进制文件。DB2 中有四个如下所描述的主目录。还包括了相应的建立连接的命令;但是,许多用户发现客户机配置助手 GUI 工具(Client Configuration Assistant GUI Tool)非常便于建立连通性。系统数据库目录(或系统 db 目录)系统数据库目录是主要的“目录(table of contents)”,它包含了有关可以从您的 DB2 系统进行连接的所有数据库的信息。正如您可以从 图 1看到的那样,系统 db 目录是在实例级上进行存储的;因此,如果您打算删除一个实例,那么您应当考虑备份其内容。要列出系统

19、db 目录的内容,请从 CLP 发出下面这个命令:db2 list db directory  该命令输出中的任何项都包含单词“indirect”,这意味着:该项适用于本地数据库(即,驻留在您当前正在使用的机器上的数据库)。该项还会指向由“Database drive”项(在 Windows 中)或“Local database directory”项(在 UNIX 中)所指示的本地数据库目录。任何包含单词“Remote”的项都意味着:该项适用于远程数据库(即,驻留在其它机器上而非您当前正在使用的机器上的数据库)。该项还会指向由“Node name”项所指示的节点目录项。要将信息输入

20、系统 db 目录,您需要使用 catalog 命令:            db2 catalog db <db_name> as <alias> at node  <nodename>例如: db2 catalog db    mydb     as yourdb  at node  mynode 节点名是指向节点目录中某一项的指针。在发出这条命令之

21、前该项必须已经存在。通常只有在将信息添加到远程数据库的系统 db 目录时才使用 catalog 命令。对于本地数据库来说,在用 create database 命令创建数据库之后就自动创建 Catalog 项。本地数据库目录(或本地 db 目录)本地数据库目录包含了有关本地数据库(即,驻留在您目前正在使用的机器上的数据库)的信息。正如您可以从 图 1中看到的那样,本地数据库目录驻留在数据库结构内部。注意从该图还可以看到没有专门的命令用于将信息输入到该目录中。当您用 create database 命令创建数据库时,在该目录中会添加一项。要列出本地数据库目录的内容,请发出以下命令:db2 lis

22、t db directory on <path>  其中,可以从系统 db 目录相应项中的“Database drive”项(Windows 中)或“Local database directory”项(UNIX 中)获取 <path>。节点目录节点目录用于存储远程数据库的所有连通性信息。V8 仅支持 TCPIP 协议;因此,该目录中的大多数项将显示 TCPIP 信息,比如机器(其中包含了您想连接的数据库)的主机名或 IP 地址,还有相关的 DB2 实例的端口号。下面是一些与节点目录相关的命令:要列出节点目录的内容,请从 CLP 发出下面这个命令: db2 l

23、ist node directory要将信息输入节点目录,请从 CLP 发出 catalog 命令: db2      catalog tcpip node <node_name>         remote <hostname or IP_address>         server <port_name or port_number> 

24、;例如:db2      catalog tcpip node mynode                 server 60000  要想得到您想要连接的远程实例的端口号,可以查看该实例的 dbm cfg 中的 svcename 参数来实现。该值通常对应于 TCP/IP services 文件中的某一项。DCS 目录DCS 目录包含了通常驻留在 zSeries(S/390&

25、#174;)或 iSeries(AS/400®)机器上的主机数据库的连通性信息。您需要安装 DB2 Connect 软件。下面是一些命令:要列出 DCS 目录的内容,请从 CLP 发出下面这个命令: db2 list dcs directory  要将信息输入 DCS 目录,请从 CLP 发出 catalog 命令: db2 catalog dcs db as <location name>  例如: db2 catalog dcs db as db1g数据库是与实例相关的封闭且独立的单元。由于这个独立性,所以两个或更多的数据库的对象可以有相同的名称。

26、例如, 图 1显示了一个名为“MyTablespace1”的表空间,它位于与实例“DB2”相关的数据库“MYDB1”内部。还有一个同名的表空间,它位于也与实例“DB2”相关的数据库“MYDB2”内部。由于数据库是封闭单元,所以您不能执行涉及了两个不同数据库表的查询(除非您使用 Information Integrator(II)/ Relational Connect,这已经超出本文的讨论范畴)。例如,涉及数据库“MYDB1”中的“Table1”和数据库“MYDB2”中的“TableZ”的查询是不允许的。数据库是用命令 create database 创建的。请注意,这被认为是一个命令,而非

27、SQL 语句。当您创建数据库、表空间、日志和缓冲池时,会自动地创建配置文件,这就是完成该命令需要花费几秒钟的原因。表空间是用作逻辑表和物理容器之间中间层的逻辑对象。创建表空间时,您可以将它与特定的缓冲池(数据库高速缓存)以及特定的容器进行关联。容器是物理存储数据的地方,可以分成文件、目录和原始设备等几类。Catalog(SYSCATSPACE)、系统临时空间(TEMPSPACE1)和用户空间(USERSPACE1)都是表空间,并且都会在创建数据库时自动创建。Catalog 和系统临时空间都可以看作是系统结构,因为它们是数据库的正常操作所必需的。Catalog 包含了元数据(有关数据的数据)。一

28、些其它 RDBMS 把这个结构称作“数据字典”。不要把这一节的术语“Catalog”和早先提到的 catalog 命令混淆起来;它们毫无关系。系统临时表空间是数据库管理器执行操作(比如连接和排序)的工作区。至少必须有一个系统临时表空间。缺省情况下会创建 USERSPACE1 表空间,但是可以删除它。它是用来存储用户表的缺省位置。表是由行和列组成的无序的数据记录集。索引是与表相关的有序指针集,用于性能目的并确保唯一性。视频、音频和扫描文档等可以作为大对象(LOB)存储在数据库中。表、索引和 LOB 驻留在表空间中。日志是用于恢复目的的文件。日志记录了对数据库进行的每个操作。万一发生故障,在将数据

29、库恢复到某个一致的点方面,日志就显得至关重要了。缓冲池是一块内存区域,所有索引和数据页(除了 LOB)都必须有序地经过该区域,从而进行处理。它是数据库管理器所使用的主要高速缓存。在数据库性能问题方面,缓冲池是进行调优的最重要的对象。 案例研究既然您已经熟悉了 DB2 环境,那么让我们通过简单的案例研究来回顾一下本文中提到的所有概念:DB2 数据库管理员(DBA)由于突发的个人原因离开了公司,经理要您负责所有 DB2 系统。这是您担任新 DB2 DBA 的第一天,因而您想熟悉系统。您登录到安装了 DB2 的开发机器(Windows 2000),并打开 CLP 窗口。下面是您要进行的步骤

30、:1.    首先,您想要知道该机器中有多少实例:            db2ilist2.    然后,您想要知道当前哪个实例是活动的:            db2 get instance3.    用 db2ilist 命令,您发现该机器上定义了两个实例 实例“DB2”和实例“M

31、yInst”。用 db2 get instance 命令,您发现“DB2”实例是当前的活动实例。4.    现在您想要列出“MyInst”实例中的数据库。由于这个实例不是当前的活动实例,所以您首先得在当前 CLP 窗口中临时切换到该实例:            set DB2INSTANCE=MyInst5.    您再次发出 db2 get instance ,以查看 MyInst 现在是否是当前实例,然后为列出该实例中定义

32、的数据库,请发出以下命令:            db2 list db directory6.    该命令显示出该实例中只有一个数据库(MYDB2)。您想试着创建一个新的数据库(您随后将删除它),为此您执行:            db2 create database temporal7.    数据库的创建需要

33、花些时间,因为在缺省情况下会在数据库内部创建几个对象。发出另一个 db2 list db directory 命令将会显示两个数据库:“MYDB2”和“temporal”。8.    连接至“MYDB2”数据库(db2 connect to mydb2),并查看该数据库中有多少表( db2 list tables )。您还可以查看定义了多少表空间( db2 list tablespaces )。午餐时间到了,因此您决定把某些东西复原。首先,您决定删除临时数据库。当三秒钟掉电引起机器自动重新引导时,您正处于输入命令的过程中。您并不担心 DB2 数据库状态,因为您知道

34、 DB2 崩溃恢复会确保其前后一致;因此您在重新引导之后打开新的 CLP 窗口,接下来删除该数据库。            db2idrop MyInst 啊呀!出错了,您使用了错误的命令并删除了整个 MyInst 实例而不只是删除了数据库“temporal”。您是否因此丢失了与实例“MyInst”相关的数据库“MYDB2”和“temporal”?查看 图 1,您可能会觉得是丢失了;但是,情况并非如此。删除实例时,您并未删除与之相关的数据库。实例为您提供了链接 DB2 代码的

35、环境,以便这些代码依据用户数据使用实例。数据库被“关联”到实例。但是安装 DB2 新版本时,您通常会将实例“升级”成新的代码版本;而数据库保持不变。既然您已经镇定下来,知道并未丢失数据库,那么该开始思考 db2idrop 命令的工作原理。通常,如果您的实例是活动的,那么该命令会给您一个警告。然后您意识到重新引导机器后,实例“MyInst”并未自动启动,而“DB2”实例已经被配置成在引导机器后自动启动。还有,打开新的 CLP 窗口时, db2instance 环境变量的值被设置成“DB2”而不是“MyInst”,假设“DB2”是在机器的控制面板中为该环境变量指定的值。既然您意识到了这一点,那么您

36、该继续努力使一切恢复原样:1.    首先,您需要再次创建实例 MyInst:            db2icrt MyInst3.    现在,切换到该实例(set DB2INSTANCE=MyInst)。如果发出 list db directory 命令,您会得到一个指出系统 db 目录不存在的错误。如果看一下 图 1,您会明白:第一次删除实例时,所有实例范围内的配置文件和目录也都被删掉了。因此,实例级概要注册表、dbm

37、 cfg、系统 db 目录、节点目录和 dcs 目录都不见了。创建实例时,也创建了带有缺省值的 dbm cfg 和实例级注册表。庆幸的是,前任 DBA 存储了所有这些文件的内容备份。他发出类似于下面这样的命令:db2 get dbm cfg > dbmcfg.bkdb2set -all > db2set.bkdb2 list db directory > systemdbdir.bkdb2 list node directory > nodedir.bkdb2 list dcs directory > dcsdir.bk 4.  &#

38、160; 您必须使用适当的命令来手工恢复基于这些文件内容的值。对于您创建的“temporal”数据库,它是需要再次编目的本地数据库。发出命令“ db2 catalog db temporal on <drive/path> ”将足以在系统 db 目录中创建一个项,它将指向现有的本地 db 目录,因为您用缺省值创建了该数据库。本地 db 目录属于数据库;因此,当您删除实例时,并未将其删掉。5.    既然一切都恢复了,那么现在您可以删除数据库 temporal 了:       

39、60;    db2 drop database temporal7.    将 DB2INSTANCE 的值设回“DB2”( set DB2INSTANCE=DB2 )。好了,大功告成了!我们讨论了实例、配置文件、注册表变量、目录、数据库等等概念。 图便于您理解所有这些对象的驻留位置。提供的案例研究用来复习本文所讨论的所有概念。它包括了使用命令行处理器(CLP)来执行的命令。在本文中不曾讨论 GUI 工具。虽然使用 GUI 工具更容易管理 DB2 环境,但出于学习的目的,最好使用 CLP。一旦您对使用 CLP 的 DB2 环境方面有

40、了坚实的基础,那么学会使用 GUI 工具的技能应当是项很简单的任务。二、 DB2日常维护日操作1、 检查管理服务器是否启动用ps命令查看是否有dasusr1后台进程 ps -ef | dasusr1请确保管理服务器已经启动,如果没有启动,则按以下步骤启动管理服务器:Ø 以管理服务器用户(UNIX默认是DASUSR1)登录Ø 发出db2admin start命令Ø 如果是HA环境,则要保证在脚本中正确配置了启动命令2、 检查DB2实例是否已经启动用ps命令查看是否有db2sysc后台进程ps -ef | db2sysc也可以以DB2实例所有者登录,通过发出db2st

41、art命令来确保启动了实例(如果实例已经启动,则会告知SQL1026N 数据库管理器已激活;否则,将把实例启动起来)3、 查看表空间状态是否正常以db2实例所有者登录#db2 list tablespaces show detail /在单分区上查看表空间的状态,正常返回0x0000# db2_all list tablespaces show detail /在所有分区上查看表空间的状态 可以使用LIST TABLESPACES 命令确定连接数据库中表空间的当前状态,可以使用SHOW DETAIL选项查看表空间的详细信息。比如,我们连上SAMPLE数据库,执行list tablespaces

42、 show detail ,可以看到状态返回值是0x0000,此时,使用db2tbst可以查看状态编号对于的状态含义,具体语法如下:db2tbst <tablespace state> 可以查看编号所代表的状态 db2tbst 命令接收十六进制的状态值,并返回相应的表空间状态。例如,命令 db2tbst 0x0008 返回 State = Load Pending 。而该十六进制的状态值反过来又是 LIST TABLESPACES 命令输出的组成部分。表空间的外部可见状态是由单个状态值的十六进制总和构成的。例如,如果表空间的状态是 Backup Pending和 Load in P

43、rogress,那么所返回的十六进制值就是 0x20020(0x00020 + 0x20000)4、 查看表的状态 查询系统目录视图以获得关于数据库的有用信息。例如,下面的语句使用 NOT LIKE 断言,返回在 SYSCAT.TABLES 中有项的所有用户定义的表的名称,以及每个表的列数和表的状态(N = 正常;C = 待审核(check pending)#db2 select tabname, colcount, status FROM syscat.tables WHERE tabschema NOT LIKE 'SYS%' ORDER BY tabname 也可以使用l

44、oad query命令查看单个表的状态,比如对表TEST1,我们可以发出如下命令:#db2 load query table test15、 查看磁盘空间 查看数据库活动日志目录是否已满,活动日志目录可以使用get db cfg查看,注意一定不要手工删除活动日志#df -k查看SMS表空间对应的容器目录空间是否满了#df -k查看DMS表空间中是否还有可用页#db2 list tablespaces show detail /在单分区上查看表空间的是否还有可用页# db2_all list tablespaces show detail /在所有分区上查看表空间是否还有可用页6、 检查存储管理

45、软件是否正常请检查TSM或其他存储管理软件是否正常,以及磁带机是否运行正常。7、 检查数据库备份是否正常 请查看TSM或第三方存储管理软件,看备份映像文件是否完整的保存到了磁带机上了,想在DB2上查看备份情况,可以使用LIST命令# db2 list history backup all for 数据库名8、 检查归档日志是否正确归档了 请确保活动日志目录下没有的日志文件都已经正确归档到了带机上(查看TSM或第三方存储管理软件)。查看活动目录里的日志文件:#ls -l9、 查看缓冲池的命中率# db2 get snapshot for bufferpools on 数据库名查看缓冲池的命中率,

46、看其是否低于95%(命中率越高越好)10、 查看当前运行最频繁的SQL,其命中率是否正常# db2 get snapshot for bufferpools on 数据库名 > log.txt 用grep命令查看" Number of executions"执行次数最频繁的语句,看其命中率是否正常。比如:grep -n " Number of executions" snap.out | grep -v "= 0" | sort -k 5,5rn | more 11、 查看当前连接的应用程序,有没有非法连接#db2 list a

47、pplications show detail 看这些连接的情况,看有没有不合适的IP连上来,或者不被允许的第三方工具连上来,比如一些第三方工具连上来会对表进行锁定,影响业务系统正常运行,这个时候可以用FORCE APPLICATIONS (应用程序句柄)停下来。12、 检查有没有死锁# db2 get snapshot for all on 数据库名 > log.txt用grep命令查看输出的文件中是否有死锁的记录,比如grep -n "Deadlocks detected" log.txt | grep -v "= 0" | more 13、

48、对表和索引进行runstats#db2 runstats on table 表名 and index all对系统表以及变化比较频繁的表运行统计信息,建议写成shell脚本自动运行。14、 检查表是否需要重组使用REORGCHK命令,通过统计数据检查表是否需要重组,语法如下:REORGCHK UPDATE | CURRENT STATISTICS ON TABLE SYSTEM| TABLE USER | TABLE ALL | TABLE table_name | SCHEMA schema_nameUPDATE STATISTICS: 更新表的统计数据,根据该统计数据判断是否需要重组表CU

49、RRENT STATISTICS:根据当前表统计数据判断是否需要重组表TABLE table_name : 对单个表进行分析TABLE ALL: 对数据库所有的表进行分析TABLE SYSTEM: 对系统表进行分析TABLE USER : 对当前用户模式下的所有表进行分析#db2 reorgchk update statistics on table all15、 对需要重组的表进行重组#db2 reorg table 表名 /通过重构行来消除“碎片”数据#db2 reorg indexes all for table 表名 /只重组索引比如:reorg table

50、index by_id将根据索引by_id,如果不加INDEX选项将重组表和所有的索引reorg table index by_id use tempspace1使用指定的临时表空间重组表 表重组完成后需要进行RUNSTATS。另外,记住在分区数据库环境中,如果想在所有节点运行命令,需要使用db2_all命令。三、 DB2日常维护月操作1、 查看DB2日志请至少每月查看一次db2diag.log文件,看其中是否有异常。2、 检查备份和日志是否都保存好了通过TSM或第三方存储管理软件,查看备份和归档日志是否都保存好了,在数据库级别查看备份,可以使用:# db2 list

51、 history backup all for 数据库名四、 DB2日常维护季度操作1、 通过快照监控器,查看系统性能如何通过快照监控器,抓取数据库的信息,分析数据库性能是否合理:# db2 get snapshot for all on 数据库名 > log.txt2、 数据库补丁级别# db2level五、 注意事项1、 不要删除活动日志文件 DB2 的活动日志文件不能被删除。一旦 DB2 的活动日志文件被删除,或者所在的存储设备出现问题,则不可避免地造成 DB2 数据库系统宕机。2、 注意交易日志存储空间 在归档日志模式下,如果没有使用自动归档方式,则存储的日志文件会不断增多,有可

52、能造成日志所在的文件系统空间满。 当这种情况发生时,会根据参数 BLK_LOG_DSK_FUL 的配置而有不同的现象:1)如果该参数启用,则 DB2 数据库可继续读操作,但是写操作会挂起2)如果该参数没有启用,则 DB2 数据库会停止工作两种情况下,都需要到日志所在的文件系统添加了空间才恢复正常。3、 按照系统的实际工作量配置日志空间DB2数据库通过日志文件维护数据的完整性和一致性。DB2 数据库的日志空间可通过如下公式计算:日志空间 = (主日志文件 + 二级日志文件) * 日志文件尺寸 其中:1) 主日志文件由参数 LOGPRIMARY 控制,2) 二级日志文件由参数 LOGSECOND

53、控制3) 日志文件尺寸由参数 LOGFILSIZ 控制4) LOGPRIMARY + LOGSECOND < 256 (不同的 DB2 版本略有不同,请参看相同版本的 DB2 手册确认)4、 设置正确数据库代码页由于数据库的代码页在数据库创建之后是无法修改的,所以在创建数据库时一定要选择正确的代码页。错误的数据库代码页会造成 JDBC/ODBC 访问时中文字段被截断(包括控制中心),这种情况需要重建数据库以修改数据库代码页。从全局规划来说,如果应用需要访问多个数据库,那么这多个数据库的代码页应该是一致的。5、 检查许可证(License)安装情况许可证过期会造成不必要的服务中断,所以在

54、DB2 安装完毕后,建议检察许可的安装情况6、 创建数据库前调整好系统时间 在数据库创建好之后,调整系统时间会造成数据库内部时间戳的异常。数据库中一些对象和时间相关,一旦时间不准确要调整需要很小心。错误的时间调整可能会造成很多问题,如:1)某些对象失效,例如 : SQL0440N,找不到具有兼容自变量的类型为 “<例程类型>” 的名为 “<例程名>” 的已授权例程2)数据库日志逻辑错误 -> 宕机3)常见错误 只调整时间,未调整时区7、 不要随便执行 chown (chmod) R (UNIX/Linux)在实例目录下chown (chmod) -R 会造成1)

55、在数据库服务器上 db2 connect to <dbname> 能连接上数据库2) db2 connect to <dbname> user . using .连接不上8、 在归档日志模式下使用LOAD记得加NONRECOVERABLE参数六、 附:以脱机方式重组表 以脱机方式重组表是整理表碎片的最快方法。重组可减少表所需的空间量并提高数据访问和查询性能。 必须具有 SYSADM、SYSCTRL、SYSMAINT 或 DBADM 权限,或者必须具有对表的 CONTROL 权限才能重组表。必须具有数据库连接才能重组表。 标识需要重组的表之后,可以对这些表运行 REORG

56、 实用程序,并且可以选择对在这些表上定义的任何索引运行该实用程序。1. 要使用 CLP 重组表,请发出 REORG TABLE 命令: db2 reorg table test.employee要使用临时表空间 mytemp 重组表,请输入:db2 reorg table test.employee use mytemp要重组表并根据索引 myindex 对行进行重新排序,请输入:db2 reorg table test.employee index myindex2. 要使用 SQL 调用语句重组表,请使用 ADMIN_CMD 过程发出 REORG TABLE 命令: call syspro

57、c.admin_cmd ('reorg table employee index myindex')3. 要使用 DB2 管理 API 重组表,请使用 db2REORG API。 在重组表之后,应收集有关表的统计信息,以便优化器具有最准确的数据来评估查询访问方案。七、 附:索引重组 通过删除和插入操作对表进行更新后,索引的性能会降低,其表现方式如下: · 叶子页分段 叶子页被分段之后,由于必须读取更多的叶子页才能访存表页,因此 I/O 操作成本会增加。· 物理索引页的顺序不再与这些页上的键顺序相匹配(此称为不良集群索引)。 叶子页出现不良集群情况后,顺序预取

58、操作的效率将降低,因此会导致更多的 I/O 等待。· 形成的索引大于其最有效的级别数。 在此情况下应重组索引。 如果在创建索引时设置了 MINPCTUSED 参数,则在删除某个键且可用空间小于指定的百分比时,数据库服务器会自动合并索引叶子页。此过程称为联机索引整理碎片。但是,要复原索引集群和可用空间以及降低叶级别,请使用下列其中一种方法: · 删除并重新创建索引。 · 使用 REORG INDEXES 命令联机重组索引。 因为此方法允许用户在重建表索引期间对表进行读写操作,所以在生产环境中可能需要选择此方法。· 使用允许脱机重组表及其索引的选项运行 RE

59、ORG TABLE 命令。 联机索引重组 在使用 ALLOW WRITE ACCESS 选项运行 REORG INDEXES 命令时,如果同时允许对指定的表进行读写访问,则会重建该表的所有索引。进行重组时,对基础表所作的任何将会影响到索引的更改都将记录在 DB2® 日志中。另外,如果有任何内部内存缓冲区空间可供使用,则还将这些更改放在这样的内存空间中。重组将处理所记录的更改以便在重建索引时与当前写活动保持同步更新。内部内存缓冲区空间是根据需要从实用程序堆中分配的指定内存区域,它用来存储对正在创建或重组的索引所作的更改。使用内存缓冲区空间使索引重组操作能够通过这样的方式来处理更改,即先

60、直接从内存读取,然后读取日志(如有必要),但读取日志的时间要晚得多。在重组操作完成后,将释放所分配的内存。重组完成后,重建的索引可能不是最佳集群的索引。如果为索引指定 PCTFREE,则在重组期间,每页上均会保留相应百分比的空间。 对于分区表,支持对各个索引进行联机索引重组和清除。要对各个索引进行重组,指定索引名:REORG INDEX index_name for TABLE table_name 对于空间索引或多维集群(MDC)表,不支持采用 ALLOW WRITE 方式的联机索引重组。 注: REORG INDEXES 命令的 CLEANUP ONLY 选项不能完全重组索引。CLEANU

61、P ONLY ALL 选项将除去那些标记为“删除”且被认为要落实的键。此外,它还将释放所有标记为“删除”且被认为要落实的键所在的页。在释放页后,相邻的叶子页将会合并,前提是这样做可以在合并页上至少留出 PCTFREE 可用空间。PCTFREE 是指在创建索引时为其定义的可用空间百分比。CLEANUP ONLY PAGES 选项仅删除那些标记为“删除”且被认为要落实的所有键所在的页。 使用 CLEANUP ONLY 选项对分区表的索引进行重组时,支持任何访问级别。如果未指定 CLEANUP ONLY 选项,则缺省访问级别 ALLOW NO ACCESS 是唯一支持的访问级别。REORG INDE

62、XES 具有下列要求: · 对索引和表具有 SYSADM、SYSMAINT、SYSCTRL 或 DBADM 权限,或者具有 CONTROL 特权。 · 用于存储索引的表空间的可用空间数量等于索引的当前大小 在发出 CREATE TABLE 语句时,考虑在大型表空间中重组索引。· 其他日志空间 REORG INDEXES 需要记录其活动。因此,重组可能会失败,尤其是在系统繁忙和记录其他并发活动时。注: 如果具有 ALLOW NO ACCESS 选项的 REORG INDEXES ALL 命令运行失败,则会标记索引无效并且此项操作不可撤销。但是,如果具有 ALLOW READ ACCESS 选项的 REORG 命令或具有 ALLOW WRITE ACCESS 选项的 REORG 命令运行失败,则可以复原原来的索引对象。八、 收集和更新统计信息的准则 RUNSTATS 命令收集表、索引和统计信息视图的统计信息,以为优化器提供准确信息进行访问方案选择。在下列情况下,使用 RUNSTATS 实用程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论