ORACLE的RMAN

1.什么是RMAN?
  RMAN能够用来备份和还原数据库文件、归档日志和控制文件。它也能够用来执行彻底或不彻底的数据库恢复。
  
  注意:RMAN不能用于备份初始化参数文件和口令文件。
  
  RMAN启动数据库上的Oracle服务器进程来进行备份或还原。备份、还原、恢复是由这些进程驱动的。
  
  RMAN能够由OEM的Backup Manager GUI来控制,但在本文章里不做重点讨论。
  
  2. Terminology 专业词汇解释
  2.1. Backup sets 备份集合
  
  备份集合有下面的特性:
  
  包括一个或多个数据文件或归档日志
  
  以oracle专有的格式保存
  
  有一个彻底的全部的备份片集合构成
  
  构成一个彻底备份或增量备份
  
  2.2. Backup pieces 备份片
  
  一个备份集由若干个备份片组成。每一个备份片是一个单独的输出文件。一个备份片的大小是有限制的;若是没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。
  
  2.3. Image copies 镜像备份
  
  镜像备份是独立文件(数据文件、归档日志、控制文件)的备份。它很相似操做系统级的文件备份。它不是备份集或 备份片,也没有被压缩。
  
  2.4. Full backup sets 全备份集合
  
  全备份是一个或多个数据文件中使用过的数据块的的备份。没有使用过的数据块是不被备份的,也就是说,oracle 进行备份集合的压缩。
  
  2.5. Incremental backup sets 增量备份集合
  
  增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块。 与彻底备份相同,增量备份也进行压缩。
  
  2.6. File multiplexing
  
  不一样的多个数据文件的数据块能够混合备份在一个备份集中。
  
  2.7. Recovery catalog resyncing 恢复目录同步
  
  使用恢复管理器执行backup、copy、restore或者switch命令时,恢复目录自动进行更新,可是有关日志与归档日志信息没有自动记入恢复目录。须要进行目录同步。使用resync catalog命令进行同步。
  
  RMAN>resync catalog;
  RMAN-03022:正在编译命令:resync
  RMAN-03023:正在执行命令:resync
  RMAN-08002:正在启动所有恢复目录的 resync
  RMAN-08004:完成所有 resync
  
  3. 恢复目录
  3.1.恢复目录的概念
  
  恢复目录是由RMAN使用、维护的用来放置备份信息的仓库。RMAN利用恢复目录记载的信息去判断如何执行须要的备份恢复操做。
  
  恢复目录能够存在于ORACLE数据库的计划中。
  
  虽然恢复目录能够用来备份多个数据库,建议为恢复目录数据库建立一个单独的数据库。
  
  恢复目录数据库不能使用恢复目录备份自身。
  
  3.2.创建恢复目录
  
  第一步,在目录数据库中建立恢复目录所用表空间:
  
  SQL> create tablespace rman_ts datafile 'd:\oracle\oradata\rman\rman_ts.dbf' size 20M;
  
  表空间已建立。
  
  第二步,在目录数据库中建立RMAN 用户并受权:
  
  SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;
  
  用户已建立。
  
  SQL> grant recovery_catalog_owner to rman ;
  
  受权成功。
  SQL> grant connect, resource to rman ;
  
  受权成功。
  
  第三步,在目录数据库中建立恢复目录
  
  C:\>rman catalog rman/rman
  
  恢复管理器:版本8.1.6.0.0 - Production
  
  RMAN-06008:链接到恢复目录数据库
  RMAN-06428:未安装恢复目录
  RMAN>create catalog tablespace rman_ts;
  RMAN-06431:恢复目录已建立
  
  注意:虽然使用RMAN不必定必需恢复目录,可是推荐使用。由于恢复目录记载的信息大部分能够经过控制文件来记载,RMAN在恢复数据库时使用这些信息。不使用恢复目录将会对备份恢复操做有限制。
  
  3.3.使用恢复目录的优点
  
  能够存储脚本;
  
  记载较长时间的备份恢复操做;
  
  4. 启动RMAN
  RMAN为交互式命令行处理界面,也能够从企业管理器中运行。
  
  为了使用下面的实例,先检查环境符合:
  
  the target database is called "his" and has the same TNS alias
  
  user rman has been granted "recovery_catalog_owner "privileges
  
  目标数据库的链接用户为internal账号,或者以其余SYSDBA类型账号链接
  
  the recovery catalog database is called "rman" and has the same TNS alias
  
  the schema containing the recovery catalog is "rman" (same password)
  
  在使用RMAN前,设置NLS_DATE_FORMAT 和NLS_LANG环境变量,不少RMAN LIST命令的输出结果是与日期时间相关的,这点在用户但愿执行以时间为基准的恢复工做也很重要。
  
  下例是环境变量的示范:
  
  NLS_LANG= SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS
  
  为了保证RMAN使用时能链接恢复目录,恢复目录数据库必须打开,目标数据库至少要STARTED(unmount),不然RMAN会返回一个错误,目标数据库必须置于归档模式下。
  
  4.1.使用不带恢复目录的RMAN
  
  设置目标数据库的 ORACLE_SID ,执行:
  
  % rman nocatalog
  RMAN> connect target
  RMAN> connect target internal/@his
  
  4.2.使用带恢复目录的RMAN
  
  % rman rman_ts rman/rman@rman
  RMAN> connect target
  % rman rman_ts rman/rman@rman target internal/@his
  
  4.3.使用RMAN
  
  一旦链接到目标数据库,能够经过交互界面或者事先存储的脚本执行指定RMAN命令, 下面是一个使用RMAN交互界面的实例:
  
  RMAN> resync catalog;
  RMAN-03022:正在编译命令:resync
  RMAN-03023:正在执行命令:resync
  RMAN-08002:正在启动所有恢复目录的 resync
  RMAN-08004:完成所有 resync
  
  使用脚本的实例:
  
  RMAN> execute script alloc_1_disk;
  
  建立或者替代存储的脚本:
  
  RMAN> replace script alloc_1_disk {
  2> allocate channel d1 type disk;
  3> }
  
  5.注册或者注销目标数据库
  5.1.注册目标数据库
  
  数据库状态:
  
  恢复目录状态:打开
  
  目标数据库:加载或者打开
  
  目标数据库在第一次使用RMAN以前必须在恢复目录中注册:
  
  第一步,启动恢复管理器,而且链接目标数据库:
  
  C:\>rman target internal/oracle@his catalog rman/rman@rman
  
  恢复管理器:版本8.1.6.0.0 - Production
  
  RMAN-06005:链接到目标数据库:HIS (DBID=3021445076)
  RMAN-06008:链接到恢复目录数据库
  
  第二步,注册数据库:
  
  RMAN> register database;
  RMAN-03022:正在编译命令:register
  RMAN-03023:正在执行命令:register
  RMAN-08006:注册在恢复目录中的数据库
  RMAN-03023:正在执行命令:full resync
  RMAN-08002:正在启动所有恢复目录的resync
  RMAN-08004:完成所有resync
  
  5.2.注销目标数据库
  
  RMAN提供了一个注销工具,叫DBMS_RCVCAT工具包,请注意一旦注销了该目标数据库,就不可使用恢复目录中含有的备份集来恢复数据库了。
  
  为了能注销数据库,须要得到数据库的标识码(DB_ID)和数据库键值(DB_KEY)。其中链接目标数据库时将会得到DB_ID。
  
  C:\>rman target internal/oracle@his catalog rman/rman@rman
  
  恢复管理器:版本8.1.6.0.0 - Production
  
  RMAN-06005:链接到目标数据库:HIS (DBID=3021445076)
  RMAN-06008:链接到恢复目录数据库
  
  其中DBID=3021445076,利用DBID=3021445076查询数据库键值码:
  
  链接到目标数据库,查询db表:
  
  SQL> select * from db;
  
  DB_KEY DB_ID CURR_DBINC_KEY
  ---------- ---------- --------------
  1 3021445076 2
  
  得到DB_KEY=1,这样,该目标数据库DB_KEY=1,DBID=3021445076,利用两个值使用DBMS_RCVCAT工具包就能够注销数据库:数据库

 

