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 모두 적용한다..
Steams 관리자 계정 생성 및 관리자 계정에 권한 부여
|
1.1.3 Database Link 생성
Source에서 Target으로 변경을 전달하는 Propagation의 ‘길’로 사용되는 Database Link를 생성한다. Global_name=True로 지정했으므로 database link의 이름을 Target의 Global_name과 같은 이름으로 지정해야 한다.
|
1.1.4 Application user 및 table 생성
Test 를 위한 사용자 Schema 및 table 생성
|
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을 적용해야 한다.
|
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; / |