DB2 简明运维手册
数据库启动
数据库正常启动的流程包括两个步骤,
首先启动数据库实例,在root用户下切换到实例用户su - db2inst1,执行命令db2start
然后激活对应的数据库,执行命令: db2 activate db 数据库名。
直到出现:
则数据库成功启动。
数据库停止
停止数据库使用如下命令:
在root用户下切换到实例用户su - db2inst1,执行命令db2stop force,
直到出现:
则数据库停止成功。
数据库参数
DB2的参数分为实例级参数和数据库级参数,以及实例注册变量
实例级参数:
主要设置实例使用的TCP/IP端口,查看实例端口通过命令:db2 get dbm cfg
数据库实例注册变量:
确认设置了通信协议为TCPIP,命令如下:
如果没有设置则通过命令db2set DB2COMM=tcpip进行设置。
数据库参数
确认内存自动调整已经打开,
否则连接到数据库并执行db2 update db cfg for sample using
SELF_TUNING_MEM ON设置
数据库的缺省日志参数为
如果需要修改日志参数,可以通过命令
db2 udpate db cfg for 数据库名using 参数名参数值
例如增大备用日志文件数量到50,则可以通过命令修改
创建数据库
在实例用户下,执行
db2 "create <数据库名> on <目标路径> using codeset UTF-8 territory cn"
这样创建的数据库缺省页面大小(pagesize)为4K(4096),字符集为UTF-8,如果要使用GBK字符集,则把UTF-8修改为GBK即可。
创建缓冲池(bufferpool)
为了使用与缺省页面大小不一致的表空间,例如缺省页面大小为4K,但是需要使用32K页的表空间,就必须先创建页面大小为32K的缓冲池,命令如下:db2 "create bufferpool bp32k pagesize 32768"
bp32k为缓冲池的名字,通常每种页面大小创建一个缓冲池即可,例如8K页面的缓冲池可以命名为bp8k。
缓冲池缺省为自动调整大小,如果需要限定使用内存,则使用alter命令,如下:
db2 "alter bufferpool bp32k size <页面数量> "
<页面数量>为目标内存大小/页面大小,例如要为32K的bufferpool分配2GB内存,则:
<页面数量>=2 * 1024 * 1024 / 32 = 65536
创建表空间
如果创建数据库默认页面大小的表空间,并且选择系统自动管理的模式,则使用命令:
db2 "create tablespace <表空间名>"
以创建32K页面大小为例,假定已经存在32K的缓冲池bp32k。
创建自动存储管理的表空间,使用命令:
db2 "create tablespace <表空间名> pagesize 32768 bufferpool bp32k"
如果要指定使用文件系统,例如/db2data/tbs_1.dat作为容器,则使用命令:
db2 "create tablespace <表空间名> pagesize 32768 bufferpool bp32k managed by database using (file '/db2data/tbs_1.dat' 10G) "
默认表空间都是自动增长的方式,如果需要限定表空间使用的最大空间,则使用命令:
db2 "alter tablespace <表空间名> maxsize 20G"
以上为创建正常数据表空间。
创建系统临时表空间命令:
db2 "create system temporary tablespace tbs_sys_tmp pagesize 32768 bufferpool bp32k"
创建用户临时表空间命令(在存储过程中定义临时表的话需要用户临时表空间):db2 "create user temporary tablespace tbs_sys_tmp pagesize 32768 bufferpool bp32k"
数据库备份
脱机备份:
需要先停库,然后备份,
db2 "force application all"
db2 deactivate db <数据库名>
db2 "backup db <数据库名> to <目标目录>
联机备份
联机备份需要数据库的日志为归档模式,可以通过查看数据库日志确认是否为联机备份模式
db2 backup db <数据库名> online to <目录>
在备份目录下将生成备份的文件,例如:
SAMPLE.0.DB2.DBPART000.20130326105907.001
数据库恢复
db2 restore <数据库名> from <目录> taken at <时间戳>
上述命令中,<目录>为存放备份文件的位置,<时间戳>为备份文件的第5段信息,例如备份文件名为:
SAMPLE.0.DB2.DBPART000.20130326105907.001
则时间戳为20130326105907。
如果DB2数据库日志模式为归档模式,那么DB2数据库的状态将处于Rolling forward Pending状态,需要进行前滚并终止。
db2 rolling forward db <数据库名> to end of logs and complete.
对于更加复杂的备份恢复情况,请查看DB2信息中心。
数据库全库导出(逻辑备份)和迁移
创建一个目录,例如/db2export,确保实例用户有读写权限,然后cd到该目录下,使用命令:
db2move <数据库名> export -u <用户名> -p <密码>
<用户名>和<密码>为访问数据库的用户和密码。
数据库可以是在本地,也可以是在远端。
导出数据库所有的对象(表、视图、索引、存储工程等)定义(DDL)
db2look -d <数据库名> -e -t <数据库名>.ddl
迁移到新的数据库
将上述导出的数据库目录上传到目标新数据库服务器上,并cd到该目录下,先导入数据并自动创建表
db2move <数据库名> import
这个过程将自动创建表并记录日志,因此要注意设置较大的日志参数,通常可以修改LOGSEND参数为较大值,(LOGPRIMARY+LOGSECOND)*LOGFILSIZ即为总日志大小,必须大于最大的单表大小。
否则import将失败。
数据导入后再创建数据库中的对象
db2 -tvf <数据库名>.ddl
然后更新统计信息
db2 "export to runstats.sql of del modified by nochardel select 'runstats on table ' || trim(tabschema) || '.' || trim(tabname) || ';' from syscat.tables where tabschema not in ('SYSCAT','SYSIBM','SYSIBMADM','SYSSTAT','SYSTOOLS') and type <> 'V'"; db2 -tvf runstats.sql
单表数据导出导入
数据导出为逗号分割的文本文件可以用命令:
db2 "export to <文件名> of del select * from <表名>"
导入数据
db2 "import from <文件名> of del replace into <表名>
上面为清空表后导入数据,如果是追加导入,则:
db2 "import from <文件名> of del insert into <表名>
数据库故障
出错时需要记录的信息:
当数据库发生异常错误时,将出错信息记录下来,或者进行截屏保存。
查看数据库实例级错误信息日志,日志文件位于数据库实例用户目录下sqllib/db2dump/db2diag.log。
并联系IBM技术支持电话:
800-810-1818
400-810-1818
需要提供客户代码。
常见错误处理:
最常见的错误是Transaction Log is Full即数据库日志满了,处理方法是根据交易涉及的数据量大小适当增大数据库日志,修改db2 update db cfg for 数据库名using LOGSECOND 50。
如果大部分交易的日志量都超过了LOGPRIMARY 参数,则增大LOGPRIMARY参数值。