- ORA-12896
- 大表删除字段
- OGG-01154
- UNUSED COLUMN
关于大表删除字段 UNUSED COLUMN
对于非常大的表如果要删除一个字段,可以使用unused column关键字
ALTER TABLE … SET UNUSED (col_list)
该字段会立刻标记为unused状态并且不提供语句恢复字段,select及DESCRIBE均无法看到该字段。
可以通过user_unused_col_tabs,dba_unused_col_tabs,all_unused_col_tabs查看被unused的字段。
等待业务高峰期过后选择合适的时机在完成真正的删除操作。
彻底删除字段通过以下语句
ALTER TABLE table DROP UNUSED COLUMNS;
如果想要减少undo表空间的累计可以使用关键字CHECKPOINT integer integer为大于0的整数,如果超过表的行数则直到完成字段删除后应用检查点,如果为空则默认为512。
ALTER TABLE *table* DROP UNUSED COLUMNS CHECKPOINT *integer*;
注意:
如果执行此过程中被中止后,表将无法访问,报出错误:
ORA-12986: columns in partially dropped state. Submit ALTER TABLE DROP COLUMNS CONTINUE
根据提示执行:
ALTER TABLE *table* DROP COLUMNS CONTINUE
直至完成。
否则此状态只有DROP TABLE,TRUNCATE TABLE及ALTER TABLE table DROP COLUMNS CONTINUE可允许执行。
关于UNUSED字段后OGG中相关问题
将表中字段设置为unused后 goldengate 11版本中的extract抽取进程会报错在参数文件中添加
DBOPTIONS ALLOWUNUSEDCOLUMN
可以忽略该错误,不会影响数据的准确性。
经过测试goldengate 12版本中默认为开启该参数。