1.ORACLE STREAMS CONFIGURE 


1.1 사전 설정


1.1.1 Parameter 설정 (9i 기준)






사전 작업으로 아래의 파라미터값 들을 설정해주어야 한다.


(9i 기준, 11g 의 경우 변경되거나 기본값으로 지정되어 특별히 지정해 주지 않아도 가능)


 


 


AQ_TM_PROCESSES=2


1이나 1이상의 값을 지정한다. 이는 capture에 의해 capturing lcr propagation할 때


사용하는 queue agent 수를 나타낸다. 


 


ARCHIVE_LAG_TARGET=1800


      RAC환경에서, Capture process Online Redo log를 바로 읽지 못하고(9i) 양쪽


node archive file을 읽어야 하는데, 일반적으로 archive file redo log file


크기만큼 쓰여 져야만 log switch가 발생하면서 archive file이 생성된다. 그러나


Stream에서는 archive file을 생성하는 것을 Log Switch가 발생할 때 생성되는 것 외에


일정한 시간으로 지정할 수 있다. 이때 사용하는 parameter로 초 단위로 지정할 수


있다. 만약 30분 마다 archive file을 생성하여 변경을 capture하기 위해서는 1800으로


지정하면 된다.


 


COMPATIBLE=9.2.0 


  Stream 9iR2에서 새로 나온 기능이므로 compatible 9.2 이상으로 지정해야


한다. 


 


GLOBAL_NAMES=TRUE


distribute database를 사용 하는 경우에는, network 상의 유일한 database


connection을 유지 하기 위해 오라클에서는 db link를 생성할 때 Database Link


이름을 Remote Database global_name으로 만들도록 제약을 가하는데, 이러한


제약을 적용하기 위한 parameter.


 


JOB_QUEUE_PROCESSES=2


job process의 수를 결정하는 parameter, queue queue로 전달하는 직접적인 일을


하는 프로세스가 된다. 1이상의 값을 지정한다. (Max 999)


 


LOG_PARALLELISM=1


  Capture process를 사용하기 위해서는 반드시 1로 지정.


 


LOGMNR_MAX_PERSISTENT_SESSIONS=10


log miner에서 사용하는 동시 session의 수를 지정하게 되는데, session


persistent하게 유지되며 현재의 정보를 dictionary에 보존한다.  만약 capture를 여러 개


운영하게 되는 경우에는, 최소한 capture의 수보다 더 많이 지정한다. 보통의 권장 값은


10이다.


 


OPEN_LINKS=30


source target의 동시 db link의 연결 수를 지정하는 parameter이다. 보통의 경우 30


정도 지정하면 문제 없이 사용할 수 있다.


 


PARALLEL_MAX_SERVERS=12


capture apply 프로세스에 작업이 많을 경우에는 각각 parallel하게 작업을 수행 할


수 있으며,   Capture apply property parallel 값을 지정할 수 있다.  


그러므로 database level에서 관장하는 paralell_max_servers수는 capture, apply


parallelism을 허용할 수 있는 만큼 지정해야 한다.


 


LOGMNR_MAX_PERSISTENT_SESSIONS=10


log miner에서 사용하는 동시 session의 수를 지정하게 되는데, session


persistent하게 유지되며 현재의 정보를 dictionary에 보존한다.  만약 capture를 여러 개


운영하게 되는 경우에는, 최소한 capture의 수보다 더 많이 지정한다. 보통의 권장 값은


10이다.


 


OPEN_LINKS=30


source target의 동시 db link의 연결 수를 지정하는 parameter이다. 보통의 경우 30


정도 지정하면 문제 없이 사용할 수 있다.


 


PARALLEL_MAX_SERVERS=12


capture apply 프로세스에 작업이 많을 경우에는 각각 parallel하게 작업을 수행 할


수 있으며,   Capture apply property parallel 값을 지정할 수 있다.  


그러므로 database level에서 관장하는 paralell_max_servers수는 capture, apply


parallelism을 허용할 수 있는 만큼 지정해야 한다.


 


TRANSACTION_AUDITING=TRUE


DDL에 대한 변경내용에 대한 적용을 정확하게 하기 위해서 지정. (Note:238458.1 참고)


alert.log에 아래와 같은 error가 발생 하는 경우에는 반드시 지정해야 함.


WARNING: no base object information defined in logminer


dictionary!!!  


knlldmm: gdbnm=SITE1.WORLD  


knlldmm: objn=6838  


knlldmm: objv=1  


knlldmm: scn=147467 


 


 


 


 


1.1.2 DB Level 의 사전 작업






Archive Log Mode로 변경.


Capture 프로세스는 일반적으로 Online Redo log를 읽어서 변경을 Capturing하지만


RAC환경일 경우나 Capture 프로세스가 down된 후 restart될 때 Archive log file


Access하는 경우가 있다. 그러므로 Source가 되는 Database는 반드시 Archive log


운영되어야 한다.


 


