且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[20150625]v$archived_log字段creator.txt

更新时间:2022-09-13 11:02:44

[20150625]v$archived_log字段creator.txt

--如果有人问你知道那个archivelog是日志满切换产生的,还是手工执行切换产生的。估计你的回答是看归档日志的大小,当然这个不是
--很准确。

--实际上v$archived_log有一个字段creator可以反映这个情况:

SYS@test> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx            10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

SYS@test> select creator,count(*) from V$ARCHIVED_LOG group by creator ;
CREATOR     COUNT(*)
------- ------------
FGRD              52
ARCH              36

--可以发现建立者存在两个值,FGRD,ARCH。arch可以猜出是是日志满产生的,而FGRD可以猜出应该是手工执行
--alter system switch logfile ;或者alter system archive log current ;产生的。

--顺便帖一个生产环境的例子:
SYS@dbcn1> select creator,count(*) from V$ARCHIVED_LOG group by creator ;

CREATOR   COUNT(*)
------- ----------
FGRD           147
LGWR          1574
ARCH          1287

--多出了一个LGWR应该是传输到dataguard的归档日志。执行以下可以确定。

SYS@dbcn1> select distinct name from V$ARCHIVED_LOG where  creator='LGWR' ;
NAME
----------
dbcndg
dbcndg2

--回到测试环境看看执行alter system switch logfile ;或者alter system archive log current ;的情况是否creator='FGRD'.

SYS@test> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     94
Next log sequence to archive   96
Current log sequence           96

--当前日志seq =96.
SYS@test> alter system switch logfile ;
System altered.

SYS@test> alter system archive log current ;
System altered.

SYS@test> alter system switch logfile ;
System altered.

SYS@test> select name,sequence#,creator from V$ARCHIVED_LOG where sequence#>=96;
NAME                                                                                          SEQUENCE# CREATOR
------------------------------------------------------------------------------------------ ------------ -------
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_96_brpn5l7j_.arc              96 ARCH
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_97_brpn5srw_.arc              97 FGRD
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_98_brpn83nj_.arc              98 ARCH

--可以看出一个小小的区别:
--执行alter system switch logfile ;的CREATOR='ARCH'.
--执行alter system archive log current ;的CREATOR='FGRD'. 而FGRD表示什么,我就不清楚了。

--google找到如下链接http://www.askmaclean.com/archives/only-arch-bgprocess-may-create-archivelog.html。

CREATOR     VARCHAR2(7)     Creator of the archivelog:

    ARCH - Archiver process
    FGRD - Foreground process
    RMAN - Recovery Manager
    SRMN - RMAN at standby
    LGWR - Logwriter process

--FGRD 表示 Foreground process。文章还提到creator='RMAN'是RMAN(注意实际上并非直接由rman进程完成)在执行热备操作时也可能掺
--合进来归档一把。自己也测试看看:

SYS@test> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     97
Next log sequence to archive   99
Current log sequence           99

SYS@test> alter database begin backup;
Database altered.

SYS@test> alter system switch logfile ;
System altered.

SYS@test> select name,sequence#,creator from V$ARCHIVED_LOG where sequence#>=99;
NAME                                                                                          SEQUENCE# CREATOR
------------------------------------------------------------------------------------------ ------------ -------
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_99_brpo2jry_.arc              99 ARCH

--不是rman?随便找一个表执行一些dml语句。

SCOTT@test> update t set name='XXXXXXX' ;
100008 rows updated.

SCOTT@test> commit ;
Commit complete.

SCOTT@test> update t set name='yyyyyyyyyy' ;
100008 rows updated.

SCOTT@test> commit ;
Commit complete.

SYS@test> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     100
Next log sequence to archive   102
Current log sequence           102

SYS@test> select name,sequence#,creator from V$ARCHIVED_LOG where sequence#>=99;
NAME                                                                                          SEQUENCE# CREATOR
------------------------------------------------------------------------------------------ ------------ -------
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_99_brpo2jry_.arc              99 ARCH
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_100_brpo5074_.arc            100 ARCH
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_101_brpo5dyk_.arc            101 ARCH

SYS@test> alter database end backup;
Database altered.

--好像作者讲的不对。或者我的理解存在问题。

$  cp /u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_101_brpo5dyk_.arc /home/oracle/backup/
$  cd /home/oracle/backup/
$  mv o1_mf_1_101_brpo5dyk_.arc aa.arc

RMAN> catalog start with '/home/oracle/backup/';
using target database control file instead of recovery catalog
searching for all files that match the pattern /home/oracle/backup/

List of Files Unknown to the Database
=====================================
File Name: /home/oracle/backup/aa.arc

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /home/oracle/backup/aa.arc

SYS@test> select name,sequence#,creator from V$ARCHIVED_LOG where sequence#>=99;
NAME                                                                                          SEQUENCE# CREATOR
------------------------------------------------------------------------------------------ ------------ -------
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_99_brpo2jry_.arc              99 ARCH
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_100_brpo5074_.arc            100 ARCH
/u01/app/oracle/flash_recovery_area/TEST/archivelog/2015_06_25/o1_mf_1_101_brpo5dyk_.arc            101 ARCH
/home/oracle/backup/aa.arc                                                                          101 RMAN

--可以发现这样的情况建立者才是rman。