1、冷备份介绍:
   冷备份数据库是将数据库关闭以后备份全部的关键性文件包括数据文件、控制文件、联机REDO LOG文件,将其拷贝到另外的位置。此外冷备份也能够包含对参数文件和口令文件的备份,可是这两种备份是能够根据须要进行选择的。,冷备份实际也是一种物理备份,是一个备份数据库物理文件的过程。由于冷备份要备份除了重作日志之外的全部数据库文件,所以也被成为彻底的数据库备份。它的优缺点以下所示:
一、优势:
        <1>只需拷贝文件便可,是很是快速的备份方法。
        <2>只需将文件再拷贝回去,就能够恢复到某一时间点上。
        <3>与数据库归档的模式相结合可使数据库很好地恢复。
        <4>维护量较少,但安全性确相对较高。
二、缺点:
        <1>在进行数据库冷备份的过程当中数据库必须处于关闭状态。
   <2>单独使用冷备份时,数据库只能完成基于某一时间点上的恢复。
        <3>若磁盘空间有限,冷备份只能将备份数据拷贝到磁带等其余外部存储上,速度会更慢。
        <4>冷备份不能按表或按用户恢复。
三、具体备份步骤以下:
        <1>以DBA用户或特权用户登陆,查询动态性能视图v$datafile、v$controlfile能够分别列出数据库的数据文件以及控制文件。
