【 翻譯自mos文章】Alter Database Add Supplemental Log Data 命令掛起,mossupplemental
Alter Database Add Supplemental Log Data 命令掛起
來源於:
Alter Database Add Supplemental Log Data Hangs (文檔 ID 406498.1)
適用於:
Oracle Database - Enterprise Edition - Version 10.2.0.1 and later
Information in this document applies to any platform.
癥狀:
作為流複製配置的一部分,需要在database層級指定 supplemental logging
可以用如下方式完成:
1.手工執行:ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;2.implicitly 的運行 預存程序,比如DBMS_STREAMS_ADM.ADD_SCHEMA_RULES3.if you setup Streams using Grid Control it is automatically executed by SrcSchemaRule1 Stage Step 12.
在一些案例中,該步驟會掛起(hang),語句ALTER DATABASE ADD SUPPLEMENTAL LOG DATA 在等待 shared 模式的TX lock
可以通過如下步驟來找到有問題的session
connect / as sysdbaalter session set tracefile_identifier='SUPP';alter session set max_dump_file_size=unlimited;alter session set events '32593 errorstack(3) systemstate(266)';ALTER DATABASE add SUPPLEMENTAL LOG DATA;Upload the *SUPP* from the database trace directory.
注意:若是database 有很多session與該dump 相關,那麼systemstate 將會花很多時間並產生很大的trace file
然後kill session
可能找到阻塞者和 等待者 更簡單
原因:
語句ALTER DATABASE ADD SUPPLEMENTAL LOG DATA 正在等待shared 模式的TX lock,因為有未提交的事務。這是預料到的行為。
當資料庫open時,你可以發出ALTER DATABASE ADD SUPPLEMENTAL LOG DATA 語句。
但是,Oracle database 把 cursor cache中所有的DML cursors 置為無效,這對效能有影響直到cache被重建。
此外(Besides),我們也需要等待所有的未決交易完成,以便在該DDL(ALTER DATABASE ADD SUPPLEMENTAL LOG DATA )之後產生的redo 都帶有正確的supplemental logging 屬性。
解決方案:
你需要等待所有未決交易的完成。
在一些high activity 的資料庫中,總有一些 active transactioins,此時,可以通過重啟資料庫的方法,並手工運行sql
STARTUP MOUNT ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE OPEN;