안녕하세요?
항상 눈팅만 하고 정보만 얻어가는 허접 DB 관리자입니다.
이번에 사내에서 사용하는 DB 에 문제가 생겼습니다.
원인은 디스크 인식장애로 DB를 내린 후에 발생했는데요.
DB는 immediate 로 shutdown 시켰습니다.
노아카이브 상태였구요.
디스크에 문제가 있는것으로 보여(인식이 됐다 안됐다 함)
급한 마음에 일단 다른 디스크를 붙여서 전체를 복사해왔습니다.
그리고 복사해 온 디스크를 새로 설치한 DBMS 에 붙였고요.
원래의 DB는 9.2.0.1 이었고 redhat 7.3 에 돌렸었습니다.
하지만 새로 DB를 다운받으려고 otn 가니 9.2.0.1 은 아무리 봐도 리눅스용이 없고
9.2.0.4가 유일한 선택이었죠.
그래서 새로 깐 DB는 9.2.0.4 가 됐고 os와 경로는 동일합니다.
순서는 9.2.0.4를 설치한 후
복사해온 DBF파일이 들어있는걸 몽창 복사해 와서
startup 을 하니 mount 후 open 까지 에러없이 붙더군요.
그 상태로 약 2주를 사용했습니다.
DB 올라간 시점에서 exp 로 백업을 떠 놓으려고 했는데
exp 시 오류가 발생하여 exp가 되질 않더군요.
여기저기 자료를 찾아본 결과 다음을 수행했습니다.
catexp.sql -> 몇 개가 오류가 나왔습니다.
catalog.sql -> 몇 개가 오류가 나왔습니다.
두번째 catalog.sql 은 왜 돌렸는지 모르겠습니다. 새벽에 정신이 몽롱해서 그랬는지도요...
암튼 catalog.sql 을 돌린후로(sys로 돌렸습니다.) DB가 이상해졌습니다.
startup mount 까지는 잘 되는데 open 을 시도하면 에러가 나오면서 open 이 됩니다.
ORA-00604: error occurred at recursive SQL level 1
ORA-04045: errors during recompilation/revalidation of XDB.DBMS_XDBZ0
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
그리고 로그인을 포함한 대부분의 시스템영역에 대한 쿼리가 아래와 같이 나옵니다.
예를 들어 select count(*) from dba_objects where STATUS = 'INVALID'; 를 실행해도
요런 에러가 나고 실행되지 않습니다.
ERROR at line 1:
ORA-04045: errors during recompilation/revalidation of SYS.DBA_OBJECTS
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
기타 사용자 테이블스페이스에 있는 테이블이나 데이터는 조회가 됩니다만
internal 에서밖에 접속이 안되니
사내 사용DB를 전혀 사용하지 못하고 있습니다.
또한 utlrp.sql 을 여러번 돌려도 매번 같은 증상입니다.
너무 길어 일부만 뽑아보면
create or replace public synonym v$system_cursor_cache
*
ERROR at line 1:
ORA-04045: errors during recompilation/revalidation of
SYS.CDC_CREATE_CTABLE_BEFORE
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
Grant succeeded.
select * from v$sess_io
*
ERROR at line 2:
ORA-04045: errors during recompilation/revalidation of
SYS.CDC_CREATE_CTABLE_BEFORE
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
create or replace public synonym v$sess_io for v_$sess_io
*
ERROR at line 1:
ORA-04045: errors during recompilation/revalidation of
SYS.CDC_CREATE_CTABLE_BEFORE
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 2
해당 오브젝트가 없거나 접근을 못하거나 그런건지 잘 모르겠네요.
어떻게 하면 정상으로 만들 수 있을까요?
또는 전체를 못 살린다고 해도 중요한 3개의 사용자 테이블스페이스가 있는데
이것만이라도 살리고 싶어요..새로 DB를 설치해서 옮긴다거나 하는 방법도 괜찮습니다.
dbf 파일은 정상으로 생각됩니다.
지금 뭘 해야할지 막막해서 일단 도움을 요청 드립니다.
감사합니다. |