SQL&gt; select name from v$datafile;
NAME -------------------------------------------------------------------------------- /u02/oradata/db01/system01.dbf /u02/oradata/db01/undotbs01.dbf /u02/oradata/db01/sysaux01.dbf /u02/oradata/db01/users01.dbf
SQL&gt; select name from v$controlfile;
NAME -------------------------------------------------------------------------------- /u02/oradata/db01/control01.ctl /u02/oradata/db01/control02.ctl /u02/oradata/db01/control03.ctl /u01/app/oracle/bak/control04.ctl
<2>以DBA用户或特权用户关闭数据库。
SQL&gt; conn /  as sysdba; Connected. SQL&gt; shutdown normal Database closed. Database dismounted. ORACLE instance shut down.
<3>复制数据文件,复制时应该将文件复制到单独的一个硬盘或者磁盘上。控制文件是相互镜像的,所以只需复制一个控制文件便可。
cp /u02/oradata/db01/*.dbf  /u01/app/oracle/bak
cp /u02/oradata/db01/*.ctl  /u01/app/oracle/bak
<4>启动例程打开数据库。
SQL&gt; conn / as sysdba; Connected to an idle instance. SQL&gt; startup ORACLE instance started.
Total System Global Area  285212672 bytes Fixed Size                  1218992 bytes Variable Size              83887696 bytes Database Buffers          197132288 bytes Redo Buffers                2973696 bytes Database mounted. Database opened. SQL&gt;
2、热备份:
   热备份是在数据库运行的状况下,采用archive log mode方式备份数据库的方法。热备份要求数据库处于archive log模式下操做,并须要大量的档案空间。一旦数据库处于archive loh
模式,就能够进行备份了,当执行备份时,只能在数据文件级或表空间进行。
一、优势:
          <1>可在表空间或数据文件级备份,备份时间短。
<2>可达到秒级恢复(恢复到某一时间点上)。
          <3>可对几乎全部数据库实体做恢复。
          <4>恢复是快速的,在大多数状况下在数据库仍工做时恢复。
<5>备份时数据库仍可用。
二、缺点:
         <1>因难以维护,因此要特别仔细当心,不容许“以失败而了结”。
         <2>若热备份不成功,所得结果不可用于时间点的恢复。
         <3>不能出错,不然后果严重。
三、设置初始归档模式:
设置归档模式数据库必须处在mount而非open状态下:
         <1>首先查看数据库是否处在archive log模式下:
         SQL&gt; archive log list;          Database log mode               No Archive Mode          Automatic archival                Disabled          Archive destination               USE_DB_RECOVERY_FILE_DEST          Oldest online log sequence    1          Current log sequence            2
         <2>在mount状态下启动数据库:
         SQL&gt; startup mount;          ORACLE instance started.
         Total System Global Area  285212672 bytes          Fixed Size                  1218992 bytes          Variable Size              83887696 bytes          Database Buffers          197132288 bytes          Redo Buffers                2973696 bytes          Database mounted.
         <3>设置数据库为归档模式:
        SQL&gt; alter database archivelog;
        Database altered.
        <4>打开数据库:
SQL&gt; alter database open;
Database altered.
<5>将数据库设置成自动归档,使用如下命令:
SQL&gt; alter system set log_archive_start=true scope=spfile;
System altered.
<6>肯定数据库处于归档模式下,而且设置自动存档:
SQL&gt; archive log list; Database log mode              Archive Mode Automatic archival             Enabled Archive destination            USE_DB_RECOVERY_FILE_DEST Oldest online log sequence     1 Next log sequence to archive   2 Current log sequence           2
上面的Archive destination所定义的具体位置,能够查看$ORACLE_HOME/dbs/spfile<dbname>.ora文件中的db_recovery_file_dest参数的值。
 
四、联机备份:
      联机备份是热备份的一种备份方法,是指当表空间处于ONLINE状态时,备份表空间的全部数据文件和单个数据文件的过程。使用联机备份的优势是不影响用户在表空间上的全部访问操做,但联机备份的缺点可能生产更多的重作日志文件和归档日志文件。如下是联机备份的具体步骤:
       <1>以DBA用户或特权用户登陆,肯定表空间所包含的数据文件。经过查询数据字典DBA_DATA_FILES,能够获得数据文件和表空间的对应关系:
SQL&gt; select file_name from dba_data_files where tablespace_name='USERS';
FILE_NAME -------------------------------------------------------------------------------- /u02/oradata/db01/users01.dbf
<2>设置表空间为备份模式,在复制表空间的数据文件以前必须将表空间设置成为备份模式:
SQL&gt; alter tablespace users begin backup;
Tablespace altered.
<3>复制users数据文件到备份目录:
[oracle@server1 bak]$ cp /u02/oradata/db01/users01.dbf /bak
<4>复制后表空间就不须要设置成为备份模式了,所以能够将其返回正常模式:
SQL&gt;  alter tablespace users end backup;
Tablespace altered.
五、脱机备份:
      脱机备份也是热备份的一种方法,是指当表空间处于offline时,备份表空间的全部数据文件以及单个数据文件的过程。它的优势是会生产较少的重作日志文件,缺点是当用户正在进行脱机备份时所备份的表空间将不能访问,因为SYSTEM系统表空间和正在使用的UNDO表空间不能被脱机,所以脱机备份不适用于SYSTEM表空间和正在使用的UNDO表空间。
        <1>使用DBA用户或特权用户登陆,肯定表空间所包含的数据文件。这个和联机备份的第一步相同:
SQL&gt; select file_name from dba_data_files where tablespace_name='USERS';
FILE_NAME -------------------------------------------------------------------------------- /u02/oradata/db01/users01.dbf
<2>设置表空间为脱机状态,将表空间设置为脱机状态后用户将不能访问该表空间上的任何对象,所以也能够确保OFFLINE的表空间的数据文件不会发生改变。
SQL&gt; alter tablespace users offline;
Tablespace altered.
SQL&gt; select tablespace_name,online_status from dba_data_files;
TABLESPACE_NAME                ONLINE_ ------------------------------ ------- USERS                          OFFLINE SYSAUX                         ONLINE UNDOTBS1                       ONLINE SYSTEM                         SYSTEM
<3>复制users数据文件到备份目录:
[oracle@server1 bak]$ cp /u02/oradata/db01/users01.dbf /bak
<4>复制完后将表空间置于online状态:
SQL&gt; alter  tablespace users online;
Tablespace altered.
SQL&gt; select tablespace_name,online_status from dba_data_files;
TABLESPACE_NAME                ONLINE_ ------------------------------ ------- USERS                          ONLINE SYSAUX                         ONLINE UNDOTBS1                       ONLINE SYSTEM                         SYSTEM