如果有未完成的定点变更,在还原到数据库服务器的先前版本之前,请先对这些变更运行哑元 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 语句包含整个数据集。
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>>