Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176004
  • 博文数量: 89
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 565
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-24 10:16
文章分类

全部博文(89)

文章存档

2013年(1)

2012年(1)

2011年(8)

2010年(45)

2009年(34)

我的朋友

分类:

2010-04-19 15:07:51

程永——IBM软件集团中国区合作伙伴技术支持(BPTS)高级信息工程师。 BPTS团队专注于帮助合作伙伴提升IBM软件平台的技能,构建行业解决方案,辅助方案实施,建立成功客户案例并分享最佳实践经验。程永在数据库和信息集成领域有7年以上的经验,在DB2规划设计、开发部署和性能调试以及WII(Websphere Information Integration)信息整合等方面有丰富的经验。在电力、政府等行业拥有丰富的开发、维护、系统集成经验。是IT168、IBM DeveloperWorks特约撰稿人,并在IT168拥有专栏,文章主要涉及SOA、XML、数据库、信息集成等。

自己整理的学习资料——DB2 V8数据库基础(二十五)

/  2008-10-30 11:37:29

/ /

表状态

UDB Version 8 load实用程序通过表状态(以及锁)来获取对表的访问,并在执行载入操作时维护的一致性。即使载入操作发生了异常终止,表状态也将会被保持。您可以用LOAD QUERY命令(见图3)确定特定表的状态。LOAD QUERY命令在其运行时检查载入操作的状态,并返回表的状态。如果载入操作完成(或异常终止)了,那么该命令只返回表的状态。关于该命令和其他DB2命令的更多信息,请参阅 DB2 Universal Database Command Reference

 



虽然在载入操作之前,从属的表空间不再是静默的(quiesce是一种持久性的锁),但是Load in Progress表空间状态会在执行载入操作时阻止对从属表进行。

Load in Progress表空间状态不同于Load in Progress表空间状态:所有的载入操作都使用Load in Progress表状态,但是指定COPY NO选项的载入操作(针对可恢复的数据库)还是使用Load in Progress表空间状态。

一个表可以同时处于几种状态之下。例如,如果将数据载入定义了表检查约束的表中,并指定ALLOW READ ACCESS选项,那么在执行载入操作期间,该表就处于Check PendingLoad in ProgressRead Access Only状态下。

3.受支持的表状态

状态

描述

示例

Check Pending

如果在一个表上定义了表检查约束,但还未验证新数据与那些已定义约束的兼容性,那么该表就处于这种状态。例如,DB2 load实用程序当开始在定义了表检查约束的表上执行载入操作时,就将表的状态设置为Check Pending状态。如果想使该表恢复为Normal状态,则需要执行一条SET INTEGRITY语句。要想获得更多的信息,请参阅约束

已知载入的输入文件staff_data.del拥有以下内容:11,"Melnyk",20,"Sales",10,70000,15000:
connect to sample;
alter table staff add constraint max_salary check (100000 - salary >0);
load from staff_data.del of del insert into staff;
load query table staff;
LOAD QUERY
命令返回的信息显示,STAFF表处于Check Pending状态。

Load Pending

如果在可提交数据之前,表上的正在执行的载入操作被异常终止,那么该表就处于这种状态。若要使该表恢复Normal状态,则需要调用load terminateload restartload replace操作。

已知载入的输入文件staffdata.del拥有大量数据(例如,20000条或更多记录),创建一个包含载入操作目标表的小型表空间,新建一个名为NEWSTAFF的表:
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 256);
create table newstaff like staff in ts1;
load from staffdata.del of del insert into newstaff;
load query table newstaff;
load from staffdata.del of del terminate into newstaff;
load query table newstaff;
connect reset;
LOAD QUERY
命令返回的信息显示,NEWSTAFF表处于Load Pending状态;在执行load terminate操作之后,该表就重新处于Normal状态。

Load in Progress

这是一种只在执行载入操作期间才有效的临时状态。关于当载入操作失败或被中断时,如何解除表的Load in Progress状态的信息,请参阅 Movement Utilities Guide and Reference中关于载入操作之后的暂挂状态的小节。还请参阅Load in Progress表空间状态

已知载入的输入文件staffdata.del拥有大量数据(例如,20000条或更多记录):
update db cfg for sample using logretain recovery;
backup db sample;
connect to sample;
create table newstaff like staff;
load from staffdata.del of del insert into newstaff copy no;
connect reset;
在执行载入操作时,从另一会话执行下列脚本:
connect to sample;
load query table newstaff;
connect reset;
LOAD QUERY
命令返回的信息显示,NEWSTAFF表处于Load in Progress状态。

Normal

如果表不是处于任何其他(异常的)表状态,那么它就处于Normal状态。Normal状态是表被创建之后的初始状态。

connect to sample;
create table newstaff like staff;
load query table newstaff;
LOAD QUERY
命令返回的信息显示,NEWSTAFF表处于Normal状态。

Not Load Restartable

当执行完前滚操作,接着出现一个失败的载入操作,而该操作未被成功地重新启动或者终止时,表就处于这种状态。该表还将处于Load Pending状态。若要使该表恢复Normal状态,则需要执行一条LOAD TERMINATE命令。

已知载入的输入文件staffdata.del拥有大量数据(例如,20000条或更多记录):
update db cfg for sample using logretain recovery;
backup db sample;
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 256);
create table newstaff like staff in ts1;
connect reset;
backup db sample;
该备份映像的时间戳为:20040629205935
connect to sample;
load from staffdata.del of del insert into newstaff copy yes to /home/melnyk/backups;
connect reset;
restore db sample taken at 20040629205935;
rollforward db sample to end of logs and stop;
connect to sample;
load query table newstaff;
connect reset;
LOAD QUERY
命令返回的信息显示,NEWSTAFF表处于Not Load RestartableLoad Pending状态。
connect to sample;
load from staffdata.del of del terminate into newstaff copy yes to /home/melnyk/backups;
load query table newstaff;
connect reset;
LOAD QUERY
命令返回的信息显示,NEWSTAFF表现在处于Normal状态。

Read Access Only

在执行载入操作时,如果指定了ALLOW READ ACCESS选项,那么表就处于这种状态。Read Access Only是一个临时状态,它允许其他应用程序和实用程序读访问在执行载入操作之前就存在的数据。

已知载入的输入文件staffdata.del拥有大量数据(例如,20000条或更多记录):
connect to sample;
export to st_data.del of del select * from staff;
create table newstaff like staff;
import from st_data.del of del insert into newstaff;
load from staffdata.del of del insert into newstaff allow read access;
在执行载入操作时,从另一会话执行下列脚本:
connect to sample;
load query table newstaff;
select * from newstaff;
connect reset;
LOAD QUERY
命令返回的信息显示,NEWSTAFF表处于Read Access OnlyLoad in Progress状态。该查询返回STAFF表所导出的内容,以及在执行载入操作之前,就存在于NEWSTAFF表中的数据。

Unavailable

当前滚一个无法恢复的载入操作时,表就处于这种状态;这样的表只能被删除,或者从备份映像恢复它。

已知载入的输入文件staff_data.del拥有下列内容:11,"Melnyk",20,"Sales",10,70000,15000:
update db cfg for sample using logretain recovery;
backup db sample;
该备份映像的时间戳为:20040629182012
connect to sample;
load from staff_data.del of del insert into staff nonrecoverable;
connect reset;
restore db sample taken at 20040629182012;
rollforward db sample to end of logs and stop;
connect to sample;
load query table staff;
connect reset;
LOAD QUERY
命令返回的信息显示,STAFF表处于Unavailable状态。

阅读(1107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~