rman 中的 delete all input 和 delete input 的区别

rman 中的 delete all input 和 delete input 的区别
Kevin Zou
2011-8-30
为了研究清楚rman 中的 delete all input 和 delete input 的区别,做了一个测试,在测试前带有2个问题:
1)如果在LOCAL SERVER上设定了2个本地归档目录,那在RMAN BACKUP ARCHIVELOG时,是不是同一个SEQUENCE的ARCHIVEDLOG备份两次呢?
2)如何实现在每次BACKUP ARCHIVELOG后,删除本地的全部已经备份的ARCHIVEDLOG呢?

我的测试环境:
WINDOWS XP + ORACLE 10.2.0.1
两个ARCHIVED LOG DESTINATION分别是:
log_archive_dest_1                   string      location=D:\oracle\oradata\TEST\arch11
log_archive_dest_2                   string      location=D:\oracle\oradata\TEST\arch12
C:\Documents and Settings\wen zou>rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期二 8月 30 22:45:38 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: TEST (DBID=2000111656)

> show all;
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\ORACLE\PRODUCT\10.2.0\DATABASE\SNCFTE
ST.ORA'; # default

RMAN> run {
2> sql 'alter system switch logfile';
3>  backup archivelog all format 'D:\oracle\oradata\TEST\rman\logs_%d_%s_%p_%T_%
U' delete input;
4>  }

sql 语句: alter system switch logfile

RMAN> run {
2> sql 'alter system switch logfile';
3>  backup archivelog all format 'D:\oracle\oradata\TEST\rman\logs_%d_%s_%p_%T_%
U' delete input;
4>  }

sql 语句: alter system switch logfile

启动 backup 于 30-8月 -11
当前日志已存档
使用通道 ORA_DISK_1
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH11\ARC00045_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00046_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00047_0701965227.001; 已经
备份 2 次
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =48 记录 ID=15 时间戳=760575482
输入存档日志线程 =1 序列 =49 记录 ID=17 时间戳=760575499
输入存档日志线程 =1 序列 =50 记录 ID=19 时间戳=760575500
通道 ORA_DISK_1: 正在启动段 1 于 30-8月 -11
通道 ORA_DISK_1: 已完成段 1 于 30-8月 -11
段句柄=D:\ORACLE\ORADATA\TEST\RMAN\LOGS_TEST_3_1_20110830_03MLATGE_1_1 标记=TAG2
0110830T225820 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00048_0701965227.001 记录 ID=15
 时间戳 =760575482
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00049_0701965227.001 记录 ID=17
 时间戳 =760575499
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00050_0701965227.001 记录 ID=19
 时间戳 =760575500
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00046_0701965227.001 记录 ID=12
 时间戳 =760575291
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00047_0701965227.001 记录 ID=14
 时间戳 =760575296
完成 backup 于 30-8月 -11

RMAN> run {
2> sql 'alter system switch logfile';
3>  backup archivelog all format 'D:\oracle\oradata\TEST\rman\logs_%d_%s_%p_%T_%
U' delete input;
4>  }

sql 语句: alter system switch logfile

启动 backup 于 30-8月 -11
当前日志已存档
使用通道 ORA_DISK_1
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00048_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00049_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00050_0701965227.001; 已经
备份 2 次
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =51 记录 ID=21 时间戳=760575639
输入存档日志线程 =1 序列 =52 记录 ID=23 时间戳=760575641
输入存档日志线程 =1 序列 =53 记录 ID=25 时间戳=760575650
输入存档日志线程 =1 序列 =54 记录 ID=27 时间戳=760575651
通道 ORA_DISK_1: 正在启动段 1 于 30-8月 -11
通道 ORA_DISK_1: 已完成段 1 于 30-8月 -11
段句柄=D:\ORACLE\ORADATA\TEST\RMAN\LOGS_TEST_4_1_20110830_04MLATL5_1_1 标记=TAG2
0110830T230051 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00051_0701965227.001 记录 ID=21
 时间戳 =760575639
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00052_0701965227.001 记录 ID=23
 时间戳 =760575641
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00053_0701965227.001 记录 ID=25
 时间戳 =760575650
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00054_0701965227.001 记录 ID=27
 时间戳 =760575651
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00048_0701965227.001 记录 ID=16
 时间戳 =760575482
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00049_0701965227.001 记录 ID=18
 时间戳 =760575499
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00050_0701965227.001 记录 ID=20
 时间戳 =760575500
完成 backup 于 30-8月 -11


Note: The BACKUP ARCHIVELOG command only backs up one copy of each distinct log sequence number, so if the DELETE INPUT option is used without the ALL keyword, RMAN only deletes the copy of the file that it backs up.

