본문 바로가기
Database

[Oracle] 오라클 ALL_CONSTRAINTS() 제약조건 뷰 완벽 가이드

by 코드개미 2025. 6. 14.

오라클 ALL_CONSTRAINTS() 제약조건 뷰 완벽 가이드
[Oracle] ALL_CONSTRAINTS

 

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. 참고자료