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

来源:互联网 发布:网络支付方法 编辑:程序博客网 时间:2024/06/02 06:01

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; 
0 0
原创粉丝点击