oracle 備份恢復 04手工不徹底恢復

1、不徹底恢復相關原理
1.只適用於歸檔模式,能夠將數據庫恢復到過去的某個時間點。
2.用於解決誤操做,找回過去某個時間點數據
3.誤操做解決:邏輯備份-閃回-不徹底恢復
    冷備-不徹底恢復到過去時間點-導出須要的數-冷備恢復-導入須要的數據;
    搭建測試庫,從測試庫不徹底恢復,導入正式庫;
    
2、LOGMNR挖掘日誌
1.激活補充日誌,充分利用logmnr的特性,查詢確認
alter database add supplemental log data;
select log_mode, supplemental_log_data_min  from v$database;
2.設置字典數據目錄,並重啓使之生效
alter system set utl_file_dir='/u01/app/utl/' scope=spfile ;
3.創建字典文件,記錄表字典信息,只有表包含在該文件裏纔會挖掘出DML不然只有DDL語句,主要用於挖掘DDL語句使用
execute dbms_logmnr_d.build ('mydict.ora','/u01/app/utl',dbms_logmnr_d.store_in_flat_file);
4.添加分析日誌
begin
dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/ipemsdb/onlinelog/o1_mf_3_bw56dvct_.log',
options=>dbms_logmnr.new) ;
dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/ipemsdb/onlinelog/o1_mf_2_bw56cw90_.log',
options=>dbms_logmnr.addfile) ;
dbms_logmnr.start_logmnr(dictfilename=>'/u01/app/utl/mydict.ora',dbms_logmnr.DDL_DICT_TRACKING); 
  --指定logmnr字典文件挖掘DDL使用
end;
--10g之後的版本還可使用在線數據字典,挖掘DML使用
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS =>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG); 
5.分析日誌v$logmnr_contents裏的數據只在會話裏有效,能夠建立表保存
create table logmnr_tmp tablespace users as select * from v$logmnr_contents;
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col seg_name for a10                                                                                                          
col sql_redo for a50
col seg_owner for a10                                                                                                         
col table_name for a10 
select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='LXTB4' order by scn;
6.結束分析
EXECUTE DBMS_LOGMNR.END_LOGMNR;    sql

3、實驗環境及轉儲腳本
1.冷備轉儲腳本
cp /u01/app/backdir/cold_bak/lxtb01.dbf                   /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_example_bv77pklo_.dbf  /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_sysaux_bv77pkly_.dbf   /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_system_bv77pklf_.dbf   /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_undotbs1_bv77pkm9_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_users_bv77pkmz_.dbf    /u01/app/oracle/oradata/ipemsdb/datafile/數據庫

cp /u01/app/backdir/cold_bak/o1_mf_bvk6hfdo_.ctl          /u01/app/oracle/flash_recovery_area/ipemsdb/controlfile/
cp /u01/app/backdir/cold_bak/o1_mf_bvk6hd3p_.ctl          /u01/app/oracle/oradata/ipemsdb/controlfile/session

2.熱備轉儲腳本
cp /u01/app/backdir/hot_bak/lxtb01.dbf                    /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_example_bv77pklo_.dbf   /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_sysaux_bv77pkly_.dbf    /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_system_bv77pklf_.dbf    /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_undotbs1_bv77pkm9_.dbf  /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_users_bv77pkmz_.dbf     /u01/app/oracle/oradata/ipemsdb/datafile/oracle

3.實驗操做
create table  scott.lxtb3  tablespace lxtb  as select * from scott.emp;
insert into scott.lxtb3 select * from scott.emp where rownum <=3;
select count(1) from scott.lxtb3;
@/u01/app/backdir/cold_bak.sql
@/u01/app/backdir/hot_bak.sqlapp

4、備份恢復實驗
基於時間點恢復 主動
基於改變恢復
基於取消的恢復 被動
基於備份的控制文件恢復  表空間
1.DML語句不徹底恢復
誤操做-查日誌(v$log,v$logfile,v$archived_log)-logmnr找到時間點和SCN-查數據文件-關庫-轉儲全部備份-啓mount
-不徹底恢復-open resetlogs;
v$log視圖能夠肯定當前日誌是否歸檔
startup mount
recover database until time '2015-07-30 10:10:13';
alter database open resetlogs;
2.DDL語句不徹底恢復
誤操做-查日誌(v$log,v$logfile,v$archived_log)-logmnr找到時間點和SCN-查數據文件-關庫-轉儲全部備份-啓mount
-不徹底恢復-open resetlogs;
3471084 2015-07-30 10:48:33
recover database until change  3471084;
3.基於cancel不徹底恢復
3DML-查日誌,數據文件-斷電-刪一個數據文件,最新歸檔文件,current日誌成員-啓-查v$recove_file-轉儲一個-恢復一個數據文件
-恢復database until cancel- cancel-關庫-轉儲全部數據文件-啓mount-恢復database cancel cancel-open resetlogs-備份
SQL> recover datafile 6;
ORA-00283: recovery session canceled due to errors
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/flash_recovery_area/ipemsdb/onlinelog/o1_mf_3_bv4d37kl_.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/ipemsdb/onlinelog/o1_mf_3_bv4d3421_.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3測試

