이 절차의 1단계부터 3단계까지는 패치 전 구버전 환경에서 구버전 바이너리로 수행하며, 명령 문법도 구버전 기준이다.
4.0 기준 Abort 종료 시 이력을 저장하지 않기 때문에 로그를 처음부터 읽는다. 이를 위해 로그 스위치를 먼저 수행해야 한다.
ALTER SYSTEM SWITCH LOGFILE;4.0 버전의 경우 abort 종료가 반드시 필요하다.
ADMIN> shutd man (abort);기존 메타데이터를 백업하기 위해 별도의 백업 전용 유저를 생성하고 필요한 권한을 부여한다.
CREATE USER [백업유저이름] IDENTIFIED BY "[백업유저암호]";
GRANT CONNECT, RESOURCE, CREATE SESSION TO [백업유저이름];
GRANT INSERT ANY TABLE TO [백업유저이름];
GRANT CREATE ANY SYNONYM TO [백업유저이름];
GRANT CREATE ANY VIEW TO [백업유저이름];기존 환경의 데이터를 보존하면서 새 버전 바이너리로 마이그레이션하기 위해 디렉토리를 재구성한다.
mv prosync/var prosync_new/var
mv prosync/config prosync_new/config
mv prosync old_prosync
mv prosync_new prosyncprosync_new/prs_install.cfg 파일을 생성하고 아래 내용을 포함한다.
############################################
#
# ProSync Installation Parameters
#
############################################
# (Mandatory)
INSTANCE_ID=instance
PRS_USER=prosync_user
PRS_PWD=prosync_user_password
# (Optional)
#PRS_TS_NAME=
#PRS_TS_FILE=
#PRS_TS_SIZE=
#PRS_SKIP_USER_CREATE=N
#PRS_TARGET_MIN_PRIVILEGE=N
#PRS_LOG_DIR=
#LOG_BACKUP_DIR=
#CREATE_DSN_FILE=N
#DSN_DIR=
#DSN_FILE=#need DSN_DIR
############################################
#
# ProSync Processes Informations for Instance Map
#
############################################
### (Optional)
AGENT_LIST_DELIMITER=,
### (Mandatory)
# Ext process
## Ext cnt must be the same as SRC_DB_CNT
EXT_CNT=1
EXT_AGENT_ID_LIST_0=agent1
#EXT_AGENT_ID_LIST_1=agent1,agent2
# Apply process
APPLY_PORT=7620
APPLY_AGENT_ID_LIST=agent1
# Llob process
LLOB_PORT=7630
LLOB_AGENT_ID_LIST=agent1
...기존 ProSync 환경에서 메타 정보를 백업한다.
export PREVIOUS_PRS_HOME=[old_prosync의 절대경로]$PRS_HOME/install/prs_backup.sh \
-c prs_install.cfg \
-u [백업유저이름] \
-p [백업유저암호]메타데이터 수집을 위해 SRC DB에서 필요한 권한을 부여한다.
GRANT SELECT ANY DICTIONARY TO $PRS_USER;
GRANT DELETE ANY TABLE TO $PRS_USER;
-- source db oracle인 경우
GRANT SELECT ON SYS.USER$ TO $PRS_USER;
GRANT SELECT ON SYS.ENC$ TO $PRS_USER;
GRANT SELECT ON SYS.OBJ$ TO $PRS_USER;GRANT LOCK ANY TABLE TO $PRS_USER;
GRANT CREATE ANY TABLE TO $PRS_USER;
GRANT CREATE ANY SEQUENCE TO $PRS_USER;
GRANT CREATE ANY INDEX TO $PRS_USER;
GRANT CREATE ANY TRIGGER TO $PRS_USER;
GRANT CREATE ANY SYNONYM TO $PRS_USER;
GRANT CREATE ANY VIEW TO $PRS_USER;
GRANT CREATE ANY PROCEDURE TO $PRS_USER;
GRANT SELECT ANY DICTIONARY TO $PRS_USER;
GRANT ALTER ANY TABLE TO $PRS_USER;
GRANT ALTER ANY INDEX TO $PRS_USER;
GRANT ALTER ANY TRIGGER TO $PRS_USER;
GRANT ALTER ANY SEQUENCE TO $PRS_USER;
GRANT ALTER ANY PROCEDURE TO $PRS_USER;
GRANT DROP ANY TABLE TO $PRS_USER;
GRANT DROP ANY INDEX TO $PRS_USER;
GRANT DROP ANY TRIGGER TO $PRS_USER;
GRANT DROP ANY SEQUENCE TO $PRS_USER;
GRANT DROP ANY VIEW TO $PRS_USER;
GRANT DROP ANY PROCEDURE TO $PRS_USER;
GRANT DROP ANY SYNONYM TO $PRS_USER;
GRANT COMMENT ANY TABLE TO $PRS_USER;
-- target db oracle인 경우
GRANT SELECT ON SYS.OBJ$ TO $PRS_USER;
GRANT SELECT ON SYS.USER$ TO $PRS_USER;
GRANT SELECT ON SYS.COL$ TO $PRS_USER;
GRANT SELECT ON SYS.SEQ$ TO $PRS_USER;cp /dev/null $PRS_HOME/install/prs_obj_group1.list주의
prs_meta.sh는 5단계에서 작성한 prs_install.cfg의 값으로 Source DB의 DDL 트리거와 supplemental log를 다시 설정하므로, AUTO_SYNC_ON_CREATE, AUTO_ADD_SUPP_LOG, SUPP_LOG_LVL_ALL은 기존 설치에 사용한 설치 config 파일과 같은 값으로 둔다. AUTO_SYNC_ON_CREATE=Y가 없으면 동기화 대상 자동 등록이 꺼진다. Source DB가 Oracle이고 AUTO_ADD_SUPP_LOG
$PRS_HOME/install/prs_meta.sh -c prs_install.cfgprs_meta.sh는 Source DB의 ProSync DDL 트리거와 패키지를 다시 생성하고, 새 버전에서 추가된 메타 테이블과 컬럼을 만든다. Target DB가 Oracle 또는 Tibero인 경우에는 새 버전에서 추가된 메타 객체를 만들고 PRS_APPLY 패키지를 다시 생성한다. 설치 시 DB에 생성되는 객체에 포함된 변경은 바이너리 교체만으로 반영되지 않으므로 이 단계를 반드시 수행한다.
LISTENER_PORT 제거
TOP_ID 제거
Log 및 Backup Log 경로 수정
4.4.x 이후 Agent 포트는 cfg 가 아니라 prs_instance.map 의 (PORT=...) 로 지정되며, TOP_ID 는 인스턴스 이름으로 대체되었다.
4.4.x 버전 이후(4.7 포함)에는 Agent 설치가 Instance 설치와 분리되었기 때문에, 패치 작업 전에 반드시 Agent 설치를 완료해야 한다. Agent 설치를 건너뛰고 Instance 설치를 진행하면 prs_install.sh 가 Operation of prs_install_agent.sh should be preceded. 를 출력하며 즉시 종료한다. 자세한 설치 방법은 문서를 참고한다.
4.4.x 부터는 prs_top.map에서 prs_instance.map으로 변경되었다.
위 예시의 PROGRAM 값은 Tibero 에서 Tibero 로 동기화하는 경우이며, PROGRAM 은 DB 종류에 따라 접두사가 붙는다. 무접두사는 Tibero, o 는 Oracle, p 는 PostgreSQL 이고 ext/llob 은 소스 DB, apply 는 타겟 DB 를 기준으로 선택된다. 예를 들어 Oracle 에서 Tibero 로 동기화하는 경우 EXT1 의 PROGRAM 은 prs_oext, APPLY1 의 PROGRAM 은 prs_apply 가 된다.
localhost 제약 제거
Instance에서 Host 제거 및 MGR → Agent로 변경
ext process에서 Port 제거
verify process삭제
4.4.x 이후(4.7 포함)는 manager 대신 agent를 사용하기 때문에 agent 기동 명령어도 man(ager)에서 age(nt)로 변경되었다.
ALTER <instance> DELETE TABLEPRS_OBJ_LIST설치 당시의 목록 파일이나 $PRS_HOME/install/templates/prs_obj_group1.list.template을 복사해 쓰지 않는다. 설치 이후 DELETE TABLE로 제외한 객체도 목록 항목에 맞으면 다시 등록되고, TEST.%처럼 %가 들어간 항목은 패턴에 맞지만 동기화 대상이 아니던 테이블과 시퀀스(설치 이후 생성한 객체 등)까지 등록한다. 템플릿에는 TIBERO.% 항목이 들어 있어, Source DB가 Tibero이면 TIBERO 스키마의 모든 테이블과 시퀀스가 등록된다. 이렇게 새로 등록된 객체는 Target DB에 같은 객체가 없으면 반영 단계에서 실패한다.
prs_meta.sh에 -c로 지정한 설치 config 파일(5단계의 prs_install.cfg)에 GROUP_NUM을 2 이상으로 지정했다면 prs_obj_group2.list부터 prs_obj_group<GROUP_NUM>.list까지도 같은 방법으로 빈 파일을 만든다. 하나라도 없으면 prs_meta.sh가 not found를 출력하고 Source DB 메타를 갱신하는 도중에 중단되며 Target DB 메타는 갱신되지 않으므로, 파일을 모두 만든 뒤 prs_meta.sh를 다시 수행한다. 설치 시 -l 옵션으로 다른 목록 파일을 사용했더라도 prs_meta.sh에는 -l을 지정하지 않는다.
NSUPP_LOG_LVL_ALL=YMGR=(ID=lmgr)(HOST=localhost)(PORT=7600)
Prosync=(
EXT1=(MGR=lmgr)(HOST=localhost)(PORT=7610)(PROGRAM=prs_ext)
APPLY1=(MGR=lmgr)(HOST=localhost)(PORT=7620)(PROGRAM=prs_apply)
LLOB=(MGR=lmgr)(HOST=localhost)(PORT=7630)(PROGRAM=prs_llob)
VF=(MGR=lmgr)(HOST=localhost)(PORT=7640)(PROGRAM=prs_vf)
)AGENT=(ID=agent1)(HOST=172.19.0.11)(PORT=7600)
Prosync=(
EXT1=(AGENT=agent1)(PROGRAM=prs_ext)
APPLY1=(AGENT=agent1)(PORT=7620)(PROGRAM=prs_apply)
LLOB=(AGENT=agent1)(PORT=7630)(PROGRAM=prs_llob)
)
ADMIN> start age(nt) {AGENT_ID}
ADMIN> start {INSTANCE_ID}