首页 > 代码库 > RMAN备份和恢复 Oracle10g学习系列(9)

RMAN备份和恢复 Oracle10g学习系列(9)

RMAN 总是以SYSDBA身份连接目标数据库,所以连接账户必须具有SYSDBA权限。


RMAN特点:

1、备份数据库、表空间、数据文件、控制文件、归档日志和SPFILE。数据库是归档模式,目标库必须处于MOUNT状态或OPEN状态。

2、存储频繁执行的备份和恢复操作。放到脚本中执行

3、跳过未用块。

4、执行增量块级备份

5、指定备份限制

6、在备份时检测损坏块。用DBVERIFY工具进行检查

7、自动使用并行化特征提高备份和恢复性能。分配多个CPU、多个通道。


使用格式串:

在configure 命令中经常使用格式串,在backup,resotre,allocate channel 等其他RMAN 命令中也会经常看到格式串。RMAN 提供了与格式串关联的一些语法元素。 这些元素称: 占位符, rman 将使用相应的定义值来替换他们。 例如示例中的 %U 语法元素告诉RMAN要使用系统生成的唯一表示符替换文件名。 

使用FORMAT参数时可使用的各种替换变量,如下(注意大小写)所示:

%a:Oracle数据库的activation ID即RESETLOG_ID。

%c:备份片段的复制数(从1开始编号,最大不超过256)。

%d:Oracle数据库名称。

%D:当前时间中的日,格式为DD。

%e:归档序号。

%f:绝对文件编号。

%F:基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD为日期,QQ是一个1~256的序列。

%h:归档日志线程号。

%I:Oracle数据库的DBID。

%M:当前时间中的月,格式为MM。

%N:表空间名称。

%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8。比如数据库名JSSBOOK,则生成的名称则是JSSBOOKx。

%p:备份集中备份片段的编号,从1开始。

%s:备份集号。

%t:备份集时间戳。

%T:当前时间的年月日格式(YYYYMMDD)。

%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称。

%U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示:

生成备份片段时,%U=%u_%p_%c;

生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u;

生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u;

生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。

%Y:当前时间中的年,格式为YYYY。

注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。


常用命令:

查看环境变量:RMAN>show all;


列出7天前的备份:RMAN>report need backup days 7;


列出整个数据库备份:RMAN>list backup of database;


列出表空间备份:RMAN>list backup of tablespace users;


列出数据文件备份:RMAN>list backup of datafile n;


列出控制文件备份:RMAN>list backup of controlfile;


列出归档日志备份:RMAN>list archivelog all;


列出参数文件备份: RMAN>list backup of spfile;



检查备份是否有效:RMAN>crosscheck bakup;

删除过期备份:RMAN>delete expired backup;

删除无效的备份(7天以前的):RMAN>delete obsolete;

删除所有备份:RMAN>delete backup;


开启控制文件自动备份:RMAN>configure controlfile autobackup on;

控制文件路径:ll /u01/oracle/flash_recovery_area/ORCL/autobackup/


OMF定义通道:

RMAN>run {

allocate channel a1 type disk;

allocate channel a2 type disk;

backup database;

release channel a1;

release channel a2;

}


RMAN>backup spfile;

RMAN>bakup current controlfile;

RMAN>backup datafile 4; //备份第四个数据文件

RMAN>backup tablespace users;

RMAN>backup archivelog all;

RMAN>backup full database plus archivelog; 

RMAN>backup archivelog all delete input;


指定路径备份:RMAN>backup database format ‘/u02/dbfull_%U‘;



RMAN备份之catalog:

catalog有脚本创建功能,比nocatalog功能强大

创建catlog用户:

SQL>create tablespace cataorcl datafile ‘/u01/oracle/oradata/cataorcl.dbf‘ size 100m autoextend on;

SQL>create user cataorcl identified by cataorcl default tablespace cataorcl;

SQL>grant connect,recovery_catalog_owner to cataorcl;


连接远程数据库cataorcl:

RMAN>rman target sys/oracle@orcl catalog cataorcl/cataorcl@orcl

RMAN>create catalog tablespace cataorcl;

RMAN>register database;


创建脚本:

RMAN>create script level0{

allocate channel a1 type disk;

allocate channel a2 type disk;

backup incremental level 0 database;

release channel a1;

release channel a2;

}


打印脚本:

RMAN>print script level0;


执行脚本:

RMAN>run { execute script level0; }


每次需要指定catalog方式登录。登录后需要与目标数据库同步信息:

resync catalog;或者report schema;



RMAN恢复:

数据文件丢失损坏,可以脱机的在线恢复,不能脱机的在mount阶段恢复

$rman target sys/oracle@orcl nocatalog等于rman target /

RMAN>backup database;

RMAN>sql ‘alter tablespace users offline immediate‘;

RMAN>restore tablespace users;

RMAN>recover tablespace users;

RMAN>sql ‘alter tablespace users online‘;



不能脱机的在mount阶段恢复(例如undo表空间没了):

SQL>shutdown immediate;

SQL>startup mount;

SQL>sqlplus / as sysdba

SQL>select name.status.enabled from v$datafile;  //需要路径或者编号来恢复文件 u01/oracleoradata/orcl/undotbs01


RMAN>restory datafile ‘/u01/oracleoradata/orcl/undotbs01‘;

RMAN>recover datafile ‘/u01/oracleoradata/orcl/undotbs01‘;

RMAN>alter database open;



查看标签,可以通过编号来恢复数据库或者表空间:

RMAN> list backupset summary;


通过编号来恢复数据库数据库:

SQL>shutdown immediate;

SQL>startup mount;

RMAN>restore database from tag TAG20140725T104645;

RMAN> recover database from tag TAG20140725T104645;

RMAN> alter database open;



不完全恢复,恢复之前先做一个完全备份

基于时间来恢复数据库,resetlogs之后需要重新做全库备份

RMAN>run {

allocate channel a1 type disk;

allocate channel a2 type disk;

set until time = ‘2014-06-08 10:30:10‘;

restore database;

recover database;

alter database open resetlogs;

}


数据文件改名:

SQL>slect name from v$datafile;


RMAN>run {

allocate channel a1 type disk;

sql ‘alter tablespace users offline‘;

set newname for datafile ‘/u01/oracleoradata/orcl/users01.dbf‘ to ‘/u01/oracleoradata/orcl/users.dbf‘;

restore tablespace users;

switch datafile ‘/u01/oracleoradata/orcl/users.dbf‘;

recover tablespace users;

sql ‘alter tablespace users online‘;

}


基于时间的不完全恢复:

$NLS_LANG=american

$NLS_DATE_FORMAT=‘yyyy-mm-dd:hh24:mi:ss‘

SQL>alter system set nls_date_format=‘yyyy-mm-dd:hh24:mi:ss‘


RMAN>run {

allocate channel a1 type disk;

allocate channel a2 type disk;

set until time = ‘2014-06-08:10:30:10‘;

restore database;

recover database;

alter database open resetlogs;

release channel a1;

release channel a2;

}


恢复参数文件:

ls /u01/oracle/flash_recovery_area/ORCL/

RMAN>startup nomuont;

RMAN>restore spfile from ‘/u01/oracle/flash_recovery_area/ORCL/

autobackup/a.bkp‘;


恢复控制文件:

RMAN>startup force nomuont;

RMAN>restore controfile  from ‘/u01/oracle/flash_recovery_area/ORCL/

autobackup/a.bkp‘;

RMAN>alter database mount;

RMAN>restore database;

RMAN>recover database;

RMAN> alter database open;



本文出自 “卡卡西” 博客,请务必保留此出处http://whnba.blog.51cto.com/1215711/1602568

RMAN备份和恢复 Oracle10g学习系列(9)