Oracle数据备份与恢复

目录

1.概述

2.重要概念

3.开启/关闭归档

4.使用RMAN

5 使用Catalog恢复目录管理备份信息

6 数据块

7. 使用dbms_backup_restore包

8 使用RMAN进行表级别恢复(12c)

9 rman duplicate复制|克隆技术 


1.概述


    RMAN(Recovery Manager)恢复管理器:
        Oracle专用的备份恢复工具,
        用于备份(backup),恢复(recover),还原(restore)的工具.
    第三方备份软件:
        赛门铁克
        NBU
        TSM
        底层都是调用RMAN的脚本进行备份
    为什么需要进行备份?
        备份与恢复的主要目的就是当数据库的数据丢失时,进行恢复数据.
        备份类型:
            跨机房备份
            跨地区备份
            异机备份
    数据库的故障类型:
        1)介质故障
            硬件损坏
        2)用户错误
            应用程序逻辑错误或者手动错误导致数据库的数据更改错误.
        3)应用程序错误
            软件故障损坏数据块
            
    备份的方式:
        物理备份
            rman
                任意时间点,故障点,scn,日志序列号的恢复
                两种模式
                    archivelog模式:归档模式
                        支持脱机备份(冷备)和联机备份(热备)
                    noarchivelog模式:非归档模式
                        只支持脱机备份(冷备)
        逻辑备份
            导入导出工具:exp-imp
            数据泵工具:expdp-impdp
            无法进行任意时间点恢复


2.重要概念


 spfile参数文件:
        参数文件的一种,spfile和pfile,
        包含一系列参数以及参数对应值的操作系统文件,
        在数据库实例启动时候加载的,
        决定了数据库的物理 结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,
        是进行数据库设计和性能调优的重要文件.
        pfile初始化参数文件:
            Oracle9i之前,一致采用pfile方式储存初始化参数
            默认名称:init+实例名.ora
            文件路径:$ORACLE_HOME/product/12.1.0/dbhome_1/dbs
            文本文件,可编辑
            查看目录位置:
                方式一:
                    SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='pfile';
                方拾二:
                    SQL>Show parameter pfile;
        spfile服务器参数文件:
            Oracle9i开始引入spfile
            默认名称:spfile+实例名.ora
            文件路径:$ORACLE_HOME/product/12.1.0/dbhome_1/dbs
            二进制文本,不能直接编辑,只能通过SQL命令在线修改
            查看目录位置:
                方式一:
                    SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';
                方拾二:
                    SQL>Show parameter spfile;
        使用pfile/spfile启动数据库
            startup启动次序spfile优先于pfile
                查找文件的顺序是;spfileSID.ora > spfile.ora > initSID.ora > init.ora
            指定pfile或者spfile启动数据库
                startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';
                startup spfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora';
                
    控制文件
        数据库的一个二进制文件;
        主要记录当前数据库结构信息,同时包含数据文件及日志文件信息以及相关的状态,归档信息;
        一个控制文件只能属于一个数据库;
        控制文件丢失,数据库无法操作;
        控制文件中包含的内容
                数据库的名字、ID、创建的时间戳
                表空间的名字
                联机日志文件、数据文件的位置、个数、名字
                联机日志的Sequence号码
                检查点的信息
                撤销段的开始或结束
                归档信息
                备份信息
        
        使用相关视图来查看
            select * from V$CONTROLFILE                               --列出实例中所有控制文件的名字及状态信息
            select * from V$PARAMETER  where name='control_file'      --列出所有参数的位置及状态信息
            select * from V$CONTROLFILE_RECORD_SECTION                --列出控制文件中记录的部分信息
            SHOW PARAMETER CONTROL_FILES                              --列出控制文件的名字、状态、位置等    
        
        控制文件多路复用
            概念:
                为了提高数据库的安全性,至少要为数据库建立两个控制文件,分别存放在不同的磁盘中,
                这样可以避免某个磁盘故障无法启动数据库的危险.
            修改:
                alter system set control_files='$ORACLE_HOME/oradata/orcl/control01.ctl','$ORACLE_HOME/oradata/orcl/control02.ctl' scope=spfile;
                添加新的控制文件时
                    先关闭数据库
                    复制已有的控制文件到新的控制文件目录下
                    修改复制过来的控制文件名称
        所有的控制文件丢失或者损坏时,创建控制文件
            备份数据文件和重做日志文件
                select * from v$logfile;
                select * from v$datafile;
                cp备份
            将数据库启动到nomount状态
            手动创建控制文件
                SQL>create controlfile
                    reuse database "orcl"
                    logfile
                    group 1 '/usr/oracle/app/oradata/orcl/redo01.log',
                    group 2 '/usr/oracle/app/oradata/orcl/redo02.log',
                    group 3 '/usr/oracle/app/oradata/orcl/redo03.log'
                    datafile
                    '/usr/oracle/app/oradata/orcl/system01.dbf',
                    '/usr/oracle/app/oradata/orcl/sysaux01.dbf',
                    '/usr/oracle/app/oradata/orcl/undotbs01.dbf',
                    '/usr/oracle/app/oradata/orcl/users01.dbf',
                    '/usr/oracle/app/oradata/orcl/CTRR_DATA.dbf'
                    maxlogfiles 50
                    maxlogmembers 4
                    maxinstances 6
                    maxdatafiles 200
                    noresetlogs
                    noarchivelog;
    
    日志文件
        记录数据库的更新(增,删,改)记录
        归档日志文件
        redo日志文件
            在线redo
                Oracle以SQL脚本的形式实时记录数据库的数据更新
            归档redo
                满足条件时,Oracle将在线重做日志以文件形式保存到磁盘(持久化)
                
        使用相关视图来查看
            V$LOG
            V$LOGFILE        
    
    备份集
        逻辑概念,一次备份所有备份片的集合
        默认情况下一个备份集由一个备份片组成
        备份集可包含多个备份片
        通过设置备份片大小控制备份集中备份片的个数
    备份片
        一个一个的备份文件
        设置备份片大小
            RMAN>configure channel device type disk maxpiecesize 200m;
    联机备份/热备:
        数据库open状态下进行备份,不影响数据库使用
        备份方式
            归档模式下使用rman备份方式
    脱机备份/冷备:
        数据库shutdown状态下进行备份
        备份方式
            cp方式
                数据文件(v&datafile)
                控制文件(v$controlfile)
                参数文件(show parameter spfile)
                redo日志文件(v$logfile)
                临时文件(v$tempfile)
            冷备RMAN方式
    一致性备份
        当数据库处于一致性状态的时候备份就是一致性备份
        数据库一致性状态就是关闭状态
            shutdown immediate  #干净关闭数据库,属于一致性状态
            shutdown normal/transactional/abort  #不是一致性状态
        脱机备份(冷备份)属于一致性备份
    非一致性备份
        当数据库处于非一致性状态的备份就是非一致性备份
        数据库非一致性状态
            实例失败
            shutdown abort
            数据库打开的时候
        联机备份(热备份)属于非一致性备份
    
    归档文件

        //TODO

3.开启/关闭归档


    查看当前是否开启归档
        方式一:
            SQL>archive log list;
        方式二:
            select log_mode from v$database;
    查看归档进程状态:
        select * from v$archive_processes;
    设置归档相关参数
        查看参数值
            show parameter 参数名
            如:show parameter log_archive_format;
        归档文件位置(log_archive_dest)
            alter system set log_archive_dest='目录' scope=spfile;
        归档文件名的格式(log_archive_format)
            alter system set log_archive_format='%t_%s_%r.arch' scope=spfile;
            %t:线程号
            %s:日志序列号
            %r:resetlogs id
            %d:database id
    开启归档模式
        sqlplus / as sysdba              #登录数据库
        shutdown immediate               #干净的关闭数据库
        startup mount                    #启动到mount状态
        alter database archivlog;         #打开归档
        alter databse open;              #打开数据库
    关闭归档模式
        sqlplus / as sysdba              #登录数据库
        shutdown immediate               #干净的关闭数据库
        startup mount                    #启动到mount状态
        alter database noarchivlog;     #关闭归档
        alter databse open;              #打开数据库    
        
    注意:
        非归档模式下备份数据库时,需要
            关闭数据库
                SQL>shutdown immediate;
            启动到mount状态
                SQL>startup mount;
            进行备份    

4.使用RMAN


    连接到RMAN

        rman target /                                          #系统权限
        rman target /  as sysdba                               #系统权限
        rman target username/password@ip:port/sid              #普通用户权限
        rman target username/password@ip:port/sid as sysdba    #系统权限
        rman target / nocatalog                                #不使用恢复目录
        rman target / catalog rco/rco@ip:port/sid              #使用恢复目录
        
    RMAN配置
        RMAN>show all;    #查看所有配置
        RMAN>show retention policy;    #查看保留策略
        RMAN>show default device type; #查看设备类型
        
        SQL>select * from v$rman_configuration;   #查看修改过的rman参数
        
        RMAN>configure default device type to 'SBT_TAPE';   #修改默认的设备类型为磁带
        RMAN>configure default device type clear;           #清除设备类型配置
        
        #配置冗余策略
        RMAN>configure retention policy to pedundancy 2;
        RMAN>configure retention policy clear;  #清除冗余配置
        
        #配置默认的备份类型(备份集|映像副本)
        RMAN>configure device type disk backup type to copy;                   #映像副本
        RMAN>configure deivice type disk backup type to compressed backupset;  #压缩备份集
        RMAN>configure device type disk backup type clear;     #清除备份类型设置
        
        #配置通道channel
        默认情况下,RMAN为所有操作分配一个磁盘通道
        RMAN>configure channel device type disk format '/u01/backup/db_%U';
        RMAN>configure channel device type disk format '+dg1';
        
        #配置并行
        RMAN>configure device type disk backup type tocompressed backupset parallelism 2;
        
        #配置优化
        RMAN>configure backup optimization on;
        
        #配置控制文件自动备份位置
        RMAN>configure controlfile autobackup format for device type disk to '/u01/backup/ctl_%F';
        
        #配置备份集最大大小
        RMAN>configure maxsetsize to 500m;
        #配置备份片最大大小
        RMAN>configure channel device type disk  maxpiecesize 500m;
        #配置双工备份集,一次备份两个备份集
        RMAN>configure datafile backup copies for device type disk to 2;
        
        #备份整个数据库时排除部分表空间
        RMAN>configure exclude for tablespace system;
        
        #配置压缩
            RMAN支持的备份集的预压缩处理和二进制压缩
            预压缩块处理
                通过合并每个数据块中的空闲时间并将空闲空间设置为二进制0来实现更好的备份压缩
                optimize for load true
            支持的压缩级别
                默认压缩算法        
                高级压缩选型
                
                #启用压缩
                RMAN>configure device type disk backup type to compressed backupset;
                #配置压缩级别
                RMAN>configure compression algorithm 'BASIC|HIGH|MEDIUM|LOW'
        
        #配置备份集加密
            1.口令加密模式
                查看加密算法
                    SQL>select * from v$rman_encryption_algorithms;
                默认是AES128
                AES192,AES256
                对称加密算法
                RMAN加密是CPU密集型操作,可能会对备份的性能有要求
                设置加密
                    RMAN>set encryption on identified by 'oracle' only;
                设置解密
                    RMAN>set decryption on identified by 'oracle';
                    
            2.透明加密模式(wallet钱包)
                查看秘钥存放位置
                    SQL>select * from v$encryption_wallet
                创建wallet目录
                设置秘钥
                    SQL>alter system set encryption key identified by 'oracle';
                关闭钱包
                    SQL>alter syste set wallet close identified by 'oracle';
                打开钱包    
                    SQL>alter syste set wallet open identified by 'oracle';
                配置rman备份允许加密    
                    RMAN>configure encryption for database on;
            3.混合模式
                配置混合模式
                    RMAN>set encryption on identified by 'oracle';
                打开RMAN加密    
                    RMAN>configure encryption for database on;
                打开钱包    
                    SQL>alter syste set wallet open identified by 'oracle';    
                执行备份表空间
                删除备份表空间
                进行恢复
                    两种解密方式
                        设置解密
                            RMAN>set decryption on identified by 'oracle';
                        打开钱包    
                            SQL>alter syste set wallet open identified by 'oracle';
        
        
        %U:默认的文件命令模式,生成的文件名具有唯一性
        %a:Oracle数据库的activation ID即RESETLOG_ID。
        %c:备份片段的复制数(从1开始编号,最大不超过256)。
        %d:Oracle数据库名称。
        %e:归档序号。
        %F:基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库
        的DBID,YYYYMMDD为日期,QQ是一个1~256的序列。
        %h:归档日志线程号。
        %I:Oracle数据库的DBID。
        %M:当前时间中的月,格式为MM。
        %N:表空间名称。
        %n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8。比如数据库名JSSBOOK,则生成的名
        称则是JSSBOOKx。
        %p:备份集中备份片段的编号,从1开始。
        %s:备份集号。
        %t:备份集时间戳。
        %T:当前时间的年月日格式(YYYYMMDD)。
        %u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名
        称。
        %Y:当前时间中的年,格式为YYYY。
        %U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是    
        最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示:
        
        生成备份片段时,%U=%u_%p_%c;
        生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u;
        生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u;
        生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。
        
        
        注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。
        
    
    
    备份
        RMAN>backup database;                   #备份数据文件
        RMAN>backup database plus archivelog;   #备份数据文件+归档文件
        RMAN>backup spfile;                     #备份参数文件
        RMAN>backup current controlfile;        #备份控制文件
        RMAN>backup device type disk database;  #备份时指定设备类型
        RMAN>backup database noexclude;         #备份数据库,不使用配置排除表空间的设置
        #spfile和controlfile的自动备份
            #开启自动备份
            RMAN>configure controlfile auto backup on;
            #关闭自动备份
            RMAN>configure controlfile autobackup off;
            #设置自动备份位置
            RMAN>configure controlfile autobackup format for device type disk to '/u01/backup/ctl_%F';
        
        #备份归档日志
            RMAN>backup archivelog all;
            RMAN>backup archivelog all delete all input;  #备份归档文件并删除归档
            
            SQL>alter system switch logfile;  #归档当前日志文件
            
        #备份映像副本
            RMAN>backup as copy database;
            RMAN>backup as copy datafile 4;    #备份某个数据文件的映像副本
            RMAN>backup as copy datafile 4 fromat '/u01/backup/user01.copy';   #指定备份目录
            
            
            
        
    查看备份:
        RMAN>list backup;            #查看备份文件列表
        RMAN>list backupset;        #查看备份集列表
        RMAN>list copy;             #查看映像副本
        RMAN>list backup of datafile 1;   #列出包含1号数据文件的备份集
        RMAN>list backup of tablespace users;   #列出包含users表空间的备份集
        RMAN>list copy of datafile 1;     #列出包含1号数据文件的映像副本
        RMAN>list backupset 8;      #列出8号备份集
        RMAN>list backupset tag 'TAG20180419T213849';
        RMAN>list archivelog all;   #列出所有的归档日志
        RMAN>list backup by file;
        RMAN>list backupset summary;    #查看备份集状态,检查之后查看
        RMAN>list backup of database;
    
    report命令
        RMAN>report schema;       #查看构成数据库组成的文件
        RMAN>report need backup;  #报告需要备份的文件
        RMAN>report unrecoverable; #列出不能恢复的文件
        RMAN>report need backup days 3; #列出三天未备份的文件
        RMAN>report obsolete;     #报告过期的备份
    
    检查备份集
        crosscheck backupset; #检查备份集是否可用
    
    删除备份
        RMAN>delete backupset/backup;    #删除所有备份集
        RMAN>delete expired backupset;   #删除过期的备份集,检查之后有效
        RMAN>delete expired;             #不删除任何文件,只更新储存库
        RMAN>delete obsolete;            #删除过期的备份
        RMAN>delete noprompt backupset;  #不提示直接删除,一般用于脚本中
        RMAN>delete archivelog all;      #删除归档日志
        
        
    注册备份集和归档日志
        注册备份集
            注册单个备份片
                catalog backuppiece '备份片文件'
            注册整个目录
                catalog start with '备份集目录'
        注册归档日志
            注册单个归档日志文件
                alter database register physical logfile '归档日志文件';
            注册整个目录
                catalog start with '归档日志文件目录';
    
    验证数据库
        方式一:validate
            RMAN>validate database;              #验证整个数据库
            RMAN>validate tablespace users;      #验证某个表空间
            RMAN>validate datafile 1;            #验证某个数据文件
            RMAN>validate archivelog all;         #验证归档日志
            RMAN>validate datafile 1 block 10;   #验证数据文件的单个数据块
            RMAN>validate backupset 28;          #验证备份集
        
        方式二:backup validate ...               #不产生任何备份
            RMAN>backup validate database;
            RMAN>backup validate check logical database;
            RMAN>backup validate archivelog all;
            RMAN>backup validate database archivelog all;
            
        方式三:restore ... validate
            RMAN>restore database validate;     #验证数据库是否能够进行恢复
            
        方式四:使用Oracle自带命令
            dbv file=数据文件;            #验证数据文件是否损坏
            
        关于校验和损坏块
            db_lock_checksum=typical
            用于控制数据库中数据文件和redo文件中块的检验和写入
            数据库在正常操作期间为每一个块计算校验和,将其写入磁盘之前储存在块的头部.
            当数据库从磁盘中读取块的时候,会重新计算校验和,与之前存储的校验和进行比较,如果不匹配就代表已经损坏.
            
            物理和逻辑块损坏
                物理块损坏
                    数据库根本无法识别该块
                逻辑块损坏
                    块的内容在逻辑上不一致
                    例如:
                        行片损坏
                        索引条目损坏
            默认情况下
                RMAN不检查逻辑块
                需要检查逻辑块时:
                    RMAN>validate check logical database;
                    
    数据库恢复
        恢复的前提
            1.归档模式下
            2.存在RMAN备份
        恢复到故障点
            情形说明
                数据文件:丢失
                控制文件:不考虑
                redo日志文件:不考虑
                参数文件:不考虑
                临时文件::不考虑,rman不备份临时文件
                进行一次备份,模拟发生故障(删除数据文件),进行恢复
                
            rm 删除数据文件
            关闭数据库
                SQL>shutdown abort;    
            启动数据库
                spfile->mount(寻找控制文件,controlfile)-->open(寻找数据文件)
            查看数据库状态
                SQL>select status from v$instance;
            恢复
                置于mount状态
                    SQL>startup mount;
                恢复文件restore
                    RMAN>restore database;(删除了所有文件)
                    RMAN>restore datafile 1;(删除了指定号文件)
                    RMAN>restore datafile '指定文件路径'
                介质恢复recover,应用归档日志,redo日志
                    RMAN>recover databse;
                    RMAN>recover datafile 1;
                打开数据库
                    SQL>alter database open;
            
            补充说明:
                恢复数据库到指定目录
                    RMAN>run{
                            set newname for datafile 1 to '指定恢复路径';
                            set newname for datafile 2 to '指定恢复路径';
                            set newname for datafile 3 to '指定恢复路径';
                            set newname for datafile 4 to '指定恢复路径';
                            restore database;
                            switch datafile all;
                            recover database;
                            sql 'alter database open';
                        }
                        
        恢复到指定时间
            情形说明
                进行一次备份
                创建表,添加数据
                删除表或删除数据
                恢复到删除之前的状态
            
            SQL>shutdown immediate;
            SQL>startup mount;
            RMAN>run{
                set until time "to_date('2019-04-26 13:00:00','yyyy-mm-dd hh24:mi:ss')";
                restore database;
                recover database;
                }
                
        DataRecoveryAdvisor恢复数据库
            恢复指导,是一款oracle数据库工具,自动故障诊断,提供适当的恢复建议,修复.
            
            1.备份数据库
                RMAN>backup database;
            2.删除文件
                rm 数据文件
            3.关闭数据库
                SQL>shutdown abort;
            4.启动数据库到mount状态
                SQL>startup mount;
            5.查看错误信息
                RMAN>list failure;   #需要触发,alter database open;打开数据库触发
            6.恢复建议
                RMAN>advise failure;
                有手动恢复和自动恢复
            7.查看自动恢复脚本内容
                RMAN>repaire failure review;    
            8.执行自动恢复
                RMAN>repaire failure;        
    
    增量备份

        为什么需要增量备份?
            1.缩短备份的时间
            2.
        类型    
            1.差异增量备份
                定义:
                    自上一次同级别的差异备份或者上一次更高级别的备份完成之后,
                    数据库发生改变的数据块.
                backup database:整库备份,不能作为增量策略的一部分
                backup incremental level 0 database;整库备份,可以作为增量备份的基础
                
                归档模式:数据库open的状态下可以备份数据库
                非归档模式:数据库启动到mount状态下才可以备份数据库
                
                操作:
                    1.打开块跟踪
                        SQL>alter databse enable block change tracking using file '/u01/ctf';
                    2.整备
                        RMAN>backup incremental level 0 database format 'u01/backup/l0_%U';
                    3.差异增备
                        RMAN>backup incremental level 1 database format 'u01/backup/l1_%U';
            2.累积增量备份
                定义:
                    上一次更高级别备份完成之后,数据库发生改变的数据块.
                操作:
                    1.打开块跟踪
                        SQL>alter databse enable block change tracking using file '/u01/ctf';
                    2.整备
                        RMAN>backup incremental level 0 database format 'u01/backup/l0_%U';
                    3.累积增量备份
                        RMAN>backup incremental level 1 cumulative database format 'u01/backup/l1_%U';
                        
            3.增量更新备份(oracle特有)
                定义:
                    将差异性增量直接备份到copy文件中
                操作:
                    run{
                    recover copy of database with tag 'incr_update';
                    backup incremental level 1 for recover of copy with tag 'incr_update' database;
                    }
                    执行三次
                    第一次:
                        没有相应的备份集来应用到文件映像上,产生映像文件
                    第二次:
                        执行失败,产生一个增量备份集
                    第三次:
                        应用上次备份集到copy文件
                        
        使用块跟踪(Block Change Tracking)加速增量备份
            主要用在RMAN的增量备份,记录自上一次备份以来数据的变化,
            标识更改的块进行备份,CTWR(change tracking wirter)进程
            只读取改变的内容,不需要对整个数据库进行扫描,从而提高rman的备份性能,
            加快备份,缩短备份时间.
            
            查询块跟踪
                select * from v$block_change_tracking;
            开启块跟踪
                SQL>alter database enable block change tracking using file '指定文件';    //开启并指定文件记录信息
                配置了参数db_create_file_dest时不需要指定文件
                SQL>alter database enable block change tracking;
            关闭块跟踪
                SQL>alter database disable block change tracking;                            
    
    其他:
    修改显示的时间格式:
        export NLS_DATE_FORMATE='yyyy-mm-dd hh24:mi:ss';    
    
    SQL>alter database force logging;
    
 

5 使用Catalog恢复目录管理备份信息


    catalog恢复目录就是一个Oracle数据库,
    用来存储Oracle数据库的备份信息,一个或者多个
    
    控制文件储存备份信息:
        缺点:
            存放的周期不宜太长,使用control_file_record_keep_time参数来控制
        
    使用catalog恢复目录管理备份信息的前提:
        dbid必须不一样
    查看dbid:
        select dbid from v$database;
    
    在mount状态下修改dbid
        
        Linux>nid target=sys/Oracle123;
        
        SQL>alter database open resetlogs;
    
    使用Catalog恢复目录
        创建恢复目录使用的用户:
            SQL>create user rco identify by rco quota unlimited on users;
            SQL>grant connection,resource,recovery_catalog_owner to rco;
        创建恢复目录
            在源库rman连接恢复目录
                rman target / catalog rco/rco@ip:port/sid
                RMAN>create catalog;     #在恢复目录库的rco用户下创建了一系列表
        在恢复目录中注册数据库
            RMAN>register databse;   
            
        手工同步
            RMAN>resync catalog;    
            
 

6 数据块


手工制造坏块
        准备工作
            创建用户test
            创建表test
            插入测试数据
        了解知识    
            select dbms_rowid.rowid_object(rowid),  --对象ID
                    dbms_rowid.rowid_relative_fno(rowid),--所在的数据文件ID
                    dbms_rowid.rowid_block_number(rowid),--块ID
                    dbms_rowid.rowid_row_number(rowid)--行号
             from test.test    
        刷新缓存到磁盘
            SQL>alter system flush buffer_Cache;
        
        提取块
            dd if=users01.dbf of=test.dbf bs=8192 count=1 skip=132 conv=notrunc
            
        写入块
            dd if=/dev/zero of=users01.dbf bs=8192 count=1 seek=132 conv=notrunc
    
