26 Mayıs 2012 Cumartesi

Tabloların Sıkıştırılması


İlk oracle 9i sürümünde alan kazancı amacıyla çıkarılmıştır. Artıları IO performansı arttırır, db cache’ deki memory kullanımı azalır, ancak bu işlemlerin hepsi için extra CPU yükü doğurur.
Sıkıştırma işlemleri tablolarda, partition  ve tablespace düzeyinde yapılabilir.

NOCOMPRESS seçeneği default olan seçenektir. Kullanıldığı zaman sıkıştırılma yapılmaz.

COMPRESS seçeneğinde ise sıkıştırılma yapılır. Tablo ve partition’larda direct-path insert esnasında bu seçenek kullanılabilir.

COMPRESS FOR DIRECT_LOAD OPERATIONS yukarıdaki seçenekle aynı etkisi gösterir.

COMPRESS FOR OLTP seçeneği  OLTP sistemler için kabul edilip kullanılan sıkıştırma tekniğidir. COMPATIBLE  başlangıç parametresi en az 11.1.0 ve üst versiyonlarda set edilmişse bu seçenek aktiftir

Kullanımı:
--birinci tablo
 
CREATE TABLE test_tab1 (
  id            NUMBER(10)    NOT NULL,
  description   VARCHAR2(50)  NOT NULL,
  created_date  DATE          NOT NULL
)
COMPRESS FOR OLTP;
 

 
--ikinci tablo. Farklı partitionları farklı compress seçenekleri ile  sıkıştırma .
 
CREATE TABLE test_tab2 (
  id            NUMBER(10)    NOT NULL,
  description   VARCHAR2(50)  NOT NULL,
  created_date  DATE          NOT NULL
)
PARTITION BY RANGE (created_date) (
  PARTITION test_tab_quart1 VALUES LESS THAN (TO_DATE('01/01/2012', 'DD/MM/YYYY')) COMPRESS,
  PARTITION test_tab_quart2 VALUES LESS THAN (TO_DATE('01/04/2012', 'DD/MM/YYYY')) COMPRESS FOR DIRECT_LOAD OPERATIONS,
  PARTITION test_tab_quart3 VALUES LESS THAN (TO_DATE('01/07/2012', 'DD/MM/YYYY')) COMPRESS FOR OLTP,
  PARTITION test_tab_quart4 VALUES LESS THAN (MAXVALUE) NOCOMPRESS
);


SQL> ALTER TABLE test_tab1 DROP COLUMN description;

ERROR at line 1:

ORA-39726: unsupported add/drop column operation on compressed tables
 
Sıkıştırılmış bir tablodaki kolon silemeyiz. Silebilmemiz için önce o kolonu unused yapmamız gerekiyor.
 
SQL> ALTER TABLE test_tab1 SET UNUSED (description);
Table altered.
 
Daha sonra unused olan kolonları aşağıdaki gibi silebiliriz..
 
SQL> ALTER TABLE TEST DROP unused columns;
Table altered.

0 yorum:

Yorum Gönder