目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库... 3 4.1.3 查看备份信息... 3 4.1.4 备份数据库... 5 4.1.5 备份数据文件... 6 4.1.6 备份表空间... 6 4.1.7 备份控制文件... 6 4.1.8 备份归档日志文件... 7 4.1.9 备份闪回区... 8 4.1.10 增量备份... 8 4.2 RMAN 还原与恢复... 9 4.2.1 恢复情形... 10 4.2.2 磁盘损坏的恢复... 10 4.2.3 表空间的恢复... 11 4.2.4 不完全恢复... 13 4.2.5 SPFILE参数文件恢复... 15 5 备份恢复相关视图及监控... 16 5.1.1 相关视图... 16 5.1.2 查看RMAN分配通道进程... 17 6 参考资料... 17
格式化说明:
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)
1 目的与范围
l 本文目的是指导应用运维工程师管理Oracle数据库。
l 本文范围适用于Oracle 9i,10g,11g数据库。
2 术语和定义
术语/定义 |
说明 |
完全备份 |
按归档模式分为归档和非归档 归档模式 打开状态,属于非一致性备份 关闭状态,可以分为一致性和非一致性 非归档模式 打开状态,非一致性备份无效 关闭状态,一致性备份,非一致性备份不被推荐 |
RMAN |
RMAN(Recovery Manager)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN也可以进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数据块。而且,通过RMAN提供的接口,第三方的备份与恢复软件如veritas将提供更强大的备份与恢复的管理功能。通过RMAN,也提供了其它更多功能,如数据库的克隆、采用RMAN建立备用数据库、利用RMAN备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。 |
RMAN备份类型 |
|
3 角色和职责
角色 |
职责 |
应用运维工程师 |
Oracle 数据库管理 |
4 使用RMAN备份数据库
4.1.1 检查数据库模式
sqlplus /nolog
conn /as sysdba
archive log list (查看数据库是否处于归档模式中)
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oradata/arch/bsm1
Oldest online log sequence 559
Next log sequence to archive 560
Current log sequence 560
若为非归档,则修改数据库归档模式。
1)数据库启动到mount模式
2)alter database archivelog;
3) 打开数据库
查看归档日志路径信息
show parameter log_archive_dest_
设置归档路径
alter system set log_archive_dest_1='location=/home/oracle';(本地路径)
alter database open;
4.1.2 连接到target数据库
命令:
rman target / (connect target system/oracle@ora10g,如果数据库没有起来,也可要直接在rman命令下用startup进行启动数据库)
可以连接到target database。(rman 一边连接到target数据库,另外一边连接到control file(nocatalog mode),control file 中存储rman 的备份信息)
4.1.3 查看备份信息
查看rman中缺省的参数,可以通过 show all;
来进行查看(RMAN configuration parameters),在使用backup database命令中,可以把这些default value 用固定的值来进行替代。
以下是查看备份的一些信息的命令:
1.查看备份集摘要信息 list backup summary; 2.查看备份集具体信息 list backup; 3.查看拷贝 list copy; 4.查看某个数据文件备份 list backup of datafile 8; 5.查看某个表空间备份 list backup of tablespace PINO; 6.查看归档日志 list archivelog all; 7.查看备份的归档日志 list backup of archivelog all; 8.查看无效的备份集与归档日志 list expired backup; list expired archivelog all; 9.删除无效的备份集与归档日志 delete expired backup; delete expired archivelog all; 10.查看丢弃的备份集 report obsolete; 11.删除丢弃的备份集 delete obsolete; 注意:这里的丢充备份集是指按照备份保留策略已经超过备份窗口或者保留冗余数的备份集。 12.检查一致性 crosscheck archivelog all; crosscheck backup; 注意:crosscheck的作用主要是用来检查备份是否还存在于存储介质上,如果存在则将控制文件中标记为A(avaible有效),如果不存在控制文件中标记为X(expired失效)。
4.1.4 备份数据库
RMAN> backup database format '/u01/app/oracle/rmanbak/whole_%d_%U'; --备份整个数据库
RMAN> backup as compressed backupset
2> database format '/u01/app/oracle/rmanbak/whole_%d_%U'; --备份整个数据库并压缩备份集
RMAN> run{
2> allocate channel ch1 type disk --手动分配一个通道
3> maxpiecesize=2g; --指定备份片的大小为2g
4> backup as compressed backupset --压缩备份集
5> format '/u01/app/oracle/rmanbak/whole_%d_%U' filesperset=3 --指定备份集中允许容纳的文件数为个
6> database;
7> release channel ch1;} --释放通道
RMAN> configure device type disk parallelism 3; --将并行度改为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
RMAN> backup as compressed backupset --并行度改为之后,自动启用了个通道
2> format '/u01/app/oracle/rmanbak/whole_%d_%U' filesperset=3
3> database;
RMAN> run{
2> allocate channel ch1 type disk
3> maxpiecesize=100m; --备份片大小设置为m,则一个备份集包含多个备份片,且每个备份片大小为100m
4> backup
5> format '/u01/app/oracle/rmanbak/whole_%d_%U'
6> database;
7> release channel ch1;}
4.1.5 备份数据文件
Oracle数据文件及表空间的管理请参考:Oracle 表空间与数据文件
RMAN> backup as copy datafile 4 --备份类型为镜像备份
2> format '/u01/app/oracle/rmanbak/df_%d_%U';
RMAN> list copy;
RMAN> backup datafile 4,5,6 format '/u01/app/oracle/rmanbak/df_%d_%U'; --备份类型为备份集
4.1.6 备份表空间
Oracle数据文件及表空间的管理请参考:Oracle 表空间与数据文件
RMAN> backup tablespace users,example format '/u01/app/oracle/rmanbak/tb_%d_%U';
RMAN> backup tablespace temp; --临时表空间不需要备份
4.1.7 备份控制文件
RMAN> configure controlfile autobackup on;--自动备份控制文件置为on状态,将自动备份控制文件和参数文件
更改自动备份控制文件状态:
old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
注:在备份system01.dbf或system表空间时将会自动备份控制文件和参数文件,即使自动备份控制文件参数为off
--单独备份控制文件及参数文件
RMAN> backup current controlfile;
--备份数据文件时包含控制文件
RMAN> backup datafile 4 include current controlfile;
RMAN> sql "alter database backup controlfile to ''/tmp/orclcontrol.bak''";
sql statement: alter database backup controlfile to ''/tmp/orclcontrol.bak''
RMAN> sql "alter database backup controlfile to trace as ''/tmp/orclcontrol.sql''";
sql statement: alter database backup controlfile to trace as ''/tmp/orclcontrol.sql''
--单独备份spfile
RMAN> backup spfile format '/u01/app/oracle/rmanbak/sp_%d_%U';
RMAN> backup copies 2 device type disk spfile;
4.1.8 备份归档日志文件
备份归档日志时仅仅备份归档过的数据文件(不备份联机重做日志文件),备份归档日志时总是对归档日志做完整备份,RMAN对归档日志备份前会自动做一次日志切换,且从一组归档日志中备份未损坏的归档日志,RMAN会自动判断哪些归档日志需要进行备份,归档日志的备份集不能包含其它类型的文件。
RMAN> backup
2> format '/u01/app/oracle/rmanbak/lf_%d_%U'
3> archivelog all delete input; --delete input 删除所有已经备份过的归档日志
RMAN> backup --此种写法实现了上述相同的功能
2> archivelog all delete input
3> format '/u01/app/oracle/rmanbak/lf_%d_%U';
RMAN> backup archivelog sequence between 50 and 120 thread 1 delete input;
RMAN> backup archivelog from time "sysdate-15" until time "sysdate-7";
RMAN> backup
2> format '/u01/app/oracle/rmanbak/lf_%d_%U'
3> archivelog from sequence=80
4> delete input;
使用plus archivelog时备份数据库完成的动作(backup database plus archivelog):
1)首先执行alter system archive log current 命令(对当前日志归档)
2)执行backup archivelog all 命令(对所有归档日志进行备份)
3)执行backup database命令中指定的数据文件、表空间等
4)再次执行alter system archive log current
5)备份在备份操作期间产生的新的归档日志
--执行下面的命令,并观察备份列出的信息,可以看到使用plus archivelog时使用了上面描述的步骤来进行备份
RMAN> backup database plus archivelog
2> format '/u01/app/oracle/rmanbak/lg_%d_%U' delete input;
4.1.9 备份闪回区
RMAN> backup recovery area;
使用backup recovery area时,将备份位于闪回区且未进行过备份的所有文件,这些文件包括完整、增量备份集、自动备份的控制文件(假定使用闪回区作为备份路径时)、归档日志、数据文件的镜像副本等。闪回日志,当前的控制文件。
联机重做日志不会被备份, 使用backup recovery files时,将备份磁盘上未进行过备份的所有恢复文件,而不论是否位于闪回区
注:使用上述两条命令时,备份目的地必须是磁带。
4.1.10 增量备份
差异增量备份将备份自上次增量备份以来所有发生改变的数据块;
累计增量备份将备份自上次级增量备份以来所有改变过的数据块。
--下面启用0级增量备份
RMAN> run{ 2> allocate channel ch1 type disk; 3> backup incremental level 0 database 4> format '/u01/app/oracle/rmanbak/db_%d_%U' 5> tag=db_inc_0; 6> release channel ch1; 7> }
SQL> select sid,sofar,totalwork from v$session_longops; --查询备份情况
--下面启用1级差异增量备份
RMAN> run{ 2> allocate channel ch1 type disk; 3> backup incremental level 1 database 4> format '/u01/app/oracle/rmanbak/db1_%d_%U' 5> tag=db_inc_1; 6> release channel ch1; 7> }
--下面启用1级累计增量备份
RMAN> run{ 2> allocate channel ch1 type disk; 3> backup incremental level 1 cumulative database 4> format '/u01/app/oracle/rmanbak/dbc_%d_%U' 5> tag=db_inc_c_1; 6> release channel ch1; 7> }
4.2 RMAN 还原与恢复
在Oracle数据库中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复是实现数据库完整性、可靠性必不可少的手段之一。还原简言之即是将所需的文件从备份中复制到原来文件所在的路径。还原通常可以包括数据库、表空间、数据文件级别的还原。通常还原后的内容会滞后于最新的数据库SCN,因此将归档日志、联机重做日志文件中的内容更新到还原的数据文件中,这个过程称之为恢复。
4.2.1 恢复情形
1)在mount 或open 阶段完成的灾难恢复
非系统表空间,undo表空间,所有的数据文件
2)在nomount 阶段完成的灾难恢复
控制文件(controlfile)
RMAN> restore controlfile;
3)在mount 阶段完成的灾难恢复
系统表空间,联机重做日志文件
RMAN在归档模式下的还原与恢复的简化过程:
RMAN> connect target /
RMAN> startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
4.2.2 磁盘损坏的恢复
磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理,使用set newname 命令将数据文件还原到新路径:
set newname for datafile 1 to '<newdir>/system01.dbf'; --为恢复的数据文件指定新路径或重命名
使用switch命令将变更更新到控制文件:
switch datafile n | all ; --等同于alter database rename file命令,该命令将恢复的数据文件重命名更新到控制文件
下面的示例首先删除tbs01.dbf,接下来将其恢复到oradata目录中:
SQL> host rm $ORACLE_BASE/oradata/orcl/tbs01.dbf
SQL> startup mount force;
RMAN> connect target sys/redhat@dedicated
connected to target database: ORCL (DBID=1257415066, not open)
RMAN> run{
2> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
3> restore database;
4> switch datafile all;
5> recover database;
6> alter database open;}
SQL> select file#,name,status from v$datafile where file#=6;
FILE# NAME STATUS
---------- -------------------------------------------------- -------
6 /u01/app/oracle/oradata/tbs01.dbf ONLINE
SQL> select count(1) from bk.tb2; --表tb2位于tbs01.dbf内
COUNT(1)
----------
3
4.2.3 表空间的恢复
通过以下事例来说明表空间的恢复,删除表空间内的数据文件,删除后在针对位于该表空间的表进行插入记录以及实施检查点进程
SQL> ho rm $ORACLE_BASE/oradata/tbs01.dbf
SQL> insert into bk.tb2 select 4,'Jackson' from dual;
SQL> commit;
SQL> alter system checkpoint;
强制检查点后,告警日志出现错误提示,视图v$recover_file给出了故障数据文件
[oracle@oradb ~]$ tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log
Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4724.trc:
ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ------------------ ---------- ---------
6 OFFLINE OFFLINE FILE NOT FOUND 0
SQL> select name,status from v$datafile where file#=6;
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/tbs01.dbf RECOVER
使用RMAN命令恢复数据文件,此时数据库处于OPEN状态,因此首先需要将表空间脱机,恢复完成之后再将其联机。
RMAN> run{
2> sql 'alter tablespace tbs1 offline immediate';
3> set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/tbs01.dbf';
4> restore tablespace tbs1;
5> switch datafile all;
6> recover tablespace tbs1;
7> sql 'alter tablespace tbs1 online';}
SQL> select name,status from v$datafile where file#=6; --位置变动到orcl子目录下,状态变为online
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/orcl/tbs01.dbf ONLINE
也可以使用下面的命令完成同样的功能,注意表空间内有多个数据文件的情形,而仅有单个数据文件损坏则采用下面的方式处理更为妥当。
RMAN> run{
2> sql 'alter database datafile 6 offline immediate';
3> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
4> restore datafile 6;
5> switch datafile all;
6> recover datafile 6;
7> sql 'alter databaes datafile 6 online';}
4.2.4 不完全恢复
对于RMAN的不完全恢复,有如下步骤:
1)加载数据到mount状态(建议恢复前先做备份)
2)为高并发分配多个通道
3)还原所有(所需)的数据文件
4)使用until time,until sequence,until scn来恢复数据库
5)使用resetlogs打开数据库
6)全备数据库
通过以下事例演示RMAN基于时间的例子:
SQL> show user;
USER is "BK"
SQL> create table tb1(id int,name varchar2(10));
SQL> insert into tb1 select 1,'Test' from dual;
SQL> host strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Test --查看联机日志文件中不存在刚刚插入的记录
SQL> commit; --注意commit是将日志缓冲内容写入到日志文件
SQL> host strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Test --提交后联机日志文件中才有新增的记录
Test
SQL> alter system switch logfile;
SQL> host ls $ORACLE_BASE/oradata/arch
log_1_1_732989230.arc log_1_1_732989889.arc
RMAN> run{
2> allocate channel ch1 type disk;
3> allocate channel ch2 type disk;
4> backup as compressed backupset database plus archivelog delete input
5> format '/u01/bk/rmbk/wh_lg_%U'
6> tag='Wholebak_Pluslog';
7> release channel ch1;
8> release channel ch2;}
18:10:36 SQL> drop table tb1;
RMAN> run{
2> allocate channel ch1 type disk;
3> allocate channel ch2 type disk;
4> set until time "to_date('2014-12-26 18:10:36','yyyy-mm-dd hh24:mi:ss')";
5> restore database;
6> recover database;
7> alter database open resetlogs;
8> release channel ch1;
9> release channel ch2;}
SQL> select * from tb1;
ID NAME
---------- ----------
1 Test
通过asmcmd的lsdg命令可以看到目前asm实例中,盘的状态,diskgroup的冗余类型, AU size, 总空间,可用空间等信息。
[grid@bsmrac1 ~]$ asmcmd
ASMCMD> lsdg
4.2.5 SPFILE参数文件恢复
SPFILE参数文件可以在RMAN中进行备份,因此可以使用RMAN来恢复SPFILE文件。可以自动备份SPFILE,SPFILE的自动备份是随着控制文件的备份一起被完成的,因此可以通过自动备份控制文件来实现自动备份SPFILE文件的目的。
其次,在备份系统表空间时将引发控制文件的自动备份,而不论是否设置自动备份参数为ON,此时同样也备份SPFILE文件
SPFILE文件恢复步骤:
1) startup nomount [force];
2) set dbid=dbid_no;
3) restore spfile from autobackup | '<dir>'
4) startup;
下面设定控制文件的自动备份以及设置其备份路径(注意要预先知道目标数据库的DBID,此次事例的DBID为1263182651)
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type disk to '/u01/bk/rmbk/auto_ctl_%d_%F';
RMAN> exit
sys@ORCL> alter tablespace users add datafile '$ORACLE_BASE/oradata/orcl/users02.dbf' size 5m;
[oracle@oradb rmbk]$ ls auto* --执行上一条alter tablespace users add datafile 语句将引发控制文件的自动备份
auto_ctl_ORCL_c-1263182651-20141226-00
sys@ORCL> shutdown immediate;
[oracle@oradb dbs]$ mv spfileorcl.ora spfileorcl.ora.bak --将原来的spfile文件重命名
[oracle@oradb ~]$ rman target / nocatalog
RMAN> startup nomount force;
RMAN> set dbid=1263182651;
RMAN> restore spfile from autobackup; --此处并没有找到文件路径,按Oracle联机文档,在nomount状态应该可以找到
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
RMAN> restore spfile from '/u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20141226-00'; --手动指定路径
RMAN> startup force;
5 备份恢复相关视图及监控
5.1.1 相关视图
v$backup_files v$backup_set v$backup_piece v$backup_redolog v$backup_spfile v$backup_device v$rman_configuration v$archived_log v$backup_corruption v$copy_corruption v$database_block_corruption v$backup_datafile
5.1.2 查看RMAN分配通道进程
SELECT sid, spid, client_info
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND client_info LIKE '%rman%';
6 参考资料
l Oracle官方RMAN手册