Oracle Database에서 데이터 무결성을 보장하고 구조적인 데이터 관리를 위해 사용되는 중요한 시스템 뷰 중 하나가 ALL_CONSTRAINTS
입니다. 이 뷰를 통해 테이블에 설정된 모든 제약조건(constraints)을 확인할 수 있으며, 실무에서는 외래키 추적, 제약조건 검토, 자동 생성 코드 파악 등에 필수적으로 사용됩니다.
1. ALL_CONSTRAINTS란?
ALL_CONSTRAINTS는 사용자가 접근 가능한 테이블과 뷰에 정의된 제약조건 정보를 제공하는 Oracle 시스템 뷰입니다. 이 제약조건에는 기본키, 외래키, 유니크, 체크, NOT NULL 등이 포함되며, 관련된 열 정보를 확인하려면 ALL_CONS_COLUMNS
뷰와 조인하여 사용하는 것이 일반적입니다.
2. 주요 컬럼 설명
아래는 ALL_CONSTRAINTS
에서 자주 사용되는 주요 컬럼들입니다:
컬럼명 | 설명 |
---|---|
OWNER | 제약조건이 정의된 테이블의 소유자 |
CONSTRAINT_NAME | 제약조건의 이름 |
TABLE_NAME | 제약조건이 적용된 테이블 이름 |
CONSTRAINT_TYPE | 제약조건의 종류(P, R, U, C, V 등) |
STATUS | 활성화 상태 (ENABLED/DISABLED) |
R_CONSTRAINT_NAME | 외래키일 경우 참조하는 제약조건 이름 |
DELETE_RULE | ON DELETE CASCADE 등 삭제 규칙 |
DEFERRABLE | 지연 검사 여부 (DEFERRABLE/NOT DEFERRABLE) |
3. 제약조건 유형 코드 정리
Oracle에서는 각 제약조건 타입을 한 글자의 코드로 표현합니다. 다음은 그에 대한 설명입니다:
코드 | 제약조건 유형 | 설명 |
---|---|---|
P | PRIMARY KEY | 기본 키 제약조건 |
R | FOREIGN KEY | 외래 키 제약조건 |
U | UNIQUE | 고유값 제약조건 |
C | CHECK | 값의 유효성 검사 제약조건 |
V | VIEW CHECK | 뷰에 대한 제약조건 |
4. 실무 활용 예제
4.1 특정 테이블의 제약조건 조회
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS
FROM ALL_CONSTRAINTS
WHERE TABLE_NAME = 'EMPLOYEES'
AND OWNER = 'HR';
4.2 외래키 제약조건 및 참조 정보 확인
SELECT CONSTRAINT_NAME, R_CONSTRAINT_NAME, DELETE_RULE
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'R'
AND TABLE_NAME = 'ORDERS';
4.3 비활성화된 제약조건 찾기
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM ALL_CONSTRAINTS
WHERE STATUS = 'DISABLED';
4.4 외래키와 기본키 연결 정보 조회 (조인)
SELECT a.CONSTRAINT_NAME AS FK_NAME,
a.TABLE_NAME AS CHILD_TABLE,
b.TABLE_NAME AS PARENT_TABLE
FROM ALL_CONSTRAINTS a
JOIN ALL_CONSTRAINTS b
ON a.R_CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE a.CONSTRAINT_TYPE = 'R';
5. ALL_CONS_COLUMNS와의 조합 활용
ALL_CONSTRAINTS
는 컬럼 단위 정보는 제공하지 않기 때문에 ALL_CONS_COLUMNS
와 조인해야 완전한 정보를 얻을 수 있습니다.
제약조건별 컬럼명까지 함께 조회
SELECT c.CONSTRAINT_NAME, col.COLUMN_NAME, c.CONSTRAINT_TYPE
FROM ALL_CONSTRAINTS c
JOIN ALL_CONS_COLUMNS col
ON c.CONSTRAINT_NAME = col.CONSTRAINT_NAME
WHERE c.TABLE_NAME = 'EMPLOYEES';
6. 실무 팁 및 주의사항
- 제약조건 이름(CONSTRAINT_NAME)은 시스템이 자동 생성하는 경우가 많으므로 명시적으로 이름을 지정하면 유지보수에 유리합니다.
- 대규모 테이블에서 제약조건을 일시적으로 비활성화할 때는 데이터 무결성을 신중하게 고려해야 합니다.
- 외래키 제약조건은 인덱스와 밀접하게 연관되므로, 성능 최적화를 위해 인덱스를 명확히 설정하는 것이 중요합니다.
- 삭제 연쇄 규칙(ON DELETE CASCADE)은 의도하지 않은 데이터 손실을 유발할 수 있으므로 테스트를 충분히 거쳐야 합니다.
7. 관련 시스템 뷰 요약 비교
뷰 이름 | 역할 | 주요 컬럼 |
---|---|---|
ALL_CONSTRAINTS | 제약조건 정의 정보 | CONSTRAINT_NAME, TYPE, STATUS, DELETE_RULE |
ALL_CONS_COLUMNS | 제약조건이 적용된 컬럼 정보 | TABLE_NAME, COLUMN_NAME |
DBA_CONSTRAINTS | DBA 전체 제약조건 정보 | 모든 스키마의 제약조건 |
8. 결론
Oracle에서 데이터 무결성을 관리하고 관계형 데이터베이스의 신뢰성을 유지하기 위해 ALL_CONSTRAINTS
뷰는 반드시 숙지해야 할 시스템 뷰입니다. 이 뷰를 통해 테이블 간의 관계를 명확히 파악하고, 데이터 품질 문제를 사전에 방지할 수 있습니다. 실무 프로젝트에서의 활용 빈도도 매우 높기 때문에, 다른 메타데이터 뷰들과 함께 능숙하게 다루는 것이 필요합니다.
9. 참고자료
- Oracle Database 21c Reference Manual: https://docs.oracle.com/en/database/
- 실무 프로젝트 DB 설계 문서 및 운영 경험
- SQL Developer & Oracle 공식 교육 자료
'Database' 카테고리의 다른 글
[Oracle] 오라클 ALL_SEQUENCES 뷰로 시퀀스 관리 완전 정복 (0) | 2025.06.15 |
---|---|
[Oracle] 오라클 ALL_INDEXES 뷰로 인덱스 구조 완벽 분석하기 (0) | 2025.06.14 |
[Oracle] 오라클 ALL_TAB_COLUMNS() 실무 활용 가이드 (0) | 2025.06.14 |
[Oracle] 오라클 ALL_TABLES()로 테이블 정보 조회하는 방법 정리 (0) | 2025.06.14 |
[Oracle] 오라클 EXPLAIN PLAN()으로 SQL 실행계획 정확히 읽는 법 (0) | 2025.06.14 |