oracle RMAN备份与恢复

时间:2022-02-14 07:47:55

rman命令的使用

连接rman

[oracle@localhost ~]$ rlwrap rman target /          

把所有的信息输出到一个文件中

[oracle@hxy archivelog]$ rlwrap rman target / log '/home/oracle/backuplog/rman_log.txt'    

注意:使用rman备份,数据库必须运行在归档模式下

在rman中可以干的事

1.启动关闭数据库
[oracle@hxy archivelog]$ rlwrap rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Fri Feb 22 16:48:44 2013
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database: ORCL (DBID=1334298584)
RMAN> shutdown immediate
using target database control file instead of recovery catalog
database closed
database dismounted
Oracle instance shut down
RMAN> startup
connected to target database (not started)
Oracle instance started
database mounted
database opened
Total System Global Area     314572800 bytes
Fixed Size                     1219160 bytes
Variable Size                100664744 bytes
Database Buffers             209715200 bytes
Redo Buffers                   2973696 bytes
RMAN> 
2.执行操作系统命令

RMAN> host;

[oracle@hxy archivelog]$ ls
1_32_806517848.dbf  1_33_806517848.dbf  1_34_806517848.dbf
[oracle@hxy archivelog]$ exit
exit
host command complete
RMAN> 

执行完操作系统命令后输入exit就退出到rman下

3.执行sql语句

RMAN> sql 'alter system archive log current';              //sql 单引号里名执行sql语句

sql statement: alter system archive log current                
RMAN> sql 'select sysdate from dual';
                        //rman下面不能执行select语句,但不报错
sql statement: select sysdate from dual
RMAN> 

可以用下面的方法执行select,拐个弯

RMAN> host;

[oracle@hxy archivelog]$ rlwrap sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Feb 22 17:08:09 2013
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select sysdate from dual;
SYSDATE
---------
22-FEB-13
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@hxy archivelog]$ exit
exit
host command complete
RMAN> 

两次exit退出到rman下

名词解释:

rman备份分为完全备份和增量备份

什么是完全备份?

完全备份就是备份数据库中的所有数据块

什么是增量备份?

增量备份分为差异增量和累计增量备份

其中,

差异增量就是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式

如果要进行级别1差异增量备份,RMAN备份在执行最后一个级别1的增量备份后所变化的数据块;如果之前没有执行过级别1的备份,就备份自执行级别0以后变化的数据块;如果也没有执行过级别0的备份,Rman就复制自文件创建以来变化的所有数据块,否则执行一个级别0的备份。

如下图,周日执行一个级别为0的增量备份,周一和周六执行级别为1的差异增量备份,即指备份自上一个备份以来变化的数据块

oracle RMAN备份与恢复

累积增量备份就是指备份自最近的级别0备份以来所变化的数据块。

oracle RMAN备份与恢复

图二中,周日对数据库执行了级别为0的备份。周一到周六执行级别为1的累积增量备份。从图中的箭头可以看出,累计增量备份是备份0级以来的数据块被修改的数据。累计增量备份增加了备份时间,但是因为恢复的时候,需要从更少的备份集中恢复数据,所以累计增量备份将比差异增量备份更节省时间。

l完全备份(Full Backup)与增量备份(Incremental Backup)

全备与增备是针对数据文件而言,控制文件和归档日志文件不能进行增量备份。当然,后两者可以做备份优化。 

l打开备份(Open Backup)或关闭备份(Closed Backup)

数据库打开状态下进行备份即是打开备份,数据库关闭状态下(加载状态)进行的备份即关闭备份。

l一致备份(Consistent Backup)与不一致备份(Inconsistent Backup)

数据库打开状态或不干净关闭状态(shutdown abort)进行的备份是不一致备份,利用不一致的备份修复数据库后还需要做数据库的恢复。在数据库干净关闭状态进行的备份是一致备份,利用一致备份修复数据库后不需要做数据库的恢复。


rman备份形式

1.镜像复制

镜像复制实际上就是数据文件、控制文件或归档文件的复制,与用户通过操作系统命令建立的文件复制实质一样,只不过RMAN是利用目标数据库中的服务进程来完成文件复制,而用户则是用操作系统命令。所以镜像复制的方式体现不出RMAN的优势,也并非我们讨论的重点,大家了解一下即可(啥?想知道镜像复制咋用?卡,问村长去~~~~~)。

 

2、备份集(Backup Sets)

备份集是通过RMAN创建的逻辑备份对象。一个备份集中可以包含多个数据文件、控制文件或归档文件。备份集在物理上是由多个备份片段组成,每个备份片段是一个操作系统文件。


使用rman进行备份

备份数据文件

