When Oracle introduced "official" support for Recovery through RESETLOGS in 10g, it introduced the "%r" component of the log_archive_format parameter. (This was not present in 9.2)
Therefore, in 10.2, we religiously included "%r" in the log_archive_format parameter.
However, if you use the FRA via USE_DB_RECOVERY_FILE_DEST, the resetlogs_id is not present and Oracle uses OMF naming rules for the archivelogs.
Thus, you can see in the above listing the archivelog filenames, the RESETLOGS_ID is *not* part of the archivelog filename. (THREAD# and SEQUENCE# do still appear)
How, then, does Oracle (or do we ??) distinguish between archivelogs from one resetlogs and another ? The archivelog sequence numbers do get reset to 1.
What matters is that RESETLOGS_ID, RESETLOGS_CHANGE# and RESETLOGS_TIME are also incorporated into V$ARCHIVED_LOG.
My database's current Incarnation is 3 and all the archivelogs are for this Incarnation. What if I were to do a RESETLOGS and go to a new Incarnation ?
First, I generate some more archivelogs in the current incarnation.
Then I shutdown the database and do a RESETLOGS on OPEN.
I now have a new incarnation (4) created today. I next generate a couple of archivelogs and check the archivelogs
Notice the first 10 archivelogs are from the RESETLOGS_ID corresponding to Incarnation 3. The Thread# and SEQUENCE# do appear to be part of the file names. But NOT the RESETLOGS_ID.
The last two files now have SEQUENCE# 1 and 2 but no indication of the RESETLOGS_ID. The RESETLOGS_ID is in V$ARCHIVED_LOG, not in the actual filename.
.
.
.
Therefore, in 10.2, we religiously included "%r" in the log_archive_format parameter.
However, if you use the FRA via USE_DB_RECOVERY_FILE_DEST, the resetlogs_id is not present and Oracle uses OMF naming rules for the archivelogs.
SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 154 Next log sequence to archive 156 Current log sequence 156 SQL> show parameter log_archive_format NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_format string %t_%s_%r.dbf SQL> select name from v$archived_log where first_time > trunc(sysdate); NAME -------------------------------------------------------------------------------- /NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_152_bwjmnzt5_.arc /NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_153_bwjmo4yp_.arc /NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_154_bwjmoh29_.arc /NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_155_bwjmxjyb_.arc SQL>
Thus, you can see in the above listing the archivelog filenames, the RESETLOGS_ID is *not* part of the archivelog filename. (THREAD# and SEQUENCE# do still appear)
How, then, does Oracle (or do we ??) distinguish between archivelogs from one resetlogs and another ? The archivelog sequence numbers do get reset to 1.
What matters is that RESETLOGS_ID, RESETLOGS_CHANGE# and RESETLOGS_TIME are also incorporated into V$ARCHIVED_LOG.
SQL> select * from v$database_incarnation order by incarnation#;
INCARNATION# RESETLOGS_CHANGE# RESETLOGS PRIOR_RESETLOGS_CHANGE# PRIOR_RES
------------ ----------------- --------- ----------------------- ---------
STATUS RESETLOGS_ID PRIOR_INCARNATION# FLASHBACK_DATABASE_ALLOWED
------- ------------ ------------------ --------------------------
1 1 13-AUG-09 0
PARENT 694825248 0 NO
2 754488 30-OCT-09 1 13-AUG-09
PARENT 701609923 1 NO
3 14082620 04-JUL-15 754488 30-OCT-09
CURRENT 884179148 2 NO
SQL> select resetlogs_id, count(*) from v$archived_log group by resetlogs_id;
RESETLOGS_ID COUNT(*)
------------ ----------
884179148 153
SQL>
My database's current Incarnation is 3 and all the archivelogs are for this Incarnation. What if I were to do a RESETLOGS and go to a new Incarnation ?
First, I generate some more archivelogs in the current incarnation.
SQL> create table hemant.test_recovery_thru (id number); Table created. SQL> insert into hemant.test_recovery_thru select rownum from dual connect by level < 100001; 100000 rows created. SQL> commit; Commit complete. SQL> alter system archive log current; System altered. SQL> alter system archive log current; System altered. SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 156 Next log sequence to archive 158 Current log sequence 158 SQL>
Then I shutdown the database and do a RESETLOGS on OPEN.
SQL> alter system archive log current;
System altered.
SQL> alter system archive log current;
System altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 159
Next log sequence to archive 161
Current log sequence 161
SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 456146944 bytes
Fixed Size 1344840 bytes
Variable Size 394267320 bytes
Database Buffers 54525952 bytes
Redo Buffers 6008832 bytes
Database mounted.
SQL> recover database until cancel;
Media recovery complete.
SQL> alter database open resetlogs;
Database altered.
SQL>
SQL> select * from v$database_incarnation order by 1;
INCARNATION# RESETLOGS_CHANGE# RESETLOGS PRIOR_RESETLOGS_CHANGE# PRIOR_RES
------------ ----------------- --------- ----------------------- ---------
STATUS RESETLOGS_ID PRIOR_INCARNATION# FLASHBACK_DATABASE_ALLOWED
------- ------------ ------------------ --------------------------
1 1 13-AUG-09 0
PARENT 694825248 0 NO
2 754488 30-OCT-09 1 13-AUG-09
PARENT 701609923 1 NO
3 14082620 04-JUL-15 754488 30-OCT-09
PARENT 884179148 2 NO
INCARNATION# RESETLOGS_CHANGE# RESETLOGS PRIOR_RESETLOGS_CHANGE# PRIOR_RES
------------ ----------------- --------- ----------------------- ---------
STATUS RESETLOGS_ID PRIOR_INCARNATION# FLASHBACK_DATABASE_ALLOWED
------- ------------ ------------------ --------------------------
4 14184835 10-AUG-15 14082620 04-JUL-15
CURRENT 887387582 3 NO
SQL>
I now have a new incarnation (4) created today. I next generate a couple of archivelogs and check the archivelogs
SQL> alter system archive log current;
System altered.
SQL> alter system archivelog current;
alter system archivelog current
*
ERROR at line 1:
ORA-02065: illegal option for ALTER SYSTEM
SQL> alter system archive log current;
System altered.
SQL> select resetlogs_id, sequence#
2 from v$archived_log
3 where first_time > trunc(sysdate)
4 order by 1,2;
RESETLOGS_ID SEQUENCE#
------------ ----------
884179148 152
884179148 153
884179148 154
884179148 155
884179148 156
884179148 157
884179148 158
884179148 159
884179148 160
884179148 161
887387582 1
887387582 2
12 rows selected.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 3
Current log sequence 3
SQL>
SQL> select resetlogs_id, name from v$archived_log where first_time > trunc(sysdate) order by first_time;
RESETLOGS_ID
------------
NAME
--------------------------------------------------------------------------------
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_152_bwjmnzt5_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_153_bwjmo4yp_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_154_bwjmoh29_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_155_bwjmxjyb_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_156_bwjr2nmj_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_157_bwjr2s1s_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_158_bwjr9pg5_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_159_bwjrb06z_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_160_bwjrb582_.arc
884179148
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_161_bwjrfz1j_.arc
887387582
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_1_bwjrhogp_.arc
887387582
/NEW_FS/oracle/FRA/HEMANTDB/archivelog/2015_08_10/o1_mf_1_2_bwjrj0gf_.arc
12 rows selected.
SQL>
Notice the first 10 archivelogs are from the RESETLOGS_ID corresponding to Incarnation 3. The Thread# and SEQUENCE# do appear to be part of the file names. But NOT the RESETLOGS_ID.
The last two files now have SEQUENCE# 1 and 2 but no indication of the RESETLOGS_ID. The RESETLOGS_ID is in V$ARCHIVED_LOG, not in the actual filename.
.
.
.
1 comment:
Hemant, nice article as usual. Thank you,
Foued
Post a Comment