##################################
rman实战
##################################
#以下是一个实战的rman备份脚本
BACKUP AS COMPRESSED BACKUPSET SKIP INACCESSIBLE FILESPERSET 10 DATABASE PLUS ARCHIVELOG FILESPERSET 20 DELETE ALL INPUT;
COMPRESSED: 表示压缩的备份。
SKIP INACCESSIBLE:表示跳过不可读的文件。我们知道一些offline的数据文件只要存在于磁盘上就仍然可被读取,但是可能有些文件已经被删除或移到它处造成不可读,加上这个参数就会跳过这些文件。
FILESPERSET 10: 表示一个备份集中有多少个文件,这个就是一个备份集有10个文件。
#以下是用来检验filesperset 2这个参数的意义
BACKUP AS COMPRESSED BACKUPSET SKIP INACCESSIBLE FILESPERSET 2 DATABASE;
rman恢复:
明确两个概念:数据库修复(Restore)和数据库恢复(Recover)
restore:是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置
recover:是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分redo,将数据库恢复到指定的时间点.
(前提是:所有重做日志文件都在,包括在线和归档的)
1.对数据库进行完全介质恢复
(1)启动数据库到加载状态:
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
(2)执行恢复操作
RMAN> RESTORE DATABASE;
(3)打开数据库
RMAN> ALTER DATABASE OPEN;
2.恢复表空间
(1)启动数据库到加载状态
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
(2)进行恢复操作
RMAN> SQL 'ALTER TABLESPACE HDMEMBER OFFLINE IMMEDIATE';
RMAN> RESTORE TABLESPACE HDMEMBER;
RMAN> RECOVER TABLESPACE HDMEMBER;
RMAN> SQL 'ALTER TABLESPACE HDMEMBER ONLINE';
(3)打开数据库
RMAN> ALTER DATABASE OPEN;
3.恢复数据文件
(1)启动数据库到加载状态
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
(2)进行恢复操作
RMAN>SQL 'ALTER DATABASE DATAFILE 5 OFFLINE';
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
RMAN>SQL 'ALTER DATABASE DATAFILE 5 ONLINE';
(3)打开数据库
RMAN> ALTER DATABASE OPEN;
提示:查询对应的数据文件,表空间和数据文件序号:
附个SQL:用来查询数据文件,临时文件与表空间对应及数据文件序号:
set linesize 999; select ts.tablespace_name, df.file_name, df.file_id, tf.file_name from dba_tablespaces ts, dba_data_files df, dba_temp_files tf where ts.tablespace_name = df.tablespace_name(+) and ts.tablespace_name = tf.tablespace_name(+);
示例:归档模式下,假设某数据文件丢失,恢复该数据文件
(1)造假数据
sqlplus /nolog conn member/member create table zsd(name varchar2(50)); insert into zsd values ('test1'); insert into zsd values ('test2'); insert into zsd values ('test3');
(2)关闭,删除文件,启动数据库
SQL> conn / as sysdba SQL> shutdown immediate; SQL> host $ rm -rf /data/ora11g/oradata/zsddb/hdmember01.dbf SQL> startup SQL> archive log list(查看一下是否归档)
(3)查看一下示例,并恢复数据库
select instance_name,status from v$instance set oracle_sid=zsddb rman target / RMAN> restore datafile '/data/ora11g/oradata/zsddb/hdmember01.dbf'; RMAN> recover datafile '/data/ora11g/oradata/zsddb/hdmember01.dbf'; RMAN> alter database open;
示例:丢失控制文件的恢复
SQL> shutdown immediate; SQL> host $ rm -rf /data/ora11g/oradata/zsddb/control* ##进入rman $ rman target / ##随意指定一个DBID RMAN> set dbid 3391142503 RMAN> restore controlfile from '/data/ora11g/product/11.2.0/db_1/dbs/con_c-1552557445-20130520-06'; RMAN> sql 'alter database mount'; RMAN> restore database; RMAN> recover database; RMAN> sql 'alter database open resetlogs'; ##(还必须重建临时表空间)