RMAN> backup incremental level 0 datafile 4 format '/home/oracle/backup/datafile_%s_%t.dbf';

级别为0级,4为文件号,可以通过v$datafile中的file#查询;format后跟备份的文件

如下:

[oracle@localhost backup]$ ll
total 40556
-rw-r----- 1 oracle oinstall 41484288 Jan 16 08:28 datafile_38_804846479.dbf

备份归档日志文件
第一种方式:

RMAN> backup archivelog all format '/home/oracle/backup/arch_%s_%t.dbf';

第二种方式:

RMAN>backup database plus archivelog;

Starting backup at 22-FEB-13
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=32 recid=1 stamp=808067807
input archive log thread=1 sequence=33 recid=2 stamp=808067858
input archive log thread=1 sequence=34 recid=3 stamp=808067891
input archive log thread=1 sequence=35 recid=4 stamp=808074299
input archive log thread=1 sequence=36 recid=5 stamp=808084653
input archive log thread=1 sequence=37 recid=6 stamp=808085051
channel ORA_DISK_1: starting piece 1 at 22-FEB-13
channel ORA_DISK_1: finished piece 1 at 22-FEB-13
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2013_02_22/o1_mf_annnn_TAG20130222T200411_8lgqox1s_.bkp tag=TAG20130222T200411 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:09
Finished backup at 22-FEB-13


Starting backup at 22-FEB-13
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/opt/oracle/oradata/orcl/system01.dbf
input datafile fno=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf
input datafile fno=00002 name=/opt/oracle/oradata/orcl/undotbs01.dbf
input datafile fno=00005 name=/opt/oracle/oradata/orcl/orcltab1.dbf
input datafile fno=00006 name=/opt/oracle/oradata/orcl/orcltab2.dbf
input datafile fno=00007 name=/opt/oracle/oradata/orcl/orcltab3.dbf
input datafile fno=00008 name=/opt/oracle/oradata/orcl/orcltab4
input datafile fno=00009 name=/opt/oracle/oradata/orcl/orcltab5
input datafile fno=00004 name=/opt/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 22-FEB-13
channel ORA_DISK_1: finished piece 1 at 22-FEB-13
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2013_02_22/o1_mf_nnndf_TAG20130222T200420_8lgqp6j9_.bkp tag=TAG20130222T200420 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:05
Finished backup at 22-FEB-13


Starting backup at 22-FEB-13
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=38 recid=7 stamp=808085186
channel ORA_DISK_1: starting piece 1 at 22-FEB-13
channel ORA_DISK_1: finished piece 1 at 22-FEB-13
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2013_02_22/o1_mf_annnn_TAG20130222T200626_8lgqt2pl_.bkp tag=TAG20130222T200626 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 22-FEB-13


Starting Control File Autobackup at 22-FEB-13
piece handle=/opt/oracle/flash_recovery_area/ORCL/autobackup/2013_02_22/o1_mf_n_808085187_8lgqt4l0_.bkp comment=NONE
Finished Control File Autobackup at 22-FEB-13

第一种方式和第二种方式的区别:

BACKUP.....PLUSARCHIVELOG命令在备份过程中会依次执行下列步骤:

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中方式

1.RMAN> configure controlfile autobackup on;--自动备份控制文件置为on状态,将自动备份控制文件和参数文件

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

2.对编号为1的数据文件,即SYSTEM表空间的数据文件做备份时,RMAN也会自动对控制文件做备份。

3.RMAN> backup current controlfile;----单独备份控制文件和参数文件

在备份数据文件的同时备份控制文件

4.RMAN> backup datafile 4 include current controlfile;

备份参数文件

RMAN> backup spfile format '/home/oracle/backup/spfile_%t_%s.dbf';

对数据库进行备份

0级备份:

RMAN> backup incremental level 0 database;

1级差异

RMAN> backup incremental level 1 database;

1级累积

RMAN> backup cumulativeincremental level 1 database;

备份表空间

RMAN> backup tablespace users format '/home/oracle/backup/tabs.bmp';
Starting backup at 22-FEB-13
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00004 name=/opt/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 22-FEB-13
channel ORA_DISK_1: finished piece 1 at 22-FEB-13
piece handle=/home/oracle/backup/tabs.bmp tag=TAG20130222T190717 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 22-FEB-13
Starting Control File Autobackup at 22-FEB-13
piece handle=/opt/oracle/flash_recovery_area/ORCL/autobackup/2013_02_22/o1_mf_n_808081639_8lgnc7cv_.bkp comment=NONE
Finished Control File Autobackup at 22-FEB-13

查看

