
Oracle 데이터베이스에서는 객체 간의 의존 관계를 추적하고 분석하는 것이 매우 중요합니다. 특히, 뷰, 프로시저, 함수, 패키지, 트리거 등 다양한 SQL 객체가 서로를 참조하는 경우, 하나의 객체 변경이 연쇄적으로 다른 객체에 영향을 줄 수 있기 때문입니다. 이러한 객체 간 의존 관계를 파악할 수 있도록 지원하는 뷰가 바로 ALL_DEPENDENCIES입니다.
1. ALL_DEPENDENCIES 뷰란?
ALL_DEPENDENCIES는 사용자가 접근 가능한 객체들 사이의 의존 관계를 보여주는 데이터 딕셔너리 뷰입니다. 이 뷰는 어떤 객체가 다른 객체에 의존하고 있는지를 명확하게 식별할 수 있게 해주며, 시스템의 구조를 분석하거나 문제 발생 시 원인을 추적하는 데 매우 유용합니다.
2. 주요 컬럼 설명
ALL_DEPENDENCIES 뷰는 아래와 같은 중요한 컬럼들을 포함합니다:
| 컬럼명 | 설명 |
|---|---|
| OWNER | 의존하는 객체의 소유자 |
| NAME | 의존하는 객체의 이름 |
| TYPE | 의존하는 객체의 타입 (예: TABLE, PROCEDURE 등) |
| REFERENCED_OWNER | 참조된 객체의 소유자 |
| REFERENCED_NAME | 참조된 객체의 이름 |
| REFERENCED_TYPE | 참조된 객체의 타입 |
| DEPENDENCY_TYPE | 의존성 유형 ('HARD' 또는 'SYNONYM' 등) |
3. 실무 활용 예시
특정 프로시저가 참조하는 객체를 찾는 쿼리 예시는 다음과 같습니다:
SELECT referenced_name, referenced_type
FROM all_dependencies
WHERE name = 'CALC_SALARY'
AND owner = 'HR';
이 쿼리는 HR 스키마의 CALC_SALARY 프로시저가 어떤 객체를 참조하는지를 보여줍니다.
반대로, 특정 테이블을 참조하고 있는 객체를 조회하고 싶다면:
SELECT owner, name, type
FROM all_dependencies
WHERE referenced_name = 'EMPLOYEES'
AND referenced_owner = 'HR';
이는 EMPLOYEES 테이블을 참조하고 있는 모든 객체를 찾아낼 수 있습니다.
4. 의존성 뷰 비교
Oracle에는 다양한 의존성 관련 뷰가 존재합니다. 각각의 뷰는 조회 범위 및 사용 권한에 차이가 있습니다.
| 뷰 이름 | 조회 대상 | 사용 권한 | 주요 활용 |
|---|---|---|---|
| USER_DEPENDENCIES | 자신이 소유한 객체 | 일반 사용자 | 단일 사용자 분석 |
| ALL_DEPENDENCIES | 접근 가능한 모든 객체 | 일반 사용자 | 다중 객체 간 분석 |
| DBA_DEPENDENCIES | 데이터베이스 전체 | DBA 권한 필요 | 전체 시스템 분석 |
5. 실무에서의 중요성
- 객체 변경 시 영향 분석: 테이블이나 뷰를 수정할 경우, 해당 객체를 참조하는 다른 객체의 정상 동작 여부를 확인해야 합니다.
- 의존성 체계 정리: 복잡한 시스템 구조를 도식화하고 문서화할 때 필수적입니다.
- 디버깅 및 오류 추적: 의도치 않은 에러 발생 시, 원인을 추적하는 데 도움이 됩니다.
6. 의존성 종류
ALL_DEPENDENCIES의 DEPENDENCY_TYPE 컬럼은 아래와 같은 의존성 종류를 포함합니다:
| 종류 | 설명 |
|---|---|
| HARD | 명시적인 코드 내 참조 (예: SELECT, JOIN 등) |
| SYNONYM | SYNONYM을 통해 간접적으로 참조된 객체 |
| REF | 리플렉션 또는 동적 SQL에 의해 참조 |
7. ALL_DEPENDENCIES를 활용한 자동화
이 뷰를 활용하면 다음과 같은 자동화 작업이 가능합니다:
- 빌드 스크립트 자동 생성 (의존성 우선순위에 따른 배치)
- 배포 전 영향 범위 리포트 출력
- CI/CD 파이프라인에서 객체 참조 유효성 검사
8. 주의할 점
- 의존성은 정적 분석 기준: 동적 SQL이나 런타임 생성 객체는 ALL_DEPENDENCIES에서 확인되지 않을 수 있습니다.
- 케이스 센시티브: 객체 이름을 조회할 때는 항상 대문자로 작성해야 정확한 결과가 나옵니다.
9. 결론
Oracle 데이터베이스를 운영하거나 개발하는 모든 관계자에게 ALL_DEPENDENCIES 뷰는 필수 도구입니다. 객체 간 관계를 명확히 이해하고 관리함으로써 시스템의 안정성과 유연성을 동시에 확보할 수 있습니다. 정기적으로 이 뷰를 점검하고, 변경 작업 전에 의존성을 분석하는 습관은 장기적인 유지보수 비용을 획기적으로 줄여줄 수 있습니다.
10. 참고 자료
- Oracle Database Reference Guide (21c): https://docs.oracle.com/en/database/
- Oracle PL/SQL Developer’s Guide
- 데이터베이스 아키텍처 실무 경험
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ALL_ALL_TABLES 뷰 완벽 해설 및 실무 활용 가이드 (0) | 2025.06.17 |
|---|---|
| [ORACLE] ALL_ERRORS 뷰 완벽 가이드와 실무 활용법 (0) | 2025.06.16 |
| [ORACLE] ALL_TAB_COLUMNS 뷰 완벽 해설과 실무 활용법 (0) | 2025.06.16 |
| [ORACLE] ALL_IND_PARTITIONS 뷰로 인덱스 파티션 분석 및 관리 전략 (0) | 2025.06.16 |
| [ORACLE] ALL_IND_EXPRESSIONS 완전 분석 : 함수 기반 인덱스 추적과 활용 전략 (0) | 2025.06.16 |