块屏蔽与块恢复

    快恢复
        作用:
            可以使用块恢复来恢复一个或者多个损坏文件块
        优点:
            1.降低MTTR平均故障恢复时间,只需要恢复损坏的块
            2.恢复期间,数据文件可以是联机状态
            3.如果没有快恢复,单个块损坏,需要恢复整个数据文件,并且恢复期间保持离线
        前提条件:
            必须得有RMAN备份
        恢复操作
            手动恢复
                RMAN>recover datafile 4 block 132;
            使用恢复指导
                RMAN>list failure;            #查看是否需要恢复
                RMAN>advise failure;          #恢复指导
                RMAN>repair failure preview;  #查看恢复语句
                RMAN>repair failure;          #执行恢复
    块屏蔽
        没有备份的话,可以屏蔽坏块,其他块不影响
        exec dbms_repair.skip_corrupt_blocks('用户名','表名');          #启用坏块屏蔽
        select skip_corrupt from dba_tables where table_name='表名'        #查看是否启用坏块屏蔽    
        
 

 

7. 使用dbms_backup_restore包


    使用场景:
        只有备份集(控制文件和数据文件)
        控制文件丢失,数据文件丢失
        spfile参数文件正常
    操作:
        启动到nomount状态
            SQL>startup nomount;
        恢复控制文件
            declare
                deviceType varchar2(256);
                done boolean;
            begin
                deviceType:=dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
                dbms_backup_restore.restoresetDataFile;
                dbms_backup_restore.restoreControlFileto('控制文件目录');
                dbms_backup_restore.restoreBackupPiece('控制备份集目录',done=>done);
                dbms_backup_restore.deviceDeallocate;
            end;
            /    
        恢复数据文件
            declare
                deviceType varchar2(256);
                done boolean;
            begin
                deviceType:=dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
                dbms_backup_restore.restoresetDataFile;
                dbms_backup_restore.restoreDataFileto(dfnumber=>1,toname=>'数据文件目录');
                dbms_backup_restore.restoreDataFileto(dfnumber=>2,toname=>'数据文件目录');
                dbms_backup_restore.restoreDataFileto(dfnumber=>3,toname=>'数据文件目录');
                dbms_backup_restore.restoreDataFileto(dfnumber=>4,toname=>'数据文件目录');
                dbms_backup_restore.restoreBackupPiece('数据备份集目录',done=>done);
                dbms_backup_restore.deviceDeallocate;
            end;
            /    
    局限性:
        必须了解备份片的信息(是否包含控制文件信息,以及位置)
        恢复数据库时需要指明文件号,新的文件名,数据文件备份集在哪个路径

