數據庫的回滾


回滾(Rollback)指的是程序或數據處理錯誤,將程序或數據恢復到上一次正確狀態的行為。回滾包括程序回滾和數據回滾等類型。

execute執行后 可以回滾
commit提交后 不可以回滾

其實Oracle提交數據是分兩步操作的,第一步execute執行,第二步commit提交。對應的PL\SQL也是要先點execute執行,執行后再點commit提交。
但是 commit提交后 可以用閃回查詢恢復原來的數據 因為oracle會將近期的數據保存到快照中 如:

SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20130506 20:00:00','YYYYMMDD HH24:MI:SS');
這里'20130506 20:00:00'就是你想恢復數據到哪個時間狀態 tab是數據庫的表名 這樣查詢到的數據就是執行更新操作之前的數據

https://www.cnblogs.com/fiberhome/p/7680458.html    回滾原理

    --查看和UNDO相關的參數

        SQL> SHOW PARAMETER undo;

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        undo_management                      string      MANUAL

        undo_retention                       integer     900

        undo_tablespace                      string      UNDOTBS1

           

    undo_management:

        設置數據庫的撤銷段是否使用自動管理模式,值可以為auto或manual,當為manual時將不使用撤銷段,即不使用自動管理模式

        該參數為靜態參數,修改后需重啟實例才能生效       

    undo_retention:

        指定撤銷段數據在undo段中為非活動狀態后被覆蓋前保留的時間,單位為秒。在undo_management位auto時生效,為動態參數      

    undo_tablespace:

        指定使用哪個表空間來實現數據的撤銷,在undo_management位auto時生效,為動態參數

語法
ROLLBACK [WORK] [TO [SAVEPOINT] savepoint_name | FORCE 'string'};

work - 可選。隱式關鍵字,可寫可不寫。
to savepoint savepoint_name - 可選。rollback 語句撤銷當前會話的所有更改,直到由 savepoint_name 指定的保存點。如果省略該子句,則所有更改都將被撤銷。
force 'string - 可選'。用於 強制回滾 可能已損壞或有問題的事務。使用此子句,可以將單引號中的 事務id 指定為 字符串。可以在 系統視圖 中找到名為 dba_2pc_pengding、v$corrupt_xid_list 的事務標識(無法將有問題的事務回滾到保存點。)

---------------------

回滾與刪除

commit rollback savepoint
這組操作在sql命令行,connect scott/TIGER @XE
1.刪除emp數據表中的記錄
delete emp;
select * from emp;
看到14行記錄全部刪除
關閉當前登錄窗口,再次登錄到sql命令行中。
select * from emp;
2.在dept中添加一條記錄,50,DATAC,JINAN
insert into dept values(50,‘datac’,‘jinan’);
select * from dept;
關閉當前登錄窗口,再次登錄到sql命令行
select * from dept;
3.修改40部門的名稱datac
update dept set dname=‘datac’
where deptno=40;
select * from dept;
關閉當前登錄窗口,再次登陸到sql命令行
select * from dept
使用commit提交命令來實現,數據增刪改
update dept set dname=‘datac’
where deptno=40;
select * from dept;
加入一條:commit
關閉當前登錄窗口,再次登錄到sql命令行中。
select * from dept;
2. rollback
truncate(截斷 刪除后不可恢復)
(1)回滾到原點
刪除emp數據表中所有的記錄
delete emp;
select * from emp;
rollback;
(2)應用savepoint設定回滾點
也是拿dept信息表做案例
插入一條記錄50 software shanghai
insert into dept values(50,‘software’,‘shanghai’)
select * from dept;
設置存儲點A
savepoint a
修改將辦公地點shanghai修改beijing
update dept set loc=‘beijing’
where deptno=50;
select * from dept;
設定存儲點B
savepoint b
刪除操作40部門的信息
delete dept where deptno=40;
select * from dept;
回滾到存儲點B
rollback to B
---------------------
作者:懿范
來源:CSDN
原文:https://blog.csdn.net/weixin_43312392/article/details/83245706
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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