1. 程式人生 > >oracle 恢復table刪除數據 恢復package(使用閃回)

oracle 恢復table刪除數據 恢復package(使用閃回)

啟用 問題 pan 操作 oracle 恢復 怎麽 根據 .sql rom

    好久沒寫東西了,今天寫一篇湊個數吧,來公司一年多了,感覺自己到了一個小瓶頸期了。 以前每天很多新東西,都是忙著學,感覺沒時間寫博客總結一下,大部分都是寫筆記,現在又是沒東西可以寫,每天幹著95%都是重復的工作,大部分時間在運維,但我內心是把自己當做dba的,畢竟當初老大把我從java開發拉倒系統組^_^
    上次一個技術把表中的數據刪除,這次是另一個技術把正確的包給覆蓋了,我給恢復了,哈哈哈---有用的話看一下

參考博客:https://blog.csdn.net/wyzxg/article/details/6761458
雖然包恢復原理一樣,但是操作差異一點,因為我的數據是12.2c的

正文1:表數據刪除恢復

--1、查詢刪除數據時間點之前的數據
select * from 表名 as of timestamp to_timestamp(‘2016-08-11 16:12:11‘,‘yyyy-mm-dd hh24:mi:ss‘); --(若沒有數據 ,將時間繼續提前)
--2、啟用行移動功能
alter table 表名 enable row movement;
--3、恢復數據(激動人心的時刻)
flashback table 表名 to timestamp to_timestamp(‘2016-08-11 16:12:11‘,‘yyyy-mm-dd hh24:mi:ss‘);
大功告成,數據恢復成功;

正文2:包被覆蓋錯了,想要閃回package

註意這裏需要使用dba權限,否則查看不到

--錯誤包:XXX_PKG 正確時間:中午12點
SELECT OBJECT_ID
  FROM all_objects 
 WHERE OBJECT_NAME = ‘XXX_PKG‘;
 --如果包直接被刪除了,不是被覆蓋,那只能先閃回查詢對象表
 SELECT OBJECT_ID
  FROM all_objects AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
 WHERE OBJECT_NAME = ‘XXX_PKG‘
; --查到2個對象id,一個包頭,一個包體 93163 94602 --根據對象id查詢包頭和包體內容 SELECT source FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘) where obj# = 93163; SELECT source FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘) where obj# = 94602; --然後確認沒問題,用查到的sql內容重新覆蓋就好
註意:一般package body的內容比較多,怎麽復制下來呢?
spool  /home/oracle/xxx_pkg.sql

SELECT source
  FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
 where obj# = 93163;

spool off
exit
ll /home/oracle/

知識點

簡單總結一下,這裏就是利用了oracle的閃回查詢功能,非常的簡單,一看就懂了,但是oracle閃回有很多種包括刪除表和數據庫,閃回事務等等。
最重要的是要理解
SQL> show parameter undo_retention;

NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
undo_retention integer 900
這是默認的900,其中undo保留900s,後面undo磁盤不夠就可能回收,那樣閃回可能會失敗,當然也可以強制保留更久,更詳細的解釋自行百度,下面是我的對閃回的為知筆記的一點點簡單記錄:http://8840743b.wiz03.com/share/s/28g7gX2-0A_U21N5531o6XTR1JE9nV1SfQc52nk8DX1zamut

謝謝閱讀,有興趣交流的留言

oracle 恢復table刪除數據 恢復package(使用閃回)