程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle中有效的Drop一張大表

Oracle中有效的Drop一張大表

編輯:Oracle數據庫基礎

一、流程簡介

1、先不直接使用Drop table命令,取而帶之用帶有REUSE STORAGE子句的Tuncate table命令。因為沒有Extents要被回收,Trunate table命令執行很快,只是段的highwater mark簡單的被調整到段頭的block上。

2、使用帶有KEEP子句的alter table命令逐漸的回收表的Extents,以減輕對Cpu的壓力。

二、以一個例子來說明:

假定有一個表名字為BIGTAB,系統的cpu資源很有限,根據過去的經驗drop這樣的一張表要花掉數天的時間。如下的操作就可以在不大量耗用cpu的情形下很有效的Drop這張大表。

1. Truncate table, 使用REUSE STORAGE子句:

SQL> TRUNCATE TABLE BIGTAB REUSE STORAGE;

2. 如果要花費3天(72小時) 去drop這張表,可以把時間分散到6個晚上,每個晚上drop 1/3Gb數據.

Night 1:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 1707M; (2Gb*5/6)

Night 2:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 1365M; (2Gb*4/6)

Night 3:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 1024M; (2Gb*3/6)

Night 4:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 683M; (2Gb*2/6)

Night 5:

SQL> ALTER TABLE BIGTAB DEALLOCATE UNUSED KEEP 341M; (2Gb*1/6)

Night 6:

SQL> DROP TABLE BIGTAB;

同樣的方法也對LOB段適用.

SQL> ALTER TABLE MODIFY LOB ()

DEALLOCATE UNUSED KEEP M;

三、其它需要注意的地方:

1、如果你不注意的已經執行了drop操作,那這種方法就不能再使用了,因為Drop table操作會首先把表段轉化成臨時段,然後開始清理臨時段中的extents,即使Drop操作被中斷了,Smon會接後用戶進程繼續執行臨時段的清理工作。

2、這種方法只適合表段。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved