Oracle 备份之RMAN使用

RMAN

RMAN只能在Archive log模式下进行,因为备份模式只能是热备份。 
--经测试,非归档模式在mount 层次下,noarchive也可以备份。但open状态是不可以备份活动数据文件的。
RMAN只会备份有用的数据块。
通过以下方式连接目标库:

C:\Users\anker>rman

RMAN> connect target sys/system@orcl

连接到目标数据库: ORCL (DBID=1325028359)

备份整个数据库 backup database;


备份完成的文件存放在
%db_recovery_file_dest%\ORA_SID\BACKUPSET\YYYY-MM-DD\*.bkp
备份的内容包括:
数据文件(不包括临时文件)
控制文件
参数文件(SPFILE)


--不会备份重做日志文件,因为此三个文件在open时是活动的。所以备份在线重做日志文件没有意义。

在备份时打印的文字描述,分配的通道对应Oracle的一个session,也就是一个进程/线程在执行。
使用run命令,实现多个功能顺序执行。
run
{
allocate channel cl device type disk;--备份的内容放在磁盘上
allocate channel c2 device type disk;--第二个通道也放在磁盘
backup as compressed backupset database;--以压缩的方式备份
}

当多个通道同时备份数据文件时,各个数据文件的scn会不一致。
打印的日志如下:
可以看出,此次指定的通道算是私有通道,执行之前先把上次的公有通道释放掉。两个私有通道并行执行。通道的执行数量要与磁盘驱动器(磁盘写头)相等,若大于也没有用处。
备份完成之后,私有通道也会释放掉。


释放的通道: ORA_DISK_1
分配的通道: cl
通道 cl: sid=158 devtype=DISK
分配的通道: c2
通道 c2: sid=139 devtype=DISK
启动 backup 于 23-6月 -13
通道 cl: 启动压缩的全部数据文件备份集
通道 cl: 正在指定备份集中的数据文件
输入数据文件 fno=00003 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00004 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
输入数据文件 fno=00002 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
通道 cl: 正在启动段 1 于 23-6月 -13
通道 c2: 启动压缩的全部数据文件备份集
通道 c2: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00005 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
通道 c2: 正在启动段 1 于 23-6月 -13
通道 cl: 已完成段 1 于 23-6月 -13
释放的通道: cl
释放的通道: c2

--查看备份集
list backup;

--以下是打印的结果,以下信息来自于控制文件
BS Key关键字指的Oracle本身产生的ID,标示备份集。
Type指的是全量备份(Full)还是增量备份。
LV指的增量备份的级别,全量(FUll)默认为空
Device Type指的备份机的存放位置
Elapsed Tie 指备份时花费的时间。
Completion TIme 指备份集完成的时间点。
BP Key指的备份片的关键字,一个备份集可以包含多个备份片
Status指的备份片状态
Compressed指是否备份了。
Tag: 用于标示被备份是否是一致性生产的。恢复的时候会用到tag
Piece Name指备份文件的名称
Ckp SCN指最后checkpoint的 SCN号
Ckp TIme 最后的checkpoint SCN对应的时间
NAME 备份文件名称

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
28      Full    104.72M    DISK        00:00:42     2013/06/23 21:28:27
        BP Key: 28   Status: AVAILABLE  Compressed: YES  Tag: TAG20130623T212745
        Piece Name: F:\ORACLE\PRODUCT\10.2.0\DB_1\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_06_23\O1_MF_NNNDF_TAG20130623T212745_8WF
  List of Datafiles in backup set 28
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  1       Full 12713208   2013/06/23 21:27:46 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
  5       Full 12713208   2013/06/23 21:27:46 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF


--清掉已物理删除的备份集

crosscheck backupset;
delete expired backupset;

--清楚已物理删除的archivelog
crosscheck archivelog all;
delete expired archivelog all;



--修改rman中,日期显示格式
export NLS_DATE_FORMAT='yyyymmdd hh24:mi:ss';
set nls_date_format=yyyy/mm/dd hh24:mi:ss--Windows环境设置(此处注意不能有引号)


