RMAN 일반 작업

1.rman 입력

(1)로컬 데이터베이스에

[oracle@oracle-n1~]$ rman 대상 /

(2)원격 데이터베이스에 액세스

[oracle@oracle-n1~]$ rman 대상 zsd/zsd@zsddb_1.9

(3)로그 기능 사용

[oracle@oracle-n1 로그]$ rman 대상 / msglog /data/backup/logs/full_dbbackup_`date +%y%m%d`.log

2.rman基础命令

(1)启动关闭数据库

RMAN> 즉시 종료

RMAN> 시작

(2)执行操作系统命令

RMAN> 네트워크가 실행될 때 제거

(3)执行SQL语句

RMAN> SQL ‘ALTER SYSTEM SWITCH LOGFILE’;

需要注意的一点是rman中的sql环境不能执行SELECT语句,就算执行不报错也不出结果

RMAN> SQL ‘select * from member.test’;

sql statement: 고르다 * from member.test (可以看出没有任何数据显示)

(4)查看默认RMAN配置

RMAN>show all;

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 设置的保留策略冗余度为1

CONFIGURE BACKUP OPTIMIZATION OFF; # default 备份优化为off

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 默认的配置通道为磁盘,如果是sbt就为磁带设备

CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default 默认配置controlfile不自动备份

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’;

# default controlfile自动备份的位置

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;

# default 备份类型为backupset,备份类型的并行度为1

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default 数据文件备份的拷贝为1

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;

# default 归档日志文件备份的拷贝为1

CONFIGURE MAXSETSIZE TO UNLIMITED; # default 备份集大小不设上限

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default 数据库加密技术为off

CONFIGURE ENCRYPTION ALGORITHM ‘AES128′; # default 数据库加密算法’AES128

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default 归档日志的删除策略为NONE

CONFIGURE SNAPSHOT CONTROLFILE NAME TO

‘/data/ora11g/product/11.2.0/db_1/dbs/snapcf_zsddb.f’;

# default controlfile的快照命名

为’/data/ora11g/product/11.2.0/db_1/dbs/snapcf_zsddb.f

(5)修改默认RMAN参数设置

#configure retention policy to recovery window of 7 일;

#configure controlfile autobackup on;

#configure controlfile autobackup format for device type disk to ‘/data/backup/rman/con_%F’;

3.rman基本备份命令

(1)对数据库进行备份

* 备份数据库

RMAN>BACKUP DATABASE;

노트:也可以指定备份的位置:RMAN> BACKUP DATABASE FORMAT ‘/data/backup/rman/bak_%U’;

* list命令查看刚刚创建的备份信息

RMAN>list backup of database;

(2)对表空间进行备份

* 备份表空间

RMAN>backup tablespace HDMEMBER;

* 通过LIST BACKUP 查看一下备份

RMAN>list backup of TABLESPACE HDMEMBER;

(3)备份指定数据文件

* 查看对应的数据文件及其序号

file_name 선택,파일 아이디,dba_data_files의 tablespace_name

* 再通过BACKUP DATAFILE备份指定序号的数据文件

RMAN> BACKUP DATAFILE n;

* 通过list backup查看备份

RMAN> LIST BACKUP OF DATAFILE n;

(4)备份控制文件

* 第一种做任何备份的时候自动备份控制文件

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

* 第二种手动执行控制文件备份

RMAN> BACKUP CURRENT CONTROLFILE;

* 第三种执行BACKUP时指定INCLUDE CURRENT CONTROLFILE参数

RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;

* 查看备份的控制文件

RMAN> LIST BACKUP OF CONTROLFILE;

* 使用alter database backup controlfile备份控制文件

SQL> alter database backup controlfile to trace;

또는

SQL> alter database backup controlfile to trace as ‘/data/controlfile1.cof’; (可以查看controlfile的构成)

(5)备份归档日志文件

* 利用BACKUP ARCHIVELOG命令备份

RMAN> BACKUP ARCHIVELOG ALL;

* BACKUP过程中利用PLUS ARCHIVELOG参数备份

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

1>.运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档

