Bugra Canbakal's Oracle Blog

  • Home
  • Contact
  • SITE MAP
You are here: Home / Oracle / Oracle Table Redefinition

Oracle Table Redefinition

Mayıs 20, 2012 By Bugra Canbakal Leave a Comment

1.AMAÇ VE KAPSAM

Redefinition production ortamlarda veritabaninda kesinti yaratmadan tablo’nun storage parametrelerini degiştirmek,farkli bir tablespace taşimak veya yeni kolonlar eklemek,silmek ve degiştirmek için kullanilabilir.
Aşağıdaki çalışmamda bir tabloyu partition’li hale getirip 2009,2010,2011 yıllarına ayit partition’larını exadatanin özelliği olan “archive high” compress’liyecem,2012 yılının aylarınıda OLTP compress yapicam.Bu esnada veritabanı operasyonel olarak çalişmaya devam edicek.
Kisaca redefinition nasil çalıştığını anlatayım: yeni tablonuzu redefinitiona tanımladığınızda redef. bu tablonuzu materialized view çeviriyor ve datayı bu mv’un içine aktarıyor bu esnada orjinal tablonuzda da materialized view log olusturup tablonuza gelen insert,delete ve update işlemlerini kayit altina aliyor.

2.UYGULAMA

2.1. Tablonuz redefinition yapıp yapmamaya uygun olup olmadığımızı aşağıdaki sorgularla görebiliriz.

PK üstünden redefinition yapmak için.

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('MVS', 'ISLEM_LOG',1);

ROWNUM üstünden redefinition yapmak için.

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('MVS', 'ISLEM_LOG',2);

2.2. Tablonuz büyükse parallelliği açmanızı öneririm.

SQL> alter session force parallel dml parallel 32;
SQL> alter session force parallel query parallel 32;

2.3.  Yeni tablomuzu orjinal tablodan farklı olarak partition ve compress özelliği ekleyerek oluşturuyoruz.

