2008年(239)
分类:
2008-06-17 22:15:07
系统的启动和关闭
(1)系统的启动
启动数据库管理器:
$ db2start
启动管理服务器:
$ db2admin start
(2)系统的关闭
检查是否存在数据库的应用程序连接:
$ db2 list applications
如果存在,就强制断开。
$ db2 force application all
关闭数据库管理器:
$ db2stop
关闭管理服务器:
$ db2admin stop
2. 系统运行日志文件的检查
DB2系统有两个运行日志文件,确省存放在目录:sqllib/db2dump/下,需要每天检查、定期备份并手工清除其内容:
(1)通知日志文件(notification log file):{instance_name}.nfy
(2)诊断文件(diagnostic file):db2diag.log
另外,此目录下还会存在一些dump文件,是由于事务、系统错误而生成的内存映像,需要定期备份后删除。
3. 系统运行状况检查
管理员要随时关注数据库系统的运行。对DB2系统,管理员可以从实例和数据库状态、用户连接、磁盘空间使用等多个方面,检查系统的运行状况。
(1)系统版本、实例定义和状态
显示当前DB2系统的版本号和补丁号:
$ db2level
显示操作系统中建立的所有实例名称:
$ db2ilist
显示当前操作的实例名称:
$ db2 get instance
显示当前实例是否处于活动状态:
$ db2_local_ps
$ ps -ef | grep {user_name}
$ ipcs -a | grep {user_name}
显示节点定义及相关信息:
$ db2 list node directory
(2)系统配置
显示数据库管理器配置:
$ db2 get dbm cfg
显示管理服务器配置:
$ db2 get admin cfg
显示数据库配置:
$ db2 get db cfg for {database_name}
显示概要文件注册表设置:
$ db2set –all
显示操作系统环境设置:
$ env 或 vi db2profile
(3)数据库的定义和运行状态
显示数据库定义及相关信息:
$ db2 list db directory
显示当前被打开的数据库:
$ db2 list active databases
显示数据库的状态:
$ db2 get db cfg for {database_name} | grep “Backup pending”
$ db2 get db cfg for {database_name} | grep “Database is consistent”
$ db2 get db cfg for {database_name} | grep “Rollforward pending”
$ db2 get db cfg for {database_name} | grep “Restore pending”
显示当前用户连接和状态:
$ db2 list applications
$ db2 list applications show detail
显示数据库缓冲池定义:
$ db2 "select * from syscat.bufferpools"
(4)表空间、容器的定义和空间使用
显示表空间、容器的定义:
$ db2 list tablespaces
$ db2 list tablespace containers for {tablespace_id}
显示表空间、容器的空间使用:
$ db2 list tablespaces show detail
$ db2 list tablespace containers for {tablespace_id} show detail
如果使用SMS表空间,用下列命令决定是否有可用空间:
$ df –k
(5)数据库日志的定义和空间使用
$ db2 get db cfg for {database_name} | grep LOGRETAIN
$ db2 get db cfg for {database_name} | grep USEREXIT
$ db2 get db cfg for {database_name} | grep LOGPRIMARY
$ db2 get db cfg for {database_name} | grep LOGSECOND
(6)表和索引定义检查
显示数据库中的用户表:
$ db2 list tables for user
显示表的定义和结构:
$ db2 describe table {table_name}
$ db2 describe table {table_name} show detail
显示表上索引的定义和结构:
$ db2 describe indexes for table {table_name}
$ db2 describe indexes for table {table_name} show detail
可以使用db2look工具,将所有数据库对象的定义和结构导出,进行查看。
4. 系统性能状况分析
管理员可以根据需要,使用以下方法,收集DB2数据库系统的运行数据,以确定系统性能瓶颈:
获取整个数据库管理器的运行统计信息:
$ db2 get snapshot for dbm > {output_file}
获取所有数据库的运行统计信息:
$ db2 get snapshot for all databases > {output_file}
获取所有应用程序的运行统计信息:
$ db2 get snapshot for all applications > {output_file}
获取所有缓冲池的运行统计信息:
$ db2 get snapshot for all bufferpools > {output_file}
获取单个数据库的运行统计信息:
$ db2 get snapshot for database on {database_name} > {output_file}
获取单个数据库中所有应用程序的运行统计信息:
$ db2 get snapshot for applications on {database_name} > {output_file}
获取单个数据库中所有表的运行统计信息:
$ db2 get snapshot for tables on {database_name} > {output_file}
获取单个数据库中所有表空间的运行统计信息:
$ db2 get snapshot for tablespaces on {database_name} > {output_file}
获取单个数据库中所有锁的运行统计信息:
$ db2 get snapshot for locks on {database_name} > {output_file}
获取单个数据库中所有缓冲池的运行统计信息:
$ db2 get snapshot for bufferpools on {database_name} > {output_file}
获取单个数据库中所有动态SQL语句的运行统计信息:
$ db2 get snapshot for dynamic sql on {database_name} > {output_file}
需要时,可以复位统计信息,重新开始以上的信息收集:
$ db2 reset monitor all
5. 系统配置的改变
DB2系统不允许用户直接修改系统的各种配置文件。要改变系统的各种配置,管理员可以使用以下方法:
① 改变数据库管理器参数设置:
$ db2 update dbm cfg using {parameter_name} {parameter_value}
② 改变管理服务器参数设置:
$ db2 update admin cfg using {parameter_name} {parameter_value}
③ 改变数据库参数设置:
$ db2 update db cfg for {database_name} using {parameter_name} {parameter_value}
④ 改变概要文件注册表参数设置:
$ db2set {variable_name}={variable_value}
⑤ 改变数据库缓冲池参数设置:
$ db2 alter bufferpool {bufferpool_name} size {size_value}
6. 数据库日志维护
DB2系统支持日志的归档和非归档两种模式,确省情况下数据库处于非归档日志模式。可以通过设置LOGRETAIN和USEREXIT这两个数据库配置参数中的任何一个,改变数据库日志模式为归档模式:
$ db2 update db cfg for {database_name} using logretain recovery 或
$ db2 update db cfg for {database_name} using userexit yes
在非归档模式下,管理员不需要维护数据库日志;在归档模式下,管理员需要归档数据库日志,可以采用两种归档方式:自动归档和手工归档。
(1)自动归档
设置USEREXIT数据库参数,数据库就自动归档日志。在设置该参数前,用户需要提供一个应用程序,命名为db2uext2,存放在sqllib/bin目录下。在日志文件被写满后,系统自动执行该程序,将这个日志文件从当前目录移动到其它位置进行保存。
(2)手工归档
管理员需要定期归档被删除日志目录下不再被系统需要的日志文件,从而保证日志目录下有足够的空间,系统能够在需要时,产生新的日志文件。按照以下的步骤,手工地归档日志文件:
① 查看当前使用的日志文件目录(参数:path to log files)以及系统仍旧在使用的第一个活动日志文件(参数:first active log file)。
$ db2 get db cfg for {database_name}
② 假定参数first active log file = S0015555.LOG。这说明当前第一个活动日志文件是S0015555.LOG,由于日志文件的名字被顺序编号,因此在这之前的任何日志文件都可以被归档,然后从当前目录下删除。
③ 使用操作系统命令,将S0015555.LOG之前的所有日志文件拷贝到其它地方进行归档。
④ 从当前目录下删除S0015555.LOG之前的所有日志文件。
$ db2 connect to {database_name}
$ db2 prune logfile prior to S0015555.LOG
$ db2 connect reset
7. 备份和恢复处理
管理员按照规划、定期地备份数据库。备份信息越完整,在系统故障时就越容易恢复。对DB2系统,除数据库备份之外,其备份还可以包括:运行环境备份、数据库对象的SQL语句定义备份。
(1)实例运行环境备份
对实例的运行环境,需要备份:数据库管理器配置、数据库配置、概要文件注册表(profile registry)、磁盘空间的使用和操作系统环境设置。
$ db2 get dbm cfg > {output_file}
$ db2 get db cfg for {database_name} > {output_file}
$ db2set –all > {output_file}
$ db2 list tablespaces show detail > {output_file}
$ db2 list tablespace containers for {tablespace_id} show detail > {output_file}
$ cp .profile {output_file}
$ cp db2profile {output_file}
(2)用户创建数据库对象的SQL语句定义备份
使用db2look工具,可以基于整个数据库、也可以基于某个用户,将有关的数据字典信息存放在文本文件中。
$ db2look -d {database_name} -e -o {output_file}
$ db2look -d {database_name} -u {user_name} -e -o {output_file}
(3)数据库备份
数据库备份需要在数据库管理器启动后进行。可以在备份前,检查数据库结构的完整性;在备份完成后,检查备份的正确性。
① 备份前,检查数据库结构是否正确。
$ db2dart {database_name}
② 根据需要,选用不同的备份方式。
数据库的脱机备份:
$ db2 backup database {database_name} to {backup_path}
数据库的联机完整备份:
$ db2 backup database {database_name} online to {backup_path}
数据库的联机表空间备份:
$ db2 backup database {database_name} tablespace ({tablespace_name}) online to {backup_path}
数据库的联机增量备份:
$ db2 backup database {database_name} online incremental to {backup_path}
③在备份完成后,检查备份是否可用。
$ db2ckbkp {backup_file}
(4)数据库恢复
数据库恢复需要在数据库管理器启动后进行。可以在恢复前,检查可用的数据库备份,再根据数据库的归档日志模式,决定恢复方式。
① 显示可用的备份。
$ db2 list history backup all for database {database_name}
② 根据日志的归档模式,选用恢复方式。
非归档模式下的数据库恢复:
$ db2 restore database {database_name} from {backup_path}
归档模式下,整个数据库的恢复:
$ db2 restore database {database_name} from {backup_path}
$ db2 rollforward database {database_name} to end of logs and complete
归档模式下,单个或者多个表空间的恢复:
$ db2 restore database {database_name} tablespace {tablespace_name} from {backup_path}
$ db2 rollforward database {database_name} to end of logs and complete
8. 数据库对象统计信息的维护
确定何时、对那些表和索引执行何种程度的统计信息收集,是管理员的工作职责。在DB2系统中,如果重新生成了统计信息,就需要手工、重新生成程序中静态SQL语句的程序包。系统不会在运行过程中自动地生成静态SQL语句的执行计划。
(1)管理员根据需要,对表、索引进行不同程度的统计信息收集。
对表进行信息统计,不进行字段列上的数值分布统计:
$ db2 runstats on table {table_name}
对表进行信息统计,在指定字段列上进行数值分布统计:
$ db2 runstats on table {table_name} with distribution on columns({column_name},…)
对表上索引进行信息统计:
$ db2 runstats on table {table_name} for indexes all
对表上索引所使用的字段列进行信息统计:
$ db2 runstats on table {table_name} on key columns and indexes all
(2)在统计信息收集完成后,重新生成静态SQL语句的执行包。
使用预编译时生成的绑定文件:
$ db2 bind {bind_file_name}
或者,由系统根据数据库中的现有程序包,重新进行生成:
$ db2rbind {database_name} /l {log_file}
9. 数据的磁盘空间整理
在对数据的磁盘空间进行整理之前,最好能够确定那些表、索引需要这些操作。这样可以做到有的放矢,避免浪费系统资源。DB2系统通过reorgchk工具,来找出数据库中需要重组的用户表、索引:
$ db2 reorgchk current statistics on table user
对需要重建的表和索引,除了第9.3.11一节所讨论方法之外,在DB2系统中还可以使用下列方法对表、索引进行重组。
对指定的表进行重组:
$ db2 reorg table {table_name}
对指定表的指定索引进行重组:
$ db2 reorg table {table_name} index {index_name}
对指定表的所有索引进行重组:
$ db2 reorg indexes all for table {table_name}
10. 数据的导入和导出
除SQL语句之外,DB2系统提供export和import、load、db2move工具,进行数据的导入和导出。
(1)export工具通过SQL语句将要导出数据存放在文本文件中,使用ixf格式可以同时导出表的结构;使用import将数据导入表中。
将要导出数据存放到文本文件中:
$ db2 export to {output_file} of del "{select查询语句}"
导出表的结构和数据存放到输出文件中:
$ db2 export to {output_file} of ixf "select * from {table_name}"
将数据装入指定的表中:
$ db2 import from {input_file} of del insert into {table_name}
创建表并导入数据:
$ db2 import from {input_file} of ixf create into {table_name}
(2)load工具用来装入数据,可以使用export工具导出的数据。在执行时表间参照、列完整性不会被检查,触发器不会被触发,因此其处理比import工具快。load工具的整个处理过程分为四个步骤,在使用时要仔细考虑和规划,以免造成数据表的破坏。
(3)db2move工具可以实现数据库系统之间的大数据量移动,可以将整个数据库、单个或者多个表等数据库对象的结构和数据导出到操作系统文件中,可以根据需要,重建数据库、单个或者多个数据库对象等,然后装入数据。
将数据库的结构和数据导出到当前目录下:
$ db2move {database_name} export
将指定表的结构和数据导出到当前目录下:
$ db2move {database_name} export -tn {table_name}
根据当前目录下整个数据库的输出,重建数据库并导入数据:
$ db2move {database_name} import
根据当前目录下单个表的输出,装入数据:
$ db2move {database_name} import -io insert