oracle sid 생성 후 ORA-00942 발생

유비빅·2022년 12월 16일
0

기존 orcle에서 새로 SID를 생성한 경우
생성된 user로 로그인은 되는데 ORA-00942가 무한반복 되는 상황만 발생했다.
권한문제인지 확인하기 위해 user에게 권한을 sys로 다 부여했는데도
동일하게 ORA-00942가 발생했다.

📍 해결방법

1. 현재 접속된 oracle home이 새로 생성된 home인지 확인
 #생성한 sid로 설정되있는지 확인
 .oraenv
  1. 생성된 sid로 로그인 한 후 system 권한으로 로그인해 새 user를
    등록 시도했다
# 시스템 계정으로 접속
[oracle@localhost ~]$ sqlplus / as sysdba

#유저 생성
SQL> CREATE USER 유저 IDENTIFIED BY 패스워드;

# 권한부여
SQL> GRANT CREATE USER TO 유저;
SQL> GRANT RESOURCE, CONNECT, DBA TO 유저;
  1. 생성된 계정으로 로그인을 시도해도 동일하게 발생했다.

  2. 설치된 oracle 내에 tnsnames.ora파일을 수정해서 user정보가 등록되어있는지 확인 후 없다면 추가 설정이 필요하다.
    📑 tnsnames.ora :DB서버의 프로토콜, 포트, 서버IP , 인스턴스 등의 정보를 정의해주는 스크립트

    #설치된 서버에 접속해서 oracle 설치된 경로 /network/admin/경로
     vi $ORACLE_HOME/network/admin/tnsnames.ora
    
    #확인해보면 생성된 user 정보가 없는 것을 확인할 수 있었다.
    이 밑에 추가해주면 된다
    scott =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = dbms)(PORT = 1521))
       (CONNECT_DATA =
         (SERVER = DEDICATED)
         (SERVICE_NAME = 서비스명이나 SID명 작성)
       )
     )
    유저  =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = dbms)(PORT = 1521))
       (CONNECT_DATA =
         (SERVER = DEDICATED)
         (SERVICE_NAME = 서비스명이나 SID명 작성)
       )
     )
  3. 추가 후 다시 재접속을 시도 하면 되는데 시도하면 새 오류가 발생하는 것을 확인할 수 있다.

 ERROR:
ORA-00942: table or view does not exist 
Error accessing PRODUCT_USER_PROFILE
Warning:  Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
  1. 생성은 되었으나 인식이 안 되는 문제로 publd.sql을 우선 실행을 해보았다.
#서버 orcle 폴더 접속
 cd $ORACLE_HOME/sqlplus/admin
#sys 계정 접속 -> 실행
[oracle@localhost ~]$ sqlplus / as sysdba
SQL> @pupbld.sql
- 오라클에서 파일 실행시에는 @를 붙여 실행시킨다.
  1. 실행 후 재접속 후 확인을 시도하면 되는 경우도 있지만 안 되면 5번 에러가 재 발생한다.

  2. 오라클 기본 구성 script를 실행을 시켜줘야한다. 총 3가지
    📑CATALOG.SQL : 데이터 딕셔너리 뷰와 다이나믹 퍼포먼스 뷰를 생성
    📑 CATPROC.SQL : PL/SQL을 사용하는데 필요한 패키지 및 프로시져를 생성
    📑PUPBLD.SQL : pupbld.sql 스크립트는 Product User Profile 테이블 및 관련 프로시져를 생성
    📑UTLRP.SQL : Invalid Object를 컴파일 해주는 스크립트

catalog.sql과 catproc.sql은 DB생성후 sys소유의 package나 기타 object들을 생성하는 scrip로 처음 생성시나 patchset 설치, upgrade후에 수행이 필요한데 생성 후 실행하지 않은 경우 실행이 필요하다.
위 script를 수행후에는 db를 정상 종료 후,
utlrp.sql을 수행하여 invalid된 procedure나 package를 recompile해줄 수 도 있다고 한다. 후자 작업을 제외하고 3개 script를 실행해도 에러 해결이 가능했다.

#각각 실행하면 되는데 실행되는 시간이 좀 걸리기 때문에 각각 기다려 주면 된다.
 @$ORACLE_HOME/sqlplus/rdbms/admin/catalog.sql
 @$ORACLE_HOME/sqlplus/rdbms/admin/CATPROC.sql
 @$ORACLE_HOME/sqlplus/admin/pupbld.sql
  1. 실행 후 conn으로 재접속하면 생성했던 user 스키마들이 보이는 것을 확인 할 수 있다.

0개의 댓글