안녕하세요.
운영 업무 중 요청사항이 들어왔습니다.
갑자기 잘되던 계정에서 프로시져 실행시 PLS-00302 오류가 발생한다고 하네요.
(또, 뭔일 이래...)

권한, 시노님 문제라고 생각되어 아래 쿼리 순서로 실행하여 처리하였습니다.
(미션 클리어!)

-- 문제의 스키마명 AAA
-- 1.테이블 권한확인
SELECT *
FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'AAA';
-- 2.시노님 확인
SELECT *
FROM DBA_SYNONYMS
WHERE TABLE_OWNER = 'AAA';
-- 3.오브젝트 확인
SELECT *
FROM DBA_OBJECTS
WHERE OBJECT_NAME = '오류발생 프로시져';
-- 4.스키마와 동일한 테이블명 존재확인
SELECT *
FROM DBA_OBJECTS
WHERE OBJECT_NAME = 'AAA';
-- 5.백업
CREATE TABLE AAA_오늘날짜
AS SELECT * FROM AAA.AAA;
-- 6.삭제
DROP TABLE AAA.AAA;
Q : 오라클에서 테이블 이름이 스키마명과 동일한 경우의 문제점 A : 오라클 데이터베이스에서 테이블 이름이 스키마 이름과 동일한 경우 일반적으로 아래와 같은 문제점이 발생할 수 있습니다: 오브젝트 이름 충돌: 스키마와 테이블 이름이 동일하면 오라클에서 객체 이름 충돌이 발생할 수 있습니다. 스키마에는 테이블 뿐만 아니라 다른 객체 유형(뷰, 함수, 프로시저 등)도 포함될 수 있으므로 이름 충돌을 피하기 위해 다른 객체와의 이름 충돌을 피하기 어려울 수 있습니다. 혼란과 오류: 테이블 이름과 스키마 이름이 동일하면 쿼리와 코드 작성 시 혼란을 줄 수 있습니다. 오라클은 기본적으로 객체에 대한 접근 시 스키마 이름을 사용하지 않기 때문에 코드에서 스키마 이름을 명시적으로 지정하지 않으면 오브젝트 이름 충돌이 발생할 수 있습니다. 보안 및 권한 관리: 스키마 이름과 테이블 이름이 동일한 경우, 적절한 권한 관리가 어려울 수 있습니다. 다른 스키마에서 테이블에 접근하려면 스키마 이름을 명시적으로 사용해야 하지만 이름 충돌로 인해 코드에서 스키마 이름을 제대로 관리하기 어렵습니다. 이식성 문제: 동일한 데이터 모델을 다른 데이터베이스로 이전하거나 다른 환경에서 사용해야 할 경우, 스키마와 테이블 이름이 동일하면 호환성 문제가 발생할 수 있습니다. 오류 및 버그: 일부 오라클 버전에서는 스키마와 테이블 이름이 동일한 경우 예기치 않은 오류 및 버그가 발생할 수 있습니다. 스키마와 테이블 이름을 구별되게 유지하고 테이블 이름에 스키마 이름을 포함시키지 않는 것이 데이터베이스 설계와 관리에 더 나은 접근 방법일 수 있습니다. 이렇게 하면 객체 이름 충돌과 관련된 다양한 문제를 피할 수 있으며, 코드 작성 및 유지 관리가 더 간단하고 안정적으로 수행될 수 있습니다. |
참고)
'DBMS' 카테고리의 다른 글
오라클 커서(CURSOR) (0) | 2023.11.30 |
---|---|
GRA_*.log 파일 이해 (0) | 2023.10.31 |
Lock wait timeout exceeded; try restarting transaction (0) | 2023.10.11 |
오라클 시퀀스 (0) | 2023.10.10 |