SQL> CREATE TABLE MVS.ISLEM_LOG_OLD
(
  LOG_ID               VARCHAR2(40 BYTE)        NOT NULL,
  LOG_YAPAN            VARCHAR2(40 BYTE),
  LOG_YAPILAN          VARCHAR2(40 BYTE),
  LOG_ISLEM_KATEGORI   VARCHAR2(25 BYTE),
  LOG_ISLEM            VARCHAR2(255 BYTE),
  LOG_ISLEM_SONUC      CHAR(1 BYTE),
  LOG_ACIKLAMA         VARCHAR2(1000 BYTE),
  LOG_SON_ISLEM_DAMGA  VARCHAR2(20 BYTE),
  LOG_IP               VARCHAR2(15 BYTE)
)
TABLESPACE AHBS_DATA_TS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOLOGGING
PARTITION BY RANGE (LOG_SON_ISLEM_DAMGA)
(  
  PARTITION ISLEMLOG_2009 VALUES LESS THAN ('20100101000000000')
    LOGGING
    COMPRESS FOR ARCHIVE HIGH  
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_2010 VALUES LESS THAN ('20110101000000000')
    LOGGING
    COMPRESS FOR  ARCHIVE HIGH
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_2011 VALUES LESS THAN ('20120101000000000')
    LOGGING
    COMPRESS FOR ARCHIVE HIGH
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201201 VALUES LESS THAN ('20120201000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201202 VALUES LESS THAN ('20120301000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201203 VALUES LESS THAN ('20120401000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201204 VALUES LESS THAN ('20120501000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201205 VALUES LESS THAN ('20120601000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201206 VALUES LESS THAN ('20120701000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION ISLEMLOG_201207 VALUES LESS THAN ('20120801000000000')
    LOGGING
    COMPRESS FOR OLTP
    TABLESPACE LOG_TS
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
)
COMPRESS FOR OLTP  
NOCACHE
NOPARALLEL
MONITORING;

2.4. Artık redefinition işlemine başlayabiliriz.Start_redef_table tanımları sırasıyla şu şekilde (‘schema_ismi’,’orjinal_tablo’,’yeni_tablo’,’orjinal_tablo_kolon1 yeni_tablo_kolon1,orjinal_tablo_kolon2 yeni_tablo_kolon2, …..) diye gitmekte.Bu işlem bittiğinde var olan datalar yeni tablonuza aktarılmış olacak,aktarılmamış olanlarda materilized view log da saklanıcaklar.Eğer tablonuzda Pk bulunmuyorsa ROWNUM üstünden redef işinizi tamamlamanız gerekir.

PK üstünden redefinition başlatmak için.

SQL> exec dbms_redefinition.start_redef_table('MVS','ISLEM_LOG','ISLEM_LOG_OLD','LOG_ID LOG_ID, LOG_YAPAN LOG_YAPAN, LOG_YAPILAN LOG_YAPILAN,LOG_ISLEM_KATEGORI LOG_ISLEM_KATEGORI,LOG_ISLEM LOG_ISLEM,LOG_ISLEM_SONUC LOG_ISLEM_SONUC,LOG_ACIKLAMA LOG_ACIKLAMA,LOG_SON_ISLEM_DAMGA LOG_SON_ISLEM_DAMGA,LOG_IP LOG_IP');

ROWNUM üstünden redefinition başlatmak için.

SQL> exec dbms_redefinition.start_redef_table('MVS','ISLEM_LOG','ISLEM_LOG_OLD','LOG_ID LOG_ID, LOG_YAPAN LOG_YAPAN, LOG_YAPILAN LOG_YAPILAN,LOG_ISLEM_KATEGORI LOG_ISLEM_KATEGORI,LOG_ISLEM LOG_ISLEM,LOG_ISLEM_SONUC LOG_ISLEM_SONUC,LOG_ACIKLAMA LOG_ACIKLAMA,LOG_SON_ISLEM_DAMGA LOG_SON_ISLEM_DAMGA,LOG_IP LOG_IP',2);

2.5. Data taşıma işlemini bitirdiğimize göre orjinal tablodaki index,trigger,cons. ve grant gibi özellikleride yeni tablomuza taşıyabiliriz.Bu işlemi aşağıdaki gibi yada manuel olarak yapabilirsiniz.

SQL> DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('MVS','ISLEM_LOG','ISLEM_LOG_OLD',DBMS_REDEFINITION.CONS_ORIG_PARAMS,TRUE, TRUE, TRUE, FALSE, num_errors, TRUE);
END;
/

2.6. Redefinition işlemini uzun tutup bitirmemeniz gereken durumlar oluşabiliyor eğer aradaki süre çok açılırsa son adım olan finish_redef_table uzun sürebiliyor bu tarz durumlarda sync işlemini yapmanızda yarar var.

SQL> BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('MVS','ISLEM_LOG','ISLEM_LOG_OLD');
END;
/

2.7. Redef. işlemini artık bitirebiliriz. Bu komuttan sonra orjinal tablonuzla yeni tablonuz rename yapıp birbirlerinin yerine geçiceklerdir.

SQL> BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE('MVS','ISLEM_LOG','ISLEM_LOG_OLD');
END;
/

2.8. Redefinition işlemini iptal etmek için aşağıdaki komutu kullanabilirsiniz.

SQL> exec DBMS_REDEFINITION.ABORT_REDEF_TABLE('MVS', 'ISLEM_LOG', 'ISLEM_LOG_OLD')

Bunu paylaş:

  • Linkedln üzerinden paylaşmak için tıklayın (Yeni pencerede açılır) LinkedIn
  • X'te paylaşmak için tıklayın (Yeni pencerede açılır) X

Filed Under: Oracle Tagged With: oracle, redefinition, table redefinition

Bir Cevap YazınCevabı iptal et

This site uses Akismet to reduce spam. Learn how your comment data is processed.

About Me



Dil:

  • English
  • Turkish

Kategoriler

  • Oracle
    • RAC – Real Application Cluster
    • RMAN
    • Single Node
    • Standby – Dataguard
  • OS
    • Linux

Blogroll

  • Emre Baransel
  • Gökhan Atıl
  • H. Tonguc Yılmaz
  • Kamil Türkyılmaz
  • Tanel Poder
  • Turkce Oracle
  • Turkish Oracle User Group
  • Uwe Hesse
  • Zekeriya Beşiroğlu

Arşivler

  • Nisan 2014
  • Mart 2014
  • Ağustos 2013
  • Haziran 2013
  • Mart 2013
  • Ocak 2013
  • Aralık 2012
  • Kasım 2012
  • Temmuz 2012
  • Haziran 2012
  • Mayıs 2012
  • Ocak 2012
  • Kasım 2011
  • Ekim 2011
  • Ağustos 2011
  • Temmuz 2011
  • Haziran 2011
  • Şubat 2011
  • Ocak 2011
  • Aralık 2010
  • Kasım 2010
  • Haziran 2010
OCP
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Çerez Politikası

[footer_backtotop]

Copyright © 2010-2014 Bugra Canbakal. All rights reserved.