DB常维护手册.docx
《DB常维护手册.docx》由会员分享,可在线阅读,更多相关《DB常维护手册.docx(15页珍藏版)》请在冰豆网上搜索。
![DB常维护手册.docx](https://file1.bdocx.com/fileroot1/2022-12/6/0fbd8a12-ec06-4842-9f77-379b3d2210af/0fbd8a12-ec06-4842-9f77-379b3d2210af1.gif)
DB常维护手册
DB2
日
常
维
护
手
册
DB2日常维护手册
一、DB2日常维护操作
1.检查管理服务器是否启动
用ps命令查看是否有dasusr1后台进程
#ps-ef|dasusr1
请确保管理服务器已经启动,如果没有启动,则按以下步骤启动管理服务器:
以管理服务器用户(UNIX默认是DASUSR1)登录
发出db2adminstart命令
如果是HA环境,则要保证在脚本中正确配置了启动命令
2.检查DB2实例是否已经启动
用ps命令查看是否有db2sysc后台进程
#ps-ef|db2sysc
也可以以DB2实例所有者登录,通过发出db2start命令来确保启动了实例(如果实例已经启动,则会告知SQL1026N数据库管理器已激活;否则,将把实例启动起来)
3.查看表空间状态是否正常
以db2实例所有者登录
#db2listtablespacesshowdetail//在单分区上查看表空间的状态,正常返回0x0000
#db2_alllisttablespacesshowdetail//在所有分区上查看表空间的状态
可以使用LISTTABLESPACES命令确定连接数据库中表空间的当前状态,可以使用SHOWDETAIL选项查看表空间的详细信息。
比如,我们连上SAMPLE数据库,执行listtablespacesshowdetail,可以看到状态返回值是0x0000,此时,使用db2tbst可以查看状态编号对于的状态含义,具体语法如下:
db2tbst可以查看编号所代表的状态
db2tbst命令接收十六进制的状态值,并返回相应的表空间状态。
例如,命令db2tbst0x0008返回State=LoadPending。
而该十六进制的状态值反过来又是LISTTABLESPACES命令输出的组成部分。
表空间的外部可见状态是由单个状态值的十六进制总和构成的。
例如,如果表空间的状态是BackupPending和LoadinProgress,那么所返回的十六进制值就是0x20020(0x00020+0x20000)
4.查看表的状态
查询系统目录视图以获得关于数据库的有用信息。
例如,下面的语句使用NOTLIKE断言,返回在SYSCAT.TABLES中有项的所有用户定义的表的名称,以及每个表的列数和表的状态(N=正常;C=待审核(checkpending))
#db2selecttabname,colcount,statusFROMsyscat.tablesWHEREtabschemaNOTLIKE'SYS%'ORDERBYtabname
也可以使用loadquery命令查看单个表的状态,比如对表TEST1,我们可以发出如下命令:
#db2loadquerytabletest1
5.查看磁盘空间
查看数据库活动日志目录是否已满,活动日志目录可以使用getdbcfg查看,注意一定不要手工删除活动日志
#df-k
查看SMS表空间对应的容器目录空间是否满了
#df-k
查看DMS表空间中是否还有可用页
#db2listtablespacesshowdetail//在单分区上查看表空间的是否还有可用页
#db2_alllisttablespacesshowdetail//在所有分区上查看表空间是否还有可用页
6.检查存储管理软件是否正常
请检查TSM或其他存储管理软件是否正常,以及磁带机是否运行正常。
7.检查数据库备份是否正常
请查看TSM或第三方存储管理软件,看备份映像文件是否完整的保存到了磁带机上了,想在DB2上查看备份情况,可以使用LIST命令
#db2listhistorybackupallfor数据库名
8.检查归档日志是否正确归档了
请确保活动日志目录下没有的日志文件都已经正确归档到了带机上(查看TSM或第三方存储管理软件)。
查看活动目录里的日志文件:
#ls-l
9.查看缓冲池的命中率
#db2getsnapshotforbufferpoolsondbname
查看缓冲池的命中率,看其是否低于95%(命中率越高越好)
10.查看当前运行最频繁的SQL,其命中率是否正常
#db2getsnapshotforbufferpoolsondbname>log.txt
用grep命令查看"Numberofexecutions"执行次数最频繁的语句,看其命中率是否正常。
比如:
grep-n"Numberofexecutions"snap.out|grep-v"=0"|sort-k5,5rn|more
11.查看当前连接的应用程序,有没有非法连接
#db2listapplicationsshowdetail
看这些连接的情况,看有没有不合适的IP连上来,或者不被允许的第三方工具连上来,比如一些第三方工具连上来会对表进行锁定,影响业务系统正常运行,这个时候可以用FORCEAPPLICATIONS(应用程序句柄)停下来。
12.检查有没有死锁
#db2getsnapshotforallon数据库名>log.txt
用grep命令查看输出的文件中是否有死锁的记录,比如
grep-n"Deadlocksdetected"log.txt|grep-v"=0"|more
13.对表和索引进行runstats
#db2runstatsontabletablenameandindexall
对系统表以及变化比较频繁的表运行统计信息,建议写成shell脚本自动运行。
14.检查表是否需要重组
使用REORGCHK命令,通过统计数据检查表是否需要重组,语法如下:
REORGCHK[UPDATE|CURRENT]STATISTICSON[TABLESYSTEM|TABLEUSER|TABLEALL|TABLEtable_name|SCHEMAschema_name]
UPDATESTATISTICS:
更新表的统计数据,根据该统计数据判断是否需要重组表
CURRENTSTATISTICS:
根据当前表统计数据判断是否需要重组表
TABLEtable_name:
对单个表进行分析
TABLEALL:
对数据库所有的表进行分析
TABLESYSTEM:
对系统表进行分析
TABLEUSER:
对当前用户模式下的所有表进行分析
#db2reorgchkupdatestatisticsontableall
15.对需要重组的表进行重组
#db2reorgtable表名//通过重构行来消除“碎片”数据
#db2reorgindexesallfortable表名//只重组索引
比如:
reorgtabledb2inst1.orgindexby_id
将根据索引by_id,如果不加INDEX选项将重组表和所有的索引:
reorgtabledb2inst1.orgindexby_idusetempspace1
使用指定的临时表空间重组表
表重组完成后需要进行RUNSTATS。
另外,记住在分区数据库环境中,如果想在所有节点运行命令,需要使用db2_all命令。
二、DB2日常维护月操作
1.查看DB2日志
请至少每月查看一次db2diag.log(在DB2安装目录下可搜索该日志文件),看其中是否有异常。
2.检查备份和日志是否都保存好了
通过TSM或第三方存储管理软件,查看备份和归档日志是否都保存好了,在数据库级别查看备份,可以使用:
#db2listhistorybackupallfordbname
三、DB2日常维护季度操作
1.通过快照监控器,查看系统性能如何
通过快照监控器,抓取数据库的信息,分析数据库性能是否合理:
#db2getsnapshotforallondbname>log.txt
2.数据库补丁级别
#db2level
四、注意事项
1.不要删除活动日志文件
DB2的活动日志文件不能被删除。
一旦DB2的活动日志文件被删除,或者所在的存储设备出现问题,则不可避免地造成DB2数据库系统宕机。
2.注意交易日志存储空间
在归档日志模式下,如果没有使用自动归档方式,则存储的日志文件会不断增多,有可能造成日志所在的文件系统空间满。
当这种情况发生时,会根据参数BLK_LOG_DSK_FUL的配置而有不同的现象:
1)如果该参数启用,则DB2数据库可继续读操作,但是写操作会挂起
2)如果该参数没有启用,则DB2数据库会停止工作
两种情况下,都需要到日志所在的文件系统添加了空间才恢复正常。
3.按照系统的实际工作量配置日志空间
DB2数据库通过日志文件维护数据的完整性和一致性。
DB2数据库的日志空间可通过如下公式计算:
日志空间=(主日志文件+二级日志文件)*日志文件尺寸
其中:
1)主日志文件由参数LOGPRIMARY控制,
2)二级日志文件由参数LOGSECOND控制
3)日志文件尺寸由参数LOGFILSIZ控制
4)LOGPRIMARY+LOGSECOND<256(不同的DB2版本略有不同,请参看相同版本的DB2手册确认)。
4.设置正确数据库代码页
由于数据库的代码页在数据库创建之后是无法修改的,所以在创建数据库时一定要选择正确的代码页。
错误的数据库代码页会造成JDBC/ODBC访问时中文字段被截断(包括控制中心),这种情况需要重建数据库以修改数据库代码页。
从全局规划来说,如果应用需要访问多个数据库,那么这多个数据库的代码页应该是一致的。
5.检查许可证(License)安装情况
许可证过期会造成不必要的服务中断,所以在DB2安装完毕后,建议检察许可的安装情况。
6.创建数据库前调整好系统时间
在数据库创建好之后,调整系统时间会造成数据库部时间戳的异常。
数据库中一些对象和时间相关,一旦时间不准确要调整需要很小心。
错误的时间调整可能会造成很多问题,如:
1)某些对象失效,例如:
SQL0440N,找不到具有兼容自变量的类型为“<例程类型>”的名为“<例程名>”的已授权例程
2)数据库日志逻辑错误->宕机
3)常见错误–只调整时间,未调整时区
7.不要随便执行chown(chmod)–R(UNIX/Linux)
在实例目录下chown(chmod)-R会造成
1)在数据库服务器上db2connectto能连接上数据库
2)db2connecttouser...using...连接不上
8.归档模式设置
在归档日志模式下使用LOAD记得加NONRECOVERABLE参数。
五、附:
以脱机方式重组表
以脱机方式重组表是整理表碎片的最快方法。
重组可减少表所需的空间量并提高数据访问和查询性能。
必须具有SYSADM、SYSCTRL、SYSMAINT或DBADM权限,或者必须具有对表的CONTROL权限才能重组表。
必须具有数据库连接才能重组表。
标识需要重组的表之后,可以对这些表运行REORG实用程序,并且可以选择对在这些表上定义的任何索引运行该实用程序。
1.要使用CLP重组表,请发出REORGTABLE命令:
db2reorgtabletest.employee
要使用临时表空间mytemp重组表,请输入:
db2reorgtabletest.employeeusemytemp
要重组表并根据索引myindex对行进行重新排序,请输入:
db2reorgtabletest.employeeindexmyindex
2.要使用SQL调用语句重组表,请使用ADMIN_CMD过程发出REORGTABLE命令:
callsysproc.admin_cmd('reorgtableemployeeindexmyindex')
3.要使用DB2管理API重组表,请使用db2REORGAPI。
在重组表之后,应收集有关表的统计信息,以便优化器具有最准确的数据来评估查询访问方案。
六、附:
使用CLP捕获数据库运行状况快照
可从CLP使用GETHEALTHSNAPSHOT命令来捕获运行状况快照。
该命令语法支持检索运行状况监视器监视的不同对象类型的运行状况快照信息。
先决条件
必须具有实例连接才能捕获运行状况快照。
如果没有实例连接,则创建缺省实例连接。
要获取远程实例的快照,必须先连接至该实例。
过程
要使用CLP捕获数据库运行状况快照
1.从CLP发出带有期望参数的GETHEALTHSNAPSHOT命令。
在以下示例中,将在启动数据库管理器之后立即捕获数据库管理器级别运行状况快照。
db2gethealthsnapshotfordbm
2.对于分区数据库系统,可为特定分区捕获专门的数据库快照,或者为所有分区捕获全局的数据库快照。
要对特定分区(如分区号2)上的数据库捕获运行状况快照,请发出以下命令:
db2gethealthsnapshotfordbondbnameatdbpartitionnum2
要对所有分区上的所有应用程序捕获数据库快照,请发出以下命令:
db2gethealthsnapshotfordbondbnameglobal
以下命令捕获的运行状况快照带有附加详细信息,包括公式、附加信息和运行状况指示器历史记录:
db2gethealthsnapshotfordbondbnameshowdetail
3.对于基于集合状态的运行状况指示器,可对所有集合对象捕获数据库快照,而不考虑这些对象的状态。
常规GETHEALTHSNAPSHOTFORDB命令返回所有集合对象,这些对象需要针对所有基于集合状态的运行状况指示器的警报。
要对列示了所有集合对象的数据库捕获运行状况快照,请发出以下命令:
db2gethealthsnapshotfordbondbnamewithfullcollection
七、附:
IBMDB2常用命令
命令行窗口
1.#打开命令行窗口
2.db2cmd
3.#打开控制中心
4.db2cmd db2cc
5.#打开命令编辑器
6.db2cmd db2ce
操作数据库命令
1.#启动数据库实例
2.db2start
3.#停止数据库实例
4.db2stop
5.如果你不能停止数据库由于激活的连接,在运行db2stop前执行db2 force application all就可以了
6.#创建数据库
7.db2 create db [dbname]
8.#连接到数据库
9.db2 connect to [dbname] user [username] using [password]
10.#断开数据库连接
11.db2 connect reset
12.#列出所有数据库
13.db2 list db directory
14.#列出所有激活的数据库
15.db2 list active databases
16.#列出所有数据库配置
17.db2 get db cfg
18.#删除数据库
19.db2 drop database [dbname]
#启动数据库实例
db2start
#停止数据库实例
db2stop
如果你不能停止数据库由于激活的连接,在运行db2stop前执行db2forceapplicationall就可以了
#创建数据库
db2createdb[dbname]
#连接到数据库
db2connectto[dbname]user[username]using[password]
#断开数据库连接
db2connectreset
#列出所有数据库
db2listdbdirectory
#列出所有激活的数据库
db2listactivedatabases
#列出所有数据库配置
db2getdbcfg
#删除数据库
db2dropdatabase[dbname]
操作数据表命令
1.#列出所有用户表
2.db2 list tables
3.#列出所有系统表
4.db2 list tables for system
5.#列出所有表
6.db2 list tables for all
7.#列出系统表
8.db2 list tables for system
9.#列出用户表
10.db2 list tables for user
11.#列出特定用户表
12.db2 list tables for schema [user]
13.
14.#创建一个与数据库中某个表(t2)结构相同的新表(t1)
15.db2 create table t1 like t2
16.
17.#查询表
18.db2 "select * from table name where ..."
19.#显示表结构
20.db2 describe table tablename
21.#修改列
22.db2 alter table [tablename] alter column [columname] set data type varchar(24)
脚本文件操作命令
1.#执行脚本文件
2.db2 -tvf scripts.sql
帮助命令
1.#查看命令帮助
2.db2 ?
db2start
3.#查看错误码信息
4.db2 ?
22001
DB2 常用命令 II
1. 启动数据库 db2start
2.停止数据库 db2stop
3. 连接数据库
db2 connect too_yduser db2 using pwd
4. 读数据库管理程序配置
db2 get dbm cfg
5.写数据库管理程序配置
db2 update dbm cfg using 参数名 参数值
6. 读数据库的配置
db2 connect to o_yd userdb2 using pwd
db2 get db cfg for o_yd
7. 写数据库的配置
db2 connect to o_yd user db2 using pwd
db2 update db cfg foro_yd using 参数名 参数值
8. 关闭所有应用连接
db2 force application all
db2 force application ID1,ID2,,,Idn MODE ASYNC
(db2 list application for dbo_yd show detail)
9. 备份数据库
db2 force application all
db2 backup db o_yd tod:
(db2 initialize tape on \\.\tape0)
(db2 rewind tape on \\.\tape0)
db2 backup db o_yd to\\.\tape0
10.恢复数据库
db2 restore db o_yd from d:
to d:
db2 restore db o_yd from \\.\tape0 tod:
11.绑定存储过程
db2 connect too_yd user db2 using pwd
db2 bind c:
\dfplus.bnd
拷贝存储过程到服务器上的C:
\sqllib\function目录中
12.整理表
db2 connect to o_yduser db2 using pwd
db2 reorg table ydd
db2 runstats ontable yddwith distribution and indexesall
13.导出表数据
db2 exportto c:
\sw.txt of del select * from dftz
db2 export to c:
\sw.ixf of ixf select * from dftz
14.导入表数据
db2 import from c:
\sw.txt of del insert into ylbx.czyxx
db2 import to c:
\sw.txt of del commitcount 5000 messages c:
\dftz.msg insert into dftz
db2 import to c:
\dftz.ixf of ixf commitcount 5000 messages c:
\dftz.msg insert into dftz
db2 importto c:
\dftz.ixf of ixf commitcount 5000insert into dftz
db2 import to c:
\dftz.ixf of ixf commitcount 5000 insert_updateinto dftz
db2 import to c:
\dftz.ixf of ixf commitcount 5000 replaceinto dftz
db2 import to c:
\dftz.ixf of ixf commitcount 5000 create intodftz(仅IXF)
db2 import to c:
\dftz.ixf of ixf commitcount 5000 replace_createinto dftz(仅IXF)
15.执行一个批处理文件
db2 –tf 批处理文件名
(文件中每一条命令用 ;结束)
16.自