« LOG_ARCHIVE_FORMAT中%r值从哪儿来的? »
Oracle » http://www.anysql.net/oracle/log_archive_format_10g.html 2007-08-03当数据库从9i或8i升级到10g时, 如果compatible参数也设成了10以上, 则LOG_ARCHIVE_FORMAT参数中必须包含%s, %t, %r参数. 其中%s是Log Seuqence; %t是Thread ID, RAC的节点中设有THREAD参数, 就是这个值了; %r指的是Resetlog ID了, 比较新, 得从Oracle 10g中增加的跨Resetlogs恢复功能说起.
为了支持这个功能, Oracle 10g在控制文件中新增了一部份内容, 就是历次Open Resetlogs的经过, 每经历一次Open Restlogs就生成了一个新的Incarnation(不知道如何翻译这个单词了), 反应到数据库中则是V$DATABASE_INCARNATION视图(基表x$kccic, 说明是存放在控制文件中的). 我这儿没有经过多次open resetlogs的数据库, 等一下验证一下. 查一个从来没有Open Resetlogs的库吧, 如下所示:
ASQL> SELECT * FROM v$DATABASE_INCARNATION/G;
INCARNATION# : 1
RESETLOGS_CHANGE# : 1
RESETLOGS_TIME : 2007-07-16 17:28:06.0
PRIOR_RESETLOGS_CHANGE# : 0
PRIOR_RESETLOGS_TIME : null
STATUS : CURRENT
RESETLOGS_ID : 628104486
PRIOR_INCARNATION# : 0
FLASHBACK_DATABASE_ALLOWED : NO
1 rows returned.
从这儿可以推导出一个观点, 当你重建控制文件后, 将丢失跨Resetlogs恢复的能力. 还好控制文件的参数大部份都可以动态改了, 基本上没有重建它的需要了. 上面的值中, STATUS列的值为CURRENT表示是当前的Incarnation, 另外还可以从V$DATABASE中获得当前正在使用的Incarnation. 如下所示:
ASQL> SELECT LAST_OPEN_INCARNATION# FROM V$DATABASE;
LAST_OPEN_INCARNATION#
----------------------
1
1 rows returned.
有些部份还只是猜测, 如有错误, 请理解.


Recent Comments