技术分享
Oracle10g数据库备份与恢复总结5-Oracle备份与恢复之物理备份-Rman备份
2020-12-28
Oracle10g备份与恢复之物理备份--Rman备份
Recovery Manager(RMAN)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。而且rman备份可以实现增量备份,需要系统管理员权限的用户才能备份,并且建议在归档模式下备份。在说明rman备份示例之前需要对rman备份用到的一些概念进行说明。
一、相关概念:
1、目标数据库:就是RMAN 进行备份与恢复的数据库。
2、恢复目录:用来保存备份与恢复信息的一个数据库上的目录,不建议创建在目标数据库上,故需要有另外一个数据库来专门存放恢复目录,增加了成本。利用恢复目录可以同时管理多个目标数据库,存储更多的备份信息,可以存储备份脚本。这里需要注意的是恢复目录是有版本的,是需要维护rman的版本的。不同rman版本要考虑兼容性问题。如果不采用恢复目录,可以采用控制文件来代替恢复目录,相对比较简单,但没有存在恢复目录时安全灵活。
3、备份集与备份片:当RMAN 进行备份时将创建一个完成的备份,包含一个到多个备份集,备份集是一个逻辑结构,包含一组的物理文件。这些物理文件就是对应的备份片。备份片是最基本的物理结构,可以产生在磁盘或者磁带上,可以包含目标数据库的数据文件,控制文件,归档日志与spfile文件。备份集与备份片有如下规定:一个数据文件不能跨越一个备份集,但是能跨越备份片。数据文件,控制文件能保存在同样的备份集上,但是不能与归档日志保存在同样的备份集上。
4、通道:通道是RMAN服务进程与I/O 设备之前读写的途径,一个通道将对应一个服务进程,在分配通道时,需要考虑I/O 设备的类型,I/O 并发处理的能力,I/O 设备能创建的文件的大小,数据库文件最大的读速率,最大的打开文件数目等因素。
现在我们知道rman备份可以运行在恢复目录下,也可以不使用恢复目录,在实际中,要根据我们对于数据的备份要求来取舍。rman工具一般也存在于windows类似目录C:\oracle\product\10.2.0\db_1\BIN下,如果配置好了应用程序的环境变量,那么可以直接命令行中输入rman即可运行。下面就演示如何运行rman工具如下图:
上图显示的只是运行了rman程序,并没有连接到数据库,实际上都是用c:\>RMAN target=sys/system@orcl nocatalog命令或c :\>RMAN target=sys/system@orcl catalog=rman/rman@test2命令来运行的。前一个命令是没有恢复目录的命令,后一个是在数据库test2上建立了恢复目录的命令。其中rman是用于管理恢复目录的用户。
二、建立恢复目录
本文说明带恢复目录的rman备份,故需要先建立恢复目录。步骤如下:
1. 用sys账户在test2数据库上建立恢复目录表空间:
SQL>CREATE TABLESPACE RMAN_TS DATAFILE 'D:\ORACLE\oradata\RMAN.DBF' SIZE 20M;
2. 在test2数据库上建立恢复目录所有者:
SQL>CREATE USER RMAN IDENTIFIED BY RMAN DEFAULT TABLESPACE RMAN_TS;
3. 在test2数据库上授予恢复目录所有者角色:
SQL>GRANT CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER TO RMAN;
4. 退出sqlplus,利用rman工具连接到恢复目录数据库test2执行建立恢复目录命令:
C:\ >RMAN CATALOG RMAN/RMAN@test2RMAN>CREATE CATALOG;
5.退出sqlplus,利用rman连接至目标数据库,并使用REGISTER DATABASE命令注册目标数据库。
C:\>rman TARGET system/system@orcl CATALOG RMAN/RMAN@test2(第一斜杠表示target数据库,catalog表示catalog目录 rman/rman表示catalog用户名和密码)
RMAN>REGISTER DATABASE;
RMAN>show all;查看配置
创建完恢复目录,就可以进行备份了。说明一点,我们可以把备份的文件从备份的目录中拷贝到磁带上,然后删除备份目录下面的备份文件,如果下次需要恢复的话,只要把文件重新拷回到用来的备份目录就可以了。
三、具体的备份步骤
1、备份整个数据库
备份整个数据库有很多种方式,在备份之前需要使用C:\>rman TARGET system/system@orcl CATALOG RMAN/RMAN@test2命令来连接到目标数据库,使用show all来显示当前rman的默认配置。下面演示数据库的几种备份方式:
1)backup database;这是最简单的备份全库的方式,此种方式会带控制文件和配置文件一起备份,因为全库包含了system表空间,而备份system表空间时会自动备份控制文件和配置文件。默认的类windows目录为C:\oracle\product\10.2.0\flash_recovery_area\ORCL\BACKUPSET。,注意linux的路径的斜杠是相反方向的。
2)RMAN> backup database format 'd:\oracle\rmandata\whole_%d_%U';指定备份目录的备份全库的方式。此种方式涉及到备份集的自动命名,其中format的参数说明如下:
%c:备份片的拷贝数(从1开始编号);
%d:数据库名称;
%D:位于该月中的天数(DD);
%M:位于该年中的月份(MM);
%F:一个基于DBID唯一的名称,这个格式的形式为c-xxx-YYYYMMDD-QQ,其中xxx位该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列;
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集产生一个唯一的名称;
%p:表示备份集中的备份片的编号,从1开始编号;
%U:是%u_%p_%c的简写形式,利用它可以为每一个备份片段(既磁盘文件)生成一个唯一的名称,这是最常用的命名方式;
%t:备份集时间戳;
%T:年月日格式(YYYYMMDD);
3)RMAN> backup as compressed backupset database format 'd:\oracle\rmandata\whole_%d_%U';备份整个数据库并压缩备份集。
4)RMAN> run{
2> allocate channel ch1 type disk; --手动分配一个通道
3> allocate channel ch2 type disk --手动分配一个通道
4> maxpiecesize=2g; --指定备份片的大小为2g
5> backup as compressed backupset --压缩备份集
6> format 'd:\oracle\rmandata\whole_%d_%U' filesperset=3--指定备份集中允许容纳的文件个数
7> database;
8> release channel ch1; --释放通道
9> release channel ch2;} --释放通道
此种方式是使用批命令方式备份数据库。其中一个channel是rman于目标数据库之间的一个连接通道,"allocate channel"命令在目标数据库启动一个服务器进程,启动多个可以实现数据库并发执行。filesperset参数是指rman建立的每个备份集中所能包含的数据文件的最大数(注意:不是指备份片,也就是备份出来的文件)。除了可以手工指定通道数外,还可以配置默认的通道数:RMAN> configure device type disk parallelism 3; 将并行度改为3,即3个通道同时运行。
以上就是四种常用的rman备份数据库的方法,备份之后可以使用RMAN> list backupset;查看所有的备份集,也可以使用RMAN> list backupset tag=TAG20150120T171115;查看指定的备份集。可以使用RMAN> validate backupset 1313;命令来验证数据库备份的有效性,1313为某个指定的备份集BS编号。上面用到了批命令的使用,批命令也可以建立脚本来执行,如下。
(1)建立存储脚本
CREATE SCRIPT BAK_DATABASE {
BACKUP FORMAT='D:\BACKUP\%d_%s.BAK'
DATABASE INCLUDE CURRENT CONTROLFILE
PLUS ARCHIVELOG ;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; }
(2)运行存储脚本
(2.1 )在RMAN提示符下执行存储脚本 EXECUTE SCRIPUT
RUN { EXECUTE SCRIPUT BAK_DATABASE;}
(2.2 )在命令行运行存储脚本
RMAN CATALOG RMAN/RMAN@CATDB TARGET SYS/ORACLE@DEMO SCRIPT BAK_DATABASE;
(3)显示存储脚本内容 PRINT SCRIPT
PRINT SCRIPT BAK_DATABASE;
(4)替换存储脚本
REPLACE SCRIPT BAK_DATABASE {
BACKUP DATABASE FORMAT='D:\BACKUP\%d_%s.BAK'; }
(5)删除存储脚本
DELETE SCRIPT BAK_DATABASE;
(6)列出所有的存储脚本
LIST SCRIPT NAMES;
2、备份数据文件
在备份数据文件之前可以使用RMAN>report schema;命令查看数据库方案中对应的数据文件编号,然后执行下面命令:
RMAN> backup as copy datafile 4,5,6
2> format 'd:\oracle\rmandata\df_%d_%U'; 备份类型为镜像文件的备份。
RMAN> list copy; 查看镜像备份的列表。
RMAN> backup datafile 4,5,6 format 'd:\oracle\rmandata\df_%d_%U';备份类型为备份集的备份。
3、备份表空间
RMAN> backup tablespace 表空间名 format 'd:\oracle\rmandata\tbs_%d_%U';表空间名称也可以使用RMAN>eport schema;命令查询。
4、备份控制文件和参数文件
可以设置备份数据时自动备份控制文件选项RMAN> configure controlfile autobackup on;自动备份控制文件置为on状态,将自动备份控制文件和参数文件。
可以单独备份控制文件及参数文件:RMAN> backup current controlfile;
备份数据文件时包含控制文件:RMAN> backup datafile 4 include current controlfile;
RMAN> sql "alter database backup controlfile to ''d:\oracle\rmandata\orclcontrol.bak''"; sql方式备份。
RMAN> sql "alter database backup controlfile to trace as ''d:\oracle\rmandata\orclcontrol.sql''";生成控制文件脚本方式。
单独备份spfile:RMAN> backup spfile format 'd:\oracle\rmandata\sp_%d_%U';
查看控制文件和参数文件的备份:RMAN>list backup of controlfile;RMAN>list backup of spfile;
5、备份归档日志文件
备份归档日志有如下一些特点:
1)备份归档日志时仅仅备份归档过的数据文件对应的日志(不备份联机重做日志文件)。
2)备份归档日志时总是对归档日志做完整备份。
3)RMAN对归档日志备份前会自动做一次日志切换,且从一组归档日志中备份未损坏的归档日志。
4)RMAN会自动判断哪些归档日志需要进行备份。
5)归档日志的备份集不能包含其它类型的文件。
备份之前可以使用SQL>select * from v$archived_log;命令查询所有的归档日志。Rman 归档文件丢失导致不能备份的,在备份前先执行以下两条命令
crosscheck archivelog all;
delete expired archivelog all;
具体备份方法如下:
1)普通备份:RMAN> backup
2> format 'd:\oracle\rmandata\log_%d_%U'
3> archivelog all delete input; delete input 代表删除所有已经备份过的归档日志,当然备份路径和delete input 都是可选参数,也可以不指定直接备份在默认目录。
2)备份指定序号的归档日志:RMAN> backup archivelog sequence between 10 and 20 thread 1 delete input;
或特定序号的归档日志:RMAN> backup format 'd:\oracle\rmandata\log_%d_%U' archivelog from sequence=50 delete input;
3)备份指定时间之内的归档日志:RMAN> backup archivelog from time "sysdate-15" until time "sysdate";
系统默认备份归档日志(backup database plus archivelog)的顺序如下:
1)首先执行alter system archive log current 命令(对当前日志归档)。
2)执行backup archivelog all 命令(对所有归档日志进行备份)。
3)执行backup database命令中指定的数据文件、表空间等。
4)再次执行alter system archive log current。
5)备份在备份操作期间产生的新的归档日志。
6、备份闪回区和备份集
备份闪回区和备份集主要为了对现有的备份再做备份,一般都备份到磁带上。
备份闪回区命令1:RMAN> backup recovery area;使用此命令时,将备份位于闪回区且未进行过备份的所有文件,这些文件包括完整、增量备份集、自动备份的控制文件(假定使用闪回区作为备份路径时)、归档日志、数据文件的镜像副本等。闪回日志,当前的控制文件。联机重做日志不会被备份。
备份闪回区命令2:RMAN> backup recovery files;使用此命令时,将备份磁盘上未进行过备份的所有恢复文件,而不论是否位于闪回区。
备份备份集:bacup backupset [all|指定的备份集编号];
到此,需要备份的基本全部讲完了,这里做一下说明,对于控制文件、归档日志文件、spfile文件其实只是简单的拷贝,并对其进行打包压缩。数据文件还可以做增量备份,下面就讲一下增量备份。
7)增量备份
差异增量备份将备份自上次增量备份以来所有发生改变的数据块。
累计增量备份将备份自上次级增量备份以来所有改变过的数据块。
两种备份方式最好单独使用,形成两套不同的备份方案。
下面启用0级增量备份,相当于一个全部备份,是增量备份的基础。
RMAN> run{
2> allocate channel ch1 type disk;
3> backup incremental level 0 database
4> format '/u01/app/oracle/rmanbak/db_%d_%U'
5> tag=db_inc_0;
6> release channel ch1;
7> }
SQL> select sid,sofar,totalwork from v$session_longops; --查询备份情况
下面启用1级差异增量备份。
RMAN> run{
2> allocate channel ch1 type disk;
3> backup incremental level 1 database
4> format '/u01/app/oracle/rmanbak/db1_%d_%U'
5> tag=db_inc_1;
6> release channel ch1;
7> }
下面启用1级累计增量备份。
RMAN> run{
2> allocate channel ch1 type disk;
3> backup incremental level 1 cumulative database
4> format '/u01/app/oracle/rmanbak/dbc_%d_%U'
5> tag=db_inc_c_1;
6> release channel ch1;
7> }
linux下差异增量备份方案:
1.星期天晚上 -level 0 backup performed(全备份)
2.星期一晚上 -level 2 backup performed
3.星期二晚上 -level 2 backup performed
4.星期三晚上 -level 1 backup performed
5.星期四晚上 -level 2 backup performed
6.星期五晚上 -level 2 backup performed
7.星期六晚上 -level 2 backup performed
如果星期二需要恢复的话,只需要1+2,
如果星期四需要恢复的话,只需要1+4,
如果星期五需要恢复的话,只需要1+4+5,
如果星期六需要恢复的话,只需要1+4+5+6。
自动备份:备份脚本+crontab
bakl0 :0级增量备份,每周日使用级增量进行备份
bakl1 :1级增量备份,每周三使用级增量备份,备份从周日以来到周三所发生的数据变化
bakl2 :2级增量备份,备份每天发生的差异增量。如从周日到周一的差异,从周一到周二的差异
下面是差异级增量的脚本,其余级与级依法炮制,所不同的是备份级别以及tag标记
[oracle@oradb scripts]$ cat bakl0
run {
allocate channel ch1 type disk;
backup as compressed backupset incremental level 0
format '/u01/oracle/bk/rmbk/incr0_%d_%U'
tag 'day_incr0'
database plus archivelog delete input;
release channel ch1;
}
用vi bakl0,bakl0的内容如上。
执行脚本:
rman target / msglog=bakl0.log cmdfile=bakl0 (/表示需要连接的目标数据库,msglog表示日志文件,cmdfile表示的是脚本文件)
rman target / msglog=bakl1.log cmdfile=bakl1
rman target / msglog=bakl2.log cmdfile=bakl2
实例:rman target system/oracle@ora10g(/) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0
完整的命令:/u01/oracle/product/10.2.0/bin/rman target system/oracle@ora10g(/) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0
自动备份
编辑crontab
[root@oradb ~]# whoami
root
[root@oradb ~]# crontab -e -u oracle
crontab -e -u oracle(改命令的意思是编辑oracle用户的定时执行(-e,edit -u oracle,oracle用户))
分 时 日 月 星期(0代表星期天)
45 23 * * 0 rman target / msglog=bakl0.log cmdfile=bakl0(星期天的23:45会以oracle用户的身份来执行命令)
45 23 * * 1 rman target / msglog=bakl2.log cmdfile=bakl2
45 23 * * 2 rman target / msglog=bakl2.log cmdfile=bakl2
45 23 * * 3 rman target / msglog=bakl1.log cmdfile=bakl1
45 23 * * 4 rman target / msglog=bakl2.log cmdfile=bakl2
45 23 * * 5 rman target / msglog=bakl2.log cmdfile=bakl2
45 23 * * 6 rman target / msglog=bakl2.log cmdfile=bakl2
保存之后重启crontab ,启动crontab的命令:
[root@oradb ~]# service crond restart
检查自动备份是否成功执行。
8、备份的其他特性说明:
1)并发性:主要用于提高备份的速度,可以分为手动并发或自动并发。
手动并发:通过分配多个通道并将文件指定到特定的通道。
RMAN> run {
2> allocate channel ch1 device type disk;
3> allocate channel ch2 device type disk;
4> allocate channel ch3 device type disk;
5> backup incremental level=0
6> format 'd:\oracle\rmandata\df_%d_%U'
7> (datafile 1 channel ch1 tag='sys')
8> (datafile 3 channel ch2 tag='aux')
9> (datafile 2,4,5,6 channel ch3 tag='other');
10> sql 'alter system archive log current';
11> release channel ch1;
12> release channel ch2;
13> release channel ch3;
14> }
自动并发:使用configure配置并发度即可。
RMAN> configure device type disk parallelism 3 backup type to backupset;
下面的备份将自动启用3个通道执行并发。
RMAN> backup database format 'd:\oracle\rmandata\p3_%U';
2)复用备份
即将同一个备份集复制多份。
手工指定:
RMAN> backup copies 2 datafile 4
2> format 'd:\oracle\rmandata\df1_%U',
3> 'd:\oracle\rmandata\df2_%U';
自动指定:配置下列参数
RMAN> configure datafile backup copies for device type disk to 2; 指定备份数据文件副本数。
RMAN> configure archivelog backup copies for device type disk to 2;指定备份日志文件副本数。
3)镜像备份
镜像备份时会检查数据文件中是否存在坏块,可以使用nochecksum来跳过坏块的检测。
也可以指定maxcorrupt判断有多少个坏块时,Oracle将停止该镜像备份。
RMAN> backup as copy
2> datafile 4 format 'd:\oracle\rmandata\users.dbf' tag='users';
以下命令等同于上一条。
RMAN> copy datafile 4 to 'd:\oracle\rmandata\user01.dbf';
RMAN> backup as copy
2> archivelog like 'o1_mf_1_118_6chl1byd_.arc'
3> format 'd:\oracle\rmandata\arch_1015.bak';
使用下面的configure命令将backup type设置为copy之后,则缺省的备份为镜像副本。
RMAN> configure device type disk parallelism 1 backup type to copy;
RMAN> backup datafile 4
2> format 'd:\oracle\rmandata\users.dbf.bak' tag=users;由于上面的设置,则此命令备份的将是镜像副本。
使用并行度来执行镜像拷贝:
RMAN> configure device type disk parallelism 4;
RMAN> backup as copy #3 files copied in parallel
2> (datafile 1 format 'd:\oracle\rmandata\df1.bak')
3> (datafile 2 format 'd:\oracle\rmandata\df2.bak')
4> (datafile 3 format 'd:\oracle\rmandata\df3.bak');
镜像备份时指定子句DB_FILE_NAME_CONVERT来实现镜像路径转移,该子句也是一个初始化参数,用于primary db 到standby db的数据文件的转换。
DB_FILE_NAME_CONVERT = ('string1' , 'string2' , 'string3' , 'string4' ...)
用string2替换string1,string4替换string3。
RMAN> backup as copy device type disk
2> db_file_name_convert('C:\oracle\product\10.2.0\oradata\orcl','d:\oracle\rmandata')
3> tablespace users;
4)压缩备份集
配置备份目录:
RMAN> configure channel device type disk format 'd:\oracle\rmandata\%d_%U.bak';
下面的命令使用了参数as compressed来实现手动压缩:
RMAN> backup as compressed backupset database;
RMAN> backup as compressed backupset datafile 4,5,6;
下面使用configure命令配置自动压缩备份集功能,则后续的备份会自动使用压缩功能。
RMAN> configure device type disk parallelism 4 backup type to compressed backupset;
由于设置了自动压缩,则下面的命令将压缩备份的system表空间及控制文件、参数文件
RMAN> backup tablespace system tag=system;
5)使用tag标记
tag标记可以为备份集或映像副本指定一个有意义的名字,以备后续使用,其优点如下:
(1)为备份集或映像副本提供描述信息
(2)能够在list 命令中使用更好的定位备份文件
(3)能够在restore和switch命令中使用
(4)同一个tag在多个备份集或多个映像副本中使用
(5)当未指定tag标记时,则系统产生缺省的tag标记,其格式为:TAGYYYYMMDDTHHMMSS。
例:
RMAN> backup as compressed backupset datafile 1,2,3 tag='Monthly_full_bak';
RMAN> backup as compressed backupset tablespace users tag='Weekly_full_bak';
RMAN> list backupset tag=monthly_full_bak;
6)启用块变化跟踪
启用块变化跟踪即是指定一个文件用于记录数据文件中哪些块发生了变化,在RAMN进行增量备份时,仅仅需读取该文件来备份这些发生变化的块,从而减少了备份时间和I/O资源。
使用下面的命令来启用块变化跟踪:
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '<dir>';
SQL> alter database enable block change tracking
2 using file '/u01/app/oracle/oradata/orcl/blk_ch_trc.trc';
SQL> ho ls -lht /u01/app/oracle/oradata/orcl/blk_ch_trc.trc
-rw-r----- 1 oracle oinstall 12M Oct 15 19:41 /u01/app/oracle/oradata/orcl/blk_ch_trc.trc
SQL> select * from v$block_change_tracking;
STATUS FILENAME BYTES
---------- --------------------------------------------- ----------
ENABLED /u01/app/oracle/oradata/orcl/blk_ch_trc.trc 11599872
SQL> alter database disable block change tracking; --disable后块变化跟踪文件被自动删除
SQL> select * from v$block_change_tracking;
STATUS FILENAME BYTES
---------- --------------------------------------------- ----------
DISABLED
7)备份保留策略
保留策略主要是保留备份副本的一些规则,通常用于满足恢复或其他的需要(比如磁盘空间或磁带空间大小限制)
备份保留策略分为冗余和恢复窗口,这两种保留策略互不兼容,要么使用前者,要么使用后者。
备份冗余:
默认为,可以通过RMAN> configure retention policy to redundancy 2;来修改
当为时,RMAN会为每个数据文件、归档日志、控制文件生成一个备份。可以使用report obsolete命令查看备份数多余的备份。
并使用delete obsolete来删除过时的备份。
恢复窗口:
恢复窗口允许完成恢复到过去某个时间点的时点恢复,通常设定为多少天
使用命令RMAN> configure retetion policy to recovery window of 7 days;
该命令将确保具有足够的数据文件和归档日志来执行能够返回一个星期中任意时间点的不完全恢复,且允许删除随着时间推移而变为废弃的备份,即应当满足该条件:SYSDATE - BACKUP CHECKPOINT TIME >= 7。
对于大于7天但是是恢复所需要的备份依然会被保留。
清除备份保留策略
RMAN> configure retention policy clear;
注意obsolete 与expired
obsolete:是指根据保留策略来确定该备份是否在恢复的时候需要,如不在需要或有更新的备份来替代,则该备份集被置为obsolete,即废弃的备份集或镜像副本。
expired: 是指执行crosscheck(看一下backup的文件,检查controlfile中的目录或文件是否真正在磁盘上
)时,根据存储仓库中记录的备份信息来定位备份集或镜像副本,而找不到对应的备份集或镜像副本,则这些备份集或镜像副本被置为expired。
7)使用BACKUP ... VALIDATE验证数据文件逻辑坏块,损坏的坏块将被记录到v$database_block_corruption视图
BACKUP VALIDATE CHECK LOGICAL DATABASE ARCHIVELOG ALL;
8)备份相关的动态性能视图及监控
(1)相关视图
v$backup_files
v$backup_set
v$backup_piece
v$backup_redolog
v$backup_spfile
v$backup_device
v$rman_configuration
v$archived_log
v$backup_corruption
v$copy_corruption
v$database_block_corruption
v$backup_datafile
(2)查看channel对应的server sessions
使用set command id命令
查询v$process和v$session判断哪一个会话与之对应的RMAN通道
SQL> select sid,username,client_info from v$session
2 where client_info is not null;
SID USERNAME CLIENT_INFO
---------- ------------------------------ ------------------------------
146 SYS rman channel=ORA_DISK_1
148 SYS rman channel=ORA_DISK_2
150 SYS rman channel=ORA_DISK_3
下面使用了set command id命令
RMAN> run{
2> allocate channel ch1 type disk;
3> set command id to 'rman';
4> backup as copy datafile 4
5> format '/u01/app/oracle/rmanbak/dd_%U';
6> }
SQL> select sid,username,client_info from v$session
2 where client_info is not null;
SID USERNAME CLIENT_INFO
---------- ------------------------------ ------------------------------
140 SYS id=rman
SQL> select sid,spid,client_info
2 from v$process p ,v$session s
3 where p.addr = s.paddr
4 and client_info like '%id=%';
SID SPID CLIENT_INFO
---------- ------------ ------------------------------
140 5002 id=rman
查看rman完整的进度
SQL> select sid,serial#,context,sofar,totalwork,
2 round(sofar/totalwork*100,2) "% Complete"
3 from v$session_longops
4 where opname like 'RMAN:%'
5 and opname not like 'RMAN:aggregate%'
6 and totalwork!=0;
通过如下SQL获得rman用来完成备份操作的服务进程的SID与SPID信息:
select sid, spid, client_info
from v$process p, v$session s
where p.addr = s.paddr
and client_info like '%id=rman%'
Rman备份的恢复
在非catalog模式下,备份的信息存储在controlfile文件中,如果controlfile文件发生毁坏,那么就不能能够进行恢复,使用在备份的时候需要把controlfile也进行自动备份。
RMAN>show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/product/10.20/dbs/snapcf_ora10g.f'; # default
其中CONFIGURE CONTROLFILE AUTOBACKUP OFF; 没有对controlfile进行 autobackup,使用我们需要运行下面命令来对controlfile进行自动备份。
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> show all;
手动备份控制文件:
RMAN>backup current controlfile;Dbid表示database的一个ID,将来用于恢复spfile和controlfile时候要用到.
RMAN> connect target /
connected to target database: ORA10G (DBID=3988862108)
这个Dbid=3988862108
RMAN> list backup;查看以前备份的信息。
RMAN>delete backupset 24;//24代表backupset 的编号
RMAN>backup format '/u01/rmanbak/full_%T_%U.bak' database plus archivelog;(进行一次全备份)
验证备份:
RMAN> validate backupset 3; //3代表backupset的编号
口令文件丢失(不属于rman备份的范畴),我们只需要用一个命令来重建这个文件就可以了:
orapw file=orapwsid password=pass entries=5; //口令文件的路径:/u01/oracle/product/10.20/db_1/dbs目录下
oracle> cd /u01/oracle/product/10.20/db_1/dbs
oracle> rm orapwora10g;(文件删除,模拟丢失)
oracle> orapwd file=orapwora10g password=oracle entries=5;(重新建立一个文件),entries的意思(DBA的用户最多有5个)
SPFILE丢失:
startup nomount;
set dbid 3988862108;
restore spfile from autobackup;
shutdown immediate;
set dbid 3988862108;
startup;
模拟操作:
oracle> mv spfileora10g.ora spora10g.ora
oracle>rman target /;
rman> shutdown immediate;
rman> startup nomount;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10.20/dbs/initora10g.ora'
rman>set dbid 3988862108;
rman>restore spfile from autobackup;
执行该命令,如果没有找到的话,那可能是文件的路径发生错误.可以通过直接赋予它的文件
rman>restore spfile from '/u01/oracle/flash_recovery_area/ORA10G/autobackup/2008_12_09/o1_mf_s_673025706_4mw7xc79_.bkp
在dbs/目录下产生spfileora10g.ora文件。证明spfile 已经恢复好
rman> shutdown immediate;
rman> startup ;(如果该命令不能够启动数据库,那么需要set dbid 3988862108)controlfile 丢失:
startup nomount;
restore controlfile from autobackup;
alter database mount;
recover database;
alter database open resetlogs;
注意:在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。
oracle>rm *.ctl
oracle>rman target / ;//不能够连接到rman ,因为controlfile丢失
oracle>sqlplus /nolog;SQL>shutdown immediate; //因为controlfile丢失,不能够正常shutdown
SQL>shutdown abort;
oracle>rman target /;
rman>startup nomount;
rman>restore controlfile from autobackup;
rman>alter database mount;
rman>alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 12/09/2008 16:21:13
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/home/oracle/oradata/ora10g/system01.dbf
//出错, redo log的scn记录在controlfile里面的,因为我们有新的controlfile,所以需要resetlogs;
/*
resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容.
这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。
*/
rman>recover database;
rman>alter database open resetlogs;
Redolog file丢失:(下面的这些语句一定要在sqlplus中执行,不是在rman中执行)
(sqlplus/nolog)
1.shutdown immediate;
2.startup mount;
3.recover database until cancel;(media recovery)
4.alter database resetlogs;
数据文件丢失(在rman中执行sql语句,在sql后面用双引号括起来):
1. sql "alter database datafile 3 offline";
2. restore datafile 3
3. recover datafile 3
4. sql "alter database datafile 3 online";
表空间丢失:
1. sql "alter tablespace users offline";//如果文件不存在,则用 sql "alter tablespace users offline immeidate";
2. restore tablespace users;
3. recover tablespace users; //与online redolog file 信息一致
4. sql "alter tablespace users online";
非catalog方式完全恢复
数据库出现问题:
1.startup nomount;
2.restore controlfile from autobackup;
3.alter database mount;
4.restore database;
5.recover database;
6.alter database open resetlogs;
模拟操作:
oracle ora10g> rm *;
oracle ora10g> ls;
oracle ora10g> //数据文件,控制文件全部删除
oracle ora10g> rman target /; //因为controlfile 丢失,不能够连接到rman
oracle ora10g> sqlplus /nolog;
oracle ora10g> connect / as sysdba;
oracle ora10g> shutdown abort;
oracle ora10g> rman target /
rman> startup nomount;
rman> restore controlfile from autabackup;
rman> alter database mount;
rman> restore database;
rman> recover database; //online redolog 不存在
SQL>recover database until cancel; //当redo log丢失,数据库在缺省的方式下,是不容许进行recover操作的,那么如何在这种情况下操作呢
SQL>create pfile from spfile;
vi /u01/product/10.20/dbs/initora10g.ora,在这个文件的最后一行添加
*.allow_resetlogs_corruption='TRUE'; //容许resetlog corruption,是不是似曾相识,对的,和热备份是类似的
SQL>shutdown immediate;
SQL>startup pfile='/u01/product/10.20/dbs/initora10g.ora' mount;
SQL>alter database open resetlogs;//记得还原配置文件
基于时间点的恢复:
run{
set until time "to_date(07/01/02 15:00:00','mm/dd/yy hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
1.startup mount;
2.restore database until time "to_date('2009-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";
3.recover database until time "to_date('2009-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";
4.alter database open resetlogs;
如果有open resetlogs,都是不完整恢复.
基于 SCN的恢复:
1.startup mount;
2.restore database until scn 10000;
3.recover database until scn 10000;
4.alter database open resetlogs;基于日志序列的恢复:
1.startup mount;
2.restore database until SEQUENCE 100 thread 1; //100是日志序列
3.recover database until SEQUENCE 100 thread 1;
4.alter database open resetlogs;
日志序列查看命令: SQL>select * from v$log;其中有一个sequence字段.resetlogs就会把sequence 置为1RMAN catalog模式下的恢复:
归档模式下的恢复与非归档模式下是类似的,只不过需要现将归档日志的备份恢复还原。
恢复归档日志的语法:
(1)备份所有归档日志文件
RMAN> backup archivelog all delete input;
(2)restore archivelog 的各种选项
1.恢复全部归档日志文件
RMAN> restore archivelog all;
2.只恢复5到8这四个归档日志文件
RMAN> restore archivelog from logseq 5 until logseq 8;
3.恢复从第5个归档日志起
RMAN> restore archivelog from logseq 5;
4.恢复7天内的归档日志
RMAN> restore archivelog from time 'sysdate-7';
5. sequence between 写法
RMAN> restore archivelog sequence between 1 and 3;
6.恢复到哪个日志文件为止
RMAN> restore archivelog until logseq 3;
7.从第五个日志开始恢复
RMAN> restore archivelog low logseq 5;
8.到第5个日志为止
RMAN> restore archivelog high logseq 5;
(3)如果想改变恢复到另外路径下 则可用下面语句
set archivelog destination to 'd:\backup';
RMAN> run
2> {allocate channel ci type disk;
3> set archivelog destination to 'd:\backup';
4> restore archivelog all;
5> release channel ci;
6> }一些命令解释:
Report schema Report shema是指在数据库中需找schema
List backup 从control读取信息
Crosscheck backup 看一下backup的文件,检查controlfile中的目录或文件是否真正在磁盘上
Delete backupset 24 24代表backupset 的编号, 既delete目录,也delete你的文件
注意:在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容.这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。
Rman 归档文件丢失导致不能备份的,在备份前先执行以下两条命令
crosscheck archivelog all;
delete expired archivelog all;

- 标签:
-
云计算