1、DB2 数据库 1、Load 方法装入数据: export to tempfile of del select * from TABLENAME where not 清理条件; load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable; 说明: 在不相关的数据表 export 数据时,可以采取并发的形式,以提高效率; TABLENAME 指待清理 table 的名称; modified by delprioritychar 防止数据库记录中存在换行符,导致数据无法装入的
2、情况; replace into 对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容; nonrecoverable 无日志方式装入; 2、查找当前的应用: db2 list application |grep BTPDBS; 3、删除当前正在使用的 application: db2 “force application (Id1,Id2,Id3)“ Id1,Id2,Id3 是 List 显示的应用号; 4、查看当前应用号的执行状态: db2 get snapshot for application agentid 299 |grep Row 5、查看数据库参数: db2
3、get db cfg for /当前数据库可以省略 6、修改数据库的 Log 数据: db2 update db cfg using 7、Db2Stop Force 的用法: 在进行 Bind 的时候出现如下错误: SQL0082C An error has occurred which has terminated processing. SQL0092N No package was created because of previous errors. SQL0091N Binding was ended with “3“ errors and “0“ warnings. 主要是表文件被
4、加锁,不能继续使用; 在进行 stop 的时候报错:db2stop 8/03/2005 21:46:53 0 0 SQL1025N The database manager was not stopped because databasesare still active. SQL1025N The database manager was not stopped because databases are still active. 需要使用如下命令可以解决这个问题: db2stop force 08/03/2005 21:47:49 0 0 SQL1064N DB2STOP process
5、ing was successful. SQL1064N DB2STOP processing was successful. 然后启动数据库 db2start,连接数据库 db2s 后,重新进行 bind 即可。 8、缓冲池参数修改: db2 alter bufferpool ibmdefaultbp size 10240 查看本表的数据内容如下: db2 “select * from syscat.bufferpools“; 9、DB2 日志处理: DB2 日志是以文件的形式存放在文件系统中,分为两种模式:循环日志和归档日志。当创建新数据库时,日志的缺省模式是循环日志。在这种模式下,只能实
6、现数据库的 脱机备份和恢复。如果要实现联机备份和恢复,必须设为归档日志模式。 目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、 中间业务等)一般都设置为循环日志模式。至于采用何种模式,可以通过修改数据库配置参数(LOGRETAIN)来实现: 归档日志模 式:db2 update db cfg for using logretain on 注:改为 on 后,查看数据库配 置参数 logretain 的值时,实际显示的是 recovery。改变此参数后,再次连接数据库会显示数据库处于备份暂挂 (BACKUP PENDING)状态。这时,需要做一次对数据库的脱机备份(
7、db2 backup db ) ,才能使数据 库状态变为正常。 循环日志模式:db2 update db cfg for using logretain off 10、Db2 日志处理: 必须按照以下正确的步骤进行操作: 要求必须使用 DB2 命令 PRUNE 进行清理,不建议使用 rm 命令删除。 删除前应保证应用已停止(即联机已下 来) 。查看当前使用的日志文件目录及第一活动日志文 件 用“db2 get db cfg for ”命令查看日志文件目录 (Path to log files)参数,确定数据库当前使用的日志文件目录。 例如:Path to log files = /db2log
8、/, 说明 DB2 日志存放目录是/db2log 用 “db2 get db cfg for ” 命令查看第一活动日志文件(First active log file)参数,该参数对应的日志文件之前的日志文件均为归档日志文件,如果确认没有用, 可以删除。 例如:First active log file = S0015913.LOG,说明当前第一活动日志文件是 S0015913.LOG。 备份好要删除的归档日志 删除归档日志 以应用用户(如 BTP)登录,执行: $ db2 connect to $ db2 prune logfile prior to S?.LOG 注:S?.LOG 为查看到
9、的第一活动日志文件。此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。 11、如何清理 db2diag.log 文件 db2diag.log, 是用来记录 DB2 数据库运行中的信息的文件。可以通过此文件,查看记录的有关 DB2 数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。 可 以通过查看实例的配置参数 DIAGPATH,来确定 db2diag.log 文件是放在哪个目录下:db2 get dbm cfg 如果 Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib /db2dump,则此文件
10、是放在/home/db2inst1/sqllib/db2dump 目录下。当文件系统/home 的使用率达到 80%90% 左右时,应及时删除 db2diag.log 文件。 请按以下正确步骤操作:确认应用(如 BTP) 、DB2 已经停 止。 将原 db2diag.log 文件备份到其它文件系统下。 删除 db2diag.log 文件。删除后,DB2 会自动创建一个新的文件。 12、Load 操作 在进行 load 的时候 db2 “load from acmmst.txt of del modified by coldel| replace into acmmst nonrecoverab
11、le ” 由于数据不规范出现错误,强行中断以后,进行操作的时候出现如下错误: SQL0668N Operation not allowed for reason code “3“ on table “BTP.ACMMST“. SQLSTATE=57016 此时,进行反方向操作即可: db2 “load from /dev/null of del terminate into acmmst nonrecoverable“。 如果没有使用参数 nonrecoverable,则会出现数据库状态不正确的情况,使用: db2 list tablesapces show detail 查看状态,如果不是正
12、常状态,则脱机状态进行备份即可。两个表文件之间 UPDATE 的方法: db2 “update cdmcrd set offset = (select cdmlsl.offset from cdmlsl where cdmlsl.crdno=cdmcrd.crdno) where cdmcrd.crdno in (select cdmlsl.crdno from cdmlsl) 13、多字段条件查询和修改: 表 A 中的字段有 actno, cnlno,bal,pwd;表 B 中的字段为 Actno,Cnlno ,TxnAmt;目的是将 A 表中的 bal 修改为 B 表中的 TxnAmt,命
13、令: db2 “update A set bal=(select txnamt from B where actno=A.actno and cnlno=A.Cnlno) where A.actno|A.cnlno in (select Actno|cnlno from B ); 14、多条件匹配查询 查询某个表中条件是 B?AAA 的记录: db2 “select * from A where actno like B_AAA%“. 查询数据中存在某些字符的记录: db2 “select * from A where actno like %-AAA%“. 15/数据库恢复的处理 进行数据库
14、恢复的时候使用以下的命令: restore db db1 to /tstdb2/catalog into db newlogpath /tstdb2/db2log buffer 2048 replace existing redirect parallelism 16; set tablespace containers for 1 using (path /tstdb2/db2tmp); set tablespace containers for 2 using (device /dev/rtstcontlv00 2621440, device /dev/rtstcontlv01 26214
15、40, device /dev/rtstcontlv02 2621440, device /dev/rtstcontlv03 2621440 ) ; restore db db1 continue; 恢复完成以后执行命令 db2s 时报如下的错误: P570:db2s SQL1117N A connection to or activation of database “DB“ cannot be made because of ROLL-FORWARD PENDING. SQLSTATE=57019 DB21034E The command was processed as an SQL s
16、tatement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL1024N A database connection does not exist. SQLSTATE=08003 解决办法如下: P570:db2 rollforward db db to end of logs and complete Rollforward Status Input database alias = db Number of nodes have returned status = 1 Node number = 0 Rollforward status = not pending Next log file to be read = Log files processed = - Last committed transaction = 2005-11-20-10.59.23.000000 DB20000I The ROLLFORWARD command completed successfully.