--设置英文模式格式,修改的是环境变量,注册表中也包含此信息
set nls_lang=american_

--备份恢复的过程
--查看备份的文件
list backup of database;--备份的数据文件
list backup of controlfile;--备份的数据文件
list backup of datafile;--备份的数据文件

RMAN> restore preview database;--预览oracle指定的恢复文件,默认是使用最近的备份文件。只是针对数据文件
RMAN> restore database;--恢复文件,注意若备份时包括多个数据文件,会全部重新覆盖掉。不会恢复控制文件及spfile等。
RMAN> recover database; --利用归档日志恢复数据,即可以打开数据库,需要注意的地方。rman恢复会优先使用重做归档日志。

RMAN> restore database from tag xxxxxxx;--指定恢复用的备份集文件

在rman中执行sql,但不返回结果。
sql'select * from table T';


--备份表空间
backup tablespace users,DW
--备份数据文件
backup datafile 4,3
--备份控制文件,current指的controlfile的状态。
backup current controlfile;
--备份spfile
backup spfile;
--备份归档日志
backup archivelog all;--备份所有归档日志。每次备份时,会先切换并归档下当前日志。
backup archivelog all not backed up;--备份尚未备份的日志文件。会跳过已备份的文件。
backup archivelog all delete all;--备份后,删除重做归档日志。

--rman 不能备份临时文件,不能备份在线重做日志文件。

--删除所有的备份文件
delete backup

delete noprompt backup;--无提示确认直接删除所有的文件

删除备份集

delete backupset 19;--BS KEY




show all;--显示所有的参数

CONFIGURE RETENTION POLICY TO REDUNDANCY 1;--配置保留备份的策略:1
report obsolete;--输出所有的废弃的备份集
delete obsolete;--删除所有的已废弃的备份集



--自动备份数据库,并删除已废弃的备份集,且会自动删除无用的归档日志
--备份之后,所有的之前的备份集都变无效了。
--切换日志,然后将日志备份
run
{
backup database;
delete noprompt obsolete;
backup archivelog all;
}


configure retention policy to recovery window of 7 days;
--保留备份策略为7天
--我理解的保存7天指的对于当前时间,可以通过备份集最早可以还原到7天之前的数据。

CONFIGURE RETENTION POLICY REDUNDANCY 3;
--意味着当备份完第三次后,当备份第四次时,第一次的备份结果会被标示为废弃。

CONFIGURE RETENTION POLICY CLEAR
--可以使用命令恢复策略为默认值。

CONFIGURE RETENTION POLICY TO NONE
--此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃

CONFIGURE BACKUP OPTIMIZATION ON
--默认值会为#缺省
--备份时,已备份的东西不会再进行备份

 list backup of archivelog sequence 344
--查看备份的archivelog,指定序号

 CONFIGURE DEFAULT DEVICE TYPE TO DISK;
--Oracle 备份到磁盘

CONFIGURE CONTROLFILE AUTOBACKUP OFF;

--默认只要备份涉及system表空间,就会自动备份控制文件和spfile。当设置为on时,不管备份什么,都会备份控制文件和spfile。
备份的控制文件和spfile文件会存放在另外一个为AUTOBACKUP的目录里面。

CONFIGURE CONTROLFILE AUTOBACKUP CLEAR;
--去除配置,还原默认值。


CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'
--设置控制文件的备份的格式,当指定备份的目录时,此参数才会起作用。比如
BACKUP DATABASE FORMAT  'D:\DB_BACKUP\%d_%T_%U.bak'

%d=数据库的名称
%T=日期时间
%U=生成唯一的数字

alter system set db_recovery_file_dest='';
--当设置为空时,备份时会默认存放在此目录(windows)。F:\oracle\product\10.2.0\db_1\database


CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
--默认是启动一个通道去备份

CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

--修改为2个。那么有两个通道去备份,实际上也是两个线程同时备份。

CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO
有三个参数
COPY 拷贝文件。--选择此类型后,备份的文件会存放在F:\oracle\product\10.2.0\db_1\flash_recovery_area\ORCL\DATAFILE(Windows)下面。
BACKUPSET 普通的文件
COMPRESSED BACKUPSET 压缩文件

COPY的话,相当于生成一个文件备份。下面的copy语句命令:

COPY datafile 4 to 'c:\temp\user01.dbf';


CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
备份时,生成的备份个数。当设置为2时,进行备份的时候,会遇到下面的错误:ORA-19806: 在恢复区内不能进行双重备份
恢复区指的db_recovery_file_dest的目录。
当指定其他目录时,不会出现这个错误:

backup datafile 4 format 'C:\temp\data_file4_%U_%T.BAK';


CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; 
针对归档日志的备份份数。

CONFIGURE MAXSETSIZE TO UNLIMITED;
设置备份集的最大大小。
一个数据文件只能存放在一个备份文件,所以此大小要至少比最大的数据文件要大,否则无法备份。
当设置此值时,备份的时候会生成多个文件。

REPORT SCHEMA
显示所有的数据文件和临时文件

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
设置备份的加密

CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'F:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\SNCFORCL.ORA';
控制文件的快照文件
备份时,还是要找个控制文件的静止时间,但控制文件需要一直读写中。
当备份控制文件时,实际上备份的是备份的控制文件的快照,当备份完之后,再把控制文件与此快照进行下同步。
此命令是设置快照控制文件的位置。
----------------------------------------------------------------------------------

Nocatalog方式 就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,
控制文件里面会有越来越多的备份信息。因此,当使用rman nocatalog方式备份时,备份controlfile是非常重要的。
由于nocatalog时利用controlfile存放备份信息,建议将Oracle参数文件中的CONTROL_FILE_RECORD_KEEP_TIME值加大
(缺省为7天), 参数在$ORACLE_HOME/dbs/initSID.ora中,该参数control_file__record_keep_time设置备份信息保存时间,到规定时间就自动清除以前的备份信息。



RMAN的备份的信息是保存在本机的控制文件中。那么当控制文件出现问题后,也就无法使用rman的备份集进行恢复。

那么oracle建议把同时要把备份信息放在其他服务器一份。那么当控制文件出现问题,可以从其他服务器进行恢复。
备份的数据库成为target DB,另外一个数据库称为catalog DB。

在catalog DB中创建用户

create user rman identified by rman;
grant connect,resourc,recovery_catalog_owner to rman;

在target DB上执行,或者catalog db,或者其他DB
rman target sys/system@orcl catalog rman/rman@catalog

create catalog;--在catalog db中创建很多对象(表等等),会把target中的控制信息复制到这些对象中。

register database;--将target db中的控制信息放入catalog db
--从catalog db中 db表中可以查询到target db的记录
select * from rman.db;

resync catalog;--重新同步备份信息

show parameter control;

list backup;--若连接上catalog,则信息直接从catalog中读取,而不是target db的控制文件。

--删除控制文件,重建控制文件
alter database backup controlfile to trace;
--会在udump文件夹中创建控制文件的脚本

shutdown immediate

startup nomount
--重启到nomount状态,把需要的内容进行创建
	

catalog;
(备份文件还在)会把在控制文件中丢失的备份信息,读到catalog中

catalog backuppiece 'datafile position'
指定要恢复的备份片,在nocatalog模式下,也可以恢复。

-----------------------------------------------------------------------------------
rman acb;--输入错误显示rman的命令
rman cmd.file
执行cmd命令文件


一个简单的cmd文件例子
dbbak.sql
run
{
backup as compressed backupset backup;
delete noprompt obsolete;
backup archivelog all;
}