Logminor Tablespace의 이동.


Oracle Database install되면 기본적으로 Logminer dictionary Tablespace


‘SYSTEM’ tablespace에 생성된다.


그러나 시스템의 안정성이나 운영 성을 고려해서 다른 Tablespace로 이동하는 것이 좋다. 


이 작업은 Source/Target Database 모두 적용한다..






1. 새로운 logminer tablespace 생성.


      CREATE TABLESPACE LOGMIR_T DATAFILE  


        EXTENT MANAGEMENT LOCAL 


         SEGMENT SPACE MANAGEMENT AUTO;


     ‘/dev/vgdbtpsts01/rlvfree02.dbf’ SIZE  995M REUSE;


 


2. logminor tablespace를 새로이 만든 tablespace로 이관한다.


  connect / as sysdba


  BEGIN


    DBMS_LOGMNR_D.SET_TABLESPACE(‘LOGMIR_T’);


  END;


  /


 


 


Steams 관리자 계정 생성 및 관리자 계정에 권한 부여






GRANT CONNECT, RESOURCE, SELECT_CATALOG_ROLE


TO strmadmin IDENTIFIED BY strmadmin;


ALTER USER strmadmin DEFAULT TABLESPACE LOGMIR_T


QUOTA UNLIMITED ON LOGMIR_T;


GRANT EXECUTE ON DBMS_AQADM TO strmadmin;


GRANT EXECUTE ON DBMS_CAPTURE_ADM TO strmadmin;


GRANT EXECUTE ON DBMS_PROPAGATION_ADM TO strmadmin;


GRANT EXECUTE ON DBMS_STREAMS_ADM TO strmadmin;


GRANT EXECUTE ON DBMS_APPLY_ADM TO strmadmin;


GRANT EXECUTE ON DBMS_FLASHBACK TO strmadmin;


grant select any dictionary to strmadmin;   — OEM Stream tool


사용하기 위해.


 


BEGIN


DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(


   privilege => DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,


   grantee => ‘strmadmin’,


   grant_option => FALSE);


END;


/


 


BEGIN


  DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(


   privilege => DBMS_RULE_ADM.CREATE_RULE_OBJ,


   grantee => ‘strmadmin’,


   grant_option => FALSE);


END;


/



 


1.1.3 Database Link 생성






Source에서 Target으로 변경을 전달하는 Propagation의 ‘길’로 사용되는 Database


Link를 생성한다. Global_name=True로 지정했으므로 database link의 이름을


Target Global_name과 같은 이름으로 지정해야 한다.






Source 에서 작업


CONNECT strmadmin/strmadmin@ORCL


CREATE DATABASE LINK TEST CONNECT TO strmadmin IDENTIFIED BY


strmadmin USING ‘TEST‘;  — TNS 접속 정보


 


select * from global_name@TEST;  –DB Link Name


——————-


TEST



 


1.1.4 Application user table 생성






Test 를 위한 사용자 Schema table 생성






Source and Target


drop user strmuser cascade;


create user strmuser identified by strmuser


default tablespace logmir_t temporary tablespace temp;


grant connect, resource to strmuser;


 


connect strmuser/strmuser


 


CREATE TABLE DEPT


       (DEPTNO NUMBER(2) primary key,


        DNAME VARCHAR2(14),


        LOC VARCHAR2(13) );


 


INSERT INTO DEPT VALUES (10, ‘ACCOUNTING’, ‘NEW YORK’);


INSERT INTO DEPT VALUES (20, ‘RESEARCH’,   ‘DALLAS’);


INSERT INTO DEPT VALUES (30, ‘SALES’,      ‘CHICAGO’);


INSERT INTO DEPT VALUES (40, ‘OPERATIONS’, ‘BOSTON’);


commit;



 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


1.1.5 Object에 대한 Grant Supplemental Logging 적용






결국 Target으로 변경에 대한 LCR이 전달되어 Apply process의해 Target Table


적용하게 되는데, Apply Process Stream Admin의 권한으로 수행되므로 Target


Table에 대한 변경 권한을 Stream Admin에게 부여해야 한다.


또한 변경된 내용 외에 Target Database에서 row를 구분하기 위한 column들에 대해


Supplemental logging을 적용한다. 보통 Source Primary Key Destination


Unique Key에 대한 Supplemental Logging은 한다. 만약 Apply Process


Parallelism을 사용하기 위해서는 PK, UK외에 모든 Target Database Table Index


Foreign Key에도 Supplemental Logging을 적용해야 한다.


 






Source


connect strmuser/strmuser@ORCL


grant all on dept to strmadmin;


ALTER TABLE strmuser.dept ADD SUPPLEMENTAL 


  LOG GROUP log_group_dept_pk (deptno) ALWAYS; 


 


Target


grant all on dept to strmadmin;



 


1.1.6 Source/Target Queue생성






Source


 


CONNECT strmadmin/strmadmin@ORCL


 


BEGIN