RMAN> list backup of tablespace users;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1       Incr 0  614.22M    DISK        00:02:11     22-FEB-13      
        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20130222T161749
        Piece Name: /home/oracle/backup/full0.bmp
  List of Datafiles in backup set 1
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  4    0  Incr 499049     22-FEB-13 /opt/oracle/oradata/orcl/users01.dbf
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
3       Incr 1  5.84M      DISK        00:01:14     22-FEB-13      
        BP Key: 3   Status: AVAILABLE  Compressed: NO  Tag: TAG20130222T181716
        Piece Name: /home/oracle/backup/full1.bmp
  List of Datafiles in backup set 3
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  4    1  Incr 504996     22-FEB-13 /opt/oracle/oradata/orcl/users01.dbf
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
5       Full    368.00K    DISK        00:00:01     22-FEB-13      
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: TAG20130222T190105
        Piece Name: /home/oracle/backup/tbs.bmp
  List of Datafiles in backup set 5
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  4       Full 506969     22-FEB-13 /opt/oracle/oradata/orcl/users01.dbf
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
7       Full    368.00K    DISK        00:00:00     22-FEB-13      
        BP Key: 7   Status: AVAILABLE  Compressed: NO  Tag: TAG20130222T190717
        Piece Name: /home/oracle/backup/tabs.bmp
  List of Datafiles in backup set 7
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  4       Full 507197     22-FEB-13 /opt/oracle/oradata/orcl/users01.dbf

建立冗余备份(来自三思笔记)

RMAN提供了一种更谨慎的备份策略:Duplexed方式备份,其实质即是在生成备份集的同时,向指定位置生成指定份数(最大不超过4份)的备份集复制,以避免在灾难性事故时数据库损坏和备份丢失的情况下导致完全崩溃,提高备份可用性。当然,这是人类美好的愿意,对于那些没有异机异地备份条件的,假如机房发生火灾、地震之类大灾难,就算dba把备份文件复制了100份也照样玩完,上述是个假设,万勿对号入座,火灾、地震也不是哪都会发生地,大家好好活着,别害怕。

RMAN中提供了三种方式实现Duplexed方式备份:

1、在RMAN中执行BACKUP命令时显式指定COPIES参数。例如:

RMAN> BACKUP COPIES 3 DATABASE;

上述命令将会在全库备份的同时,自动生成当前备份集的2份拷贝到默认备份目录。

 

2、在RUN{}命令块中利用SET BACKUP COPIES命令为该命令块中所有的BACKUP命令设置Duplexed方式,例如:

RMAN> RUN{

2>SET BACKUP COPIES 2;

3>BACKUP DEVICE TYPE DISK FORMAT 'D:\BACKUP1\%U','D:\BACKUP2\%U'

4>TABLESPACE USERS,SALES;

5>}

上述命令将生成两份备份集,分别存储到d:\backup1和d:\backup2目录。

 

3、通过CONFIGURE ..... BACKUP COPIES命令设置预定义的备份Duplexed方式。

CONFIGURE ...BACKUP COPIES命令可以为指定的设备类型设置默认的备份拷贝数量。这个配置仅适用于数据文件与归档重做日志文件和备份,并且,只有在使用自动分配的通道时才能够使用CONFIGURE ... BACKUP COPIES命令设置的配置。例如:

RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;

RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;

RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE disk TO2;

上述命令将disk设置上数据文件与归档文件的拷备数量设置为2,当再执行BACKUPDATABASE备份时,即会自动生成2份数据文件的备份集。


举例:rman备份策略

如下图,进行备份策略,一年中对数据库的备份;每天做一次4级备份,每周做一次3级备份,每月一次2级备份,每季度一次1级备份,每年一次全备份

oracle RMAN备份与恢复

说明:备份级别1,2,3,4只是为了设计一个策略而比较的一种方式,相当

于一个标记

1写脚本

全备份脚本full0.src

run{
allocate channel t01 type disk format '/home/oracle/backup/full0_%t_%s.dbf';
backup
incremental level 0
skip inaccessible
tag hot_full_lcro
filesperset 2
database include current controlfile;
release channel t01;
}

一级差异备份脚本inc1.src

run{
allocate channel t01 type disk format '/home/oracle/backup/full0_%t_%s.dbf';
backup
incremental level 1
skip inaccessible
tag hot_inc1_lcro
database include current controlfile;
release channel t01;
}

二级差异备份脚本inc2.src

run{
allocate channel t01 type disk format '/home/oracle/backup/full0_%t_%s.dbf';
backup
incremental level 2
skip inaccessible
tag hot_inc2_lcro
database include current controlfile;
release channel t01;
}

3级差异,4级差异同上....

2.写shell脚本,只要执行此脚本即可进行rman备份,并将信息输入到full0.log文件中

full0.sh

