【 翻译自mos文章】Alter Database Add Supplemental Log Data 命令挂起

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; 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。