8 使用RMAN进行表级别恢复(12c)


    在Oracle数据库中,对于用户DDL(drop,truncate)等误操作,引起的数据丢失,
    基于数据库时间点不完全恢复,基于表空间时间点恢复TSPITR进行数据恢复.
    delete,
    Oracle 12c RMAN新特性,基于表的时间点恢复.更加方便
    将一个或多个表恢复到指定的时间点,而不影响其他的对象.
    
    恢复原理:
        1.建立一个辅助的实例
        2.在辅助实例上做全库的恢复
        3.通过datadump工具导出,导入指定表
    
    操作:
        RMAN>recover table test.test                           #指定恢复表
             util time "to_date('','yyyy-MM-DD hh24:mi:ss')"   #指定恢复时间
             auxiliary destination '/u01/tsbak'                #临时表空间目录
             remap table fx.fxtbs:fx.fstbs_new                 #指定恢复的表的名称
             datapump destination '/tmp'                       #导出目录
             dumpfile 'exp.dat'                                #导出文件
             notableimport;                                    #不进行导入
          

9 rman duplicate复制|克隆技术 


    rman dulplicate的实现方法:
        1.基于备份集的复制
            
        2.基于活动数据库的复制
            通过网络将实时数据库复制到辅助实例来创建.
            通过网络直接copy到辅助实例,它可以减少数据落地空间,对于TB级,功能作用非常大.
            

操作步骤
            创建副本数据的密码文件
                orapwd file=orapwtestdb password=Oracle123 entries=10 format=12
            手动创建需要的目录
            创建副本数据库初始化文件
                touch inittestdb.ora
                audit_file_dest=
                compatible=
                control_files=
                db_lock_size=8192
                db_name='prod'
                log_archive_dest=''
                log_archive_format=''
                remote_login_passwordfile='EXCLUSIVE'
                memory_target=2g
                db_file_name_convert=('','')
                log_file_name_convert=('','')
            启动副本数据库
                startup nomount;
            配置副本数据库上的静态监听
                状态为UNKNOWN
            测试静态监听
                从源库上测试
                sqlplus sys/Oracle123@ip:port/sid  as sysdba
            用rman dumlicate连接目标数据库(源库)和副本数据库
                rman target sys/Oracle123@ip:port/sid auxiliary sys/Oracle123@ip:port/sid
                RMAN>duplicate target database to prod from active database nofilenamecheck;       

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值