백업이 존재하는 경우에만 롤백이 가능하다. 아래는 4.4.x로의 패치 이후 문제가 발생했을 때, 이전 버전으로 롤백하기 위한 단계다.
ADMIN> shutd agent;rm -rf prosync;
mv old_prosync prosync$PRS_HOME/install/prs_install.sh -c prs_install.cfg주의
4단계와 5단계에 나열된 메타 테이블 목록은 백업 시점 버전(구버전)의 스키마를 기준으로 한 것이므로, 현재 설치된 버전의 테이블 목록으로 바꾸면 절차가 깨진다. 백업 스크립트(prs_backup.sh)가 구버전의 create_src_tbl.sql을 기준으로 백업 테이블을 생성하고, 5단계의 INSERT ... SELECT *는 원본 테이블과 백업 테이블의 컬럼 구성이 동일해야 성공하기 때문이다. 따라서 현재 버전에는 없고 구버전에만 존재하는 테이블(예: PRS_IMPORTED_ARCHIVE_LOG)이 목록에 포함되어 있어도 그대로 둔다.
TRUNCATE TABLE $PRS_USER.PRS_TXINFO;
TRUNCATE TABLE $PRS_USER.PRS_OBJ_LIST;
TRUNCATE TABLE $PRS_USER.PRS_DDL_HIST;
TRUNCATE TABLE $PRS_USER.PRS_DD_CON;
TRUNCATE TABLE $PRS_USER.PRS_DD_ENC;
TRUNCATE TABLE $PRS_USER.PRS_DUMMY_TBL;
TRUNCATE TABLE $PRS_USER.PRS_LOGMNR_INFO;
TRUNCATE TABLE $PRS_USER.PRS_IMPORTED_ARCHIVE_LOG;
TRUNCATE TABLE $PRS_USER.PRS_DD_ETL_HIST;
TRUNCATE TABLE $PRS_USER.PRS_DICT_HIST;
TRUNCATE TABLE $PRS_USER.PRS_DD_USR;
TRUNCATE TABLE $PRS_USER.PRS_DD_TBL;
TRUNCATE TABLE $PRS_USER.PRS_DD_SGMT;
TRUNCATE TABLE $PRS_USER.PRS_DD_COL;
TRUNCATE TABLE $PRS_USER.PRS_IPARAM; -- Rule DB를 사용한 구성에서만 해당한다. 해당 테이블이 없으면 건너뛴다.TRUNCATE TABLE $PRS_USER.PRS_CONST_HIST;
TRUNCATE TABLE $PRS_USER.PRS_LCT;
TRUNCATE TABLE $PRS_USER.PRS_DUMMY_TBL;
TRUNCATE TABLE $PRS_USER.PRS_COMMITTED_TX_LIST;
TRUNCATE TABLE $PRS_USER.PRS_INSTALL_HIST;INSERT INTO $PRS_USER.PRS_TXINFO SELECT * FROM prs_backup.PRS_TXINFO;
INSERT INTO $PRS_USER.PRS_OBJ_LIST SELECT * FROM prs_backup.PRS_OBJ_LIST;
INSERT INTO $PRS_USER.PRS_DDL_HIST SELECT * FROM prs_backup.PRS_DDL_HIST;
INSERT INTO $PRS_USER.PRS_DD_CON SELECT * FROM prs_backup.PRS_DD_CON;
INSERT INTO $PRS_USER.PRS_DD_ENC SELECT * FROM prs_backup.PRS_DD_ENC;
INSERT INTO $PRS_USER.PRS_LOGMNR_INFO SELECT * FROM prs_backup.PRS_LOGMNR_INFO;
INSERT INTO $PRS_USER.PRS_IMPORTED_ARCHIVE_LOG SELECT * FROM prs_backup.PRS_IMPORTED_ARCHIVE_LOG;
INSERT INTO $PRS_USER.PRS_DD_ETL_HIST SELECT * FROM prs_backup.PRS_DD_ETL_HIST;
INSERT INTO $PRS_USER.PRS_DICT_HIST SELECT * FROM prs_backup.PRS_DICT_HIST;
INSERT INTO $PRS_USER.PRS_DD_USR SELECT * FROM prs_backup.PRS_DD_USR;
INSERT INTO $PRS_USER.PRS_DD_TBL SELECT * FROM prs_backup.PRS_DD_TBL;
INSERT INTO $PRS_USER.PRS_DD_SGMT SELECT * FROM prs_backup.PRS_DD_SGMT;
INSERT INTO $PRS_USER.PRS_DD_COL SELECT * FROM prs_backup.PRS_DD_COL;
INSERT INTO $PRS_USER.PRS_IPARAM SELECT * FROM prs_backup.PRS_IPARAM; -- Rule DB를 사용한 구성에서만 해당한다. 해당 테이블이 없으면 건너뛴다.DELETE FROM PRS_DD_CON
WHERE (DD_SEQ#, BO_ID) IN (
SELECT DD_SEQ#, OBJ_ID FROM PRS_DD_TBL
WHERE OWNER = '$PRS_USER' AND NAME = 'PRS_DUMMY_TBL');
DELETE FROM PRS_DD_COL
WHERE (DD_SEQ#, BO_ID) IN (
SELECT DD_SEQ#, OBJ_ID FROM PRS_DD_TBL
WHERE OWNER = '$PRS_USER' AND NAME = 'PRS_DUMMY_TBL');
DELETE FROM PRS_DD_SGMT
WHERE (DD_SEQ#, BO_ID) IN (
SELECT DD_SEQ#, OBJ_ID FROM PRS_DD_TBL
WHERE OWNER = '$PRS_USER' AND NAME = 'PRS_DUMMY_TBL');
DELETE FROM PRS_DD_ENC
WHERE OBJ_ID IN (
SELECT OBJ_ID FROM PRS_DD_TBL
WHERE OWNER = '$PRS_USER' AND NAME = 'PRS_DUMMY_TBL');
DELETE FROM PRS_DD_TBL
WHERE OWNER = '$PRS_USER' AND NAME = 'PRS_DUMMY_TBL';
COMMIT;
DECLARE
v_seq NUMBER;
BEGIN
v_seq := PRS_DD_META.INSERT_HIST(0, 'refresh PRS_DUMMY_TBL dd only');
PRS_DD_META.UPDATE_TBL(v_seq, '$PRS_USER', 'PRS_DUMMY_TBL', NULL, NULL);
PRS_DD_META.UPDATE_HIST(v_seq, 1, NULL);
END;
/
COMMIT;INSERT INTO $PRS_USER.PRS_CONST_HIST SELECT * FROM prs_backup.PRS_CONST_HIST;
INSERT INTO $PRS_USER.PRS_LCT SELECT * FROM prs_backup.PRS_LCT;
INSERT INTO $PRS_USER.PRS_COMMITTED_TX_LIST SELECT * FROM prs_backup.PRS_COMMITTED_TX_LIST;
INSERT INTO $PRS_USER.PRS_INSTALL_HIST SELECT * FROM prs_backup.PRS_INSTALL_HIST;주의
복구 후 반드시 COMMIT을 수행해야 한다.
각 설정 파일의 파라미터를 기존 설정과 비교하여 알맞게 수정한다.
<$instance_ID>_ext#.cfg
<$instance_ID>_apply1.cfg
<$instance_ID>_llob1.cfg
prs_agent_<$Agent_ID>.cfg → prs_mgr.cfg
prs_instance.map → prs_top.map
obj_id$PRS_USER.PRS_DUMMY_TBLdd imageADMIN> start man {AGENT_ID}
ADMIN> start {INSTANCE_ID}