alter table 表名 move和alter table 表名 shrink space都可以用來進行段收縮,降低高水位HWM,
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),西安企業(yè)網(wǎng)站建設(shè),西安品牌網(wǎng)站建設(shè),網(wǎng)站定制,西安網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,西安網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
也都可以用來消除行鏈接(Row Chaining)和行遷移(Row Migration),估計效果不明顯,看你的數(shù)據(jù)庫用途是干什么的(如果是數(shù)據(jù)倉庫肯定是不明顯的)。
Oracle
中壓縮數(shù)據(jù)節(jié)省空間和提高速度
添加時間
:2007-4-22
使用表壓縮來節(jié)省空間并提高查詢性能
很多決策支持系統(tǒng)通常都涉及到存儲于幾個特大表中的大量數(shù)據(jù)。隨著這些系統(tǒng)的發(fā)展,對磁盤空間
的需求也在快速增長。在當(dāng)今的環(huán)境下,存儲著數(shù)百
TB
(太字節(jié))的數(shù)據(jù)倉庫已經(jīng)變得越來越普遍。
為了幫助處理磁盤容量問題,
在
Oracle9i
第
2
版中引入了表壓縮特性,
它可以極大地減少數(shù)據(jù)庫表所
需要的磁盤空間數(shù)量,并在某些情況下提高查詢性能。
在本文中,我將向你說明表壓縮是如何工作的,以及在構(gòu)建和管理數(shù)據(jù)庫時如何配置表空間。我還將
基于一些示例測試結(jié)構(gòu)討論一些性能問題,以幫助你了解使用表壓縮預(yù)計能獲得多大好處。
表壓縮是如何工作的
在
Orcle9i
第
2
版中,表壓縮特性通過刪除在數(shù)據(jù)庫表中發(fā)現(xiàn)的重復(fù)數(shù)據(jù)值來節(jié)省空間。壓縮是在數(shù)
據(jù)庫的數(shù)據(jù)塊級別上進行的。當(dāng)確定一個表要被壓縮后,數(shù)據(jù)庫便在每一個數(shù)據(jù)庫數(shù)據(jù)塊中保留空間,以
便儲存在該數(shù)據(jù)塊中的多個位置上出現(xiàn)的數(shù)據(jù)的單一拷貝。這一被保留的空間被稱作符號表(
symbol
table
)
。被標(biāo)識為要進行壓縮的數(shù)據(jù)只存儲在該符號表中,而不是在數(shù)據(jù)庫行本身內(nèi)。當(dāng)在一個數(shù)據(jù)庫行
中出現(xiàn)被標(biāo)識為要壓縮的數(shù)據(jù)時,該行在該符號表中存儲一個指向相關(guān)數(shù)據(jù)的指針,而不是數(shù)據(jù)本身。節(jié)
約空間是通過刪除表中數(shù)據(jù)值的冗余拷貝而實現(xiàn)的。
對于用戶或應(yīng)用程序開發(fā)人員來說,表壓縮的效果是透明的。無論表是否被壓縮,開發(fā)人員訪問表的
方式都是相同的,
所以當(dāng)你決定壓縮一個表時,
不需要修改
SQL
查詢。
表壓縮的設(shè)置通常由數(shù)據(jù)庫管理人
員或設(shè)計人員進行配置,幾乎不需要開發(fā)人員或用戶參與。
如何創(chuàng)建一個壓縮的表
要創(chuàng)建一個壓縮的表,可在
CREATE TABLE
語句中使用
COMPRESS
關(guān)鍵字。
COMPRESS
關(guān)鍵字
指示
Oracle
數(shù)據(jù)庫盡可能以壓縮的格式存儲該表中的行。
下面是
CREATE TABLE COMPRESS
語句的一
個實例:
CREATE
TABLE
SALES_HISTORY_COMP
(
PART_ID
VARCHAR2(50)
NOT
NULL,
STORE_ID
VARCHAR2(50) NOT NULL,
SALE_DATE
DATE NOT NULL,
QUANTITY
NUMBER(10,2) NOT NULL
)
COMPRESS
;
或者,你可以用
ALTER TABLE
語句來修改已有表的壓縮屬性,如下所示:
ALTER TABLE SALES_HISTORY_COMP COMPRESS;
為了確定是否已經(jīng)利用
COMPRESS
對一個表進行了定義,可查詢
USER_TABLES
數(shù)據(jù)字典視圖并
查看
COMPRESSION
列,如下面的例子所示:
SELECT TABLE_NAME, COMPRESSION FROM USER_TABLES;
TABLE_NAME
COMPRESSION
------------------
-----------
SALES_HISTORY
DISABLED
SALES_HISTORY_COMP
ENABLED
Create table me(shengao int32,tizhong
int ,zhangxiang verchar2(60)) compress;
Select table_name, compression from user_tables;
Select tablespace_name,def_tab_compression from user_tablespaces;
也可以在表空間級別上定義
COMPRESS
屬性,
既可以在生成時利用
CREATE TABLESPACE
來定義,
也可以稍后時間利用
ALTER TABLESPACE
來定義。與其他存儲參數(shù)類似,
COMPRESS
屬性也具有一些
繼承特性。當(dāng)在一個表空間中創(chuàng)建一個表時,它從該表空間繼承
COMPRESS
屬性。為了確定是否已經(jīng)利
用
COMPRESS
對一個表空間進行了定義,可查詢
USER_TABLESPACES
數(shù)據(jù)字典視圖并查看
DEF_TAB_COMPRESSION
列,如下面的例子所示:
SELECT
TABLESPACE_NAME,
DEF_TAB_COMPRESSION
FROM
DBA_TABLESPACES;
TABLESPACE_NAME
DEF_TAB_COMPRESSION
---------------
-------------------
DATA_TS_01
DISABLED
INDEX_TS_01
DISABLED
正如你所預(yù)計的那樣,你可以在一個表空間直接壓縮或解壓縮一個表,而不用考慮表空間級別上的
COMPRESS
屬性
如果屬于一個單獨的表空間不是system等,可以把表空間刪除,或刪除所有對象后resize數(shù)據(jù)文件
1. 它是一個可執(zhí)行的文件 存放目錄/ORACLE_HOME/bin
exp導(dǎo)出工具將數(shù)據(jù)庫中數(shù)據(jù)備份壓縮成一個二進制系統(tǒng)文件. 它有三種模式:
a. 用戶模式:導(dǎo)出用戶所有對象以及對象中的數(shù)據(jù);
b. 表模式: 導(dǎo)出用戶所有表或者指定的表;
c. 整個數(shù)據(jù)庫: 導(dǎo)出數(shù)據(jù)庫中所有對象。
2. 導(dǎo)出工具exp交互式命令行方式的使用的例子
$exp test/test123@appd
Enter array fetch buffer size: 4096 回車
Export file: expdat.dmp m.dmp 生成導(dǎo)出的文件名
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U 3
Export table data (yes/no): yes 回車wQeLin
Compress extents (yes/no): yes 回車
有2種方法:
1.將你22G的表空間的DBF數(shù)據(jù)文件縮小,這樣表空間就自然變小了
2. 將這個22G的表空間中得文件移到別的表空間里,然后刪除表空間重新建立,最后再講移出的表移回來,這樣也能縮小表空間
alter table tableName move nocompress;
ok
直接alter table tableName move nocompress后能增加列,但無法增加帶default值的列
設(shè)置為 move nocompress后即可,
原因暫未研究,備查