2>.执行BACKUP ARCHIVELOG ALL命令备份所有已归档日志

3>.执行BACKUP命令对指定项进行备份

4>.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档

5>.对新生成的尚未备份的归档文件进行备份

* 查看已备份的归档日志片段

RMAN> LIST BACKUP OF ARCHIVELOG ALL;

4.rman其他命令

删除命令

* 删除过期备份(RMAN会根据冗余策略确定备份是否过期)

RMAN> 구식 삭제;

* 删除无效备份(通过CROSSCHECK核对备份集,若发现备份无效,rman会将该备份集标记为EXPIRED状态。)

RMAN> 만료 된 백업 삭제;

* 删除特定备份集(通过list backup选择你所要删除的备份集)

RMAN> delete backupset 12;

* 删除特定备份片

RMAN> delete backuppiece ‘/data/backup/zsd_bk.bak’;

* 删除所有备份集

RMAN> 백업 삭제;

* 删除归档目录中已备份的归档日志

RMAN> backup archivelog all delete input;

report命令

主要是用于当前备份信息分析如哪些备份已过期哪些文件该备份哪些备份不可用哪些备份可删除

* 查看过期备份

RMAN>구식 신고;

crosscheck命令

用来检查备份或归档物理文件的状态如果物理文件存在,并且控制文件(或恢复目录)中有匹配记录,

则标记该对象的状态为available(有效),如果文件已经不存在则标记该对象为expired(无效)

* 检查所有归档文件:

RMAN>크로스 체크 아카이브 모두 로그;

* 检查所有备份集:

RMAN>crosscheck backup;

rman validate命令

RMAN能够检测物理和逻辑讹误validate命令帮助保证备份文件存在于合适的位置可读取并且没有逻辑

及物理讹误

* 测试任一特定备份集

RMAN>validate backupset 9;

* 测试整个数据库和归档日志备份集

RMAN>backup validate database archivelog all;

提示

监控和验证RMAN作业

V$RMAN_STATUS视图显示所有完成作业的状态以及命令

SQL>select operation,상태,start_time,end_time from v$rman_status;

V$SESSION_LOGGOPS视图上查询估计备份的进度

SQL>select opname,to_char(start_time,’DD-MON-YY HH24:MI’)

Start of backup”,Sofar,totalwork,elapsed_seconds/60ELAPSED TIME IN

MINUTES”,ROUND(sofar/totalwork*100,2) “Percentage Completed so far

from v$session_longops where

5. 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;

RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP;

노트:DELETE ARCHIVELOGS和SKIP TABLESPACE两个参数是可选择的作用如下

DELETE ARCHIVELOGS表示RMAN将在完成恢复过程后自动删除那些在恢复过程中修复的归档日志文件

SKIP TABLESPACE跳过指定表空间比如临时表当然临时表空间即使你不跳过它也不会恢复的

(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 / sysdba로

SQL> 즉시 종료;

SQL> 네트워크가 실행될 때 제거

[oracle@oracle-n1~]$ rm -rf /data/ora11g/oradata/zsddb/hdmember01.dbf

SQL> 시작

SQL> 아카이브 로그 목록(查看一下是否归档)

3.查看一下示例,并恢复数据库

select instance_name,status from v$instance

set oracle_sid=zsddb

rman 대상 /

RMAN> restore datafile ‘/data/ora11g/oradata/zsddb/hdmember01.dbf’;

RMAN> recover datafile ‘/data/ora11g/oradata/zsddb/hdmember01.dbf’;

RMAN> 데이터베이스 열기 변경;

示例丢失控制文件的恢复

SQL> 즉시 종료;

[oracle@oracle-n1~]$ rm -rf /data/ora11g/oradata/zsddb/control*

rman 입력

rman 대상 /

随意指定一个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> 데이터베이스 복원;

RMAN> 데이터베이스 복구;

RMAN> sql ‘alter database open resetlogs’;

(还必须重建临时表空间)

本篇总结来自 http://blog.chinaunix.net/uid-26446098-id-3721661.html

답장을 남겨주세요