数据库问题总结

     我对昨晚数据库升级出现的问题现在总结一下:
下边是错误:
     SQL0668N 原因码为 "1",所以不允许操作 SQLSTATE=57016


1. 最根本的问题是load的问题:

Copy YES/ NONRECOVERABLE
对于DMS表空间,load默认为copy NO 模式,此模式下,load完成后,表空间会处于暂挂状态,这时候只能查表中的数据,需要对表空间进行一次备份,才可以对表进行update、insert等操作,那么我们可以使用如上2个命令,对于Copy YES,load完成以后会自动进行一次备份操作;NONRECOVERABLE 指出load不可恢复,此命令符不会产生表空间暂挂,也不会自动进行表空间备份,但是他有一个缺点就是,不能恢复,当数据库进行回滚的时候,不能还原,危险等级还是比较高一点,不过个人觉得也NONRECOVERABLE比较实用。

例:LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES NONRECOVERABLE
LOAD CLIENT FROM 'F:s1.del' OF DEL INSERT INTO DB2ADMIN.ZXTABLES COPY YES




2.List tablespaces show detail 看到的ox0200 找个状态就是表空间暂挂了。

Tablespace ID                        = 2
Name                                 = USERSPACE1
Type                                 = System managed space
Contents                             = Any data
State                                = 0x0020
Detailed explanation:
   Backup pending
3.load导致表空间挂起深入分析:
   首先是因为数据库的日志的设置方式引起的。我们平常使用的数据库的日志方式是循环日志,而这次使用的归档日志,这就是以前我们load 每次都是正常的,而这次为什么出现了这个原因。

设置数据库归档日志:
>db2 UPDATE DB CFG FOR test USING LOGARCHMETH1 "DISK:E:\db2log"

这时要备份数据库

db2_all "<<+0<db2 backup database test  to D:\data compress"

db2_all "<<-0<db2 backup database test  to D:\data compress"

重新连接数据库,可以访问了。下来开始实验:

load client from d:\MOBILE_PRODUCT_INST_200812.del of del insert into MOBILE_PRODUCT_INST_200812
load 完成后,我们看一下表空间的状态,发现表空间已经挂起了。这时我们只能去备份找个表空间

db2_all "<<+0<db2 backup database test tablespace userspace1 to D:\data compress"

db2_all "<<-0<db2 backup database test tablespace userspace1 to D:\data compress"


备份完成后,可以访问这个表了。


接下来看正确的load的方式:

load client from d:\MOBILE_PRODUCT_INST_200812.del of del insert into MOBILE_PRODUCT_INST_200812  NONRECOVERABLE;

注意加了个参数NONRECOVERABLE  意思是:不可恢复。




4.总结:
当你的数据库处在archivelog模式下,用load倒数时就会出现备份暂挂,因为load不写日志,自然会要求你备份的.或者用import,或用带copy yes,norecovery的load。

当 DB2的数据库启用了前滚恢复模式,即将日志由循环日志方式改为归档日志,以便用户在进行恢复操作时,可在恢复了数据库或表空间的备份后,再通过前滚归档日志中的事务,恢复数据库备份时间点之后提交的事务,最大程度的保护数据库的数据。

而 DB2 的 LOAD 实用程序为实现快速导入数据的功能,除采用了通过直接向数据库中写入格式化的数据页装载数据,导入过程中不激活触发器,不会检查参考完整性和表检查约束当等方式外,还最小化了记录事务日志的操作。在 LOAD 的 LOAD、BUILD、DELETE 和 INDEX COPY 四个处理阶段中,仅在 DELETE 阶段记录对每个删除事件记日志,即只对每个违反唯一约束的行的删除操作记日志,因此整个 LOAD 操作仅记录了极少的日志。

由于 LOAD 最小化了日志的记录,有因启用了前滚恢复的数据库在恢复在线备份时需要归档日志的特性,对于这种数据库的 LOAD 操作,为避免执行 LOAD 操作后,表在使用 ROLLFORWARD 命令前滚归档日志的过程中因缺少日志而被置为非正常状态,DB2 为 LOAD 命令提供了如下选项:

COPY NO(缺省)
COPY YES
NONREVERABLE

你可能感兴趣的:(db2,F#,mobile)