回滾(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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!