DB2 reorg

转载 2015年07月08日 15:39:45

在对表进行了alter以后。再执行任何操作都报 不可用,错误码为7,百度了一下发现问题所在。一下转自一篇博文:

ALTER TABLE操作在日常开发中很常见,下面是摘自DB2官网关于ALTER TABLE操作的一段话。

Perhaps the most important thing to realize when running an ALTER TABLE statement containing a REORG-recommended operation is that once the ALTER TABLE statement has executed, the table will be placed in the Reorg Pending state. This means that the table is inaccessible for almost all operations until you perform a REORG. See the ALTER TABLE statement in the SQL Referencefor the complete list of ALTER TABLE operations, some of which are also called REORG-recommended operations.

简单地说就是运行ALTER TABLE时要注意当前运行的语句是否需要执行REORG操作,对于这样的ALTER TABLE语句,如果不执行REORG操作的话,基本上目标表就不再可用。至于什么样的语句需要REORG,什么样的不需要,看SQL Reference去!下面是一个具体的例子演示:

CREATE TABLE my_test AS (
    SELECT id,
       ...
       sla_priority1_time,
       sla_priority2_time,
       sla_priority3_time,
       sla_priority4_time, 
       CAST(NULL AS DECIMAL(11, 2)) AS approvedDouAmount,
       CAST(NULL AS DECIMAL(4)) AS year
      FROM fin_attributes
)
WITH NO DATA;

ALTER TABLE my_test ALTER COLUMN id SET GENERATED ALWAYS AS IDENTITY;
ALTER TABLE my_test ADD COLUMN datetime TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP;

ALTER TABLE my_test ALTER COLUMN sla_priority1_time DROP NOT NULL;
ALTER TABLE my_test ALTER COLUMN sla_priority2_time DROP NOT NULL;
ALTER TABLE my_test ALTER COLUMN sla_priority3_time DROP NOT NULL;

REORG TABLE my_test;

ALTER TABLE my_test ALTER COLUMN sla_priority4_time DROP NOT NULL;

REORG TABLE my_test;

INSERT INTO my_test (
       ...
       sla_priority1_time,
       sla_priority2_time,
       sla_priority3_time,
       sla_priority4_time, 
       approvedDouAmount,
       year
)
SELECT ...
       sla_priority1_time,
       sla_priority2_time,
       sla_priority3_time,
       sla_priority4_time, 
       NVL(pg.approvedDouAmount, 0),
       YEAR(NOW())
  FROM fin_attributes f, projgrp pg
 WHERE f.projgrp_id = pg.id
   AND f.project_id IS NULL
   AND f.fin_projgrp_id IS NULL
 UNION
SELECT ...
       sla_priority1_time,
       sla_priority2_time,
       sla_priority3_time,
       sla_priority4_time, 
       NVL(p.approvedDouAmount, 0),
       YEAR(NOW())
  FROM fin_attributes f, project p
 WHERE f.project_id = p.id
   AND f.projgrp_id IS NULL;

代码有四种颜色,绿色代表不需要执行REORG的语句,红色代表需要执行REORG的语句,黄色是REORG语句,白色你懂的。从代码上可以看出,红色高亮语句虽然要求使用REORG,但不及时运行REORG还可以让后续的几个语句继续执行。原因是DB2允许最多三条语句处于Reorg Pending状态,假如去除第一个REORG,语句“ALTER TABLE my_test ALTER COLUMN sla_priority4_time DROP NOT NULL;”就会执行失败。

结论:如果不确定那个是需要REORG哪个是不需要REORG,索性都用上REORG;虽然在允许有三条语句处于Reorg Pending状态,但最好每条ALTER TABLE对应一个REORG,因为处于Reorg Pending状态的表有可能会阻碍后续操作,具体详情请参考文档:http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/c0023297.htm

PS:REORG TABLE本身是DB2的command,不是正常的SQL语句(Statement)。如果在非命令行环境中想使用REORG的话,可以像下面那样调用存储过程间接执行REORG操作,执行前确保你所使用的帐号有调用这个存储过程的权限:

CALL SYSPROC.ADMIN_CMD('reorg table my_test')

最后来一段用Java动态执行SQL语句或DB2命令的代码。


原文地址:http://blog.csdn.net/rcom10002/article/details/6387480



DB2 使用REORG命令重组优化表和索引

名词解释: reorgchk,检查table index 是否需要重组。 reorg 重组,重新放置数据位置。 runstats 统计信息,可以优化查询器 ...

DB2 的REORG_学习(3)_索引重组

表被更新后,索引性能可能会下降。 这种下降表现在下列方面: 叶子页碎片化。叶子页碎片化之后,必须读取更多的叶子页才能访存表页,因此 I/O 操作成本会增加。 物理索引页的顺序不再与那些页中键的顺序相...

db2中会导致表处于reorg pending状态的alter语句

会导致表处于reorg pending状态的alter table语句 通常在数据库上线之前,我们都会对数据库做周密的规划,无论在测试阶段还是上线之初,也难免由于需求的更改会对数据中的表做一些更改。...
  • iwaich
  • iwaich
  • 2012年12月22日 02:22
  • 2601

DB2日常维护 - 介绍REORG

DB2日常维护(REORG TABLE改善性能)   文章来自:http://blog.sina.com.cn/s/blog_60359c5b0100n75r.html 一个完整...

一次完整的DB2 reorg经历

事件:ecmapp11的历史图片每天累积,TSM每天可以建立迁移任务,但却取不到任何数据; 与其关联的数据库rmdb11查询操作速度也超慢, 在和数据量相当的另一个数据库rmdb12上,同样的查询语...
  • starym
  • starym
  • 2015年11月04日 20:07
  • 8118

DB2中ALTER TABLE为什么需要REORG操作?

DB2中ALTER TABLE为什么需要REORG操作?里面有答案!

DB2 更新统计信息,表整理 runstats、reorgchk、reorg 命令

runstats、reorgchk、reorg   1、runstats runsats可以搜集表的信息,也可以搜集索引信息。作为runstats本身没有优化的功能,但是它更新了统计信息以后,可...

完整的DB2 REORG案例

事件: 和数据量相当的另一个数据库b上,同样的查询语句只需要花费1秒钟,但a要用十几分钟。 处理办法: 重建表和索引,清除叶子页碎片,可以有效提高数据库性能。  首先查询sysca...

db2 reorg优化及原因

reorgchk,检查table index 是否需要重组。reorg 重组,重新放置数据位置。runstats 统计信息,可以优化查询器 一个完整的日常维护规范可以帮助 DBA 理...
  • cws1214
  • cws1214
  • 2013年12月18日 16:28
  • 9153

DB2日常维护——REORG TABLE命令优化数据库性能

【转】DB2日常维护——REORG TABLE命令优化数据库性能 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DB2 reorg
举报原因:
原因补充:

(最多只允许输入30个字)