zoukankan      html  css  js  c++  java
  • db2日常维护

    一、 DB2日常维护操作

    1、数据库的启动、停止、激活

    db2 list active databases

    db2 active db 数据库名

    db2start --启动

    db2stop [force] --停止

    2.数据库的连接、断开

    db2 CONNECT TO DBName [user UserID using PWD]--建立连接

    db2 CONNECT reset /db2 disconnect CURRENT --断开连接

    db2 terminate  --断开与数据库的连接

    3.实例的创建、删除

    db2icrt < 实例名称 > --创建 db2 实例

    db2idrop < 实例名称 >--删除 db2 实例

    set db2intance=db2 --设置当前 db2 实例

    db2ilist  --显示 db2 拥有的实例

    4.节点、数据库的编目

    db2 list db directory --查看本地节点目录

    db2 catalog tcpip node <node_name> remote <hostname|ip_address> <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>--编目一个

    TCP/IP节点

    db2 uncatalog node <node_name> --取消节点编目

    db2 catalog DATABASE <db_name> AS <db_alias> AT node <node_name>--编目数据库

    db2 uncatalog DATABASE <db_name> --取消数据库编目

    5、检查DB2实例是否已经启动

    用ps命令查看是否有db2sysc后台进程

    #ps -ef | db2sysc

    也可以以DB2实例所有者登录,通过发出db2start命令来确保启动了实例(如果实例已经启动,则会告知SQL1026N 数据库管理器已激活;否则,将把实例启动起来)

    6、 查看表空间状态是否正常

    以db2实例所有者登录

    #db2 list tablespaces show detail //在单分区上查看表空间的状态,正常返回0x0000

    # db2_all list tablespaces show detail //在所有分区上查看表空间的状态

    可以使用LIST TABLESPACES 命令确定连接数据库中表空间的当前状态,可以使用SHOW DETAIL选项查看表空间的详细信息。比如,我们连上SAMPLE数据库,执行list tablespaces show detail ,可以看到状态返回值是0x0000,此时,使用db2tbst可以查看状态编号对于的状态含义,具体语法如下:

    db2tbst <tablespace state> 可以查看编号所代表的状态

    db2inst1@local:~> db2tbst 0x0000

    State = Normal

    db2tbst 命令接收十六进制的状态值,并返回相应的表空间状态。例如,命令 db2tbst 0x0008 返回 State = Load Pending 。而该十六进制的状态值反过来又是 LIST TABLESPACES 命令输出的组成部分。表空间的外部可见状态是由单个状态值的十六进制总和构成的。例如,如果表空间的状态是 Backup Pending和 Load in Progress,那么所返回的十六进制值就是 0x20020

    (0x00020 + 0x20000)

    7、 查看表的状态

    查询系统目录视图以获得关于数据库的表的状态信息。例如,下面的语句将返回在 SYSCAT.TABLES 中有项的所有表的名称,以及每个表的列数和表的状态(N = 正常;C = 待审核(check pending))

    #db2 select tabname, colcount, status FROM syscat.tables ORDER BY tabname

    也可以使用load query命令查看单个表的状态,比如对表TEST1,我们可以发出如下命令:

    #db2 load query table test1

    8、 查看磁盘空间

    查看数据库活动日志目录是否已满,活动日志目录的位置可以使用db2 get db cfg查看,注意一定不要手工删除活动日志

    #df -k

    查看SMS表空间对应的容器目录空间是否满了

    #df -k

    查看DMS表空间中是否还有可用页

    #db2 list tablespaces show detail //在单分区上查看表空间的是否还有可用页

    # db2_all list tablespaces show detail //在所有分区上查看表空间是否还有可用页

    9、 检查存储管理软件是否正常

    请检查TSM或其他存储管理软件是否正常,以及磁带机是否运行正常。

    10、 检查数据库备份是否正常

    请查看TSM或第三方存储管理软件,看备份映像文件是否完整的保存到了磁带机上了,想在DB2上查看备份情况,可以使用LIST命令

    # db2 list history backup all for 数据库名

    11、 检查归档日志是否正确归档了

    请确保活动日志目录下没有的日志文件都已经正确归档到了带机上(查看TSM或第三方存储管理软件)。

    12、 查看当前运行最频繁的SQL,其命中率是否正常

    # db2 get snapshot for bufferpools on 数据库名 > log.txt

    #db2 "select * from SYSCAT.BUFFERPOOLS" 查缓冲池大小信息

    命中率计算:

    (1- ((Buffer pool data physical reads + Buffer pool index physical reads) /
    (Buffer pool data logical reads + Buffer pool index logical reads))) * 100%

    用grep命令查看" Number of executions"执行次数最频繁的语句,看其命中率是否正常。

    比如:

    grep -n " Number of executions" log.txt | grep -v "= 0" | sort -k 5,5rn | more

    13、 查看当前连接的应用程序,有没有非法连接

    #db2 list applications show detail

    看这些连接的情况,看有没有不合适的IP连上来,或者不被允许的第三方工具连上来,比如一些第三方工具连上来会对表进行锁定,影响业务系统正常运行,这个时候可以用db2 "force application(应用程序句柄号)" 将某个单独的句柄停下来。

    14、 检查有没有死锁

    # db2 get snapshot for all on 数据库名 > log.txt

    用grep命令查看输出的文件中是否有死锁的记录,比如

    grep -n "Deadlocks detected" log.txt | grep -v "= 0" | more

    15、 对表和索引进行runstats

    #db2 runstats on table 表名 and index all

    对系统表以及变化比较频繁的表运行统计信息,建议写成shell脚本自动运行。

    16、 检查表是否需要重组

    使用REORGCHK命令,通过统计数据检查表是否需要重组,语法如下:

    REORGCHK [UPDATE | CURRENT ]STATISTICS ON [TABLE SYSTEM| TABLE USER | TABLE ALL | TABLE table_name | SCHEMA schema_name]

    UPDATE STATISTICS: 更新表的统计数据,根据该统计数据判断是否需要重组表

    CURRENT STATISTICS:根据当前表统计数据判断是否需要重组表

    TABLE table_name : 对单个表进行分析

    TABLE ALL: 对数据库所有的表进行分析

    TABLE SYSTEM: 对系统表进行分析

    TABLE USER : 对当前用户模式下的所有表进行分析

    #db2 reorgchk update statistics on table all

    对需要重组的表进行重组

    #db2 reorg table 表名  //通过重构行来消除“碎片”数据

    #db2 reorg indexes all for table 表名 //只重组索引

    比如:

    reorg table db2inst1.org index by_id

    将根据索引by_id,如果不加INDEX选项将重组表和所有的索引

    reorg table db2inst1.org index by_id use tempspace1

    使用指定的临时表空间重组表

    表重组完成后需要进行RUNSTATS。另外,记住在分区数据库环境中,如果想在所有节点运行命令,需要使用db2_all命令。

    17、数据库的备份、恢复

    --离线备份

    db2 force applications all--断开所有连接

    db2 force application(h1,h2……)--杀死与数据库相连接的某个进程

    db2 backup db DBName [to /backup] [use TSM]--离线备份

    --在线、增量备份

    --前提:更改数据库参数 logretain, userexit, trackmod 为 on,之后数据库处于backup pending状态,要完全离线备份数据库一次,之后就可以进行在线、在线增量备份了。

    db2 update db cfg using logretain on userexit on trackmod on--启用相关参数

    --归档路径

    DB2 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 DISK:/backup

    --LOGARCHMETH1参数改成TSM

    DB2 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 TSM IMMEDIATE

    db2 backup db DBName [to /backup] [use TSM]--离线备份

    db2 backup db DBName online [to /backup] [use TSM] include logs --在线线备份

    db2 backup db DBName online incremental [to /backup] [use TSM]--在线增量备份

    --数据库恢复

    db2 restore db DBname [incremental] [FROM /backup][use TSM] taken AT YYYYMMDDHHMMSS

    --恢复 (时间戳记:YYYYMMDDHHMMSS)

    db2 list history backup [since YYYYMMDDHHMMSS] ALL FOR DBName

    --查看 [从YYYYMMDDHHMMSS] 对DBName的备份情况

    db2 ROLLFORWARD DATABASE DBName TO END OF LOGS AND COMPLETE NORETRIEVE--将暂挂的数据恢复到前滚状态

    db2 ROLLFORWARD DATABASE DBName TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH ("/home/db2inst1/SQLOGDIR")

    db2 CONNECT TO DBName

    db2 prune history YYYYMMDDHHMMSS--删除DBName YYYYMMDDHHMMSS之前的备份记录

    18.数据的导出、导入

    --导出

    db2 EXPORT TO D:TableName.txt OF del SELECT * FROM SCHEMA.TableName--文本格式

    db2 EXPORT TO D:TableName.csv OF del SELECT * FROM SCHEMA.TableName--csv可转为excel

    db2 EXPORT TO D:TableName.ixf OF ixf SELECT * FROM SCHEMA.TableName

    --导出数据(IXF 集成通用交换格式)

    db2 EXPORT TO "D:TableName.data" OF IXF MESSAGES "D:TableName.msg" SELECT * FROM SCHEMA.TableName;

    --导入

    db2 IMPORT FROM D:TableName.txt OF del INSERT INTO SCHEMA.TableName

    db2 IMPORT FROM "D:TableName.data" OF IXF [MESSAGES "D:TableName.msg"] [COMMITCOUNT 1000] INSERT/CREATE INTO SCHEMA.TableName;

    db2 IMPORT FROM "D:TableName.ixf" OF IXF [COMMITCOUNT 1000] INSERT/INSERT_UPDATE/CREATE/REPLACE/REPLACE_CREATE INTO SCHEMA.TableName;

    19、查看DB2日志

    请至少每天查看一次db2diag.log文件,看其中是否有异常。

    20、 检查备份和日志是否都保存好了

    通过TSM或第三方存储管理软件,查看备份和归档日志是否都保存好了,在数据库级别查看备份,可以使用:

    # db2 list history backup all for 数据库名

    21、通过快照监控器,查看系统性能如何

    通过快照监控器,抓取数据库的信息,分析数据库性能是否合理:

    # db2 get snapshot for all on 数据库名 > log.txt

    22、 数据库补丁级别

    # db2level

    23、获取数据库的配置参数

    查看现有数据库管理器配置文件中的配置参数的当前值,可以使用以下命令:

     db2get database manager configuration

    可简写为:db2 get dbm cfg

    更新数据库管理器配置文件中的单个配置参数的值,可以使用以下命令:

     db2update database manager configuration using <parameter name> <newvalue> <next parameter name> <new value>…

    可简写为:db2 upadte dbm cfg using<parameter name> <new value> <next parameter name> <newvalue>…


    查看数据库配置文件中的配置参数的当前取值,可以使用以下命令:

    db2 get database configuration for 数据库名

    可简写为:db2 get db cfg for 数据库名

    更新数据库配置文件中的单个配置参数的取值,可以使用以下命令:

    db2 update database configuration for 数据库名 using 参数名参数值…

    可简写为:db2 upadte db cfg for 数据库名 using 参数名参数值…

    24、查看设置的参数

    $ db2set

    DB2_INLIST_TO_NLJN=YES

    DB2_EVALUNCOMMITTED=YES

    DB2_RR_TO_RS=YES

    DB2COUNTRY=86

    DB2COMM=TCPIP

    DB2CODEPAGE=1386

    二、 DB2运维日常注意事项

    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 安装完毕后,建议检察许可的安装情况

    检查license的内容

    $db2licm -l

    执行如下安装授权许可

    #/opt/ibm/db2/V9.7/adm/db2licm -a /mnt/cdrom/db2/license/db2ese.lic

    6、 创建数据库前调整好系统时间

    在数据库创建好之后,调整系统时间会造成数据库内部时间戳的异常。数据库中一些对象和时间相关,一旦时间不准确要调整需要很小心。错误的时间调整可能会造成很多问题,如:

    1)某些对象失效,例如 :

    SQL0440N,找不到具有兼容自变量的类型为 “<例程类型>” 的名为 “<例程名>” 的已授权例程

    2)数据库日志逻辑错误 -> 宕机

    3)常见错误 – 只调整时间,未调整时区

    7、 不要随便执行 chown (chmod) –R (UNIX/Linux)

    在实例目录下chown (chmod) -R 会造成

    1) 在数据库服务器上 db2 connect to <dbname> 能连接上数据库

    2) db2 connect to <dbname> user ... using ...连接不上

    8、 在归档日志模式下使用LOAD记得加NONRECOVERABLE参数

  • 相关阅读:
    关于链表的一个小程序
    位操作
    结构和其他数据形式
    存储类、链接、内存管理
    文件输入/输出
    为什么返回IEnumerbale而不是List
    EncType
    script标签不能闭合
    jqueryUI AutoCompelete
    ChangeType
  • 原文地址:https://www.cnblogs.com/xiaojianblogs/p/6151719.html
Copyright © 2011-2022 走看看