SQL> recover database until cancel
ORA-00279: change 3486235 generated at 07/30/2015 17:14:33 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_2_886417272.dbf
ORA-00280: change 3486235 for thread 1 is in sequence #2ui

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bv77pklf_.dbf'this

ORA-01112: media recovery not started
SQL> shutdown immediate
SQL> startup mount;
SQL> recover database until cancel;
ORA-00279: change 3485508 generated at 07/30/2015 17:06:09 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_1_886417272.dbf
ORA-00280: change 3485508 for thread 1 is in sequence #1spa

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL> alter database open resetlogs;日誌

4.基於舊的控制文件恢復
備份控制文件-3DML-刪表空間和數據文件-查看錶空間,數據文件信息,日誌信息,歸檔信息-
logmnr分析drop時間-關庫-轉儲控制文件-啓mount-轉儲數據文件-recover until timme
using backup controlfile-auto-再恢復-給聯機日誌-open resetlogs
ALTER DATABASE BACKUP CONTROLFILE TO 'C:\oracle\product\10.2.0\oradata\exp\backup20141030.ctl';    
3489721 2015-07-30 18:59:38
SQL> recover database until time '2015-07-30 18:59:38' using backup controlfile
ORA-00279: change 3486993 generated at 07/30/2015 17:57:36 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_1_886441062.dbf
ORA-00280: change 3486993 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 3487383 generated at 07/30/2015 18:08:54 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_2_886441062.dbf
ORA-00280: change 3487383 for thread 1 is in sequence #2
ORA-00278: log file '/u01/arc_dir/1_1_886441062.dbf' no longer needed for this recovery

ORA-00279: change 3489451 generated at 07/30/2015 18:56:35 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_3_886441062.dbf
ORA-00280: change 3489451 for thread 1 is in sequence #3
ORA-00278: log file '/u01/arc_dir/1_2_886441062.dbf' no longer needed for this recovery

ORA-00308: cannot open archived log '/u01/arc_dir/1_3_886441062.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

SQL>  recover database until time '2015-07-30 18:59:38' using backup controlfile
ORA-00279: change 3489451 generated at 07/30/2015 18:56:35 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_3_886441062.dbf
ORA-00280: change 3489451 for thread 1 is in sequence #3

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/ipemsdb/onlinelog/o1_mf_2_bv8kxh7g_.log
Log applied.
Media recovery complete.
alter database open resetlogs; --56,42

4、閃回
1.開閃回
create pfile from spfile;
shutdown immediate;
mkdir flashback
修改pfile中的
    db_recovery_file_dest_size==2147483648
    db_recovery_file_dest='/u01/app/flashback'
    recyclebin=on
startup mount pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initipemsdb.ora';
alter database flashback on;
select FLASHBACK_ON from v$database;
alter database open;
本身的方式開閃回
alter system set db_recovery_file_dest_size=4G scope =spfile;
alter system set db_recovery_file_dest='/u01/app/myflash' scope =spfile;
alter system set recyclebin=on scope=spfile;
關庫,啓動到mount,
alter database flashback on;
select flashback_on from v$database;
alter database open;

2.閃回drop,利用recyclebin
drop表-查recyclebin-查回收站表-按時間順序倒着閃回
show recyclebin;    
flashback table  LXTB1  to before drop  rename to fl_lxtb1;
3.閃回查詢,利用undo
show parameter undo;
設置retention
alter tablespace UNDOTBS1  retention guarantee;
刪數據-插入數據-logmnr挖掘刪除時間-查過去時間點表中數據-建表保存查詢結果-清空原表-插入保存數據-刪掉保存表;
select count(1) from lxtb2 as of timestamp to_timestamp('2015-07-30 20:45:53','yyyy-mm-dd hh24:mi:ss');
select count(1) from lxtb3 as of scn 3494705;
alter table lxtb3 enable row movement;
flashback table scott.lxtb3 to scn 3505679; 
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-25153: Temporary Tablespace is Empty

select name from v$datafile; 
select tablespace_name,status from dba_tablespaces; 
select tablespace_name,file_name  from dba_temp_files;
alter tablespace temp add tempfile '/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_temp_bvncs3ns_.tmp';
若是使用了OMF
alter tablespace temp add tempfile;
執行DDL操做後沒法閃回查詢
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed

4.閃回數據庫(閃回日誌)時間減1秒,DDL操做
truncate table-DML-logmnr挖掘到時間點-關庫-啓mount-閃回到truncate前-只讀打開確認-關庫-啓mount-open resetlogs;
3506687 2015-07-30 22:38:02  減1秒 2015-07-25 14:03:50
shutdown immediate;
startup mount;
flashback database to timestamp to_timestamp('2015-07-30 22:38:01','yyyy-mm-dd hh24:mi:ss');
alter database open read only;
alter database open resetlogs;

5.閃迴歸檔,create table .. as select ..原理

drop table t purge;--完全刪除
--SYS用戶對象不能閃回,truncate不能閃回

6.檢查flash recovery area的使用狀況     select * from V$FLASH_RECOVERY_AREA_USAGE; 7.計算flash recovery area已經佔用的空間     select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

相關文章
相關標籤/搜索