设为首页 收藏本站
查看: 403|回复: 0

[经验分享] Oracle数据库备份与恢复(II)

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

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

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

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

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

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

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

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

          表空间备份的恢复
            RMAN> RUN{
                sql "alter tablespace xx offline immediate;"
                restore tablespace xx;
                recover tablespace xx;
                sql "alter tablespace xx online;"

        (3)备份控制文件
        RMAN> run {
                2> allocate channel dev1 type "SBT_TAPE";
                3> backup
                4> format "cf_t%t_s%s_p%p"
                5> tag cf_monday_night
                6> (current controlfile);
                7> release channel dev1;
                8> }
            注:数据库完全备份将自动备份控制文件。(或者备份时加include current controlfile)

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

    (2)表空间的备份与恢复
        备份命令:
            RMAN> backup tablespace users ;
            RMAN> RUN{
                allocate channel c1 type disk;
                backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p' ;
                release channel c1;
            }
        恢复:
        如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而
        不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline。
            RMAN> RUN{
                sql "alter tablespace xx offline immediate;"
                restore tablespace xx;
                recover tablespace xx;
                sql "alter tablespace xx online;"
            }
        恢复到一个不同的位置:
            RMAN> RUN{
                sql "alter tablespace xx offline immediate;"
                SET NEWNAME for datafile 1 to '/xx';
                restore tablespace xx;
                switch datafile 1;
                recover tablespace xx;
                sql "alter tablespace tbs1 online;"
                }
    (3)数据文件的备份与恢复
        备份命令:
            RMAN> backup datafile 3;
            RMAN> backup datafile 'D:\ORACLE\ORADATA\TEST\TEST.DB';
        恢复命令:
            数据文件恢复与表空间恢复类似。假设数据文件号为5 的文件丢失,文件名是:
            'E:\ORACLE\ORADATA\USERS.DBF', 那么我们恢复的时候可以指定文件号,也可以指定文件名。
                RMAN> run {
                    2> allocate channel dev1 type disk;
                    3> sql "alter tablespace users offline immediate";
                    4> restore datafile 4; --或者restore 'E:\ORACLE\ORADATA\USERS.DBF'
                    5> recover datafile 4;
                    6> sql "alter tablespace users online";
                    7> release channel dev1;
                    8> }
        恢复到一个不同的位置:
            $ rman target /
                RMAN> startup mount
                RMAN> RUN{
                    sql "alter tablespace users offline immediate";
                    SET NEWNAME for datafile 9 to '/xx/user01.dbf';
                    restore datafile 9;
                    switch datafile all;
                    recover datafile 9;
                    sql "alter tablespace users online";
                }
    (4)归档重做日志的备份与恢复
        备份命令:
                整库备份的同时,备份所有归档 (以及联机日志):
                RMAN> backup database plus archivelog;
        备份所有归档:
                RMAN> backup archivelog all;
        备份两天来的归档:
                RMAN> backup archivelog from time='sysdate-2' [to time=’xxx’] ;
        备份从sequence 1 开始的归档:
                RMAN> backup archivelog from sequence 1 [to sequence =’n];
        备份没有三次备份的归档:
                RMAN> backup archivelog not backed up 3 times;
        备份所有归档,然后删除归档:
                RMAN> backup archivelog all delete input;

        恢复:
        显示恢复目录中的归档日志:
                RMAN> list backupset of archivelog all;
        一般情况下,在RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需
        要恢复重做日志,例如我们用Log Miner 来从归档中查找一些东西。
        RMAN命令举例:
                RMAN> RESTORE ARCHIVELOG ALL;
                RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
                RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
        可以用SET 命令来指定归档日志的还原位置,例如:
        RMAN> run{
            set archivelog destination to "d:\temp";
            restore archivelog all;
        }
        需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果Oracle 判定日志已存在,也不会恢复该归档日志文件。
        联机日志的备份
              联机日志不能用RMAN 来备份,可以先将其归档,再备份。为了实现这点,必须在RMAN中执行归档命令语句:
            RMAN> run {
                    2> allocate channel dev1 type disk;
                    3> sql "alter system archive log current";
                    4> backup (archivelog from time "sysdate-1" all delete input)
                    5> "format "/oracle/backups/log_t%t_s%s_p%p";
                    6> release channel dev1;
                    7> }
            上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。
             当然,也可以在全库备份时使用plus archvielog 选项,将自动完成联机日志的备份。
     (5)控制文件和服务器参数文件的备份与恢复
            备份:
            // 设置文件名格式
                RMAN> set controlfile autobackup format for device type disk to 'ctl_%F';
                1. RMAN> configure controlfile autobackup on; // backup database时将自动备份
                2. RMAN> backup current controlfile;
                3. RMAN> backup .... include control file;
                4. RMAN> backup file 1; // system datafile 自动备份
           SPFILE(PFILE)的丢失/损坏,对数据库不会产生致命影响,可以从其他方式恢复。
           不过既然RMAN 的备份计划中包括了SPFILE 的备份,那么就可以使用RMAN 来还原SPFILE 了。
                $ rman target / catalog "rman/rman@db"
                RMAN> set dbid=153910023 // SET DBID 这个步骤是不能省略的,否则会报错。
                RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者restore spfile;
                RMAN> startup force
            或者从某个备份集恢复:
                RMAN> restore spfile from backupset bs_num命令。
           使用 dbms_backup_restore 包恢复服务器参数文件:
           在一些不常见的情况下,我们可能需要直接使用dbms_backup_restore 包来恢复spfile。当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。
            这个包可以在数据库NOMOUNT 状态下使用。假设我们有一个自动备份文件C-2600315304-20060829-02,我们需要从这里恢复据那么可以通过执行下面的脚本:
                SQL>
                    DECLARE
                        DEVTYPE VARCHAR2(256);
                    DONE BOOLEAN;
                BEGIN
                    DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
                    DBMS_BACKUP_RESTORE.restoresetdatafile;
                    DBMS_BACKUP_RESTORE.restorespfileto('/back/SPFILE.ORA');
                    DBMS_BACKUP_RESTORE.restorebackuppiece(
                    '/back/C-2600315304-20060829-02',DONE=>done);
                    DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
            END;
        恢复控制文件:
                RMAN> startup nomount;
                RMAN> set dbid=153910023
                RMAN> restore controlfile from autobackup
              或
                RMAN> restore controlfile from '/arch/ct_c-2347671489-20060630-00';
        联机状态:目标数据库MOUNT或OPEN
                RMAN> restore controlfile to 'd:\temp\control01.ctl';
        然后再执行恢复数据库的其他步骤:
                RMAN> restore database;
                RMAN> recover database;
                RMAN> alter database open resetlogs;
        使用 dbms_backup_restore包恢复控制文件:
            SQL>
                DECLARE
                    DEVTYPE VARCHAR2(256);
                DONE BOOLEAN;
                BEGIN
                    DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
                    DBMS_BACKUP_RESTORE.restoresetdatafile;
                    DBMS_BACKUP_RESTORE.restorecontrolfileto('/back/CONTROL01.CTL');
                    DBMS_BACKUP_RESTORE.restorebackuppiece
                    ('/back/C-2600315304-20060829-00',DONE=>done);
                    DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
                    END;
    (6)备份集的备份的备份与恢复
        备份:
        备份所有备份集:
            RMAN> backup backupset all;
        备份指定备份集:
            RMAN> backup backupset bs_num;
        恢复:(这种备份只是增加一个镜像,不用恢复)
        主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁
4.4基于SCN 的恢复
        如果知道数据库出错前的SCN,可以将数据库还原到指定SCN 状态。
            $ startup mount;
            RMAN> run{
                    allocate channel d1 type disk;
                    restore database until scn 1317011; --或者set until scn 1317011
                    recover database until scn 1317011;
                    sql 'alter database open resetlogs';
                    release channel d1;
                    }
4.5基于时间的恢复
        下面使用set until time 命令为2005 年8 月1 日下午 1点的恢复目标:
            $ startup mount;
            RMAN> run{
                    set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')
                    restore database;
                    recover database;
                    alter database open resetlogs;
              }
    执行上面的命令时, RMAN 会查找与恢复目标时间最近、但是不包含恢复目标时间及以后时间的备份集,并且从这个备份中还原数据库。如果数据库非归档模式,那么恢作会在备份集的时间点停止;否则RECOVER 命令会应用恢复目标之前的归档重做日志或需要的增量备份。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18606-1-1.html 上篇帖子: Oracle数据库备份与恢复(I) 下篇帖子: 在Oracle 11g下查看数据库的global_name
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表