Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7181274
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: Oracle

2014-04-21 09:36:21


  1. RMAN (备份与恢复管理器)
  2.         RMAN是ORACLE提供的一个备份与恢复的工具,可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完成或不完成的数据库恢复。
  3. 1.RMAN的组件、概念
  4.     1.1 RMAN 命令管理器
  5.         RMAN命令管理器提供对RMAN使用程序的访问,它允许DBA输入执行备份和恢复操作所需的命令。
  6.     启动RMAN最简单的方法是从操作系统中运行RMAN,不为其提供连接的请求参数。
  7.     步骤:
  8.         (1)命令行输入:rman target system/nocatalog
  9.         (2)出现“RMAN”提示符,输入:SHOW ALL命令,由RMAN连接到一个目标数据库,可以查看RMAN的配置。
  10.     1.2 目标数据库
  11.         目标数据库也就是要执行备份,转储和恢复的数据库。RMAN将使用的目标数据库的控制文件来收集关于
  12.     数据库的相关操作,并使用控制文件来储存相关的RMAN操作信息。
  13.     1.3 RMAN恢复目录
  14.         恢复目录是RMAN在数据库上建立的一种存储对象,它由RMAN自动维护。
  15.     1.4 介质管理子系统
  16.         主要有第三方提供的介质管理软件和储存设备组成,Rman可以利用介质管理系统软件将数据库备份带类似磁盘的储存设备中。
  17.     1.5 备份数据库
  18.         备份数据库是目标数据库的一个精确复制,通过不断地对应用目标数据库生成归档重做日志,可以保持它与目标数据库的同步。
  19.     1.6恢复目录数据库
  20.         用来保存RMAN恢复目录的数据库,他是一个独立于目标数据库的ORACLE数据库。
  21.     1.7备份集合
  22.         备份集合的特性:包括一个或多个数据文件或归档日志,以oracle 专有的格式保存,有一个完全的所有的备份片集合构成,构成一个完全备 份或增量备份。
  23.     1.8备份片
  24.         一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。

  25. 2.RMAN通道
  26.         一个通道是RMAN 和目标数据库之间的一个连接,"allocate channel"命令在目标数据库
  27.             启动一个服务器进程,同时必须定义服务器进程执行备份或者恢复操作使用的I/O类型。
  28.             通道控制命令可以用来:
  29.                 控制RMAN 使用的O/S资源,影响并行度
  30.                 指定I/O带宽的限制值(设置limit read rate 参数)
  31.                 定义备份片大小的限制(设置limit kbytes)
  32.                 指定当前打开文件的限制值(设置limit maxopenfiles
  33.     2.1 手动分配通道:
  34.         手动分配通道必须使用RUN 命令。
  35.             RUN{命令}
  36.         例如:手动分配一个名为ch_1的通道,要求利用这个通道对表空间system、user、tbsp_1 and ts_1进行备份:
  37.             RMAN> run{
  38.                     2> allocate channel ch_1 device type disk
  39.                     3> format = 'D:\oraclebf\%u_%c.bak'
  40.                     4> backup tablespace system, user, tbsp_1, ts_1 channel ch_1;
  41.                     5> }

  42.     2.2 自动分配通道:
  43.         在下列两种情况,RMAN将设置自动分配通道。
  44.             2.2.1 在RUN命令块外部使用BACKUP、RESTORE、DELETE命令
  45.             2.22 在RUN命令块内部执行BACKUP等命令之前,未使用ALLOCATE CHANNEL命令手动分配通道。
  46.             例如:
  47.                 RMAN> backup tablespace users;
  48.                         2> run{restore tablespace examples;}
  49. 3.RMAN命令
  50.         3.1连接到目标数据库
  51.             RMAN未使用恢复目录,可以使用如下命令形式之一:
  52.                 $ rman nocatalog
  53.                 $ rman target sys/nocatalog
  54.                 $ rman target / connect target sys/password@网络连接串
  55.                 注意:目标数据库与RAMN不同在一台服务器上时,必须使用'@连接串' 的方法

  56.            如果RMAN创建了恢复目录,则可以按如下几种方法连接目标数据库:
  57.                 $ rman target / catalog rman/rman@man
  58.                 $ rman target sys/changge_on_install catalog rman/rman connect catalog sys/password@网络连接串

  59.             举个例子:
  60.             首先创建恢复目录,使用RMAN连接数据库,最后注册数据库。
  61.             (1)在SQL——PLUS环境下:
  62.                 SQL>connect system/1qaz2wsx
  63.                 已连接
  64.                 SQL>create tablespace rman_tbsp datafile='D:oracleFiles\Recover\rman_tbsp.dbf' size 2G;
  65.                 表空间已创建
  66.             (2)在SQL_PLUS环境下创建RMAN用户权限:
  67.                 SQL>create user rman_user identified by mrsoft default tablespace ramn_tbsp temprorary tablespace temp;
  68.                 用户已创建
  69.                 SQL>grant connect,recobery_catalog_owner,resource to rman_user;
  70.             (3)在CMD命令行模式下,打开恢复管理器
  71.                 C:\>RMAN catalog rman_user/mrsoft target orcl;
  72.             (4)在RMAN模式下,创建恢复目录:
  73.                 RMAN> create catalog tablespace rman_tbsp;
  74.             (5)在RMAN模式下,用REGISTER命令注册数据库:
  75.                 RMAN>register database;

  76.     3.2启动与关闭目标数据库
  77.             RMAN>shutdown immediate;
  78.             RMAN>startup;
  79.             RAMN>startup mount;
  80.             RMAN>startup pfile='F:\app\oraclw\product\initora11g.ora';
  81.             RMAN>alter database open;

  82. 4.使用RMAN工具备份
  83.     4.1使用RMAN备份数据库文件和归档日志
  84.         可以使用RMAN BACKUP命令备份以下对象:
  85.             归档重做日志
  86.             数据文件
  87.             数据库
  88.             表空间
  89.             控制文件
  90.             备份集
  91.     4.2非归档模式下的BACKUP 备份与恢复
  92.             恢复目录: 打开
  93.             目标数据库:例程启动,数据库加载,mount 不能open
  94.             因为目标数据库不在归档模式下,所以当进行备份/恢复操作的时候数据库无法打
  95.             开。目标数据库只能在MOUNT状态不能Open,所以属于脱机备份。
  96.             非归档模式不备份redo 日志,只有完全备份和readonly/offline 表空间和数据文件
  97.             备份是有意义的,所以非归档模式最好不用RMAN 进行备份,备份语法与归档模式相同,所以这里只做简单介绍。
  98.             (1)全库备份
  99.                     例: 使用默认的设置脱机全备份的语句
  100.                         RMAN> shutdown immediate;
  101.                         RMAN> startup mount;
  102.                         RMAN> backup database;
  103.                         RMAN> startup;
  104.                     例:不使用默认的设置执行脱机备份操作,在备份命令中指定备份选项
  105.                         RMAN> shutdown immediate;
  106.                         RMAN> startup mount;
  107.                         RMAN> run {
  108.                                 allocate channel c1 type disk format '/xxx/ming_%U';
  109.                                 allocate channel c2 type disk format '/xxx/ming_%U';
  110.                                 backup full tag full_db_backup format "/backups/db_t%t_s%s_p%p" (database);
  111.                                 backup current controlfile;
  112.                                 release channel c1 ;
  113.                                 release channel c2 ;
  114.                             }
  115.                 在这个例子中,我们分配了两个通道,备份位置是在/xxx。默认情况下,如果备份数据文件1 (SYSTEM 表空间),控制文件和参数文件 也会备份。
  116.                 可以通过下面的命令显示恢复目录中记载的备份集信息:
  117.                         RMAN> list backupset of database;

  118.          全库备份的恢复
  119.                     $ rman target /
  120.                     RMAN> startup mount
  121.                     RMAN> restore database;
  122.                     RMAN> recover database;
  123.                     RMAN> alter database open resetlogs;
  124.         (2)表空间备份
  125.                 只有readonly/offline 表空间的备份才有意义。
  126.                 RMAN> run {
  127.                         2> allocate channel dev1 type disk;
  128.                         3> backup
  129.                         4> tag tbs_users_read_only
  130.                         5> format "/oracle/backups/tbs_users_t%t_s%s"
  131.                         6> (tablespace users);
  132.                         7> }
  133.             使用下列命令来显示恢复目录中该表的备份信息:
  134.                     RMAN> list backupset of tablespace users;

  135.           表空间备份的恢复
  136.             RMAN> RUN{
  137.                 sql "alter tablespace xx offline immediate;"
  138.                 restore tablespace xx;
  139.                 recover tablespace xx;
  140.                 sql "alter tablespace xx online;"
  141.                 
  142.         (3)备份控制文件
  143.         RMAN> run {
  144.                 2> allocate channel dev1 type "SBT_TAPE";
  145.                 3> backup
  146.                 4> format "cf_t%t_s%s_p%p"
  147.                 5> tag cf_monday_night
  148.                 6> (current controlfile);
  149.                 7> release channel dev1;
  150.                 8> }
  151.             注:数据库完全备份将自动备份控制文件。(或者备份时加include current controlfile)

  152.     4.3 归档模式下的BACKUP备份与完全恢复
  153.         要用RMAN 进行联机备份操作,数据库就必须位于ARCHIVELOG 模式。恢复
  154.         目录必须打开,目标数据库例程必须启动,数据库加载或者打开。
  155.     (1)整库备份与恢复
  156.         备份命令:
  157.         只备份数据文件 (如果configure controlfile autobackup on; 将自动包括控件文件,SPFILE)
  158.             RMAN> backup database;
  159.         同时备份归档日志,然后将备份后的归档日志删除
  160.             RMAN> backup database plus archivelog delete input;
  161.         明确指定同时备份控件文件:
  162.             RMAN> run{
  163.                 allocate channel c1 type disk;
  164.                 sql 'alter system archive log current';
  165.                 backup full database include current controlfile tag 'dbfull'
  166.                 format '/u06/oracle/rmanback/full_%u_%s_%p';
  167.                 sql 'alter system archive log current';
  168.                 release channel c1;
  169.                 }
  170.         可以用RMAN 的plus archvielog选项简化数据库备份:
  171.             RMAN> run {
  172.                     2> backup database
  173.                     3> format '/xxfull%d_%T_%s'
  174.                     4> plus archivelog
  175.                     5> format '/xx/arch_%d_%T_%s'
  176.                     6> delete all input;
  177.                     7> }
  178.     完全恢复:
  179.         目标数据库必须是mount 状态
  180.             $ rman target /
  181.             RMAN> startup mount
  182.             RMAN> restore database;
  183.             RMAN> recover database;
  184.             RMAN> alter database open;

  185.     (2)表空间的备份与恢复
  186.         备份命令:
  187.             RMAN> backup tablespace users ;
  188.             RMAN> RUN{
  189.                 allocate channel c1 type disk;
  190.                 backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p' ;
  191.                 release channel c1;
  192.             }
  193.         恢复:
  194.         如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而
  195.         不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline。
  196.             RMAN> RUN{
  197.                 sql "alter tablespace xx offline immediate;"
  198.                 restore tablespace xx;
  199.                 recover tablespace xx;
  200.                 sql "alter tablespace xx online;"
  201.             }
  202.         恢复到一个不同的位置:
  203.             RMAN> RUN{
  204.                 sql "alter tablespace xx offline immediate;"
  205.                 SET NEWNAME for datafile 1 to '/xx';
  206.                 restore tablespace xx;
  207.                 switch datafile 1;
  208.                 recover tablespace xx;
  209.                 sql "alter tablespace tbs1 online;"
  210.                 }
  211.     (3)数据文件的备份与恢复
  212.         备份命令:
  213.             RMAN> backup datafile 3;
  214.             RMAN> backup datafile 'D:\ORACLE\ORADATA\TEST\TEST.DB';
  215.         恢复命令:
  216.             数据文件恢复与表空间恢复类似。假设数据文件号为5 的文件丢失,文件名是:
  217.             'E:\ORACLE\ORADATA\USERS.DBF', 那么我们恢复的时候可以指定文件号,也可以指定文件名。
  218.                 RMAN> run {
  219.                     2> allocate channel dev1 type disk;
  220.                     3> sql "alter tablespace users offline immediate";
  221.                     4> restore datafile 4; --或者restore 'E:\ORACLE\ORADATA\USERS.DBF'
  222.                     5> recover datafile 4;
  223.                     6> sql "alter tablespace users online";
  224.                     7> release channel dev1;
  225.                     8> }
  226.         恢复到一个不同的位置:
  227.             $ rman target /
  228.                 RMAN> startup mount
  229.                 RMAN> RUN{
  230.                     sql "alter tablespace users offline immediate";
  231.                     SET NEWNAME for datafile 9 to '/xx/user01.dbf';
  232.                     restore datafile 9;
  233.                     switch datafile all;
  234.                     recover datafile 9;
  235.                     sql "alter tablespace users online";
  236.                 }
  237.     (4)归档重做日志的备份与恢复
  238.         备份命令:
  239.                 整库备份的同时,备份所有归档 (以及联机日志)
  240.                 RMAN> backup database plus archivelog;
  241.         备份所有归档:
  242.                 RMAN> backup archivelog all;
  243.         备份两天来的归档:
  244.                 RMAN> backup archivelog from time='sysdate-2' [to time=’xxx’] ;
  245.         备份从sequence 1 开始的归档:
  246.                 RMAN> backup archivelog from sequence 1 [to sequence =’n];
  247.         备份没有三次备份的归档:
  248.                 RMAN> backup archivelog not backed up 3 times;
  249.         备份所有归档,然后删除归档:
  250.                 RMAN> backup archivelog all delete input;

  251.         恢复:
  252.         显示恢复目录中的归档日志:
  253.                 RMAN> list backupset of archivelog all;
  254.         一般情况下,在RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需
  255.         要恢复重做日志,例如我们用Log Miner 来从归档中查找一些东西。
  256.         RMAN命令举例:
  257.                 RMAN> RESTORE ARCHIVELOG ALL;
  258.                 RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
  259.                 RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
  260.         可以用SET 命令来指定归档日志的还原位置,例如:
  261.         RMAN> run{
  262.             set archivelog destination to "d:\temp";
  263.             restore archivelog all;
  264.         }
  265.         需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果Oracle 判定日志已存在,也不会恢复该归档日志文件。
  266.         联机日志的备份
  267.               联机日志不能用RMAN 来备份,可以先将其归档,再备份。为了实现这点,必须在RMAN中执行归档命令语句:
  268.             RMAN> run {
  269.                     2> allocate channel dev1 type disk;
  270.                     3> sql "alter system archive log current";
  271.                     4> backup (archivelog from time "sysdate-1" all delete input)
  272.                     5> "format "/oracle/backups/log_t%t_s%s_p%p";
  273.                     6> release channel dev1;
  274.                     7> }
  275.             上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。
  276.              当然,也可以在全库备份时使用plus archvielog 选项,将自动完成联机日志的备份。
  277.      (5)控制文件和服务器参数文件的备份与恢复
  278.             备份:
  279.             // 设置文件名格式
  280.                 RMAN> set controlfile autobackup format for device type disk to 'ctl_%F';
  281.                 1. RMAN> configure controlfile autobackup on; // backup database时将自动备份
  282.                 2. RMAN> backup current controlfile;
  283.                 3. RMAN> backup .... include control file;
  284.                 4. RMAN> backup file 1; // system datafile 自动备份
  285.            SPFILE(PFILE)的丢失/损坏,对数据库不会产生致命影响,可以从其他方式恢复。
  286.            不过既然RMAN 的备份计划中包括了SPFILE 的备份,那么就可以使用RMAN 来还原SPFILE 了。
  287.                 $ rman target / catalog "rman/rman@db"
  288.                 RMAN> set dbid=153910023 // SET DBID 这个步骤是不能省略的,否则会报错。
  289.                 RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者restore spfile;
  290.                 RMAN> startup force
  291.             或者从某个备份集恢复:
  292.                 RMAN> restore spfile from backupset bs_num命令。
  293.            使用 dbms_backup_restore 包恢复服务器参数文件:
  294.            在一些不常见的情况下,我们可能需要直接使用dbms_backup_restore 包来恢复spfile。当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。
  295.             这个包可以在数据库NOMOUNT 状态下使用。假设我们有一个自动备份文件C-2600315304-20060829-02,我们需要从这里恢复据那么可以通过执行下面的脚本:
  296.                 SQL>
  297.                     DECLARE
  298.                         DEVTYPE VARCHAR2(256);
  299.                     DONE BOOLEAN;
  300.                 BEGIN
  301.                     DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
  302.                     DBMS_BACKUP_RESTORE.restoresetdatafile;
  303.                     DBMS_BACKUP_RESTORE.restorespfileto('/back/SPFILE.ORA');
  304.                     DBMS_BACKUP_RESTORE.restorebackuppiece(
  305.                     '/back/C-2600315304-20060829-02',DONE=>done);
  306.                     DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
  307.             END;
  308.         恢复控制文件:
  309.                 RMAN> startup nomount;
  310.                 RMAN> set dbid=153910023
  311.                 RMAN> restore controlfile from autobackup
  312.               或
  313.                 RMAN> restore controlfile from '/arch/ct_c-2347671489-20060630-00';
  314.         联机状态:目标数据库MOUNT或OPEN
  315.                 RMAN> restore controlfile to 'd:\temp\control01.ctl';
  316.         然后再执行恢复数据库的其他步骤:
  317.                 RMAN> restore database;
  318.                 RMAN> recover database;
  319.                 RMAN> alter database open resetlogs;
  320.         使用 dbms_backup_restore包恢复控制文件:
  321.             SQL>
  322.                 DECLARE
  323.                     DEVTYPE VARCHAR2(256);
  324.                 DONE BOOLEAN;
  325.                 BEGIN
  326.                     DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
  327.                     DBMS_BACKUP_RESTORE.restoresetdatafile;
  328.                     DBMS_BACKUP_RESTORE.restorecontrolfileto('/back/CONTROL01.CTL');
  329.                     DBMS_BACKUP_RESTORE.restorebackuppiece
  330.                     ('/back/C-2600315304-20060829-00',DONE=>done);
  331.                     DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
  332.                     END;
  333.     (6)备份集的备份的备份与恢复
  334.         备份:
  335.         备份所有备份集:
  336.             RMAN> backup backupset all;
  337.         备份指定备份集:
  338.             RMAN> backup backupset bs_num;
  339.         恢复:(这种备份只是增加一个镜像,不用恢复)
  340.         主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁
  341. 4.4基于SCN 的恢复
  342.         如果知道数据库出错前的SCN,可以将数据库还原到指定SCN 状态。
  343.             $ startup mount;
  344.             RMAN> run{
  345.                     allocate channel d1 type disk;
  346.                     restore database until scn 1317011; --或者set until scn 1317011
  347.                     recover database until scn 1317011;
  348.                     sql 'alter database open resetlogs';
  349.                     release channel d1;
  350.                     }
  351. 4.5基于时间的恢复
  352.         下面使用set until time 命令为2005 年8 月1 日下午 1点的恢复目标:
  353.             $ startup mount;
  354.             RMAN> run{
  355.                     set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')
  356.                     restore database;
                        recover database;
                        alter database open resetlogs;
                  }
        执行上面的命令时, RMAN 会查找与恢复目标时间最近、但是不包含恢复目标时间及以后时间的备份集,并且从这个备份中还原数据库。如果数据库非归档模式,那么恢作会在备份集的时间点停止;否则RECOVER 命令会应用恢复目标之前的归档重做日志或需要的增量备份。

阅读(1654) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~