看到ORACLE只选取了其中一个的ARCHIVED DESTINATION作为RMAN BACKUP 源。而且备份完成后也只是删除了log_archive_dest_1   目录下的归档日志。
是不是log_archive_dest_2的归档日志文件就一直保留在SERVER上呢?
不是的。
再次执行backup archivelog 命令会发现,系统会把log_archive_dest_2 上次已经备份的日志全部删除,只保留上次备份结束新增的归档日志。而log_archive_dest_1 又是删除的干净。

上次备份了SEQUENCE =48/49/50的日志,下次的备份就会删除log_archive_dest_2中SEQUENCE =48/49/50的日志。

至于为什么只选择log_archive_dest_1 作为备份源:
SQL> alter system set log_archive_dest_1 ='';

系统已更改。

SQL> alter system set log_archive_dest_10='location=D:\oracle\oradata\TEST\arch11';

系统已更改。
SQL> alter system switch logfile;

系统已更改。
RMAN> run {
2> sql 'alter system switch logfile';
3>  backup archivelog all format 'D:\oracle\oradata\TEST\rman\logs_%d_%s_%p_%T_%
U' delete    input;
4>  }

sql 语句: alter system switch logfile

启动 backup 于 30-8月 -11
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =58 记录 ID=35 时间戳=760578074
输入存档日志线程 =1 序列 =59 记录 ID=37 时间戳=760578104
输入存档日志线程 =1 序列 =60 记录 ID=39 时间戳=760578107
通道 ORA_DISK_1: 正在启动段 1 于 30-8月 -11
通道 ORA_DISK_1: 已完成段 1 于 30-8月 -11
段句柄=D:\ORACLE\ORADATA\TEST\RMAN\LOGS_TEST_6_1_20110830_06MLB01S_1_1 标记=TAG2
0110830T234147 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00058_0701965227.001 记录 ID=35
 时间戳 =760578074
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00059_0701965227.001 记录 ID=37
 时间戳 =760578104
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00060_0701965227.001 记录 ID=39
 时间戳 =760578107
完成 backup 于 30-8月 -11
这里把log_archive_dest_1置空,把log_archive_dest_10 改为location=D:\oracle\oradata\TEST\arch11.
可以看到RMAN选择log_archive_dest_2 作为备份源。
至于RMAN选择哪个作为备份源,我想其实每个dest 的相同的SEQUENCE的归档日志都是相同的,那RMAN选择了编号靠前的dest作为备份源。

如果要删除已经备份的日志,要加上DELETE ALL INPUT 。
run {
sql 'alter system switch logfile';
 backup archivelog all format 'D:\oracle\oradata\TEST\rman\logs_%d_%s_%p_%T_%U' delete all  input;
 }
RMAN>  backup archivelog all format 'D:\oracle\oradata\TEST\rman\logs_%d_%s_%p_%
T_%U' delete all  input;

启动 backup 于 30-8月 -11
当前日志已存档
使用通道 ORA_DISK_1
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00051_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00052_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00053_0701965227.001; 已经
备份 2 次
正在略过存档日志文件 D:\ORACLE\ORADATA\TEST\ARCH12\ARC00054_0701965227.001; 已经
备份 2 次
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =55 记录 ID=29 时间戳=760577849
输入存档日志线程 =1 序列 =56 记录 ID=31 时间戳=760577916
输入存档日志线程 =1 序列 =57 记录 ID=33 时间戳=760577917
通道 ORA_DISK_1: 正在启动段 1 于 30-8月 -11
通道 ORA_DISK_1: 已完成段 1 于 30-8月 -11
段句柄=D:\ORACLE\ORADATA\TEST\RMAN\LOGS_TEST_5_1_20110830_05MLAVRV_1_1 标记=TAG2
0110830T233837 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00055_0701965227.001 记录 ID=29
 时间戳 =760577849
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00055_0701965227.001 记录 ID=30
 时间戳 =760577849
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00056_0701965227.001 记录 ID=31
 时间戳 =760577916
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00056_0701965227.001 记录 ID=32
 时间戳 =760577916
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH11\ARC00057_0701965227.001 记录 ID=33
 时间戳 =760577917
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00057_0701965227.001 记录 ID=34
 时间戳 =760577917
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00051_0701965227.001 记录 ID=22
 时间戳 =760575639
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00052_0701965227.001 记录 ID=24
 时间戳 =760575641
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00053_0701965227.001 记录 ID=26
 时间戳 =760575650
存档日志文件名 =D:\ORACLE\ORADATA\TEST\ARCH12\ARC00054_0701965227.001 记录 ID=28
 时间戳 =760575651
完成 backup 于 30-8月 -11
看到两个归档目录中的日志都被删除。

-THE END-

请使用浏览器的分享功能分享到微信等