DBMS_STREAMS_ADM.SET_UP_QUEUE(


queue_table => ‘dept_queue_table’,


queue_name  => ‘dept_queue’);


END;


/


Target


CONNECT strmadmin/strmadmin@TEST


 


BEGIN


DBMS_STREAMS_ADM.SET_UP_QUEUE(


queue_table => ‘dept_queue_table’,


queue_name  => ‘dept_queue’);


END;


/


 


 


1.1.7 Propagation 생성






Source에서 전송을 위한 Propagation을 생성한다.


 


Source


connect strmadmin/strmadmin@HIKIM


 


BEGIN


  DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(


    table_name => ‘strmuser.dept’,


    streams_name => ‘dept_stream’,


    source_queue_name => ‘strmadmin.dept_queue’,


    destination_queue_name =>


‘strmadmin.dept_queue@TEST’,


    include_dml => true,


    include_ddl => true,


    source_database => ‘ORCL’);


END;


/


 


 


1.1.8 Capture 생성






Source에서 변경 내용을 Capturing하는 Capture process를 생성한다.


 


— Source


connect strmadmin/strmadmin@ORCL


 


BEGIN


DBMS_STREAMS_ADM.ADD_TABLE_RULES(


  table_name   => ‘strmuser.dept’,   등록하는 Table이름


  streams_type => ‘capture’,


  streams_name => ‘dept_capture’,    새로운 Capture이름.


  queue_name   => ‘strmadmin.dept_queue’, — 송신 queue


  include_dml  => true,


  include_ddl  => true);


END;


/


 


1.1.9 Table sync Preparation






복제되는 대상에 대한 초기 Sync Preparation을 위해 exp/imp를 사용한다. 만약에


Target쪽에 Table이 없거나 Data가 없을 경우에는 exp option중에 rows Yes로 한다.


 


Source


exp userid=strmuser/strmuser FILE=dept_instant.dmp TABLES=dept


OBJECT_CONSISTENT=y ROWS=n 


 


FTP dept_instant.dmp file target으로 전송(binary mode).


 


Target


imp userid=strmuser/strmuser FILE=dept_instant.dmp IGNORE=y COMMIT=y


LOG=import.log STREAMS_INSTANTIATION=y


 


rem target에는 supplemetal logging이 필요 없으므로 drop한다)


 


CONNECT strmuser/strmuser@TEST


— import에 의해 추가된 logging을 삭제한다. Target Logging이 필요 없음


ALTER TABLE strmuser.dept DROP SUPPLEMENTAL LOG GROUP


log_group_dept_pk;


 


 


1.1.10 Apply 생성






Target Database에서 Apply Process를 생성한다.


 


Target 


CONNECT strmadmin/strmadmin@TEST


 


BEGIN


  DBMS_STREAMS_ADM.ADD_TABLE_RULES(


   table_name => ‘strmuser.dept’,


   streams_type => ‘apply’,


   streams_name => ‘dept_apply’,


   queue_name => ‘strmadmin.dept_queue’,


   include_dml => true,


   include_ddl => true,


   source_database => ‘TEST);


END;


/


REM Apply중에 Error나도 계속 진행하는 Parameter 지정


BEGIN


  DBMS_APPLY_ADM.SET_PARAMETER(


   apply_name => ‘dept_apply’,


   parameter => ‘disable_on_error’,


   value => ‘n’);


END;


/


 


 


1.1.11 SCN Instantiation






SCN Instantiation Target에서 등록된 Object에 대한 Sync의 기준 시점을 지정하는


것으로 Source SCN을 이용하여 지정하게 된다. , Source에서 Target으로 전달된


LCR SCN이 지정된 SCN보다 나중의 것인 경우만 Apply Process에 의해 적용된다.


 여기서 주의할 것은 SCN Source SCN을 기준으로 지정하여야 한다.


 


— Source SCN를 이용하여 Target에서 수행하는 방식.


 


connect strmadmin/strmadmin@ORCL  — Source로 접속


 


DECLARE


  iscn NUMBER; — Variable to hold instantiation SCN value


BEGIN


  iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();


      — Target에 적용


  DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@TEST(


  source_object_name => ‘strmuser.dept’,     


   source_database_name => ‘ORCL’,


   instantiation_scn => iscn);


END;


/


 


 


1.1.12 Starting Apply/Capture






마지막으로 Capture Apply Process를 기동하여 정상적으로 Setup이 되었는지


Test를 한다. Propagation은 생성할 때 자동으로 Enable된다.


 


–Target(Apply start)


CONNECT strmadmin/strmadmin@TEST


 


BEGIN


  DBMS_APPLY_ADM.START_APPLY(


   apply_name => ‘dept_apply’);


END;


/


 


–Source(Capture Start)


CONNECT strmadmin/strmadmin@ORCL


 


BEGIN


  DBMS_CAPTURE_ADM.START_CAPTURE(


   capture_name => ‘dept_capture’);


END;


/


 


 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다