创建bat文件,注意文件命名不写成rman.bat。因为有可能会造成死循环。
rman target sys/system@orcl cmdfile = 'c:\dbbak.sql' log = 'c:\backup.log' append checksyntax
log指定日志文件的位置
append指定日志是追加的方式
checksyntax指检查语法,但并不执行备份。只是确保下语法的正确性。真正备份的命令文件,需要去掉checksyntax。

在Oracle RMAN创建执行备份的脚本,此功能只能在catalog模式下才能执行。
create script scr1
{
backup as compressed backupset database;
delete noprompt obsolete;
backup archivelog all;
}

list script names;
打印目录中存储的脚本列表
print script scr1;
打印脚本内容

run
{
execute script scr1;
}
执行脚本scr1

print script scr1 to file 'c:\a.txt';
把脚本scr1的内容写到c盘a.txt文件中。

replace script scr1 from file 'c:\a.txt';
将c盘的a.txt文件中的内容替换掉scr1脚本

创建全局脚本
create global script gsrc1
{
backup as compressed backupset database;
delete noprompt obsolete;
backup archivelog all;
}
全局脚本指当连接到catalog库的target数据库,都能访问到的script


查看全局脚本
list global script names;

run
{
execute global script gscr1;
}

delete global script gscr1;
删除全局脚本

------------------------------------------------------------------------------------
rman的增量备份

增量备份分两种:
Differential versus Cumulative

Level 0:完全备份

backup incremental level=0 database;

Level 1:增量备份 differential
A differential incremental backup contains all blocks changed since the last incremental backup.

backup incremental level=1 database;

Level 1c:累积备份 cumulative
A cumulative incremental backup contains all blocks changed since the last level 0 incremental backup.

backup incremental level=1 Cumulative database;

alter system archive log current;--只能用在归档模式,用于手动归档。
alter system switch logfile;--切换日志,在归档模式下,就会立马进行归档。

查看增量备份的日志打印,Incr为增量备份,0指的为0级备份.Cumulative与differential从日志打印是看不出的。

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
77      Incr 0  486.47M    DISK        00:01:05     09-7月 -13
        BP 关键字: 79   状态: AVAILABLE  已压缩: NO  标记: TAG20130709T215634
段名:F:\ORACLE\PRODUCT\10.2.0\DB_1\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_07_09\O1_MF_NNND0_TAG20130709T215634_8XR5NM4F_.BKP
  备份集 77 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间   名称
  ---- -- ---- ---------- ---------- ----
  1    0  Incr 13351366   09-7月 -13 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
  5    0  Incr 13351366   09-7月 -13 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF

实验,周一插入,增量备份 sys.tt 5
实验,周二插入 sys.tt 6
周三 累积备份 7
周四 增量备份 8


list backup of database summary;
--只列出备份的统计信息


restore 貌似只针对0级备份或全备份的文件,进行恢复数据库。
而recover针对当前数据库,使用增量文件或者日志文件进行恢复。


相比rman,其他的备份缺点
1.需要shutdown或者offline
2.热备份,生成的日志特别多。
3.需要OS copy

rman解决了上面的问题,它使用专用的内部进程去备份。
另外一个RMAN的优势,解决数据块的损坏:

data block corrupted

使用以下命令检查数据文件是否存在损坏的块:
dbv file=data file position

打印如下:

标记为损坏的总页数: 0--标示数据块损坏的个数
打印内容包括损坏的块



rman中检查坏的数据块:
backup validate database;
检查后的损坏的块存放在下面的视图中:v$database_block_corruption

使用rman恢复损坏的块:
blockrecover datafile 4 block 730;--此命令在9i之后才支持

当修复后,v$database_block_corruption视图中的数据不会更新,只有重新执行下面的命令
backup validate database;

当存在corrupt的块时,rman备份此数据文件不会成功,会提示错误。oracle默认0坏块的情况下才能
备份。
通过以下的命令设置允许存在1个坏块的情况下,进行备份。
run
{
set maxcorrupt for datafile 4 to 1;
backup datafile 4;
}

猜你喜欢

转载自yangeoo.iteye.com/blog/1910668