Oracle刪除資料各語法總結

2021-07-22 17:32:13 字數 2651 閱讀 2957

oracle資料庫表的刪除delete drop truncate

資料庫的運維中,經常會遇到delete drop truncate的操作,那麼如何去把握它們的用法和區別呢?

一般當系統中大量使用分割槽表,而針對分割槽表清除資料,是不會釋放表空間的,必須把分割槽drop掉,才會釋放空間。

一、delete

1、delete是dml,執行delete操作時,每次從表中刪除一行,並且同時將該行的的刪除操作記錄在redo和undo表空間中以便進行回滾(rollback)和重做操作,但要注意表空間要足夠大,需要手動提交(commit)操作才能生效,可以通過rollback撤消操作。

2、delete可根據條件刪除表中滿足條件的資料,如果不指定where子句,那麼刪除表中所有記錄。

二、truncate

1、truncate是ddl,會隱式提交,所以不能回滾,不會觸發觸發器。truncate操作同沒有where條件的delete操作十分相似,只是把表裡的資訊全部刪除,但是表依然存在。

2、truncate會刪除表中所有記錄,並且將重新設定高水線和所有的索引,預設情況下將空間釋放到minextents個extent,除非使用reuse storage。不會記錄日誌,所以執行速度很快,但不能通過rollback撤消操作(如果一不小心把乙個表truncate掉,也是可以恢復的,只是不能通過rollback來恢復。truncate不會逐個清除使用者資料塊上的資料,而僅僅重置資料字典和元資料塊上的元資料。也就是說,此時,其基本資料並未被破壞,而是被系統**、等待被重新分配,因此,要恢復被truncate的資料,但是要快要資料庫被重寫前快速實施恢復,這樣我們可以做到100%完全恢復)。truncate刪除資料快速恢復辦法見最後說明。

3、對於外來鍵(foreignkey )約束引用的表,不能使用truncate table,而應使用不帶where子句的 delete 語句。

4、truncatetable不能用於參與了索引檢視的表。

例如:truncate table 後,有可能表空間仍沒有釋放,可以使用如下語句:

alter table 表名稱 deallocate unused keep 0;

注意如果不加keep 0的話,表空間是不會釋放的。

或者:

truncate table (schema)table_name drop(reuse) storage才能釋放表空間。

例如: truncate table test1 drop storage;

三、drop

1、drop是ddl,會隱式提交,所以不能回滾,不會觸發觸發器。

2、drop語句刪除表結構及所有資料,並將表所占用的空間全部釋放。

3、drop語句將刪除表的結構所依賴的約束,觸發器,索引,依賴於該錶的儲存過程/函式將

保留,但是變為invalid狀態。

注:drop後的表被放在**站(user_recyclebin)裡,而不是直接刪除掉。這樣,**站裡的

表資訊就可以被恢復,或徹底清除。 通過查詢**站user_recyclebin獲取被刪除的表信

息,然後使用語句

flashback table

因為truncate是ddl語句,不是dml語句,所以不能閃回查詢as of 來恢復

恢復資料:

sql> connect sys/mzl as sysdba

已連線。

sql> shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

oracle 例程已經關閉。

sql> startup mount

oracle 例程已經啟動。

total system global area 272629760 bytes

fixed size 1248476 bytes

variable size 117441316 bytes

database buffers 146800640 bytes

redo buffers 7139328 bytes

資料庫裝載完畢。

sql> flash database to timestamp

sp2-0734: 未知的命令開頭 「flash data…」 - 忽略了剩餘的行。

sql> flashback database to timestamp

2 to_timestamp(『2008-06-08 18:22:33』,』yyyy-mm-dd hh24:mi:ss』);

閃回完成。

sql> alter database open read only;

資料庫已更改。

sql> select * from scott.dept;

deptno dname          loc
50 support        denver

10 accounting new york

20 research dallas

30 sales chicago

40 operations beijing

如果資料恢復不夠理想,可以關閉資料庫繼續進行恢復。 如果用』alter database open resetlogs』開啟,在想關閉資料庫用flashback恢復就不行了

oracle刪除資料

oracle在表中刪除資料的語法是 語法結構 delete from表名 where 條件 演示 sql delete from infos where stuid s100103 1 row deleted sql commit truncate 在資料庫操作中,truncate命令 是乙個ddl...

oracle恢復已刪除資料

刪除表後,可以採用如下操作 在 user recyclebin中找到最近操作過的表名稱,然後用閃回 只能用於10g及以上版本 flash back table table name to before drop 如果是刪了或修改裡面的資料,可以先建立乙個快表將刪除修改之前狀態的資料找回到這個表中 c...

Oracle大量刪除資料方案

觀點一 create or replace procedure delete table isi number 10 begin for x in select from emp where deptno like a loop delete emp where emp.id x.id i i 1 ...