跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

DB2 基础: 阐明表和表空间的状态

Roman Melnyk, Ph.D., DB2 Information Development 团队资深成员, IBM
Roman B. Melnyk 博士是 DB2 Information Development 团队的资深成员,专长是数据库管理、DB2 工具和 SQL。 在 IBM 工作的十一年中,Roman 撰写和编辑了大量 DB2 书籍、文章和其他相关资料。Roman 与人合著了 DB2 Version 8: The Official GuideDB2: The Complete ReferenceDB2 Fundamentals Certification for DummiesDB2 for Dummies。Roman 最近编著了 Apache Derby -- Off to the Races 一书。可以通过 roman_b_melnyk@hotmail.com 与他联系。

简介: DB2 数据库管理器使用表和表空间状态来控制对数据的访问,或帮助保护数据库的完整性。本文描述了这些状态,并以工作示例的方式,展示了出现这些状态的典型条件和如何对其做出响应。

本文最初撰写于 2004 年,并于 2011 年 10 月进行了更新,文中包含有关最新版的 IBM® DB2 for Linux®, UNIX®, and Windows® 的信息。

查看本系列更多内容

发布日期: 2011 年 12 月 27 日 (最初发布 2004 年 7 月 01 日)
级别: 初级 原创语言: 英文
访问情况 : 949 次浏览
评论: 


免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

目前,IBM DB2 Database for Linux, UNIX, and Windows (DB2 for LUW) 至少支持 30 种表或表空间状态。这些状态在某些情况下被用来控制对数据的访问,或者在必要时被用来引出特定用户动作,以保护数据库的完整性。大多数状态产生于与某个 DB2 实用程序的操作相关的事件,例如加载实用程序,或者备份和恢复实用程序。

本文描述了每个受支持的表或表空间状态(见表 1;单击状态名跳至其描述,该描述位于后面的某个表中)。本文还提供了一些工作示例,以便准确地展示如何解释和响应管理数据库时可能碰到的状态。这些示例取自于 AIX® 上运行的命令脚本;您可以复制、粘贴并亲自运行它们。如果您在非 UNIX 的系统上运行 DB2 服务器,请确保所有的路径名都是适合系统的正确格式。大多数示例都是以 SAMPLE 数据库中的表为基础的,该数据库是 DB2 产品附带的。也存在少数需要 SAMPLE 数据库中没有包含的场景的情况,但是,您可以将到 SAMPLE 数据库的连接用作为一个起始点。

表 2 和表 3 中描述了这些状态。表 2 描述了受支持的表空间状态,而 表 3 则描述了目前支持的表状态。

表 1. 到版本 9.7.4 为止的 DB2 for LUW 所有支持版本中定义的表和表空间状态

状态范围状态范围
Backup Pending表空间Redistribute Pending
Backup in Progress表空间Redistribute in Progress表空间
DMS Rebalance in Progress表空间Reorg in Progress表空间
Delete Pending表空间Restore Pending表空间
Disable Pending表空间Restore in Progress表空间
Drop Pending表空间Roll Forward Pending表空间
Load PendingRoll Forward in Progress表空间
Load in Progress表空间或Set Integrity Pending
Movement in Progress表空间Storage May be Defined表空间
Normal表空间或Storage Must be Defined表空间
Not Load RestartableTable Space Creation in Progress表空间
Offline and Not Accessible表空间Table Space Deletion in Progress表空间
Quiesced Exclusive表空间Type-1 Indexes
Quiesced Share表空间Unavailable
Quiesced Update表空间Write Suspended表空间
Read Access Only

表空间状态

db2tbst 命令接收十六进制的状态值,并返回相应的表空间状态(参见图 1)。例如,命令 db2tbst 0x0008 返回 State = Load Pending。而该十六进制的状态值反过来又是 LIST TABLESPACES 命令输出的组成部分(参见图 2)。关于这些以及其他 DB2 命令的更多信息,请参阅 IBM DB2 9.7 for Linux, UNIX, and Windows Command Reference


