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;

/

 

 

사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

+ Recent posts