본문 바로가기
Oracle Database

오라클 Export Backup 중에 ORA-6553 PLS-561

열린기술자·2016년 4월 5일·조회 2,618

FULL 또는 SCHEMA Export가 ORA-06553 / PLS-00561로 실패할 때

주제: FULL 또는 SCHEMA Export 수행 시 ORA-06553 / PLS-00561 오류가 발생하는 경우의 점검 방법이다. Oracle JVM(Java Virtual Machine) 설치 상태나 DBMS_JAVA 패키지 상태가 불완전할 때 발생할 수 있다.

1. Java가 정상적으로 설치되어 있는지 확인한다

먼저 데이터베이스에 Java 관련 객체가 충분히 존재하는지 확인한다.

SQL> SELECT count(*)
       FROM dba_objects
      WHERE object_type LIKE 'JAVA%';

정상적으로 설치되어 있다면 일반적으로 4,000건 이상 조회되어야 한다.

만약 Java가 필요 없다면 $ORACLE_HOME/javavm/install/rmjvm.sql 스크립트를 이용하여 제거할 수 있다. 단, 운영 환경에서는 Java 기반 기능을 사용하는 컴포넌트가 없는지 먼저 확인한 뒤 진행해야 한다.

Oracle 8.1.6의 rmjvm.sql에는 알려진 문제가 있으므로(BUG:1179670), 다음과 같이 내용을 수정한 후 스크립트를 실행해야 한다.

(변경 전) call rmjvm.run(true)
(변경 후) execute rmjvm.run(true)

그런 다음 SYS 계정으로 접속하여 다음을 실행한다.

SQL> drop package dbms_java;
SQL> drop public synonym dbms_java;

2. SYS 계정의 Java 객체 상태를 확인한다

SYS 계정의 Java 관련 객체 상태에 문제가 있는지도 확인한다.

SQL> SELECT dbms_java.longname(name)
       FROM obj$
      WHERE type# = 29
        AND status != 1;

정상 상태라면 0건이 조회되어야 한다. 만약 문제가 있다면 이 조회 과정에서 ORA-06553 / PLS-00561 오류가 발생할 수 있다.

Export가 DBMS_JAVA를 사용하는 방식

Export는 DBMS_JAVA synonym이 정의되어 있는지 확인한다. 이 synonym이 정의되어 있으면 Java가 설치되어 있다고 판단하고, synonym 이름의 긴 이름(long name)을 얻기 위해 dbms_java.longname을 사용한다.

반대로 DBMS_JAVA가 정의되어 있지 않으면 dbms_java를 사용할 수 없다고 판단하고, sys.syn$에서 이름을 직접 가져온다.

따라서 DBMS_JAVA는 정의되어 있지만 initjvm이 실행되지 않았거나 실행 중 일부 단계가 실패한 상태라면, FULL 또는 SCHEMA Export 중 해당 오류가 발생할 수 있다.

정리

  • dba_objects에서 Java 객체 수를 확인한다.
  • Java가 불필요한 환경이라면 rmjvm.sql로 제거를 검토한다.
  • Oracle 8.1.6에서는 rmjvm.sqlcall 구문을 execute로 수정해야 한다.
  • DBMS_JAVA 패키지와 public synonym 상태가 불완전하면 Export가 실패할 수 있다.

관련 글

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.