Bugra Canbakal's Oracle Blog

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

Oracle Table Redefinition

09:44 AM 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')

Share this:

  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to share on X (Opens in new window) X

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

Leave a ReplyCancel reply

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

About Me



Language:

  • English
  • Turkish

Categories

  • 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

Archives

  • April 2014
  • March 2014
  • August 2013
  • June 2013
  • March 2013
  • January 2013
  • December 2012
  • November 2012
  • July 2012
  • June 2012
  • May 2012
  • January 2012
  • November 2011
  • October 2011
  • August 2011
  • July 2011
  • June 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • June 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: Cookie Policy

[footer_backtotop]

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