當前位置:首頁 » 存儲配置 » oracle存儲過程truncate

oracle存儲過程truncate

發布時間: 2024-07-18 19:46:17

『壹』 truncate和delete之間有什麼區別

truncate和delete的主要區別:

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

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

3、delete語句不影響表所佔用的extent,高水線(high watermark)保持原位置不變。

4、truncate是DDL,會隱式提交,所以,不能回滾,不會觸發觸發器。

5、truncate會刪除表中所有記錄,並且將重新設置高水線和所有的索引,預設情況下將空間釋放到minextents個extent,除非使用reuse storage,。不會記錄日誌,所以執行速度很快,但不能通過rollback撤消操作(如果一不小心把一個表truncate掉,也是可以恢復的,只是不能通過rollback來恢復)。

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

7、truncatetable不能用於參與了索引視圖的表。

(1)oracle存儲過程truncate擴展閱讀:

在速度上,一般來說truncate>delete。

如果想保留表而將所有數據刪除,如果和事務無關,用truncate就好。

如果和事務有關,或者想觸發trigger,還是用delete。

『貳』 Oracle 刪除表中記錄 如何釋放表及表空間大小

解決方案

執行

sql">altertablejk_testmove

altertablejk_testmovestorage(initial64k)


altertablejk_testdeallocateunused

altertablejk_testshrinkspace.

注意:因為alter table jk_test move 是通過消除行遷移,清除空間碎片,刪除空閑空間,實現縮小所佔的空間,但會導致此表上的索引無效(因為ROWID變了,無法找到),所以執行 move 就需要重建索引。


找到表對應的索引

selectindex_name,table_name,tablespace_name,index_type,statusfromdba_indexeswheretable_owner='SCOTT'

根據status 的值,重建無效的就行了。sql='alter index '||index_name||' rebuild'; 使用存儲過程執行,稍微安慰。

還要注意alter table move過程中會產生鎖,應該避免在業務高峰期操作!



另外說明:truncate table jk_test 會執行的更快,而且其所佔的空間也會釋放,應該是truncate 語句執行後是不會進入oracle回收站(recylebin)的緣故。如果drop 一個表加上purge 也不會進回收站(在此裡面的數據可以通過flashback找回)。


不管是delete還是truncate 相應數據文件的大小並不會改變,如果想改變數據文件所佔空間大小可執行如下語句:

alterdatabasedatafile'filename'resize8g

重定義數據文件的大小(不能小於該數據文件已用空間的大小)。


另補充一些PURGE知識

Purge操作:

1). Purge tablespace tablespace_name : 用於清空表空間的Recycle Bin

2). Purge tablespace tablespace_name user user_name: 清空指定表空間的Recycle Bin中指定用戶的對象

3). Purge recyclebin: 刪除當前用戶的Recycle Bin中的對象。

4). Purge dba_recyclebin: 刪除所有用戶的Recycle Bin中的對象,該命令要sysdba許可權

5). Drop table table_name purge:刪除對象並且不放在Recycle Bin中,即永久的刪除,不能用Flashback恢復。

6). Purge index recycle_bin_object_name: 當想釋放Recycle bin的空間,又想能恢復表時,可以通過釋放該對象的index所佔用的空間來緩解空間壓力。 因為索引是可以重建的。

二、如果某些表佔用了數據文件的最後一些塊,則需要先將該表導出或移動到其他的表空間中,然後刪除表,再進行收縮。不過如果是移動到其他的表空間,需要重建其索引。

1、

SQL>altertablet_objmovetablespacet_tbs1;---移動表到其它表空間

也可以直接使用exp和imp來進行

2、

SQL>alterowner.index_namerebuild;--重建索引


3、刪除原來的表空間

『叄』 Oracle資料庫的面試題目及答案

Oracle資料庫的面試題目及答案

基礎題目:

1. 比較truncate和 命令

解答:兩者都可以用來刪除表中所有的記錄。區別在於:truncate是DDL操作,它移動HWK,不需要 rollback segment .

而Delete是DML操作, 需要rollback segment 且花費較長時間.

【相同點

truncate和不帶where子句的, 以及drop都會刪除表內的數據

不同點:

1. truncate和 只姿轎刪除數據不刪除表的結構(定跡談肆義)

drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的.存儲過程/函數將保留,

但是變為invalid狀態.

2.語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.

truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.

3.語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動

顯然drop語句將表所佔用的空間全部釋放

truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使侍渣用reuse storage; truncate會將高水線復位(回到最開始).

4.速度,一般來說: drop>; truncate >;

5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及

使用上,想刪除部分數據行用,注意帶上where子句. 回滾段要足夠大.

想刪除表,當然用drop

想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用.

如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據

2.Oracle中,需要在查詢語句中把空值(NULL)輸出為0,如何處理?

答案:nvl(欄位,0).

nvl( ) 函數

從兩個表達式返回一個非 null 值。

語法

NVL(eExpression1, eExpression2)

參數

eExpression1, eExpression2

如果 eExpression1 的計算結果為 null 值,則 NVL( ) 返回 eExpression2。如果 eExpression1 的計算結果不是 null 值,

則返回 eExpression1。eExpression1 和 eExpression2 可以是任意一種數據類型。如果 eExpression1 與 eExpression2

的結果皆為 null 值,則 NVL( ) 返回 .NULL.。

返回值類型

字元型、日期型、日期時間型、數值型、貨幣型、邏輯型或 null 值

說明

在不支持 null 值或 null 值無關緊要的情況下,可以使用 NVL( ) 來移去計算或操作中的 null 值。

select nvl(a.name,空得) as name from student a join school b on a.ID=b.ID

注意:兩個參數得類型要匹配

3.Oracle中char和varchar2數據類型有什麼區別?有數據」test」分別存放到10)和varchar2(10)類型的欄位中,

其存儲長度及類型有何區別?

答案:

區別: 1).CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,存儲字元串「test",對於CHAR (10),


;
熱點內容
newman演算法 發布:2024-11-25 21:34:55 瀏覽:200
a演算法概念 發布:2024-11-25 21:24:16 瀏覽:587
jquery源碼書籍 發布:2024-11-25 21:19:50 瀏覽:803
銀行卡輸入密碼超限怎麼辦 發布:2024-11-25 21:09:07 瀏覽:958
編譯指令多發 發布:2024-11-25 20:58:17 瀏覽:751
java上傳文件到伺服器 發布:2024-11-25 20:52:47 瀏覽:741
軸加工編程 發布:2024-11-25 20:52:12 瀏覽:412
手機的媒體存儲 發布:2024-11-25 20:29:42 瀏覽:265
安卓如何關閉手機桌面 發布:2024-11-25 20:24:37 瀏覽:701
腳本也違法嗎 發布:2024-11-25 20:24:24 瀏覽:305