출처 : 허진님의 블로그
운영환경의 oracle 버젼과 동일해 퍼옵니다.
요약하자면, data guard환경에서
primary db에서 특정 table을 truncate후 새 data을 입력하면
standby db에서 갱신된 table에 접근하지 못하는(
ORA-08103: object no longer exists )
버그(Bug 7650993)에 관련된 내용 입니다.
================================================
다음의 환경에서 Data Guard를 운영하고 있습니다.
1. Oracle version – 11.1.0.7.0
2. O/S – Oracle Enterprise Linux 5.3 64bit
물론 primary host 및 standby host에 대해 동일한 O/S가 install되어 있고,
database version도 동일합니다.
몇 일전부터 문제가 발생하기 시작했는데,
어떤 문제인가 하면, 매일 새벽에 기동되는 batch program이 종료된 이후,
특정 table에 대해 select count(*) from를 실행하면
다음과 같이 ORA-08103 error가 발생한다는 것입니다.
SQL> select * from <table_name>; ERROR: ORA-08103: object no longer exists |
물론 batch program은 primary host상에서 실행되며,
위의 error는 primary database상에서는 발생하지 않고,
오직 standby database상에서만 발생하고 있습니다.
참고로 이 batch program은 일부 tables를 truncate한 후에 새 data를 입력하는 처리를 수행합니다.
근본적인 해결책은 아니지만 임시처방으로서 다음과 같은 방법을 사용할 수 있습니다.
문제의 table이 emp라고 가정하고, primary database상에서 다음과 같이 table을 recreate합니다.
SQL> create table emp_bk as select * from emp; Table created. SQL> select dbms_metadata.get_ddl('TABLE', 'EMP', 'SCOTT') from dual; … /* primary key를 확인 */ SQL> select index_name from user_indexes where table_name = 'EMP'; … /* emp와 관련된 indexes를 확인 */ SQL> select dbms_metadata.get_ddl('INDEX', '<index-01>', 'SCOTT') from dual; SQL> select dbms_metadata.get_ddl('INDEX', '<index-02>', 'SCOTT') from dual; … /* index를 생성하기 위한 script를 추출 */ SQL> drop table emp; Table dropped. SQL> rename emp_bk to emp; /* table명을 변경 */ SQL> alter table emp add constraint … primary key (…); /* primary key를 생성 */ SQL> create index <index-01> on emp (…); SQL> create index <index-02> on emp (…); |
이렇게 문제의 table을 recreate하면 ORA-08103 error는 더 이상 발생하지 않았습니다.
하지만 임시방편에 불과하므로 근본적인 해결을 위해
Oracle Support Team에 문의를 했습니다.
문의해 본 결과, 다음과 같은 response를 받았습니다.
------------------------------------------------------------------------------------------------
This issue is caused by Bug 7650993.
You can apply one-off patch 7650993 to fix the issue.
To implement the solution, please execute the following steps:
1. Download and review the readme and pre-requisites for Patch.7650993.
Download Link: http://updates.oracle.com/download/7650993.html
Choose 11.1.0.7 and linux x86-64.
2. Ensure that you have taken a backup of your system before applying the recommended patch.
3. Apply the patch in a test environment.
4. Retest the issue.
5. Migrate the solution as appropriate to other environments.
------------------------------------------------------------------------------------------------
이 patch를 apply하는 방법은 readme파일에도 적혀 있는데 간단히 설명하면,
1. 현재 running중인 $ORACLE_HOME상에 존재하는 모든 processes(listener, instances)를
정지시킨다.
2. 다음과 같이 patch를 apply하는 command를 실행한다.
$ cd 7650993 $ opatch apply $ opatch lsinventory (제대로 patch가 apply되었는지 확인)
3. 정지시켰던 listener 및 instances를 재기동한다.
참고로 이 7650993 bug는 Oracle 11.1.0.6.0 및 Oracle 11.1.0.7.0에서 발생하고
있다고 합니다.
댓글 없음:
댓글 쓰기