ORACLE手工不完全恢复

本文详细介绍了Oracle数据库的不完全恢复,包括特点、适用环境、不同类型如基于时间点、SCN的恢复,并通过实例演示了如何进行不完全恢复,如恢复误删除的表,强调了在恢复过程中需要注意的事项和命令的使用。
摘要由CSDN通过智能技术生成


4.1 不完全恢复的特点:     
      1)让整个database 回到过去某个时间点,不能避免数据丢失。
      2)想跳过坏日志而继续恢复所有其他工作是不可能的,前滚没有这个功能(注意点)。
      3)必须以sysdba身份连接进行不完全恢复,普通用户或sysoper都不行(注意点)。
      4)语句只有recover database until 这种形式,表示整个数据库回到某个时间点或SCN,而until是指恢复在时间点前停止(注意点)。


4.2 不完全恢复(Incomplete recover) 适用环境:
       1)在过去的某个时间点重要的数据被破坏。
       2)在做完全恢复时,丢失了归档日志或当前online redo log(注意点)
       3)当误删除了表空间时(有控制文件备份)
       4)丢失了所有的控制文件,使用备份的控制文件恢复时  (条件满足时可以完全恢复)     
        
4.3 不完全恢复的基本类型:
      1)基于时间点 (until time): 使整个数据库恢复到过去的一个时间点前
      2)基于scn (until change): 使整个数据库恢复到过去的某个SCN前
      3)基于cancel (until cancel): 使整个数据库恢复到归档日志或当前日志的断点前
      4)基于误删除表空间(使用备份的controlfile): 使整个数据库恢复到误删除表空间前
      
4.4、logminer 工具的使用
     
     对redo log 进行挖掘,找出在某个时间点所作的DDL 或DML 误操作(包括:时间点、scn 、sql语句)
                                                                                            
4.5 不完全恢复范例:


范例1:


恢复过去某个时间点误删除的table


4.5.1 基于时间点的不完全恢复


1)环境:scott用户在test表空间下有个t1表


SQL> conn scott/scott
SQL> select * from t1;


        ID
----------
         1
         2


2)误删除了t1表,并purge了。


SQL> drop table t1 purge;
SQL> select * from v$log;
 
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1          1        131   52428800          1 YES     INACTIVE               1875893 2012-6-13 1
         2          1        132   52428800          1 YES     INACTIVE               1896385 2012-6-13 1
         3          1        133   52428800          1 NO       CURRENT                1916973 2012-7-18 1 


SQL> alter system switch logfile;
SQL> /
SQL> /
 
SQL> select name from v$archived_log;


NAME
--------------------------------------------------------------------------------
...
/u01/disk1/timran/arch_1_782662700_129.log
/u01/disk1/timran/arch_1_782662700_130.log
/u01/disk1/timran/arch_1_782662700_131.log
/u01/disk1/timran/arch_1_782662700_132.log
/u01/disk1/timran/arch_1_782662700_133.log //drop table t1 purge这个动作的日志条目记录在此归档日志里了。
/u01/disk1/timran/arch_1_782662700_134.log
/u01/disk1/timran/arch_1_782662700_135.log
 
116 rows selected


3)通过logmr 找出误操作的ddl命令的timestamp 或 san


SQL> show parameter utl


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines           string
utl_file_dir                         string      /home/oracle/logmnr


SQL> execute dbms_logmnr_d.build('dict.ora','/home/oracle/logmnr',dbms_logmnr_d.store_in_flat_file); 
 
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/disk1/timran/arch_1_782662700_133.log',options=>dbms_logmnr.new);
 
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/disk1/timran/arch_1_782662700_134.log',options=>dbms_logmnr.addfile); 
  
SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/dict.ora',options=>dbms_logmnr.ddl_dict_tracking);
 
SQL> select username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents WHERE lower(sql_redo) like 'drop table%';
 
USERNAME                              SCN TO_CHAR(TIMESTAMP,'YYYY-MM-DDH SQL_REDO
------------------------------ ---------- ------------------------------ -----------------------------------------------
SCOTT                             1918000 2012-08-01 17:28:29           drop table t1 purge;


SQL> execute dbms_logmnr.end_logmnr;


4) 关闭数据库,删除所有dbf,准备做不完全恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值