標籤:ack 解釋 ret oracle 直接 exit 記錄 磁碟 alter
好久沒寫東西了,今天寫一篇湊個數吧,來公司一年多了,感覺自己到了一個小瓶頸期了。 以前每天很多新東西,都是忙著學,感覺沒時間寫部落格總結一下,大部分都是寫筆記,現在又是沒東西可以寫,每天乾著95%都是重複的工作,大部分時間在營運,但我內心是把自己當做dba的,畢竟當初老大把我從java開發拉倒系統組^_^ 上次一個技術把表中的資料刪除,這次是另一個技術把正確的包給覆蓋了,我給恢複了,哈哈哈---有用的話看一下
參考部落格: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,一個包頭,一個包體9316394602--根據對象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.sqlSELECT source FROM source$ AS OF TIMESTAMP TO_TIMESTAMP(‘2018-06-26 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘) where obj# = 93163;spool offexitll /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(使用閃回)