#!/bin/bash
su - oracle -c 'rman target / cmdfile=/home/oracle/full0.src>>/home/oracle/full0.log'
同样写好1,2,3,4级备份的shell脚本,inc1.sh,inc2.sh,inc3.sh,inc4.sh

3.添加计划任务

[oracle@localhost ~]$ crontab -e
0 0 1 1 * /home/oracle/full0.sh     ---元旦
0 0 1 3,6,9 *  /home/oracle/inc1.sh    ----每三个月
0 0 1 * *  /home/oracle/inc2.sh   ----每月
0 0 * * 0  /home/oracle/inc3.sh   ----每周
0 0 * * * /home/oracle/inc4.sh    ----每天

使用rman进行恢复

恢复数据文件

RMAN> restore datafile 4;              //4 为文件号

注意:数据文件的mount状态下或者所属表空间为offline状态下才可以restore

数据文件的状态有:online,offline,recovery

恢复控制文件

RMAN> restore controlfile from '/opt/oracle/product/10.2.0/dbs/cntrllcro.dbf';           //路径可以查看备份日志

RMAN> restore database;

RMAN> recover database;

SQL> alter database openresetlogs;               // 恢复控制文件启动数据库需要重置日志文件

恢复参数文件

如果参数文件损坏或者丢失了,进行参数文件的恢复

1.关闭数据库

2.启动到nomount状态

编辑一个pfile,为了能启动到nomount状态

方法一,oracle用户下/opt/oracle/product/10.2.0/dbs下有一个模板init.ora

修改三处内容即可启动到nomount状态(1)修改db_name=...(2)修改控制文件的路径:control_file=“... ”(3)修改共享池的大小:shared_pool_size = 5000000

方法二,oracle在/opt/oracle/admin/lcro($ORACLE_BASE/admin/SID)  有一个pfile文件夹,里面有pfile的镜像

方法三,在rman下即可启动到nomount状态(推荐)

3.恢复参数文件

RMAN> restore spfile from '/home/oracle/backup/spfile.dmp';          //from路径查看备份日志

4.在sqlplus下启动到nomount状态下了可以

对数据库进行完全介质恢复

过程有三个步骤:

1、启动数据库到加载状态

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT;

2、执行恢复操作(记的我们刚说过的,恢复分两步,有先有后的。)

  RMAN> RESTORE DATABASE;

  RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP; 

  注意:DELETEARCHIVELOGS和SKIPTABLESPACE两个参数是可选择的,作用如下:

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

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

3、打开数据库

  RMAN> ALTER DATABASE OPEN;

  此处需要注意的一点是,如果你的数据库并非处于归档模式,那么必须使用ALTER DATABASE OPEN RESETLOGS来打开数据库,因为RMAN会认为在非归档模式下是一个不一致的备份,执行resetlogs之后,oracle将会把scn重新置为0。

恢复表空间

同样也可以分成三个步骤:

1、启动数据库到加载状态

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT; 

2、进行恢复操作,在恢复之前,如果需要被恢复的表空间未处于脱机状态,需要通过alter tablespace ... Offline语句将其置为脱机:

RMAN> SQL 'ALTER TABLESPACE jweb OFFLINE IMMEDIATE';

RMAN> RESTORE TABLESPACE jweb;

RMAN> RECOVER TABLESPACE jweb;

RMAN> SQL 'ALTER TABLESPACE jweb ONLINE';

3、打开数据库

  RMAN> ALTER DATABASE OPEN;

删除备份

用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RMAN资料库中生成RMAN备份记录,并且RMAN备份记录被存放在目标数据库的控制文件中,如果配置了恢复目录,那么该备份记录也会被存放到恢复目录中。

1、删除陈旧备份

当使用RMAN执行备份操作时,RMAN会根据备份冗余策略确定陈旧备份。     

RMAN> delete obsolete;

2、删除EXPIRED备份

执行crosscheck命令核对备份集,那么会将该备份集标记为EXPIRED状态。为了删除相应的备份记录,可以执行delete expiredbackup命令。     

RMAN> delete expired backup;

3、删除EXPIRED副本

RMAN> delete expired copy;

4、删除特定备份集

RMAN> delete backupset 19;

5、删除特定备份片

RMAN> delete backuppiece 'd:\backup\DEMO_19.bak';

6、删除所有备份集

RMAN> delete backup;

7、删除特定映像副本

RMAN> delete datafilecopy 'd:\backup\DEMO_19.bak';

8、删除所有映像副本

RMAN> delete copy; 

9、在备份后删除输入对象

RMAN> delete archivelog all delete input;

RMAN> delete backupset 22 format =''d:\backup\%u.bak'' delete input;