RMAN备份介绍

rman配置步骤:

mkdir arch

chown -R oracle.oinstall arch

mkdir rmanback

chown -R oracle.oinstall rmanback

alter system set log_archive_dest_1='LOCATION=/oracle/ora11/oradata/arch' scope=spfile;

ALTER SYSTEM SET log_archive_format='arch_%d_%r_%t_%s.log' scope=spfile;

Alter system set db_block_checking=true scope=spfile;--开启数据块检查,是否有损坏,以此保证数据块的一致性

alter database enable block change tracking using file '/oracle/ora11/oradata/ora11g/change_tracking.f';--记录数据库中块的物理位置变化,用于在增量备份时能够找到改变的数据块。

shutdown immediate;

startup mount;

alter database archivelog;

alter database open;

RMAN备份策略:

rman target sys/sys

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;--表示只要备份存在,可以恢复30天以内的数据

CONFIGURE RETENTION POLICY TO REDUNDANCY 3; --表示设置备份冗余度为3,保留最近三次完整备份

CONFIGURE CONTROLFILE AUTOBACKUP ON;--配置控制文件自动备份,做任何备份时自动备份控制文件

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/ora11/oradata/ora11g/cro_%F';--配置备份的控制文件格式

RMAN备份命令:

1对数据库进行备份

* 备份数据库

RMAN>BACKUP DATABASE;

注意:也可以指定备份的位置:RMAN> BACKUP DATABASE FORMAT '/data/backup/rman/bak_%U';

若不指定format,则会选择rman中configure channel device type disk format中的路径;

若该路径没有配置,则会选择db_recovery_file_dest 闪回恢复区参数的路径;

若该路径也没有配置,则会最终选择$oracle_home/dbs目录

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

RMAN>list backup of database;

2对表空间进行备份

* 备份表空间

RMAN>backup tablespace HDMEMBER;

注意:也可以指定备份的位置:RMAN>BACKUP TABLESPACE XXX FORMAT '/oradatab/rmanback/xxx';

* 通过LIST BACKUP 查看一下备份

RMAN>list backup of TABLESPACE HDMEMBER;

3备份指定数据文件

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

select file_name,file_id,tablespace_name from dba_data_files

* 再通过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;

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;

6rman其他命令

删除命令

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

RMAN> delete obsolete;

2>.删除无效备份(通过CROSSCHECK命令核对备份集,如果发现备份无效,rman会将该备份集标记为EXPIRED状态。)

RMAN> delete expired backup;

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

RMAN> delete backupset 12;

4>.删除特定备份片

RMAN> delete backuppiece '/data/backup/zsd_bk.bak';

5>.删除所有备份集

RMAN> delete backup;

6>.删除归档目录中已备份的归档日志

RMAN> backup archivelog all delete input;

report命令

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

查看过期备份

RMAN>report obsolete;

crosscheck命令

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

文件已经不存在,则标记该对象为expired(无效)

检查所有归档文件:

RMAN>crosscheck archivelog all;

检查所有备份集:

RMAN>crosscheck backup;

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;

--

不完全恢复表空间(基于时间点的恢复)

run{

ALLOCATE CHANNEL t1 TYPE disk;

sql 'alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"';

sql 'alter session set NLS_LANGUAGE=American';

set until time='20170123 16:00:00';

restore tablespace users;

release channel t1;

}

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;

[oracle@oracle-n1 ~]$ rm -rf /oracle/ora11/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 '/oracle/ora11/oradata/zsddb/hdmember01.dbf';

RMAN> recover datafile '/oracle/ora11/oradata/zsddb/hdmember01.dbf';

RMAN> alter database open;

示例:丢失控制文件的恢复

SQL> shutdown immediate;

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

进入rman

rman target /

随意指定一个DBID

RMAN> restore controlfile from '/oracle/ora11/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';

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

--如果是空环境,需要恢复整个数据库:

su - oracle

rman target /

shutdown immediate;

startup nomount

restore spfile from '/oracle/ora11/oradata/rman/cro_c-3943323520-20070605-08';--从备份集中恢复spfile.

shutdown immediate;

startup nomount;

restore controlfile from '/oracle/ora11/oradata/rman/cro_c-3943323520-20180505-08';--从备份集中恢复控制文件

alter database mount;

restore database;

recover database;--如果出错可以忽略

alter database open resetlogs;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180513G1IZ7D00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动