运行哑元 UPDATE 语句

如果有未完成的定点变更,在还原到数据库服务器的先前版本之前,请先对这些变更运行哑元 UPDATE 语句。然后运行 oncheck -pT tablename 命令以验证是否不再有未完成的定点变更。

哑元 UPDATE 语句通过更新受影响表中的行来强制完成所有未完成的定点变更。要生成哑元 UPDATE 语句,请创建一个 UPDATE 语句,其中表中的一列设置为其自己的值。这将强制该行更新为最新模式,而并不实际更改列值。因为数据库服务器始终会将行变更为最新模式,所以对整个表执行单个哑元 UPDATE 语句来更新所有行后,即完成了所有未完成的定点变更。

哑元 UPDATE 语句不同于标准 UPDATE 语句,因为它并不更改数据。标准 UPDATE 语句通常会更改受影响行的值。

例如,要创建哑元更新,请指定:
UPDATE tab1 SET col1=col1 WHERE 1=1 ;

必须确保所选列是数字数据类型(例如,INTEGER 或 SMALLINT),而不是字符数据类型。

如果表较大,对整个表执行的单次更新可能会导致较长的事务。要避免这种情况,请使用以下语句分块更新表(按某个列的范围分块):
 ... WHERE {id_column} BETWEEN {low_value} AND {step_value}
例如,指定:
UPDATE tab1 SET col1=col1 WHERE col1 BETWEEN 1 AND 100; 
UPDATE tab1 SET col1=col1 WHERE col1 BETWEEN 101 AND 200;

确保 UPDATE 语句包含整个数据集。

如果表是使用 Enterprise Replication 复制的,那么数据库服务器将复制所有已更新的行,但这是不必要的。要避免这种情况,请按如下所示更新表:
BEGIN WORK WITHOUT REPLICATION;
     ...
     COMMIT WORK;

除去所有暂挂定点变更后,运行 oncheck -pT tablename 命令。在此命令的输出中,检查“Version”部分中的信息。数据页数应该与当前版本相匹配。此外,对于其他所有表版本,版本正在访问的数据页数都应该为 count=0

例如,如果完成哑元更新后运行了 oncheck -pT testdb:tab1,可能会看到类似于以下样本输出段中信息的信息:

TBLspace Report for testdb:root.tab1

  Physical Address               1:860
  Creation date                  06/23/2011 14:23:08
  TBLspace Flags                 800801     Page Locking
                                            TBLspace use 4 bit bit-maps
  Maximum row size               29        
  Number of special columns      0         
  Number of keys 0 
  Number of extents              1         
  Current serial value           1         
  Current SERIAL8 value          1         
  Current BIGSERIAL value        1         
  Current REFID value            1         
  Pagesize (k)                   2         
  First extent size              8         
  Next extent size               8         
  Number of pages allocated      8         
  Number of pages used           4        
  Number of data pages           3
   << Number of data pages used is 3 >>        
  Number of rows                 6         
  Partition partnum              1048981   
  Partition lockid               1048981   

  Extents                       
       Logical Page     Physical Page     Size Physical Pages
                  0            1:1895        8          8
TBLspace Usage Report for testdb:root.tab1

  Type                  Pages      Empty  Semi-Full       Full  Very-Full
  ---------------- ---------- ---------- ---------- ---------- ----------
  Free                      4
  Bit-Map                   1
  Index                     0
  Data (Home)               3
                   ----------
  Total Pages               8

  Unused Space Summary

     Unused data slots                               177

  Home Data Page Version Summary

                Version           Count

      3 (oldest)                           0  
          << Other version should show data page count=0>>
      4                                    0
          << Other version should show data page count=0>>
      5 (current)                          3
          << Current should always match the number of data pages>>