系統環境
硬件
方正圓明服務器
M的內存
硬盤有二個分區C
D
光驅為E
軟件
操作系統WINDOWS
SERVER
數據庫ORACLE
for NT
數據庫
創建數據庫後
手工創建了二個表空間
在存儲管理器中查看其屬性如下
TS_PAY
M (initial size
k
next size
k
increase size
%)
TS_IDX
M (initial size
k
next size
k
increase size
%)
操作
運行創建數據表
索引
觸發器及其視圖的腳本後
TS_PAY占用
M
TS_IDX占用
M
分三次錄入相應的數據
其中建立在表空間TS_PAY的數據表的數據量為
M
建立在表空間TS_IDX的數據表的數據量為
M
每次錄入數據後
用Oracle
的實用工具Export以用戶模式導出整個數據
其他參數為默認值(導出的文件大小為
M)
其中在中途用Oracle
的實用工具Import作過幾次數據導入
現象
在OEM的存儲管理中查看表空間的使用情況
發現TS_PAY占用
M
TS_IDX占用
M
對幾個占用空間圈較大的表和索引作了查詢
發現其數據的記錄數據為
但其占用空間由初建時的
M變為
M
錄入的記錄數只有十幾條
而且每條記錄的占用空間也不大
所以表空間的這種占用速度與表的數據量增長呈現出的比例是極度不正常的
原因分析
經過實際測試發現
上述現象的產生是由於在導出時使用了參數COMPRESS = Y
在實用工具Export中
參數Compress的缺省值為Y
參數Compress指定Export和Import如何管理表數據的初始區
如果缺省的COMPRESS = Y
則Export對表數據加標記
以便在導入時合並到某個初始區
也就是說
參數COMPRESS = Y告訴ORACLE合計一個表中所有已分配的空間
並且為了反映當前總的已分配空間
在導出轉儲文件中修改了表創建語句的初始值
初始區值是導出執行前表中所有已分配空間的總和
我們假設某個表有
個分區
你想壓縮它
五個分區中的每一個都分配了
(PCTINCREASE=
)
在每個分區中只有
個字節是有數據的
並且在最後一個區中沒有已用的字節即空閒
字節
當使用參數COMPRESS=Y時
ORACLE簡單地累加了所有已分配的空間
然後分配
字節作為導出轉儲文件中CREATE TABLE語句的初始區值
這樣當你執行操作後
ORACLE將把數據放在表區最初的大約
字節中
將近
個字節的空間是空閒的
如果指定COMPRESS = N
Export將使用當前存儲參數
包括初始區和下一個區的大小值
參數值可能是在CREATE TABLE或ALTER TABLE語句中指定的值
也可能是數據庫系修改過的值
例如
如果表增大而且如果PCTINCREASE參數不為零
NEXT區的大小值就可能被修改
雖然實際的合並是在導入時執行的
但是只能在導出時
而不能在導入時指定COMPRESS參數
是Export實用程序
而不是Import實用程序生成數據定義
包括存儲參數定義
這樣
如果在導出時指定COMPRESS = Y
就只能以合並形式導入數據
COMPRESS參數不壓縮LOB數據
對於LOB數據
使用初始區大小和下一區大小的原始值
解決辦法
沒有進行過導出導入操作或沒有做過導入參數為COMPRESS=Y的數據
這時只需在導出數據時
選擇參數COMPRESS的值為N
就不會出現上述現象
如果數據已經以COMPRESS = Y方式導出
而且又被Import實用工具導入或數據庫中的數據損壞
只有用導出的數據導入
這種情況的處理較為復雜一點
可以分為以下幾個步驟來做
(
)對於幾個占用空間較大的數據表分別創建中間臨時表
例如
對於表SBYY我們可以進行如下操作
CREATE TABLE T_TMP AS SELECT * FROM SBYY
(
)刪除數據庫中的表SBYY
DROP TABLE SBYY
(
)在數據庫中按原結構重建表SBYY
CREATE TABLE SBYY(
JLDW_DMchar(
)NOT NULL
JLDW_MCvarchar
(
) NOT NULL
JLDW_JCvarchar
(
) NOT NULL
XYBZ char(
)NOT NULL
CONSTRAINT PK_SB_DM_JLDW_CKHW PRIMARY KEY (JLDW_DM)
);
(
)將臨時表T_TMP中的數據插入到重建的表SBYY中
INSERT INTO SBYY SELECT * FROM T_TMP
(
)刪除臨時表T_TMP
DROP TABLE T_TMP;
對於其它數據量不大
但占空間較大的表或索引依次進行如上五個步驟的處理即可
注意
這種方法對於表間關系不復雜的數據清理比較簡便而有用
對於關聯較復雜的表及其索引等
要進行仔細分析表間關系才可動手
From:http://tw.wingwit.com/Article/program/Oracle/201311/16881.html