图 1. db2tbst 命令接收十六进制的表空间状态值并返回其状态。
图 1

表空间的外部可见状态是由单个状态值的十六进制总和构成的。例如,如果表空间的状态是 Backup PendingLoad in Progress,那么所返回的十六进制值就是 0x20020 (0x00020 + 0x20000)。本例中,命令 db2tbst 0x20020 返回:

State = Backup Pending
      + Load in Progress


图 2. 可以使用 LIST TABLESPACES 命令确定连接数据库中表空间的当前状态。
图 2

表 2. 受支持的表空间状态

状态十六进制状态值描述示例
Backup Pending0x20在执行指定时间点的(point-in-time)表空间前滚操作之后,或者在执行指定了 COPY NO 选项的 LOAD 操作(针对可恢复的数据库)之后,表空间处于这种状态。在使用该表空间之前,必须备份该表空间(或者是整个数据库)。如果没有备份这个表空间,那么只能对其中包含的表进行查询,而无法更新它们。注意:在启用数据库进行前滚恢复之后,还必须立即对该数据库进行备份。如果 logarchmeth1logarchmeth2 数据库配置参数被设置为 OFF 以外的值,数据库是可恢复的。直到对这样的数据库进行了备份,您才可以激活或连接它。备份后,backup_pending 信息数据库配置参数被设置为 NO。1. 已知载入的输入文件 staff_data.del 具有以下内容:11,"Melnyk",20,"Sales",10,70000,15000:
update db cfg for sample using logarchmeth1 logretain;
backup db sample;
connect to sample;
load from staff_data.del of del messages load.msg insert into staff copy no;
update staff set salary = 69000 where id = 11;
2. update db cfg for sample using logarchmeth1 logretain;
connect to sample;
Backup in Progress0x800这是一种只在进行备份操作期间才有效的临时状态。执行一条在线 BACKUP DATABASE 命令:
backup db sample online;
在执行备份操作时,通过另一个会话执行下列脚本:
connect to sample;
1. list tablespaces show detail; 或者
2. get snapshot for tablespaces on sample;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Backup in Progress 状态。
DMS Rebalance in Progress0x10000000这是一种只在执行数据重新平衡操作期间才有效的临时状态。当向定义为数据库管理空间(DMS)的表空间添加新的容器时,或者当扩展现有的容器时,就可能发生表空间数据的重新调整。重新调整(Rebalancing) 是指将表空间区段(extent)从某一位置移动到另一位置,试图保持数据成一整块的过程。一个区段就是一个容器空间单元(以页面为单位),而一个条带(stripe)就是用于表空间的跨容器集 的一层区段。已知载入的输入文件 staffdata.del 拥有大量数据(例如,20000 条或更多记录):
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 1024);
create table newstaff like staff in ts1;
load from staffdata.del of del insert into newstaff nonrecoverable;
alter tablespace ts1 add (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c2' 1024);
list tablespaces;
connect reset;
TS1 返回的信息显示,该表空间处于 DMS Rebalance in Progress 状态。
Delete Pending0x00000010如果在删除阶段加载操作失败(违反唯一性约束的行被删除),表空间将保持 Delete Pending 状态。状态改变对象标识监视元素(tablespace_state_change_object_id)将标记使表空间状态变为 Delete Pending 的对象。如果为非零,该元素的值将匹配 SYSCAT.TABLES 目录视图的 TABLEID 列的值。状态改变表空间标识监视元素(tablespace_state_change_ts_id)展示了使该表空间状态被设置的对象的表空间 ID。如果为非零,该元素的值将匹配 SYSCAT.TABLES 目录视图的 TABLESPACEID 列的值。 至于说明该表空间状态的示例,已经超出了本文的范围。
Disable Pending0x200在执行数据库前滚操作期间,表空间可能处于这种状态,但在前滚操作结束之时,就不应再处于该状态。当出现表空间脱机以及对没有被写入硬盘的事务补偿日志记录时,就可能触发这种状态。该表空间状态的出现以及随后状态的消失对用户都是透明的。至于说明该表空间状态的示例,已经超出了本文的范围。
Drop Pending0x8000在重新启动数据库时,如果发现该数据库的一个或多个容器有问题,那么表空间就会处于这种状态。(如果数据库的前一会话异常终止,例如停电时,就必须重新启动数据库。)如果表空间处于 Drop Pending 状态,就不再可用,只能将其删除。至于说明该表空间状态的示例,已经超出了本文的范围。
Load in Progress0x20000这是一种只在执行指定了 COPY NO 选项的载入操作(针对可恢复的数据库)时才有效的临时状态。请参阅 Load in Progress 表状态已知载入的输入文件 staffdata.del 有大量数据(例如,20000 条或更多记录):
update db cfg for sample using logarchmeth1 logretain;
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;
list tablespaces;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Load in Progress(和 Backup Pending)状态。
Movement in Progress0x00080000 Movement in Progress 状态表示目前正在执行表空间区段移动操作,用于收回未使用的存储。 至于说明该表空间状态的示例,已经超出了本文的范围。
Normal0x0如果表空间不是处于任何其他(异常的)表空间状态,那么该表空间的状态就为 Normal 状态。Normal 状态是表空间被创建之后的初始状态。connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
list tablespaces show detail;
Offline and Not Accessible0x4000如果表空间的一个或多个容器存在问题,那么表空间就处于这种状态。容器偶然可能会被重命名、移动或损坏。在该问题被纠正,且再次可以访问与该表空间相关的容器之后,可以通过断开数据库与应用程序的连接,然后重新连接数据库来消除该异常状态。或者,您可以执行一条 ALTER TABLESPACE 语句,指定 SWITCH ONLINE 子句来消除表空间的 Offline and Not Accessible 状态,从而无需断开其他应用程序与该数据库的连接。connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
alter tablespace ts1 add (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024);
export to st_data.del of del select * from staff;
create table stafftemp like staff in ts1;
import from st_data.del of del insert into stafftemp;
connect reset;
将表空间容器 tsc1 重新命名为 tsc3,然后尝试查询 STAFFTEMP 表:
connect to sample;
select * from stafftemp;
该查询返回 SQL0290N(不允许访问表空间),而 LIST TABLESPACES 命令返回 TS1 的状态值 0x4000(Offline and Not Accessible)。将表空间容器 tsc3 再次命名为 tsc1。这一次,该查询将运行成功。
Quiesced Exclusive0x4当调用表空间静默(quiesce)功能的应用程序独占(读或写)访问表空间时,该表空间就处于这种状态。您可以通过执行一条 QUIESCE TABLESPACES FOR TABLE 命令,将表空间置于 Quiesced Exclusive 状态。在将表空间设置为 Quiesced Exclusive 之前,要确保它处于 Normal 状态。
connect to sample;
quiesce tablespaces for table staff reset;
quiesce tablespaces for table staff exclusive;
connect reset;
从另一会话执行下列脚本:
connect to sample;
select * from staff where id=60;
update staff set salary=50000 where id=60;
list tablespaces;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Quiesced Exclusive 状态。
Quiesced Share0x1当调用表空间静默(quiesce)功能的应用程序和并发应用程序都可以读(但不能写)访问表空间时,该表空间就处于这种状态。您可以通过执行一条 QUIESCE TABLESPACES FOR TABLE 命令,将表空间显式地置于 Quiesced Share 状态。在将表空间设置为 Quiesced Share 之前,要确保它处于 Normal 状态。
connect to sample;
quiesce tablespaces for table staff reset;
quiesce tablespaces for table staff share;
connect reset;
从另一会话执行下列脚本:
connect to sample;
select * from staff where id=40;
update staff set salary=50000 where id=40;
list tablespaces;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Quiesced Share 状态。
Quiesced Update0x2当调用表空间静默(quiesce)功能的应用程序独占写访问表空间时,该表空间就处于这种状态。您可以通过执行一条 QUIESCE TABLESPACES FOR TABLE 命令,将表空间显式地置于 Quiesced Update 状态。在将表空间设置为 Quiesced Update 之前,要确保它处于 Normal 状态。
connect to sample;
quiesce tablespaces for table staff reset;
quiesce tablespaces for table staff intent to update;
connect reset;
从另一会话执行下列脚本:
connect to sample;
select * from staff where id=50;
update staff set salary=50000 where id=50;
list tablespaces;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Quiesced Update 状态。
Redistribute in Progress0x40000 Redistribute in Progress 表空间状态表示当前正在执行数据重新分配操作。如果数据重新分配操作失败或被中断,表状态将变为 Redistribute Pending。至于说明该表空间状态的示例,已经超出了本文的范围。
Reorg in Progress0x400这是一种只在进行重组(reorg)操作期间才有效的临时状态。执行一条 REORG TABLE 命令:
connect to sample;
reorg table staff;
connect reset;
在执行重组操作时,从另一会话执行下列脚本:
connect to sample;
1. list tablespaces show detail; 或者
2. get snapshot for tablespaces on sample;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Reorg in Progress 状态。注意:涉及 SAMPLE 数据库的表重组操作很可能在极短的时间内就可以完成,因此,使用这种方法来观察 Reorg in Progress 状态可能比较困难。
Restore Pending0x100在执行了重定向恢复操作的第一部分之后(即在发出 SET TABLESPACE CONTAINERS 命令之前),数据库的表空间就处于这种状态。在使用表空间之前,必须恢复表空间(或者是整个数据库)。直到成功完成恢复操作,您才可以连接到数据库,此时, restore_pending 信息数据库配置参数的值被设为 NO。当处于 Storage May be Defined 中的重定向恢复操作的第一部分完成时,所有的表空间都将处于 Restore Pending 状态。
Restore in Progress0x2000这是一种只在执行恢复操作期间才有效的临时状态。update db cfg for sample using logarchmeth1 logretain;
backup db sample;
backup db sample tablespace (userspace1);
该备份映像的时间戳为:20110611174124
restore db sample tablespace (userspace1) online taken at 20110611174124;
在执行恢复操作时,从另一会话执行下列脚本:
connect to sample;
1. list tablespaces show detail; 或者
2. get snapshot for tablespaces on sample;
connect reset;
USERSPACE1 返回的信息显示,该表空间处于 Restore in Progress 状态。
Roll Forward Pending0x80在对可恢复的数据库执行恢复操作之后,表空间就处于这种状态。在使用表空间之前,必须前滚该表空间(或是整个数据库)。如果 logarchmeth1logarchmeth2 数据库配置参数被设为非 OFF 的值,那么该数据库是可恢复的。直到前滚操作成功完成,您才可以激活或连接到该数据库,此时,rollfwd_pending 信息数据库配置参数被设为 NO。当处于 Restore in Progress 中的在线表空间完成恢复操作时,表空间 USERSPACE1 处于 Roll Forward Pending 状态。
Roll Forward in Progress0x40这是一种只在执行前滚操作期间才有效的临时状态。已知载入的输入文件 staffdata.del 拥有大量数据(例如,20000 条或更多记录):
update db cfg for sample using logarchmeth1 logretain;
backup db sample;
connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/ts1c1' 1024);
create table newstaff like staff in ts1;
connect reset;
backup db sample tablespace (ts1) online;
该备份映像的时间戳为:20110630000715
connect to sample;
load from staffdata.del of del insert into newstaff copy yes to /home/melnyk/backups;
connect reset;
restore db sample tablespace (ts1) online taken at 20110630000715;
rollforward db sample to end of logs and stop tablespace (ts1) online;
当执行前滚操作时,从另一会话执行下列脚本:
connect to sample;
1. list tablespaces show detail; 或者
2. get snapshot for tablespaces on sample;
connect reset;
TS1 返回的信息显示,该表空间处于 Roll Forward in Progress 状态。
Storage May be Defined0x2000000在执行了重定向恢复操作的第一部分之后(即在发出 SET TABLESPACE CONTAINERS 命令之前),数据库的表空间就处于这种状态。如果您愿意,这将允许您重新定义容器(请参阅 克隆使用 Redirected Restore 的 DB2 数据库)。backup db sample;
假定该备份映像的时间戳为:20110613204955:
restore db sample taken at 20110613204955 redirect;
list tablespaces;
LIST TABLESPACES 命令返回的信息显示,所有的表空间都处于 Storage May be Defined 和 Restore Pending 状态。
Storage Must be Defined0x1000在将恢复操作重定向到 数据库期间,如果省略了设置表空间容器的阶段,或者,如果在设置表空间容器的阶段期间无法获得指定的容器,那么数据库的表空间就会处于这种状态。某些时候会出现后一种情况,例如,指定了无效的路径名,或者是磁盘空间不足。backup db sample;
假定该备份映像的时间戳为:20110613204955:
restore db sample taken at 20110613204955 into mydb redirect;
set tablespace containers for 2 using (path 'ts2c1');
list tablespaces;
LIST TABLESPACES 命令返回的信息显示,表空间 SYSCATSPACE 和表空间 TEMPSPACE1 都处于 Storage Must be Defined、 Storage May be DefinedRestore Pending 状态。Storage Must be Defined 状态比 Storage May be Defined 状态具有更高的优先权。
Table Space Creation in Progress0x40000000这是一种只在执行创建表空间的操作期间才有效的临时状态。connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
create tablespace ts2 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024);
create tablespace ts3 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc3' 1024);
在执行创建表空间的操作时,从另一会话执行下列脚本:
connect to sample;
1. list tablespaces show detail;
2. get snapshot for tablespaces on sample;
connect reset;
TS1、TS2 和 TS3 返回的信息显示,这些表空间处于 Table Space Creation in Progress 状态。
Table Space Deletion in Progress0x20000000这是一种只在执行删除表空间的操作期间才有效的临时状态。connect to sample;
create tablespace ts1 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc1' 1024);
create tablespace ts2 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc2' 1024);
create tablespace ts3 managed by database using (file '/home/melnyk/melnyk/NODE0000/SQL00001/tsc3' 1024);
drop tablespace ts1;
drop tablespace ts2;
drop tablespace ts3;
在执行删除表空间的操作时,从另一会话执行下列脚本:
connect to sample;
1. list tablespaces show detail;
2. get snapshot for tablespaces on sample;
connect reset;
TS1、TS2 和 TS3 返回的信息显示,这些表空间处于 Table Space Deletion in Progress 状态。
Write Suspended0x00010000 Write Suspended 表空间状态表示 SET WRITE 命令用于对数据库暂停 I/O 写操作。该命令还可以暂停对相关日志执行的 I/O 写操作。connect to sample;
set write suspend for db;
list tablespaces show detail;
connect reset;
LIST TABLESPACES 命令返回的信息表示,所有表空间都处于 Write Suspended 状态。

表状态

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


图 3. 可以使用 LOAD QUERY 命令来确定指定表的状态。
图 3

虽然在载入操作之前,从属的表空间不再是静默的(quiesce 是一种持久性的锁),但是 Load in Progress 表空间状态会在执行载入操作时阻止对从属表进行备份。Load in Progress 表空间状态不同于 Load in Progress 表状态:所有的载入操作都使用 Load in Progress 表状态,但是指定 COPY NO 选项的载入操作(针对可恢复的数据库)还是使用 Load in Progress 表空间状态。

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

表 3. 受支持的表状态

状态描述示例
Set Integrity Pending(以前为 Check Pending)如果在一个表上定义了表检查约束(限制),但还未验证新数据与那些已定义约束的兼容性,那么该表就处于这种状态。例如,DB2 load 实用程序当开始在定义了表检查约束的表上执行载入操作时,就将表的状态设置为 Set Integrity 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 表处于 Set Integrity Pending 状态。
Load Pending如果在可提交数据之前,表上的正在执行的载入操作被异常终止,那么该表就处于这种状态。若要使该表恢复 Normal 状态,则需要调用 load terminate、load restart 或 load 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 状态的信息,请参阅 IBM DB2 9.7 for Linux, UNIX, and Windows Data Movement Utilities Guide and Reference 中关于载入操作之后的暂挂状态的小节。还请参阅 Load in Progress 表空间状态已知载入的输入文件 staffdata.del 拥有大量数据(例如,20000 条或更多记录):
connect to sample;
create table newstaff like staff;
load from staffdata.del of del insert into newstaff;
在执行载入操作时,从另一会话执行下列脚本:
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 logarchmeth1 logretain;
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;
该备份映像的时间戳为:20110629205935
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 20110629205935;
rollforward db sample to end of logs and stop;
connect to sample;
load query table newstaff;
connect reset;
LOAD QUERY 命令返回的信息显示,NEWSTAFF 表处于 Not Load Restartable 和 Load 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 Only 和 Load in Progress 状态。该查询返回 STAFF 表所导出的内容,以及在执行载入操作之前,就存在于 NEWSTAFF 表中的数据。
Redistribute Pending Redistribute Pending 表状态表示数据再分配的操作失败或中断。您可以执行 REDISTRIBUTE DATABASE PARTITION GROUP 命令,指定 CONTINUE 或 ABORT 选项,移除 Redistribute Pending 状态。至于说明该表空间状态的示例,已经超出了本文的范围。
Type-1 Indexes Type-1 Indexes 状态表示表正在使用 type-1 索引,该索引目前已经不受支持。您可以将 type-1 索引转换为 type-2 索引,方法是使用 REORG INDEXES/TABLE 命令的 CONVERT 选项,或使用 db2IdentifyType1 实用程序。至于说明该表空间状态的示例,已经超出了本文的范围。
Unavailable当前滚一个无法恢复的载入操作时,表就处于这种状态;这样的表只能被删除,或者从备份映像恢复它。 已知载入的输入文件 staff_data.del 拥有下列内容:11,"Melnyk",20,"Sales",10,70000,15000:
update db cfg for sample using logarchmeth1 logretain;
backup db sample;
该备份映像的时间戳为:20110629182012
connect to sample;
load from staff_data.del of del insert into staff nonrecoverable;
connect reset;
restore db sample taken at 20110629182012;
rollforward db sample to end of logs and stop;
connect to sample;
load query table staff;
connect reset;
LOAD QUERY 命令返回的信息显示,STAFF 表处于 Unavailable 状态。

