關于oracle里面delete,trancate,drop的區別和用法
delete:屬于DML語句,刪除數據庫中指定條件的數據,相應語法:
DELETE table WHERE a = b;
執行該語句后,需要使用commit進行提交才能反映到數據庫中
TRUNCATE:(不是trancate)屬于DDL語句,快速的刪除指定表的所有數據,
TRUNCATE在各種表上無論是大的還是小的都非常快,同其它DDL語句一樣,都顯示的有提交操作,因此,執行之后是無法進行回滾操作的。TRUNCATE將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作后的表比Delete操作后的表要快得多。TRUNCATE不能觸發任何Delete觸發器。當表被清空后表和表的索引將重新設置成初始大小,而delete則不能。
語法:TRUNCATE TABLE 表名
DROP:屬于DDL語句,作用是刪除整個表、刪除指定的用戶、刪除指定的存儲空間等等
語法:
drop table table_name [cascade constraint]
drop user user_name [cascade]
drop tablespace tablespace_name including content and datafiles
怎樣恢復oracle刪除(delete)的數據
第一步,先應記住被刪除的表中有多少記錄 select count(*) from t1; 第二步,delete該表的數據 delete from t1; commnit; 第三步,獲得當前scn select dbms_*_system_change_number from dual; 第四步,根據第三步返回的scn不停地嘗試查詢直到所有記錄都存在為止。
select count(*) from t1 as of scn 10670000;--10670000為返回的scn 第五步,當第四步返回的值為所刪除的記錄數時執行 insert into t1 select * from t1 as of scn 10670000; commite; 到此數據恢復完畢!。
oracle刪除數據語句怎么寫
Oracle數據刪除語句
--查看當前SCN數值
SELECT dbms_*_system_change_number from dual;
--Scn與時間的對應關系
SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss', to_char(DBMS_*_SYSTEM_CHANGE_NUMBER) AS SCN from dual;
--通過時間flashback query數據
*
SELECT * FROM * AS OF TIMESTAMP TO_TIMESTAMP('2013-11-17 10:25:17', 'YYYY-MM-DD HH:MI:SS');
--通過SCN 閃回數據
SELECT * FROM * AS OF SCN 23565583;
--閃回表中誤刪除的數據
flashback table tablename to timestamp xxx
flashback table tablename to scn xxx
--閃回表前提條件
--該表需開啟行移動功能,可在恢復之前打開再執行恢復
alter table test enable row movement;
詳解Oracle DELETE和TRUNCATE 的區別
* from后面可以寫條件,truncate不可以。
* from記錄是一條條刪的,所刪除的每行記錄都會進日志,而truncate一次性刪掉整個頁,因此日至里面只記錄頁釋放,簡言之,delete from更新日志,truncate基本不,所用的事務日志空間較少。
* from刪空表后,會保留一個空的頁,truncate在表中不會留有任何頁。
4.當使用行鎖執行 DELETE 語句時,將鎖定表中各行以便刪除。truncate始終鎖定表和頁,而不是鎖定各行。
5.如果有identity產生的自增id列,delete from后仍然從上次的數開始增加,即種子不變,而truncate后,種子會恢復初始。
*te不會觸發delete的觸發器,因為truncate操作不記錄各個行刪除。
轉載請注明出處華閱文章網 » oracle的刪除語句