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;