ProSync에서 테이블을 동기화하기 전에, 먼저 지원되는 데이터 타입을 확인한다. Source DB에 따라 지원하는 컬럼 타입이 다르므로 주의한다.
Tibero
VARCHAR2, NVARCHAR2, NUMBER, FLOAT, LONG, DATE, BINARY_FLOAT, BINARY_DOUBLE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL YEAR TO MONTH
Oracle
ProSync 4.7은 Oracle 확장 데이터 타입을 자동으로 인식한다. 컬럼의 선언 길이를 바이트 기준으로 확인하며, VARCHAR2·NVARCHAR2는 4,000바이트 초과, RAW는 2,000바이트 초과인 컬럼을 확장 타입으로 처리한다. USE_ORACLE_EXTENDED_TYPE 파라미터는 사용하지 않는다.
확장 타입 컬럼이 있는 소스 테이블에는 PRIMARY KEY가 필요하며, UNIQUE 제약조건이나 ROWID로 대신할 수 없다. 별도로 저장된 확장 값은 Llob 프로세스가 소스 DB에 Flashback Query를 수행하여 읽는다.
Llob 프로세스의 동작은 를 참고한다.
동기화 대상 테이블은 Source DB와 Target DB 각각에 존재해야 한다. MAP Rule을 사용하지 않는 기본 구성에서는 Source와 Target에 동일한 사용자 계정과 동일한 스키마 구조로 생성하는 것을 전제로 한다.
다음은 TEST 사용자 계정에 테이블 T1, T2, T3을 생성하는 예제이다. Source DB와 Target DB 모두에 수행한다.
동기화 대상 테이블은 아래 경로의 파일에 등록한다.
등록 형식은 OWNER_NAME.TABLE_NAME 형태로 작성한다.
#으로 시작하는 줄과 빈 줄은 무시된다. 그 외의 줄은 OWNER_NAME.TABLE_NAME 형식이어야 하며, 구분자 .가 없거나 둘 이상이거나 OWNER 또는 TABLE이 비어 있으면 잘못된 항목으로 판단해 설치를 중단한다.
동기화 대상을 지정할 때 Table명과 User(Owner)명 모두에 % 와일드카드를 사용할 수 있다.
사용 예시는 다음과 같다.
Source DB가 Tibero 또는 Oracle인 경우, 다음 객체는 동기화 대상에서 자동으로 제외된다. 제외 대상에 따라 적용 범위가 다르다.
또한 등록되는 객체 타입은 TABLE과 SEQUENCE로 한정되며, 그 외의 객체 타입은 등록되지 않는다.
Source DB가 Tibero 또는 Oracle인 경우, 설치 config 파일에 AUTO_SYNC_ON_CREATE=Y를 설정하면 설치 이후 CREATE 문으로 생성된 테이블과 시퀀스가 자동으로 동기화 대상에 등록된다. prs_obj_group#.list에 미리 적지 못한 테이블을 매번 Admin 명령으로 등록하거나 재설치할 필요가 없다.
자동 등록을 사용하려면 Source DB에 DB 단위 supplemental log가 설정되어 있어야 한다. 테이블 단위로만 supplemental log를 건 경우, 자동 등록된 테이블은 supplemental log가 없는 상태가 되어 변경분을 추출할 수 없다.
Source DB가 Oracle인 경우 DB 단위로 supplemental log를 설정한다. 설치 config 파일에 SUPP_LOG_LVL_ALL=Y를 설정하면 설치 과정에서 database level로 설정된다.
Source DB가 Tibero인 경우 _DDL_AUTO_SUPPLOG_CTBL을 TRUE로 설정하여 DB 단위 supplemental log를 활성화한다. 운영 중인 DB에는 ALTER SYSTEM으로 바로 적용할 수 있으나 이 변경은 DB 재기동 후 유지되지 않으므로, TIP 파일에도 같은 값을 설정한다. TAC 환경에서는 모든 노드에 동일하게 설정한다.
설치 config 파일에 AUTO_SYNC_ON_CREATE=Y를 설정하면 설치 과정에서 이 값을 확인하며, 설정되어 있지 않으면 안내 메시지와 함께 설치를 중단한다.
%.%
Source DB의 모든 소유자의 모든 테이블 (User 와일드카드)
AQ 관련 테이블
항상
이름이 AQ$_ 로 시작하는 테이블이 제외된다.
IOT overflow 세그먼트
항상
이름이 SYS_IOT_OVER_ 로 시작하는 테이블이 제외된다.
Recycle Bin 객체
항상
이름이 BIN$ 로 시작하는 객체가 제외된다.
INTERVAL DAY TO SECONDRAWCHARNCHARCLOBNCLOBBLOBXMLTYPEVARCHAR2, NVARCHAR2, NUMBER, FLOAT, LONG, DATE, BINARY_FLOAT, BINARY_DOUBLE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND, RAW, CHAR, NCHAR, CLOB, NCLOB, BLOB, XMLTYPE
PostgreSQL
CHAR, VARCHAR, INT, SMALLINT, BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BYTEA, TEXT, DATE, TIMESTAMP
TEST.%
TEST 소유의 모든 테이블 (Table 와일드카드)
TEST.TB%
TEST 소유의 테이블 중 이름이 TB로 시작하는 테이블
TEST%.%
시스템 스키마의 객체
OWNER를 %가 포함된 패턴으로 지정한 경우에만
Oracle 12c 이상은 DB가 관리하는 계정(ALL_USERS.ORACLE_MAINTAINED = 'Y', SYS · SYSTEM 등)이 제외된다. Oracle 11g는 이 컬럼이 없으므로 Oracle 기본 계정과 옵션 계정의 고정 목록(SYS, SYSTEM, OUTLN, DBSNMP, DIP, ORACLE_OCM, APPQOSSYS, ANONYMOUS, XS$NULL, XDB, CTXSYS, MDSYS, MDDATA, ORDSYS, ORDDATA, ORDPLUGINS, SI_INFORMTN_SCHEMA, OLAPSYS, EXFSYS, WMSYS, SYSMAN, MGMT_VIEW, OWBSYS, OWBSYS_AUDIT, SPATIAL_CSW_ADMIN_USR, SPATIAL_WFS_ADMIN_USR, TSMSYS, DMSYS, WKSYS, WKPROXY, WK_TEST, LBACSYS, DVSYS, DVF, FLOWS_FILES, APEX_PUBLIC_USER)과, APEX_030200 · FLOWS_030000처럼 APEX_ 또는 FLOWS_ 뒤에 숫자 6자리가 붙는 계정이 제외되며, 목록에 없는 계정은 제외되지 않는다. Tibero는 SYS, SYSCAT, SYSGIS, OUTLN, LBACSYS 및 일반 사용자가 아닌 계정이 제외된다.
ProSync 운영 계정과 메타 객체
항상
이름이 TEST로 시작하는 모든 소유자의 모든 테이블 (User 와일드카드)
PRS_USER 소유의 객체와 PRS_OBJ_LIST, PRS_DD_*, PRS_LCT 등 ProSync가 생성한 메타 객체가 제외된다.
$ tbsql sys/password
SQL> CREATE USER TEST IDENTIFIED BY PASSWORD;
SQL> GRANT RESOURCE, CONNECT TO TEST;
SQL> CREATE TABLE TEST.T1 (C1 NUMBER PRIMARY KEY, C2 VARCHAR(10));
SQL> CREATE TABLE TEST.T2 (C1 NUMBER PRIMARY KEY, C2 VARCHAR(10));
SQL> CREATE TABLE TEST.T3 (C1 NUMBER PRIMARY KEY, C2 VARCHAR(10));$PRS_HOME/install/prs_obj_group1.listTEST.T1
TEST.T2
TEST.T3TEST.%
TEST%.%
%.%SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;SQL> ALTER SYSTEM SET _DDL_AUTO_SUPPLOG_CTBL=TRUE;_DDL_AUTO_SUPPLOG_CTBL=TRUE# Source Tibero
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=src_tibero
AUTO_SYNC_ON_CREATE=Y# Source Oracle
SRC_DB_TYPE=ORACLE
SRC_DB_NAME=src_oracle
AUTO_SYNC_ON_CREATE=Y
SUPP_LOG_LVL_ALL=YProSync를 설치하기 전에 반드시 확인해야 할 항목들을 안내한다. 환경 변수 설정, DB 사전 설정 등 설치가 원활히 진행되기 위한 준비 과정을 설명한다.
ProSync를 설치하기 위해 필요한 환경변수를 설명한다.
ProSync를 설치하기 위해 필요한 환경변수는 다음과 같다.
TB_HOME
TB_HOME은 Tibero DB가 설치된 홈 디렉토리이다.
Tibero가 Source DB 또는 Target DB에 포함된 경우 해당 경로로 설정한다.
Tibero를 사용하지 않는 경우에도 변수 자체는 반드시 설정되어야 하며, 이 경우 공백이나 dummy 경로 등으로 설정한다.
ORACLE_HOME
설치 스크립트는 SQL 실행 결과를 prs_install.log에 기록한 뒤, 그 텍스트에서 오류 코드를 추출하여 무시해도 되는 오류인지 판단한다. 예를 들어 설치 초기의 기존 객체 정리 단계에서는 객체가 존재하지 않아 발생하는 오류(TBR-7071, ORA-00942, ORA-02289, ORA-04043 등)가 정상적으로 발생하며, 설치 스크립트는 이를 무시하고 진행한다.
따라서 오류 메시지가 설치 로그에 깨지지 않고 기록되도록, 설치를 수행하는 shell의 locale과 DB 클라이언트의 Character Set 설정을 서로 일치시켜야 한다. 설정이 서로 다르면 DB가 반환한 오류 메시지가 깨진 문자로 기록되고, 설치 스크립트가 오류 코드를 정확히 추출하지 못해 무시해도 되는 오류까지 설치 실패로 처리되어 설치가 중단된다.
다음은 오류 메시지가 깨져 설치가 중단된 예시이다. 무시 대상인 ORA-00942가 실패로 처리되었다.
설치를 수행하는 shell의 locale(LANG, LC_*)과 DB의 CHARSET, NCHARSET 설정이 서로 맞는지 확인한다.
DB 클라이언트의 Character Set 변수(Tibero TB_NLS_LANG, Oracle NLS_LANG, PostgreSQL PGCLIENTENCODING)를 shell locale의 encoding과 일치시킨다.
설치 시 Source/Target DB에 모두 접속하기 때문에 DB별 환경변수가 모두 설정되어야 한다.
tbsql 바이너리 경로가 PATH 환경변수에 존재해야 한다.
Tibero 데이터베이스를 사용하지 않는 경우, 참고하여 dsn파일 생성 후 TB_DSN_FILE 환경변수에 해당 파일 경로를 설정한다.
sqlplus 바이너리 경로가 PATH 환경변수에 존재해야 한다.
Oracle 데이터베이스를 사용하지 않는 경우, 참고하여 tnsnames.ora 파일 생성 후 TNS_ADMIN 환경변수에 해당 파일이 존재하는 폴더 경로를 설정한다.
psql 바이너리 경로가 PATH 환경변수에 존재해야 한다.
PostgreSQL 데이터베이스를 사용하지 않는 경우, 참고하여 service 파일 생성 후 PGSERVICEFILE 환경변수에 해당 파일 경로를 설정한다.
Oracle DB가 Source DB 또는 Target DB에 포함된 경우에만 설정한다.
PRS_HOME
ProSync가 설치된 최상위 디렉토리를 설정한다.
PATH
파일 시스템을 통해 특정 파일에 접근하기 위한 디렉토리 경로를 설정하는 환경변수이다. 아래와 같이 설정한다.
LD_LIBRARY_PATH
DB 접속을 위해 클라이언트 라이브러리에 대한 접근 경로를 설정한다.
OS에 따라 LIBPATH, SHLIB_PATH 등으로 다를 수 있으며, 아래와 같이 설정한다.
LANG, LC_*
설치를 수행하는 shell의 locale을 설정한다. 설정값에 따라 설치가 실패할 수 있으므로 아래 'Locale 및 Character Set 설정'을 참고한다.
DB 클라이언트 Character Set 변수
DB 클라이언트가 사용할 Character Set을 설정한다. DB 종류에 따라 변수명이 다르며, Tibero는 TB_NLS_LANG, Oracle은 NLS_LANG, PostgreSQL은 PGCLIENTENCODING을 사용한다. 설정값에 따라 설치가 실패할 수 있으므로 아래 'Locale 및 Character Set 설정'을 참고한다.
********************************************************************************
* Install to Source Database (3/5)
********************************************************************************
Checking archived log mode... ok
Checking Oracle Version... ok : 19
Dropping ProSync objects... failed 00942읶 ORA-00942: 읶export PATH=$PRS_HOME/bin:$PRS_HOME/client/bin:$PATHexport LD_LIBRARY_PATH=$PRS_HOME/lib:$PRS_HOME/client/lib:$LD_LIBRARY_PATHProSync 사용을 위한 Source Database별 설정 방법을 안내한다.
다음 항목을 TIP 파일에 설정한다.
_ENABLE_LOG_MINER=Y # ProSync가 사용하기 위한 추가적인 redo log를 남기기 위함
_SPAN_UNDO=N # Tibero 6 FS07 이상에서 설정
_DDL_TRIGGER_ENABLE=Y # meta table 정보 관리를 위한 설정, 기본값은 Y이므로 설정하지 않아도 무방함$ tbboot -t mount
$ tbsql sys/password
SQL> ALTER DATABASE ARCHIVELOG;
SQL> QUIT
$ tbdown
$ tbbootCREATE 문으로 생성된 테이블을 자동으로 동기화 대상에 등록하는 경우(AUTO_SYNC_ON_CREATE=Y), DB 단위 supplemental log가 설정되어 있어야 한다. _DDL_AUTO_SUPPLOG_CTBL을 TRUE로 설정하며, 운영 중인 DB에는 ALTER SYSTEM으로 바로 적용할 수 있다.
SQL> ALTER SYSTEM SET _DDL_AUTO_SUPPLOG_CTBL=TRUE;ALTER SYSTEM으로 변경한 값은 DB 재기동 후 유지되지 않으므로, 다음 항목을 TIP 파일에도 추가한다.
_DDL_AUTO_SUPPLOG_CTBL=TRUE자세한 내용은 동기화 대상 테이블 생성 및 등록 페이지의 '동기화 대상 자동 등록'을 참고한다.
Tibero Standby Cluster(TSC) 환경에서 Standby DB를 Source로 사용하는 경우 Standby DB가 read-only 모드로 open되어 있어야 하는 등 추가 준비 사항이 있다. 또한 Failover 이후에는 승격된 Standby DB가 Redo를 생성하는 추출 대상이 되므로, 위의 TIP 파일 설정은 Primary DB와 Standby DB 모두(TAC-TSC는 모든 노드)에 적용해야 한다. 설치 config 파일의 USE_TSC=Y 설정과 사전 준비 사항은 페이지를 참고한다.
위와 같이 DB 단위로 supplemental log를 설정하면 CREATE 문으로 생성된 테이블을 자동으로 동기화 대상에 등록하는 기능(AUTO_SYNC_ON_CREATE=Y)을 사용할 수 있다. 설치 config 파일의 SUPP_LOG_LVL_ALL=Y 설정으로도 동일하게 설정할 수 있으며, 자세한 내용은 페이지의 '동기화 대상 자동 등록'을 참고한다.
AQ와 Archive Log 관련 파라미터는 다음과 같이 설정한다.
Redo Log 또는 Archive Log가 ASM Diskgroup에 저장되어 있는 경우, Extract 프로세스가 ASM 인스턴스에 접속하여 로그를 읽는다. 다음 조회 결과의 경로가 +로 시작하면 ASM 접속 정보 설정이 필요하다.
ASM 인스턴스 접속 별칭을 tnsnames.ora에 등록하고, SYSASM 권한을 가진 접속 계정을 준비한다. 설치 config 파일의 ASM_DB_NAME, ASM_USER, ASM_PWD 설정과 사전 준비 사항은 페이지를 참고한다.
$ sqlplus / as sysdba
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
SQL> ALTER DATABASE OPEN;$ sqlplus / as sysdba
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET OPEN_LINKS=4 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=1 SCOPE=SPFILE;SELECT MEMBER FROM V$LOGFILE;
SHOW PARAMETER log_archive_dest
SHOW PARAMETER db_recovery_file_dest$ cat postgresql.conf | grep wal_level
wal_level = logical # minimal, replica, or logicalProSync 설치를 시작하기 전에 각 데이터베이스의 SID 설정 파일을 확인하여 접속 가능한 별칭(Alias)을 설정한다.
Tibero가 Source DB 또는 Target DB로 사용되는 경우, 다음 경로에 별칭을 설정한다.
Oracle이 Source DB 또는 Target DB로 사용되는 경우, 다음 경로에 별칭을 설정한다.
PostgreSQL이 Source DB 또는 Target DB로 사용되는 경우, 다음 경로에 별칭을 설정한다.
pg_service.conf 경로는 PGSERVICEFILE 환경 변수 값으로 지정하거나 시스템 전역(pg_config --sysconfdir/pg_service.conf) 파일을 사용 또는 PGSYSCONFDIR 환경 변수 값으로 지정된 디렉터리의 pg_service.conf 파일을 사용할 수 있다.
$TB_HOME/client/config/tbdsn.tbrSOURCE_SID=(
(INSTANCE=(HOST=SOURCE DB IP)
(PORT=SOURCE DB PORT)
(DB_NAME=SOURCE DB NAME))
)
TARGET_SID=(
(INSTANCE=(HOST=TARGET DB IP)
(PORT=TARGET DB PORT)
(DB_NAME=TARGET DB NAME))
)$ORACLE_HOME/network/admin/tnsnames.oraSOURCE_ALIAS=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)
(HOST=SOURCE DB IP)
(PORT=SOURCE DB PORT))
(CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=SOURCE DB SERVICE NAME))
)
TARGET_ALIAS=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)
(HOST=TARGET DB IP)
(PORT=TARGET DB PORT))
(CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=TARGET DB SERVICE NAME))
)~/pg_service.conf[SOURCE_ALIAS]
host=SOURCE DB IP
port=SOURCE DB PORT
dbname=SOURCE DB NAME
[TARGET_ALIAS]
host=TARGET DB IP
port=TARGET DB PORT
dbname=TARGET DB NAME
[EXAMPLE_FOR_REPLICATION]
host=SOURCE DB IP
port=SOURCE DB PORT
dbname=SOURCE DB NAME
replication=database