實用開發之-oracle表回滾到一個指定時間的操作語句


在開發或客戶使用過程中,難免會出現誤操作或臟數據,那么怎么迅速處理這個問題呢?

1.備份還原就用了,太麻煩。

就是使用ORACLE的備份功能,然后在還原,還原的時候新建一個庫,然后使用dblink進行連接。

將數據導回去。

2.使用oracle的還原操作,但是這個操作只能還原數據,表發生改變就不能了,切記。這個語句是這樣的:

---說明這個語句來自網絡:地址:這里就是筆記。

select * from 表名 as of timestamp to_timestamp('2014-6-19 1:10:00','yyyy-mm-dd hh24:mi:ss');

alter table 表名 enable row movement;
flashback table 表名 to timestamp to_timestamp('2011-03-04 05:00:00','yyyy-mm-dd HH24:MI:SS');


測試:

create table  A (
a number,
b number
)

select sysdate from dual;2014-6-20 17:35:50

insert into a values(1,2);
insert into a values(2,2);
insert into a values(3,2);
insert into a values(4,2);
insert into a values(5,2);
insert into a values(6,2);

查看現在的效果圖:

查看剛建完表時的數據:

執行回滾操作,執行之后的結果:

到此,我們可以看出,這個操作真的好用,ok。我們來分析一下,到底做了什么操作,如果你早就懂了,就過了吧。留步,大手,對了,給樓主推薦基本書學習下啊!

select * from a as of timestamp to_timestamp('2014-6-20 17:35:50','yyyy-mm-dd hh24:mi:ss');

as of:截至,就是到某一個事件。

to_timestamp():時間轉換函數,轉換成更加下精確,和to_date()作用一樣。

AS OF TIMESTAMP查詢這個表到某一時刻。

AS OF TIMESTAMP但是在某些情況下,我們建議使用AS OF SCN的方式執行Flashback Query。如需要對多個相互有主外鍵約束的表進行恢復時,如果使用AS OF TIMESTAMP的方式,可能會由於時間點不統一的緣故造成數據選擇或插入失敗,通過AS OF SCN方式則能夠確保記錄處理的時間點一致。

alter table a enable row movement;

enable row movement:行遷移,意思就是,一個現存的行允許改變其rowid(物理存儲地址),通常情況下,數據行在分配了空間之后,行的rowid就固定了,即使以后行長度超出預留的空間,也不會將其移動,在長數據行的情況下,表會產生行鏈接,對於io來說,行鏈接是不利的,為了性能,就需要將行調整為在單個物理存儲地址下能保存行的所有信息,這需要行遷移.另外在flashback的時候,由於原始版本的行占據了相應的物理地址,所以,也需要行遷移.

其它的,比如說在收縮段空間的情況下,由於要把所有段數據向段前擠壓,大部分行都需要改變其物理地址.也需要行遷。
flashback table a to timestamp to_timestamp('2014-6-20 17:35:50','yyyy-mm-dd HH24:MI:SS');
flashback table還原到某一點!
 
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM