Sunday, June 7, 2009

COMPRESS TABLO YARATMA

COMPRESS tablo yaratmanın iki farklı yöntemi vardir bunlardan birincisi tablo ilk başta yaratılırken create table kalıbı ile birlikte kullanılması
CREATE TABLE compress_tablom (
tel_no VARCHAR2(50) NOT NULL,
ev_no VARCHAR2(50) NOT NULL,
SALE_DATE DATE NOT NULL,
)
COMPRESS
;
İkinci yöntem ise uncompress durumdaki tablonun alter table kalıbı ile compress hale getirilmesidir.
ALTER TABLE COMPRESS_TABLOM COMP COMPRESS;
Uncompress bir tabloyu compress yapmak için
ALTER TABLE UNCOMPRESS_TABLOM MOVE COMPRESS;
Compress bir tabloyu uncompress yapmak için ise
ALTER TABLE COMPRESS_TABLOM MOVE NOCOMPRESS;
Tablonun compress durumda olup olamadığı user_tables görünümden bulabiliriz. Burada disable değeri var ise uncompress durumundadir,aksi halde compressdir.
SELECT TABLE_NAME ,COMPRESSION FROM USER_TABLES
Tablespace'de tabloların default olarak nasıl yaratıalcağini ise aşağıdaki durumdan takip edebilriz. Tablo yaratırken compress yada uncompress parametresi girilmez ise tablespace'nin default değerini alacıktır.
SELECT TABLESPACE_NAME, DEF_TAB_COMPRESSION FROM DBA_TABLESPACES;
Create table as Select kalıbı ile tablo yaratılacak ise araya compress parametresini sıkıştırarak :)) yeni oluşan tabloyu Compress yapıda oluşturmuş olacaktık. Buruda önemli bir nokta ise diyelim ki hedef tablomuz Compress bir yapıda olsun ve bizde compress bir tablo oluşturmak istiyoruz ama tablespacemiz default olarak uncompress yaratılmış. create as select ile compress bir tablo oluşmaz burada compress parametresi girmek gereklidir.

CREATE TABLE hedef_tablom
COMPRESS
AS SELECT * FROM kaynak_tablom;

MATERIALIZED VIEW ‘lerdede compress işlemi yapabiliriz. Bunun için örnek bir kod aşağıdadır.
CREATE MATERIALIZED VIEW MATERVIEW_VIEW
COMPRESS
AS SELECT P.PART_NAME, H.STORE_ID, H.SALE_DATE, H.QUANTITY
FROM SALES_HISTORY H, PARTS P
WHERE P.PART_ID = H.PART_ID;

Alter table kullaranarakda durumunu değiştirebiliriz.
ALTER MATERIALIZED VIEW MATERVIEW_VIEW COMPRESS;
Compress işlemini sadece tablolarda değil parittion bazlıda kullanabiliriz. Aşağıdaki kodda tablonun partitionlarının compress durumlarını gözleyebilirsiniz. Tablonun bütün partitionlarının compress olma zorunluluğu yoktur. Arada farklılıklar olabilir.
SELECT TABLE_NAME, PARTITION_NAME,
COMPRESSION
FROM USER_TAB_PARTITIONS;

Compress tablonun en büyük dezavantajlarından biriside drop column desteklememesidir. Bu işlemi yapmaya kalkıştığınzıda ORA-39726: unsupported add/drop column operation on compressed tables Hatasını alırsınız. Bu konuda ayrıntılı bilgiyi http://aliatesh.spaces.live.com/blog/cns!C0768E50CA168629!1091.entry adresidnen alabilirsiniz.

No comments: