Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

351

积分

0

好友

8

主题
1#
发表于 2012-4-16 18:41:34 | 查看: 6051| 回复: 3
版本:11.2.0.3
RMAN:没有使用recovery catalog

今天突然发现list archivelog all和v$archived_log的记录不一致,其实我一直认为再没用使用RC的情况下list archivelog all的来源应该是v$archived_log,不过这个结果让我很是意外,上网搜了一下,发现有这种说法:
list archivelog all 罗列的是在RETENTION POLICY以内未备份的归档日志

但是我上官网搜了一下并没有得到类似的说法:
ALLSpecifies all available archived logs.

这里只是说all available archived logs,并没有说是未备份的,难道已经备份的archivelog都是属于unavailable的?如果真的是那这个逻辑还真的有点奇怪了。

如果上面的说法成立的话那delete archivelog all和crosscheck archivelog all是不是也是针对未备份的archivelog呢?难道已经备份的archivelog不能用delete archivelog all来删除吗?

很多地方想不通的,还请刘大解惑,不甚感激。
2#
发表于 2012-4-16 21:40:56
ODM TEST:


alter system set events '10046 trace name context forever,level 1';


rman target /

RMAN> list archivelog all;


List of Archived Log Copies
Key     Thrd Seq     S Low Time  Name


select nvl(max(al.recid), 0)
  into :b1
  from v$archived_log al
where ((al.status in ('X', 'A') and al.is_recovery_dest_file = 'YES') and
       al.creator = 'RMAN')

declare
  thread   number;
  sequence number;
  recid    number;
  alRec    dbms_rcvman . alRec_t;
begin
  dbms_rcvman . getArchivedLog(alRec => alRec);
  if (:rlscn = alRec . rlgSCN and :stopthr = alRec .
      thread and ((alRec . sequence >= to_number(:stopseq) and :toclause = 0) or
      (alRec . sequence > to_number(:stopseq) and :toclause = 1))) then
    :flag := 1;
  else
    :flag := 0;
    :al_key :al_key_i := alRec . key;
    :recid :recid_i := alRec . recid;
    :stamp :stamp_i := alRec . stamp;
    :thread := alRec . thread;
    :sequence := alRec . sequence;
    :fileName :fileName_i := alRec . fileName;
    :lowSCN := alRec . lowSCN;
    :lowTime := alRec . lowTime;
    :nextSCN := alRec . nextSCN;
    :nextTime := nvl(alRec . nextTime, to_date('12/31/9999', 'MM/DD/YYYY'));
    :rlgSCN := alRec . rlgSCN;
    :rlgTime := alRec . rlgTime;
    :blocks := alRec . blocks;
    :blockSize := alRec . blockSize;
    :status := alRec . status;
    :compTime :compTime_i := alRec . compTime;
    :duplicate := alRec . duplicate;
    :compressed :compress


begin
  dbms_rcvman . listTranslateArchivedLogCopy(thread#           => NULL,
                                             sequence#         => NULL,
                                             first_change#     => NULL,
                                             file_name_pattern => :like
                                                                  :like_i,
                                             completedAfter    => :after
                                                                  :after_i,
                                             completedBefore   => :before
                                                                  :before_i,
                                             statusMask        => :availableMask,
                                             needstby          => :getstby);
end;


SELECT RECID,
       RECID,
       STAMP,
       THREAD#,
       SEQUENCE#,
       NAME,
       FIRST_CHANGE#,
       FIRST_TIME,
       NEXT_CHANGE#,
       NEXT_TIME,
       RESETLOGS_CHANGE#,
       RESETLOGS_TIME,
       BLOCKS,
       BLOCK_SIZE,
       STATUS,
       COMPLETION_TIME,
       0,
       IS_RECOVERY_DEST_FILE,
       COMPRESSED,
       DECODE(REGISTRAR, 'RFS', 'Y', 'SRMN', 'Y', 'RMAN', 'N', 'N') STBY
  FROM V$ARCHIVED_LOG
WHERE (:B16 IS NULL OR THREAD# = :B16)
   AND ((:B15 = :B4 AND (:B14 IS NULL OR (:B14 = RESETLOGS_CHANGE# AND
       :B13 = RESETLOGS_TIME))) OR
       (RESETLOGS_CHANGE# = :B3 AND RESETLOGS_TIME = :B2))
   AND NEXT_CHANGE# > NVL(:B12, 0)
   AND FIRST_CHANGE# < NVL(:B11, :B10)
   AND (:B9 IS NULL OR NAME LIKE :B9)
   AND DECODE(:B6,
              :B8,
              DECODE(STATUS, 'A', :B4, :B7),
              DBMS_RCVMAN.ISSTATUSMATCH(STATUS, :B6)) = :B4
   AND (ARCHIVED = 'YES' OR
       (:B5 = :B4 AND ARCHIVED = 'NO' AND NAME IS NOT NULL AND
       RESETLOGS_CHANGE# = :B3 AND RESETLOGS_TIME = :B2))
   AND STANDBY_DEST = 'NO'
   AND (:B1 = 0 OR IS_RECOVERY_DEST_FILE = 'YES')
ORDER BY RESETLOGS_CHANGE#,
          RESETLOGS_TIME,
          THREAD#,
          FIRST_CHANGE#,
          SEQUENCE#,
          IS_RECOV

回复 只看该作者 道具 举报

3#
发表于 2012-4-16 21:45:36
Table 2-22 List of Archived Log Copies
Column         Indicates

Key
       

The unique identifier for this archived redo log copy. Use this value in a CHANGE command to alter the status of the copy.

If RMAN is connected to a recovery catalog, then Key is the primary key of the backup set in the catalog. It corresponds to AL_KEY in the RC_ARCHIVED_LOG view. If RMAN is connected in NOCATALOG mode, then Key displays the RECID from V$ARCHIVED_LOG.

Note: The values for Key in the recovery catalog and the control file are different.

Thrd
       

The redo log thread number.

Seq
       

The log sequence number.

S
       

The status of the copy: A (available), U (unavailable), or X (expired). Refer to the CHANGE, CROSSCHECK, and DELETE commands for an explanation of each status.

Low Time
       

The time when the database switched into the redo log having this sequence number.

Name
       

The filename of the archived redo log copy.





在NOCATALOG mode 模式下 其 输出确实来自于 v$archived_log( 该动态视图来源于 控制文件信息) ,但是如以上最后一条SQL所示  其对v$archived_log 中的记录 有condition 条件判断

回复 只看该作者 道具 举报

4#
发表于 2012-4-16 22:45:08
谢谢刘大。还有一个诡异的问题,就是我在rman中用delete archivelog并没能真正从硬盘上删除文件,但是v$archived_log的status显示为'D',deleted也显示为'YES',但是我在硬盘上确实能找到这个文件,这是怎么回事呢?

第二个问题,在rac中的一个节点执行delete archivelog只能删除这个节点的archivelog,如何做到可以删除另外一个节点的archivelog呢?

[ 本帖最后由 gdpr-dba 于 2012-4-17 00:32 编辑 ]

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-24 03:17 , Processed in 0.052300 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569