结束语

DB2 for LUW 用表状态和表空间状态来控制对数据的访问,或者在特定情况下帮助保护数据库的完整性。本文通过工作示例展示了可能引出特定状态的更常见的一些条件,您可以用它们来识别哪些状态是有效,以及如何作出正确响应,以便可以继续使用数据,而不会出现漏拍(miss a beat)现象。您会很容易就适应这些示例,并将它们用到自己的数据中;很快,您将真正 “感知到周围的” 各种状态,并可使用它们来更好地理解数据库的行为。


参考资料

学习

获得产品和技术

  • 下载 DB2 for Linux, UNIX, and Windows 的免费试用版。

  • 现在您可以免费使用 DB2。下载 DB2 Express-C,它是为社区提供的 DB2 Express Edition 的免费版本,提供 了与 DB2 Express Edition 相同的核心数特性,并为构建和部署应用程序提供了坚实基础。

  • 使用 IBM 试用软件 构建您的下一个开发项目,可以从 developerWorks 直接下载获得。

讨论

关于作者

Roman B. Melnyk 博士是 DB2 Information Development 团队的资深成员,专长是数据库管理、DB2 工具和 SQL。 在 IBM 工作的十一年中,Roman 撰写和编辑了大量 DB2 书籍、文章和其他相关资料。Roman 与人合著了 DB2 Version 8: The Official GuideDB2: The Complete ReferenceDB2 Fundamentals Certification for DummiesDB2 for Dummies。Roman 最近编著了 Apache Derby -- Off to the Races 一书。可以通过 roman_b_melnyk@hotmail.com 与他联系。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=783087
ArticleTitle=DB2 基础: 阐明表和表空间的状态
publish-date=12272011

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。