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_RULES 3.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 sysdba alter 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;
【 翻译自mos文章】Alter Database Add Supplemental Log Data 命令挂起
原文地址:http://blog.csdn.net/msdnchina/article/details/43939425