Oracle RMAN(Recovery Manager) – 通道分配
复制
通道(Channel)在RMAN的工作中当着非常重要的角色,所有的备份和恢复都是由通道去完成的。
工作原理
所谓通道,是指由服务器进程发起并控制的目标数据库的文件与物理备份设备之间的字节流。
字节流的方向取决于使用通道的意图:从文件到设备的是备份操作;从设备到文件的是还原操作。
大多数的RMAN命令执行时必须先手动或自动地分配通道。一个通道必须要对应一个服务器进程(会话)。
通道中的设备则分为两种:DISK(磁盘)和SBT(串行备份磁带或又称系统备份至磁带,代表第三存储体)。
DISK就是服务器挂载的磁盘,而SBT是由介质管理器控制的,一般为磁带或磁带库,实际上服务器进程不需要理解SBT物理上真实的介质类型,当然可以不是磁带,这完全取决于第三存储体的供应商。
通道的工作由三个阶段组成,分别是第一阶段“读”;第二阶段“复制”;第三阶段“写”。
如果是备份操作,在读阶段,通道将输入文件(被备份的文件)的数据块从磁盘读入输入缓冲;在复制阶段,通道将输入缓冲中的数据块读入输出缓冲,并且执行必要的操作,比如校验、压缩和加密;在写阶段,通道将输出缓冲中的数据写入DISK或SBT设备(最终的写入由SBT管理软件完成)。
如果是还原操作,三个阶段不变,只是通道传输的方向及复制阶段的操作类型是逆向的。
对于数据库文件的读/写及DISK设备的读/写,当初始化参数_backup_disk_io_slaves等于0,相应的输入和输出缓冲会在服务器进程的PGA中;若大于0,则在SGA中。
一般在操作系统不支持异步I/O的情况下才需要使用奴隶进程模拟异步I/O,才将该参数设置为大于0。就算是要这样做,也不推荐直接修改此隐含参数,只要将dbwr_io_slaves设置为大于0并且确保disk_asynch_io的值为FALSE也能达到相同目的。
一旦使用了奴隶进程,通道就要利用SGA与努力进程交换字节流了,这意味着large_pool_size不应该设置为0(若使用了自动共享内存管理,即便是0也没什么关系),因此,这种数据交换就可以利用大池区(Large Pool),否则共享池(Shared Pool)就会受到影响。不过,现在几乎没有不支持异步I/O的系统了。
参考MOS一篇文章:How to simulate Async I/O for RMAN at Database Level when dbwr_writer_processes > 0 [ID 1190581.1]
dbwr_io_slaves>0 and db_writer_processes>0 cant be set at the same time at the database level. Only one parameter can be set.
How to simulate asynchronous I/O to be used by RMAN when asynchronous I/O is not supported at the OS level and db_writer_processes > 0 required to be set at the database level for database performance.
The following hidden parameter can be set in the pfile or spfile so RMAN can allocate I/O slaves and simulate asynchronous I/O when asynchronous I/O not supported at the OS level and db_writer_processes>0 has to be set for database performance reasons:
_BACKUP_DISK_IO_SLAVES>0
Example:
_BACKUP_DISK_IO_SLAVES=4
You can start with 4 slaves and review RMAN performance.
看下示例
sys@LUOCS11G> set pagesize 9999sys@LUOCS11G> set line 130sys@LUOCS11G> col NAME for a20
sys@LUOCS11G> col VALUE for a20
sys@LUOCS11G> col DESCRIB for a80
sys@LUOCS11G> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc DESCRIB
2 FROM SYS.xksppcv y
3 WHERE x.inst_id = USERENV (‘Instance’) 4 AND y.inst_id = USERENV (‘Instance’) 5 AND x.indx = y.indx
6 AND x.ksppinm LIKE ‘%&par%’ 7
sys@LUOCS11G> /
Enter value for par: backup_disk_io_slaves
old 6: AND x.ksppinm LIKE ‘%&par%’
new 6: AND x.ksppinm LIKE ‘%backup_disk_io_slaves%’
NAME VALUE DESCRIB
_backup_disk_io_slav 0 BACKUP Disk I/O slaveses
– 默认为0的,我们设置为非0值
sys@LUOCS11G> create pfile=’/home/oracle/pfile_1105.bak’ from spfile;
File created.
[oracle@localhost ~]$ tail -1 pfile_1105.bak
_BACKUP_DISK_IO_SLAVES=4
sys@LUOCS11G> shutdown abort
ORACLE instance shut down.sys@LUOCS11G> startup pfile=’/home/oracle/pfile_1105.bak’ORACLE instance started.
Total System Global Area 2042241024 bytes
Fixed Size 1337548 bytes
Variable Size 1342179124 bytes
Database Buffers 687865856 bytes
Redo Buffers 10858496 bytes
Database mounted.Database opened.sys@LUOCS11G> set pagesize 9999sys@LUOCS11G> set line 130sys@LUOCS11G> col NAME for a20
sys@LUOCS11G> col VALUE for a20
sys@LUOCS11G> col DESCRIB for a80
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc DESCRIB
2 FROM SYS.xksppcv y
3 WHERE x.inst_id = USERENV (‘Instance’) 4 AND y.inst_id = USERENV (‘Instance’) 5 AND x.indx = y.indx
6 AND x.ksppinm LIKE ‘%&par%’ 7 /
Enter value for par: backup_disk_io_slav
old 6: AND x.ksppinm LIKE '%&par%'new 6: AND x.ksppinm LIKE ‘%backup_disk_io_slav%’
NAME VALUE DESCRIB
-------------------- -------------------- --------------------------------------------------------------------------------_backup_disk_io_slav 4 BACKUP Disk I/O slaveses
对于SBT设备的读/写,默认情况下每个通道分配4个缓冲,具体大小依赖操作系统而定(一般Linux是256KB)。
占用PGA还是SGA取决于初始化参数backup_type_io_slaves等于true还是false。同样,走SGA路线时请确保large_pool_size不为0。
由于RMAN和SBT设备之间是同步的I/O调用,效率可能不佳。所以将backup_type_io_slaves设置为true还是具有一定意义的。
一般的方法是在备份前根据同时可调用的SBT设备的数量确定通道数,针对每个通道Oracle会自动启动一个服务器进程和一个I/O奴隶进程,备份时,每个(通道的)服务器进程和对应的I/O奴隶进程之间通过SGA中的共享的缓冲(优先考虑大池区,没有则使用共享池)进行数据流的异步传输,而在I/O奴隶进程与SBT设备软件之间才进行同步的调用,这样服务器进程就得到了释放,不用等待SBT的回应就可以接着读取输入文件的内容。
另外,为了避免产生不可用的备份或将已损坏的备份还原,RMAN会自动校验流动在通道中的数据块,RMAN对损坏的块默认是零容忍的,一经发现立即报ORA-19566错误。
那我们制造出一个ORA-19566错误:
sys@LUOCS11G> select file#, name from v$datafile;
FILE# NAME---------- ------------------------------------------------------------ 1 /u01/app/oracle/oradata/luocs11g/system01.dbf
2 /u01/app/oracle/oradata/luocs11g/sysaux01.dbf
3 /u01/app/oracle/oradata/luocs11g/undotbs01.dbf
4 /u01/app/oracle/oradata/luocs11g/users01.dbf
5 /u01/app/oracle/oradata/luocs11g/pay01.dbf
6 /u01/app/oracle/oradata/luocs11g/ob2c01.dbf
7 /u01/app/oracle/oradata/luocs11g/L01.dbf
8 /u01/app/oracle/oradata/luocs11g/fromtbs02.dbf
9 /u01/app/oracle/oradata/luocs11g/totbs02.dbf
10 /u01/app/oracle/oradata/luocs11g/login_2012_1.dbf
11 /u01/app/oracle/oradata/luocs11g/login_2012_2.dbf
12 /u01/app/oracle/oradata/luocs11g/login_2011_1.dbf
13 /u01/app/oracle/oradata/luocs11g/login_2011_2.dbf
14 /u01/app/oracle/oradata/luocs11g/login_luocs.dbf
15 /u01/app/oracle/oradata/luocs11g/login_xlzhgj.dbf
16 /u01/app/oracle/oradata/luocs11g/login_oracle.dbf
17 /u01/app/oracle/oradata/luocs11g/login_linux.dbf
18 /u01/app/oracle/oradata/luocs11g/login_aix.dbf
19 /u01/app/oracle/oradata/luocs11g/login_ux.dbf
20 /u01/app/oracle/oradata/luocs11g/login_exadata.dbf
21 /u01/app/oracle/oradata/luocs11g/login_goldengate.dbf
22 /u01/app/oracle/oradata/luocs11g/login_luocs_hl.dbf
23 /u01/app/oracle/oradata/luocs11g/login_xlzhgj_hl.dbf
24 /u01/app/oracle/oradata/luocs11g/login_oracle_hl.dbf
25 /u01/app/oracle/oradata/luocs11g/login_linux_hl.dbf
26 /u01/app/oracle/oradata/luocs11g/login_aix_hl.dbf
27 /u01/app/oracle/oradata/luocs11g/login_ux_hl.dbf
28 /u01/app/oracle/oradata/luocs11g/login_exadata_hl.dbf
29 /u01/app/oracle/oradata/luocs11g/login_goldengate_hl.dbf
30 /u01/app/oracle/oradata/luocs11g/transport_tbs_1.dbf
31 /u01/app/oracle/oradata/luocs11g/part_login_aud_1.dbf
32 /u01/app/oracle/oradata/luocs11g/part_login_aud_2.dbf
32 rows selected.
[oracle@localhost ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Mon Nov 5 04:34:14 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: LUOCS11G (DBID=1468663667, not open)
RMAN> backup datafile 7;
Starting backup at 05-NOV-2012 04:34:22using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00007 name=/u01/app/oracle/oradata/luocs11g/L01.dbf
channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 04:34:23channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 04:34:24piece handle=/u01/app/oracle/product/11.2.0.1/dbhome_1/dbs/06nph1qf_1_1 tag=TAG20121105T043423 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 04:34:24
RMAN>
制造block corruption
[oracle@localhost lib]$ cat /home/oracle/bbed.par
1 /u01/app/oracle/oradata/luocs11g/system01.dbf
2 /u01/app/oracle/oradata/luocs11g/sysaux01.dbf
3 /u01/app/oracle/oradata/luocs11g/undotbs01.dbf
4 /u01/app/oracle/oradata/luocs11g/users01.dbf
5 /u01/app/oracle/oradata/luocs11g/pay01.dbf
6 /u01/app/oracle/oradata/luocs11g/ob2c01.dbf
7 /u01/app/oracle/oradata/luocs11g/L01.dbf
[oracle@localhost ~]$ cd /u01/app/oracle/product/11.2.0.1/dbhome_1/rdbms/lib
[oracle@localhost lib]$ bbed listfile=/home/oracle/bbed.par blocksize=8192 mode=edit
Password:
BBED: Release 2.0.0.0.0 - Limited Production on Mon Nov 5 08:01:21 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set file 7 FILE# 7
BBED> show
FILE# 7 BLOCK# 1 OFFSET 0 DBA 0x01c00001 (29360129 7,1) FILENAME /u01/app/oracle/oradata/luocs11g/L01.dbf
BIFILE bifile.bbd
LISTFILE /home/oracle/bbed.par
BLOCKSIZE 8192 MODE Edit EDIT Unrecoverable IBASE Dec OBASE Dec WIDTH 80 COUNT 512 LOGFILE log.bbd
SPOOL No
通过如下方式制造数据坏块BBED> copy file 7 block 5 to file 7 block 10Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /u01/app/oracle/oradata/luocs11g/L01.dbf (7) Block: 10 Offsets: 0 to 511 Dba:0x01c0000a------------------------------------------------------------------------ 1ea20000 05004001 61da1100 00000104 c0c10000 05000000 80800f00 00000000
00000000 00f80000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<32 bytes per line>
检测数据库坏块BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/luocs11g/L01.dbf
BLOCK = 10
Block 10 is corrupt
Corrupt block relative dba: 0x0140000a (file 0, block 10)Bad header found during verification
Data in bad block: type: 30 format: 2 rdba: 0x01400005 last change scn: 0x0000.0011da61 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xda611e01 check value in block header: 0xc1c0 computed block checksum: 0x0
DBVERIFY - Verification complete
Total Blocks Examined : 1Total Blocks Processed (Data) : 0Total Blocks Failing (Data) : 0Total Blocks Processed (Index): 0Total Blocks Failing (Index): 0Total Blocks Empty : 0Total Blocks Marked Corrupt : 1Total Blocks Influx : 0Message 531 not found; product=RDBMS; facility=BBED
我们也可以通过操作系统下面的DBV工具去检测:[oracle@localhost ~]$ dbv file=’$ORACLE_BASE/oradata/luocs11g/L01.dbf’
DBVERIFY: Release 11.2.0.1.0 - Production on Mon Nov 5 08:15:39 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/luocs11g/L01.dbf
Page 10 is marked corrupt
Corrupt block relative dba: 0x0140000a (file 5, block 10)Bad header found during dbv:
Data in bad block: type: 30 format: 2 rdba: 0x01400005 last change scn: 0x0000.0011da61 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xda611e01 check value in block header: 0xc1c0 computed block checksum: 0x0
DBVERIFY - Verification complete
Total Pages Examined : 1280Total Pages Processed (Data) : 43Total Pages Failing (Data) : 0Total Pages Processed (Index): 22Total Pages Failing (Index): 0Total Pages Processed (Other): 1158Total Pages Processed (Seg) : 0Total Pages Failing (Seg) : 0Total Pages Empty : 56Total Pages Marked Corrupt : 1Total Pages Influx : 0Total Pages Encrypted : 0Highest block SCN : 1171997 (0.1171997)-- 注意Page 10 is marked corrupt和Total Pages Marked Corrupt : 1
这时候我们查询,返回依然正常,那是不是没产生坏块?sys@LUOCS11G> select count() from l.t1;
COUNT()----------
10000
我们备份包含我们破坏的数据文件的表空间:
[oracle@localhost ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Mon Nov 5 08:08:18 2012
Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: LUOCS11G (DBID=1468663667, not open)
RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 08:08:22using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00007 name=/u01/app/oracle/oradata/luocs11g/L01.dbf
channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 08:08:23RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03009: failure of backup command on ORA_DISK_1 channel at 11/05/2012 08:08:26ORA-19566: exceeded limit of 0 corrupt blocks for file /u01/app/oracle/oradata/luocs11g/L01.dbf
– 我们已经成功看到ORA-19566错误了,
告警日志里抛出如下内容:
Hex dump of (file 7, block 10) in trace file /u01/app/oracle/diag/rdbms/luocs11g/luocs11g/trace/luocs11g_ora_21095.trc
Corrupt block relative dba: 0x0140000a (file 7, block 10)Bad header found during backing up datafile
Data in bad block: type: 30 format: 2 rdba: 0x01400005 last change scn: 0x0000.0011da61 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xda611e01 check value in block header: 0xc1c0 computed block checksum: 0x0Reread of blocknum=10, file=/u01/app/oracle/oradata/luocs11g/L01.dbf. found same corrupt data
Reread of blocknum=10, file=/u01/app/oracle/oradata/luocs11g/L01.dbf. found same corrupt data
Reread of blocknum=10, file=/u01/app/oracle/oradata/luocs11g/L01.dbf. found same corrupt data
Reread of blocknum=10, file=/u01/app/oracle/oradata/luocs11g/L01.dbf. found same corrupt data
Reread of blocknum=10, file=/u01/app/oracle/oradata/luocs11g/L01.dbf. found same corrupt data
Checker run found 1 new persistent data failures
从数据库查询:
sys@LUOCS11G> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTION_TYPE---------- ---------- ---------- ------------------ ------------------ 7 10 1 0 CORRUPT
恢复数据坏块,使用之前的备份
先把表空间置为离线模式sys@LUOCS11G> alter tablespace l offline;
Tablespace altered.
restore还原数据文件RMAN> restore datafile 7;
Starting restore at 05-NOV-2012 08:29:16using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup setchannel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/luocs11g/L01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/11.2.0.1/dbhome_1/dbs/0bnph424_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/11.2.0.1/dbhome_1/dbs/0bnph424_1_1 tag=TAG20121105T051236
channel ORA_DISK_1: restored backup piece 1channel ORA_DISK_1: restore complete, elapsed time: 00:00:01Finished restore at 05-NOV-2012 08:29:17
恢复为ONLINE模式,但会遇到问题sys@LUOCS11G> alter tablespace l online;alter tablespace l online
*ERROR at line 1:ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: ‘/u01/app/oracle/oradata/luocs11g/L01.dbf’
我们手动恢复7号数据文件sys@LUOCS11G> recover datafile 7Media recovery complete.
sys@LUOCS11G> alter tablespace l online;
Tablespace altered.
再找找有没有数据坏块:sys@LUOCS11G> select * from v$database_block_corruption;
no rows selected
自动分配通道
自动通道是指在执行RMAN命令时,不需要显式指定通道的细节就可以使用的通道。使用configure命令的default device type和channel子句可以修改其设备类型和数量。
本节将使用的命令如下:
1)“show default device type”,查看默认的,即自动的通道设备类型
2)“show device type”,查看所有的可用的设备类型
3)“show channel”,查看所有的已配置的通道
4)“configure default device type to …”,修改自动通道的设备类型
5)“configure device type …”,修改特定的设备类型支持的通道数
6)“configure channel device type …”,创建或修改特定设备类型通道的通用模板
7)“configure channel N device type …”,创建或修改特定通道的属性,这是最细节的配置
下面所有示例是我在我一个Oracle Restart测试数据库上的演示:
RMAN> show default device type;
using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default-- 可看出自动通道的设备类型为DISK。
查看DISK设备通道的数量,我们这里没有配置SBT设备,所以此处没有显示,PARALLELISM为1表示并行度默认为1RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
查看DISK设备通道还有怎样的设置,发现出厂什么设置都没有RMAN> show channel;
RMAN configuration parameters for database with db_unique_name MAA are:RMAN configuration has no stored or default parameters
闪回恢复区也是DISK设备,如果开启了,那么它就是默认的备份目的地。所以backup命令都可以省略"to destination"子句。
SQL> archive log list
Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 38Next log sequence to archive 40Current log sequence 40-- 可见我的闪回恢复区是开启的,路径为/u01/recovery
执行backup tablespace l即可进行备份RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 16:50:01using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 16:50:03channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 16:50:04piece handle=/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T165002_89gzfv72_.bkp tag=TAG20121105T165002 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 16:50:04-- 生成了备份片:/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T165002_89gzfv72_.bkp
如果没有开启闪回恢复区,也没有指定to destination子句,那备份将会在$ORACLE_HOME/dbs目录下产生备份片。
如果管理员在磁盘挂载点上实现了条带,且服务器CPU资源充裕、I/O子系统没有明显的竞争,强烈建议增加执行RMAN任务的服务器进程数,使其并行地备份或还原,以加快执行的速度,这种优化动作对RMAN来说就是提高通道的数量。
默认的设备通道数可以通过configure device type和configure channel命令修改。
DISK通道数设置为2
RMAN> configure device type disk parallelism 2;
new RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters are successfully stored
released channel: ORA_DISK_1
RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
再次进行表空间L的备份:
RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 16:57:27allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=47 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 16:57:27channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 16:57:28piece handle=/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T165727_89gzvqtq_.bkp tag=TAG20121105T165727 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 16:57:28
– 我们可以看到有两个通道ORA_DISK_1和ORA_DISK_2。
但细心的朋友仔细观察,会发现实际上通道ORA_DISK_2是没有工作的,说明服务器进程是提供了,但没有干活。
原因是backup命令默认情况下将输入文件(被备份的对象,这里指的是l.266.798569345)作为分配任务的最小单位,而L表空间只有一个数据文件。两个通道处理一个数据文件,其中一个被认为是多余的。
所以,通道的数量不一定是RMAN命令的并行度,上例中通道数为2,但并行度仍然为1,。
通道数和并行度的关系:通道数大于或等于实际的并行度。
那我们给L表空间添加一个数据文件:
SQL> alter tablespace L add datafile size 10m;
Tablespace altered.
再进行备份:
RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 17:03:03using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 17:03:03channel ORA_DISK_2: starting full datafile backup setchannel ORA_DISK_2: specifying datafile(s) in backup setinput datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165channel ORA_DISK_2: starting piece 1 at 05-NOV-2012 17:03:03channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 17:03:04piece handle=/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T170303_89h067ow_.bkp tag=TAG20121105T170303 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01channel ORA_DISK_2: finished piece 1 at 05-NOV-2012 17:03:04piece handle=/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T170303_89h067p9_.bkp tag=TAG20121105T170303 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 17:03:04-- OK,可以看到两个通道同时工作了,而且也产生了两个备份片。
实际上Oracle 11g可以让不同的通道并行地备份同一个文件的不同部分,大家先思考下如何去做,这个我们在后面讨论。
在上面示例中发现,尽管通道数变多了,但是备份的地点依然是闪回恢复区。
如果闪回恢复区在其存储层上物理磁盘较多、条带合适,这样做并没有什么问题。
不过不排除有时管理员希望显式指定每个DISK通道的备份路径以达到避免I/O竞争的目的。
此时应该使用"configure channel"命令,该命令可以对每个通道设置不同的属性,也可以为对统一设备类型的通道设置通用属性。
比如,自动DISK通道有两个,下面的命令分别为两个通道指定备份路径属性:
[oracle@maa3 ~]$ mkdir /u01/bak/disk{1,2} -p
RMAN> configure channel 1 device type disk to destination ‘/u01/bak/disk1’;
new RMAN configuration parameters:CONFIGURE CHANNEL 1 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk1’;new RMAN configuration parameters are successfully stored
RMAN> configure channel 2 device type disk to destination ‘/u01/bak/disk2’;
new RMAN configuration parameters:CONFIGURE CHANNEL 2 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk2’;new RMAN configuration parameters are successfully stored
但请注意,to destination在11g上可用,10g以下版本不兼容,如下:
[oracle@localhost ~]$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0.1/dbhome_1
[oracle@localhost ~]$ export ORACLE_SID=luocs10g
[oracle@localhost ~]$ /u01/app/oracle/product/10.2.0.1/dbhome_1/bin/rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Mon Nov 5 09:23:45 2012
Copyright © 1982, 2005, Oracle. All rights reserved.
connected to target database: LUOCS10G (DBID=1391338094)
RMAN> configure channel 1 device type disk to destination ‘/u01/bak/disk1’;
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of configure command at 11/05/2012 09:29:51RMAN-06466: error parsing configuration string (CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT empty ‘/u01/bak/disk1’;)RMAN-01009: syntax error: found “identifier”: expecting one of: "double-quoted-string, equal, single-quoted-string"RMAN-01008: the bad identifier was: empty
RMAN-01007: at line 1 column 45 file: Configuration Row
那我们可以通过format得到同样的效果
RMAN> configure channel 1 device type disk format ‘/u01/bak/disk1’;
new RMAN configuration parameters:CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT ‘/u01/bak/disk1’;new RMAN configuration parameters are successfully stored
DBA可以设置多达254个DISK通道,且这样配置的通道的数量应该和"configure device type disk"命令中的PARALLELISM的值吻合,否则,即使配置了也无法使用。反过来就不同了,PARALLELISM可以大于配置的通道数,多出的部分由闪回恢复区或者是$ORACLE_HOME/dbs目录自动顶上。
继续看下面的示例:
RMAN> show channel;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE CHANNEL 1 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk1’;CONFIGURE CHANNEL 2 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk2’;-- 我们已经配置了两个通道。
我们把并行度调整为1
RMAN> configure device type disk parallelism 1;
old RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters are successfully stored
查看
RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;configuration for DISK channel 2 is ignored
– 注意最后一行,configuration for DISK channel 2 is ignored,表示我们配置的两个通道将会忽略。
备份测试,可见只读取了一个通道
RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 17:33:52allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 17:33:52channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 17:33:53piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T173352_89h200d1_.bkp tag=TAG20121105T173352 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 17:33:53
这次我们设置为大于通道数的并行度
RMAN> configure device type disk parallelism 3;
old RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters are successfully stored
released channel: ORA_DISK_1
给表空间L再添加一个数据文件之后进行备份
RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 17:37:42using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 17:37:42channel ORA_DISK_2: starting full datafile backup setchannel ORA_DISK_2: specifying datafile(s) in backup setinput datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165channel ORA_DISK_2: starting piece 1 at 05-NOV-2012 17:37:42channel ORA_DISK_3: starting full datafile backup setchannel ORA_DISK_3: specifying datafile(s) in backup setinput datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel ORA_DISK_3: starting piece 1 at 05-NOV-2012 17:37:42channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 17:37:43piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T173742_89h276jl_.bkp tag=TAG20121105T173742 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01channel ORA_DISK_2: finished piece 1 at 05-NOV-2012 17:37:43piece handle=/u01/bak/disk2/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T173742_89h276l6_.bkp tag=TAG20121105T173742 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:01channel ORA_DISK_3: finished piece 1 at 05-NOV-2012 17:37:43piece handle=/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T173742_89h276nh_.bkp tag=TAG20121105T173742 comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 17:37:43-- 可见ORA_DISK_1和ORA_DISK_2通道各指向了/u01/bak/disk1和/u01/bak/disk2,也就将备份片放于此处,多出来的一个就通过ORA_DISK_3通道存放在了闪回恢复区。
此外,如果所有的通道具有相同的非默认属性,可以用不带编号的"configure channel"命令配置通用属性,这种使用方式称为通道模板,比如设置备份片大小的上线:
RMAN> configure channel device type disk maxpiecesize 5M;
new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 5 M;
new RMAN configuration parameters are successfully stored
查看:
RMAN> show channel;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE CHANNEL 1 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk1’;CONFIGURE CHANNEL 2 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk2’;CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 5 M;
若要将自动通道设备改为SBT,可以使用下面命令:
RMAN> configure default device type to sbt;
new RMAN configuration parameters:CONFIGURE DEFAULT DEVICE TYPE TO ‘SBT_TAPE’;new RMAN configuration parameters are successfully stored
但现在备份是不可用的,因为RMAN无法调用MML驱动,与介质管理器联系不上,命令就终止:
RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 17:55:17RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup command at 11/05/2012 17:55:17ORA-19554: error allocating device, device type: SBT_TAPE, device name:
ORA-27211: Failed to load Media Management LibraryAdditional information: 2
等SBT设备在物理上安置就绪、介质管理软件安装完成以后,参考SBT厂商的手册,掌握SBT驱动的位置,比如:/opt/libobk.so。然后将其声明在SBT通道的parms子句的SBT_LIBRARY参数中,比如:
RMAN> configure chanel device type sbt parms ‘SBT_LIBRARY=/opt/libobk.so’;
parms子句中还有一个ENV参数,DBA应该根据SBT设备供应商的指导,将所有必须的变量设置在ENV参数中,然后和SBT_LIBRARY一并加入parms子句。比如OSB的OB_DEVICE可以用来指定磁带驱动器、Oracle提供的磁盘SBT设备模拟器的BACKUP_DIR可以指定用来模拟磁带的目录,以下命令设置Oracle的磁盘SBT模拟器作为介质管理器,将"/u01/sbt1"目录模拟成磁带。
首先创建sbt1目录:[oracle@maa3 ~]$ mkdir /u01/sbt1
设置第一个SBT通道:RMAN> configure channel 1 device type sbt parms ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt1)’;
new RMAN configuration parameters:CONFIGURE CHANNEL 1 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt1)’;new RMAN configuration parameters are successfully stored
确认一下SBT通道的并行度为1:RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
再执行备份:RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 18:40:04allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=35 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
channel ORA_SBT_TAPE_1: starting full datafile backup setchannel ORA_SBT_TAPE_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165input datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel ORA_SBT_TAPE_1: starting piece 1 at 05-NOV-2012 18:40:05channel ORA_SBT_TAPE_1: finished piece 1 at 05-NOV-2012 18:40:06piece handle=0bnpijc4_1_1 tag=TAG20121105T184004 comment=API Version 2.0,MMS Version 8.1.3.0channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 18:40:06-- 可见命令成功执行了。在我的环境里生成了两个文件
[oracle@maa3 ~]$ ls /u01/sbt1/total 4116-rw-r–r-- 1 oracle asmadmin 4194320 Nov 5 18:40 0bnpijc4_1_1
-rw-r–r-- 1 oracle asmadmin 2240 Nov 5 18:40 Oracle_Disk_SBT_Catalog
SBT通道也可以使用并行度,比如有两个磁带驱动器,将PARALLELISM并行度设置为2,SBT通道再声明一个即可。
我在这里再创建一个/u01/sbt2模拟第二个磁带驱动器。[oracle@maa3 ~]$ mkdir /u01/sbt2
并行度设置为2RMAN> configure device type sbt parallelism 2;
new RMAN configuration parameters:CONFIGURE DEVICE TYPE ‘SBT_TAPE’ PARALLELISM 2 BACKUP TYPE TO BACKUPSET;new RMAN configuration parameters are successfully stored
released channel: ORA_SBT_TAPE_1
配置第二个磁带驱动器RMAN> configure channel 2 device type sbt parms ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt2)’;
new RMAN configuration parameters:CONFIGURE CHANNEL 2 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt2)’;new RMAN configuration parameters are successfully stored
查看RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;CONFIGURE DEVICE TYPE ‘SBT_TAPE’ PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
RMAN> show channel;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE CHANNEL 1 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk1’;CONFIGURE CHANNEL 2 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk2’;CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 5 M;CONFIGURE CHANNEL 1 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt1)’;CONFIGURE CHANNEL 2 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt2)’;
进行备份:RMAN> backup tablespace l;
Starting backup at 05-NOV-2012 18:45:08allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=35 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
allocated channel: ORA_SBT_TAPE_2
channel ORA_SBT_TAPE_2: SID=47 device type=SBT_TAPE
channel ORA_SBT_TAPE_2: WARNING: Oracle Test Disk API
channel ORA_SBT_TAPE_1: starting full datafile backup setchannel ORA_SBT_TAPE_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel ORA_SBT_TAPE_1: starting piece 1 at 05-NOV-2012 18:45:08channel ORA_SBT_TAPE_2: starting full datafile backup setchannel ORA_SBT_TAPE_2: specifying datafile(s) in backup setinput datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165channel ORA_SBT_TAPE_2: starting piece 1 at 05-NOV-2012 18:45:08channel ORA_SBT_TAPE_1: finished piece 1 at 05-NOV-2012 18:45:09piece handle=0cnpijlk_1_1 tag=TAG20121105T184508 comment=API Version 2.0,MMS Version 8.1.3.0channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01channel ORA_SBT_TAPE_2: finished piece 1 at 05-NOV-2012 18:45:09piece handle=0dnpijlk_1_1 tag=TAG20121105T184508 comment=API Version 2.0,MMS Version 8.1.3.0channel ORA_SBT_TAPE_2: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 18:45:09
和DISK通道一样,如果各个SBT通道有共有的属性,可以创建一个SBT通道的模板,比如,依然是限制备份片的大小:
RMAN> configure channel device type sbt maxpiecesize 5M;
new RMAN configuration parameters:CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ MAXPIECESIZE 5 M;
new RMAN configuration parameters are successfully stored
手工分配通道
"show channel"显示两个DISK通道,此类通道单个备份片不超过5M;两个SBT通道,此类通道单个备份片同样不超过5M
RMAN> show channel;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE CHANNEL 1 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk1’;CONFIGURE CHANNEL 2 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk2’;CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 5 M;CONFIGURE CHANNEL 1 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt1)’;CONFIGURE CHANNEL 2 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt2)’;CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ MAXPIECESIZE 5 M;
"show device type"显示使用DISK会默认打开3个通道进行备份,2个通道从show channel看出指定了位置,剩余1个通道指向闪回恢复区;而SBT则均使用两个通道,与show channel输出结果对应
RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;CONFIGURE DEVICE TYPE ‘SBT_TAPE’ PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
"show default device type"显示自动通道是SBT类型的:
RMAN> show default device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEFAULT DEVICE TYPE TO ‘SBT_TAPE’;
— 以上全部为根据上面所做的实验结果的说明。
因为某种原因,有些DBA可能不愿意使用自动通道分配,宁愿在执行RMAN的时候手动指定通道如何分配。
configure命令预先配置的通道(比如ORA_DISK_n或ORA_SBT_TAPE_n)可以在RMAN命令中直接引用,若要使用configure命令从未配置过的通道就要利用run运行块和"allocate channel"命令当场声明。
首先,利用"device type"子句仅指定backup命令通道的设备类型,至于通道的数量和其他细节则依从configure命令对该类型通道的配置,比如使用DISK通道。
我目前默认的自动通道为SBT,但我们可以使用下面的语句使用DISK通道
RMAN> backup device type disk tablespace l;
Starting backup at 05-NOV-2012 19:57:54allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=47 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=50 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 19:57:55channel ORA_DISK_2: starting full datafile backup setchannel ORA_DISK_2: specifying datafile(s) in backup setinput datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165channel ORA_DISK_2: starting piece 1 at 05-NOV-2012 19:57:55channel ORA_DISK_3: starting full datafile backup setchannel ORA_DISK_3: specifying datafile(s) in backup setinput datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel ORA_DISK_3: starting piece 1 at 05-NOV-2012 19:57:55channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 19:57:56piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T195755_89hbg3kk_.bkp tag=TAG20121105T195755 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01channel ORA_DISK_2: finished piece 1 at 05-NOV-2012 19:57:56piece handle=/u01/bak/disk2/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T195755_89hbg3n3_.bkp tag=TAG20121105T195755 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:01channel ORA_DISK_3: finished piece 1 at 05-NOV-2012 19:57:56piece handle=/u01/recovery/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T195755_89hbg3ox_.bkp tag=TAG20121105T195755 comment=NONE
channel ORA_DISK_3: backup set complete, elapsed time: 00:00:01
Finished backup at 05-NOV-2012 19:57:56
下面不仅指定通道的设备类型,利用小括号规定使用特定的通道以备份特定对象
RMAN> backup device type disk
2> (tablespace l channel ORA_DISK_1)3> (tablespace users channel ORA_DISK_2);
Starting backup at 05-NOV-2012 20:00:22using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165input datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 20:00:23channel ORA_DISK_2: starting full datafile backup setchannel ORA_DISK_2: specifying datafile(s) in backup setinput datafile file number=00004 name=+MSDATA/maa/datafile/users.264.792009897channel ORA_DISK_2: starting piece 1 at 05-NOV-2012 20:00:23channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 20:00:24piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T200023_89hblqch_.bkp tag=TAG20121105T200023 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01channel ORA_DISK_2: finished piece 1 at 05-NOV-2012 20:00:24piece handle=/u01/bak/disk2/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T200023_89hblqdw_.bkp tag=TAG20121105T200023 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 20:00:24
– ORA_DISK_1通道备份L表空间的数据文件,ORA_DISK_2通道备份USERS表空间的数据文件。
SBT通道同样可以:
RMAN> backup device type sbt
2> (datafile 4 channel ORA_SBT_TAPE_1)3> (datafile 5 channel ORA_SBT_TAPE_2);
Starting backup at 05-NOV-2012 21:57:08using target database control file instead of recovery catalog
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=35 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
allocated channel: ORA_SBT_TAPE_2
channel ORA_SBT_TAPE_2: SID=40 device type=SBT_TAPE
channel ORA_SBT_TAPE_2: WARNING: Oracle Test Disk API
channel ORA_SBT_TAPE_1: starting full datafile backup setchannel ORA_SBT_TAPE_1: specifying datafile(s) in backup setinput datafile file number=00004 name=+MSDATA/maa/datafile/users.264.792009897channel ORA_SBT_TAPE_1: starting piece 1 at 05-NOV-2012 21:57:09channel ORA_SBT_TAPE_2: starting full datafile backup setchannel ORA_SBT_TAPE_2: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345channel ORA_SBT_TAPE_2: starting piece 1 at 05-NOV-2012 21:57:09channel ORA_SBT_TAPE_1: finished piece 1 at 05-NOV-2012 21:57:10piece handle=0jnpiutl_1_1 tag=TAG20121105T215709 comment=API Version 2.0,MMS Version 8.1.3.0channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01channel ORA_SBT_TAPE_2: finished piece 1 at 05-NOV-2012 21:57:10piece handle=0knpiutl_1_1 tag=TAG20121105T215709 comment=API Version 2.0,MMS Version 8.1.3.0channel ORA_SBT_TAPE_2: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 21:57:10
在这里注意一下,配置里可用的通道数量不可以超过各自设备的PARALLELISM限制,比如SBT设备类型并发数为2
RMAN> backup device type sbt
2> (datafile 4 channel ORA_SBT_TAPE_1)3> (datafile 5 channel ORA_SBT_TAPE_2)4> (datafile 6,7 channel ORA_SBT_TAPE_3);
Starting backup at 05-NOV-2012 21:59:06using channel ORA_SBT_TAPE_1
using channel ORA_SBT_TAPE_2
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup command at 11/05/2012 21:59:07RMAN-06033: channel ORA_SBT_TAPE_3 not allocated
– 额外给一个不存在的通道ORA_SBT_TAPE_3,结果报错。
若要使用未配置过的通道或临时突破PARALLELISM的限制,必须使用run运行块中的allocate channel命令。
RMAN> run{2> backup device type disk
3> (tablespace l channel ORA_DISK_1);4> allocate channel a1 device type disk to destination ‘/u01/bak/disk3’;5> backup device type disk
6> (tablespace l channel ORA_DISK_1);7> }
Starting backup at 05-NOV-2012 22:22:14allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=40 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=58 device type=DISK
channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165input datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel ORA_DISK_1: starting piece 1 at 05-NOV-2012 22:22:14channel ORA_DISK_1: finished piece 1 at 05-NOV-2012 22:22:15piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T222214_89hlwpj8_.bkp tag=TAG20121105T222214 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 22:22:15
released channel: ORA_DISK_1
released channel: ORA_DISK_2
released channel: ORA_DISK_3
allocated channel: a1
channel a1: SID=35 device type=DISK
Starting backup at 05-NOV-2012 22:22:16released channel: a1
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup command at 11/05/2012 22:22:16RMAN-06033: channel ORA_DISK_1 not allocated
– 上面这些语句什么意思呢?
我们在第四行通过"allocate channel a1 …"定义了a1通道,这样的话RMAN只能使用a1通道,allocate channel a1上下都有同样的备份L表空间的语句,上面的执行成功,下面的却失败。
我们一般如下方式使用,比如备份L表空间和USERS表空间,分别指定通道a1和a2各自备份L和USERS表空间,最后释放两个通道。
RMAN> run{2> allocate channel a1 device type disk to destination ‘/u01/bak/disk1’;3> allocate channel a2 device type disk to destination ‘/u01/bak/disk2’;4> backup
5> (tablespace l channel a1)6> (tablespace users channel a2);7> release channel a1;8> release channel a2;9> }
allocated channel: a1
channel a1: SID=35 device type=DISK
allocated channel: a2
channel a2: SID=40 device type=DISK
Starting backup at 05-NOV-2012 22:26:25channel a1: starting full datafile backup setchannel a1: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165input datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel a1: starting piece 1 at 05-NOV-2012 22:26:25channel a2: starting full datafile backup setchannel a2: specifying datafile(s) in backup setinput datafile file number=00004 name=+MSDATA/maa/datafile/users.264.792009897channel a2: starting piece 1 at 05-NOV-2012 22:26:25channel a1: finished piece 1 at 05-NOV-2012 22:26:26piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T222625_89hm4kmv_.bkp tag=TAG20121105T222625 comment=NONE
channel a1: backup set complete, elapsed time: 00:00:01channel a2: finished piece 1 at 05-NOV-2012 22:26:26piece handle=/u01/bak/disk2/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T222625_89hm4kp8_.bkp tag=TAG20121105T222625 comment=NONE
channel a2: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 22:26:26
released channel: a1
released channel: a2
如果我们没有使用"to destination"指定路径,那么将会备份到闪回恢复区或者$ORACLE_HOME/dbs目录下。
下面的示例中我一共配置了4个通道,其中两个为DISK设备的,两个为SBT设备的
RMAN> run{2> allocate channel c1 device type disk to destination ‘/u01/bak/disk1’;3> allocate channel c2 device type disk to destination ‘/u01/bak/disk2’;4> allocate channel c3 device type sbt parms
5> ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt1)’;6> allocate channel c4 device type sbt parms
7> ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt2)’;8> backup database;9> }
allocated channel: c1
channel c1: SID=35 device type=DISK
allocated channel: c2
channel c2: SID=40 device type=DISK
allocated channel: c3
channel c3: SID=58 device type=SBT_TAPE
channel c3: WARNING: Oracle Test Disk API
allocated channel: c4
channel c4: SID=22 device type=SBT_TAPE
channel c4: WARNING: Oracle Test Disk API
Starting backup at 05-NOV-2012 22:31:45channel c1: starting full datafile backup setchannel c1: specifying datafile(s) in backup setinput datafile file number=00001 name=+MSDATA/maa/datafile/system.260.792009857channel c1: starting piece 1 at 05-NOV-2012 22:31:46channel c2: starting full datafile backup setchannel c2: specifying datafile(s) in backup setinput datafile file number=00002 name=+MSDATA/maa/datafile/sysaux.261.792009871input datafile file number=00004 name=+MSDATA/maa/datafile/users.264.792009897channel c2: starting piece 1 at 05-NOV-2012 22:31:46channel c3: starting full datafile backup setchannel c3: specifying datafile(s) in backup setinput datafile file number=00003 name=+MSDATA/maa/datafile/undotbs1.262.792009883input datafile file number=00007 name=+MSDATA/maa/datafile/l.268.798572257channel c3: starting piece 1 at 05-NOV-2012 22:31:51channel c4: starting full datafile backup setchannel c4: specifying datafile(s) in backup setinput datafile file number=00005 name=+MSDATA/maa/datafile/l.266.798569345input datafile file number=00006 name=+MSDATA/maa/datafile/l.267.798570165channel c4: starting piece 1 at 05-NOV-2012 22:31:55channel c4: finished piece 1 at 05-NOV-2012 22:32:05piece handle=0snpj0uo_1_1 tag=TAG20121105T223145 comment=API Version 2.0,MMS Version 8.1.3.0channel c4: backup set complete, elapsed time: 00:00:11channel c4: starting full datafile backup setchannel c4: specifying datafile(s) in backup setchannel c1: finished piece 1 at 05-NOV-2012 22:32:06piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T223145_89hmglbh_.bkp tag=TAG20121105T223145 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:20channel c1: starting full datafile backup setchannel c1: specifying datafile(s) in backup setincluding current SPFILE in backup setchannel c1: starting piece 1 at 05-NOV-2012 22:32:07channel c2: finished piece 1 at 05-NOV-2012 22:32:07piece handle=/u01/bak/disk2/MAA/backupset/2012_11_05/o1_mf_nnndf_TAG20121105T223145_89hmgnxc_.bkp tag=TAG20121105T223145 comment=NONE
channel c2: backup set complete, elapsed time: 00:00:21channel c1: finished piece 1 at 05-NOV-2012 22:32:10piece handle=/u01/bak/disk1/MAA/backupset/2012_11_05/o1_mf_nnsnf_TAG20121105T223145_89hmh7kf_.bkp tag=TAG20121105T223145 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:03channel c3: finished piece 1 at 05-NOV-2012 22:32:10piece handle=0rnpj0ui_1_1 tag=TAG20121105T223145 comment=API Version 2.0,MMS Version 8.1.3.0channel c3: backup set complete, elapsed time: 00:00:20including current control file in backup setchannel c4: starting piece 1 at 05-NOV-2012 22:32:10channel c4: finished piece 1 at 05-NOV-2012 22:32:11piece handle=0tnpj0v5_1_1 tag=TAG20121105T223145 comment=API Version 2.0,MMS Version 8.1.3.0channel c4: backup set complete, elapsed time: 00:00:01Finished backup at 05-NOV-2012 22:32:11released channel: c1
released channel: c2
released channel: c3
released channel: c4
恢复到出厂设置方法:
首先删除所有备份:RMAN> delete noprompt backup;
DISK设备的所有通道恢复到出厂设置:RMAN> configure channel 1 device type disk clear;
old RMAN configuration parameters:CONFIGURE CHANNEL 1 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk1’;old RMAN configuration parameters are successfully deleted
RMAN> configure channel 2 device type disk clear;
old RMAN configuration parameters:CONFIGURE CHANNEL 2 DEVICE TYPE DISK TO DESTINATION ‘/u01/bak/disk2’;old RMAN configuration parameters are successfully deleted
RMAN> configure channel 3 device type disk clear;
old RMAN configuration parameters are successfully deleted
RMAN> configure channel device type disk clear;
old RMAN configuration parameters:CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 5 M;old RMAN configuration parameters are successfully deleted
RMAN> configure device type disk clear;
old RMAN configuration parameters:CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;RMAN configuration parameters are successfully reset to default value
删除SBT设备的配置和通道RMAN> configure channel 1 device type sbt clear;
old RMAN configuration parameters:CONFIGURE CHANNEL 1 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt1)’;old RMAN configuration parameters are successfully deleted
RMAN> configure channel 2 device type sbt clear;
old RMAN configuration parameters:CONFIGURE CHANNEL 2 DEVICE TYPE ‘SBT_TAPE’ PARMS ‘SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/u01/sbt2)’;old RMAN configuration parameters are successfully deleted
RMAN> configure channel device type sbt clear;
old RMAN configuration parameters:CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ MAXPIECESIZE 5 M;old RMAN configuration parameters are successfully deleted
RMAN> configure device type sbt clear;
old RMAN configuration parameters:CONFIGURE DEVICE TYPE ‘SBT_TAPE’ PARALLELISM 2 BACKUP TYPE TO BACKUPSET;RMAN configuration parameters are successfully reset to default value
自动通道类型恢复到出厂设置RMAN> configure default device type clear;
old RMAN configuration parameters:CONFIGURE DEFAULT DEVICE TYPE TO ‘SBT_TAPE’;RMAN configuration parameters are successfully reset to default value
最后验证下:
RMAN> show device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # defaultCONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
RMAN> show default device type;
RMAN configuration parameters for database with db_unique_name MAA are:CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
RMAN> show channel;
RMAN configuration parameters for database with db_unique_name MAA are:RMAN configuration has no stored or default parameters
声明:此文章大部分理论内容来自书籍《临危不惧:Oracle 11g数据库恢复技术》。