ABC
作者ABC·2011-05-28 15:27
数据库运维工程师·ABC

联机表重组

字数 1236阅读 1386评论 0赞 0

联机表重组

联机或原地表重组允许用户重组表,并同时允许对该表进行完全访问。虽然联机表重组允许用户不中断对数据的访问,但其速度比脱机表重组要慢。

进行联机表重组时,不是立即重组整个表。而是按顺序重组表的各个部分。不会将数据复制到临时表空间:在现有表对象中移动行以重新建立集群、回收可用空间并消除溢出行。

联机表重组包括四个主要阶段:

1.     选择 N
在此阶段中,DB2 将选择 N 页,其中 N 是包含要进行重组表处理的最少 32 个有序页的扩展数据块大小。

2.     腾出范围
选定 N 页后,联机表重组将此范围内的所有行移至表中的可用页。每个被移动的行都保留一条 RP(重组表指针)记录,该记录包含行的新位置的 RID。将行作为包含数据的 RO(重组表溢出)记录插入到表的可用页中。
重组表完成移动一组行后,它将等待表中进行的所有现有数据访问(例如,通过当前执行应用程序)完成。这些现有访问称为旧扫描程序,它们在访问表数据时使用旧 RID。在此等待过程中启动的任何访问都称为新扫描程序,它们使用新的 RID 来访问数据。在所有旧扫描程序都完成后,重组表操作将清除已移动的行、删除 RP 记录并将 RO 记录转换为正常记录。

3.     填充范围
腾出所有行之后,将采用已重组的格式、根据使用的任何索引进行排序后的顺序并遵循定义的任何预取限制写回这些行。填充范围中的所有页后,将在表中选择下一个 N 有序页,并且再次开始该过程。

4.     截断表
重组表中的所有页后,缺省情况下将截断表以回收空间(默认情况下移动表的高水位标记以回收空间)。如果指定了 NOTRUNCATE 选项,那么不会截断已重组的表。

联机表重组期间创建的文件

联机表重组期间,将为每个数据库分区创建一个 .OLR 状态文件。此文件是名为 xxxxyyy.OLR 的二进制文件,其中 xxxx 是池标识,而 yyyy 是十六进制格式的对象标识。此文件包含从暂停状态继续联机重组所需的信息。

状态文件包括下列信息:

  • 重组类型
  • 所重组的表的生存 LSN
  • 要腾出的下一个范围
  • 重组是为了划分数据的集群还是仅回收空间
  • 用于划分数据集群的索引的标识

校验和保存在 .OLR 文件中。如果该文件已损坏并导致校验和错误,或者如果表 LSN 与生存 LSN 不匹配,那么必须启动一个新的重组,并且将创建新的状态文件。

如果删除了 .OLR 状态文件,那么重组表过程不能继续,并且会返回 SQL2219 错误。必须启动新的重组表过程。

不应从系统中手动除去与重组过程关联的文件。

 

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广