본문 바로가기
Database/Oracle

[ORACLE] DBA_COLL_TYPES 완벽 해설 : 컬렉션 타입 정의와 오브젝트 데이터 구조의 핵심

by Papa Martino V 2025. 10. 13.
728x90

DBA_COLL_TYPES
[ORACLE] DBA_COLL_TYPES

 

Oracle Database는 전통적인 관계형 데이터 모델을 확장하여 객체 지향적 특성을 지원합니다. 그 중심에 있는 것이 바로 컬렉션 타입(Collection Type)이며, 이 구조는 개발자가 배열(VARRAY), 중첩 테이블(Nested Table), 또는 객체(Object) 형태로 데이터를 정의할 수 있게 해줍니다. 이러한 컬렉션 타입의 정의 정보를 관리하고 조회할 수 있도록 제공되는 뷰가 DBA_COLL_TYPES입니다. 본 글에서는 DBA_COLL_TYPES의 구조, 주요 컬럼, 컬렉션 타입의 활용 예제, 그리고 성능 최적화 전략까지 전문 DBA의 관점에서 단계별로 상세히 설명합니다.


1. DBA_COLL_TYPES란?

DBA_COLL_TYPES는 데이터베이스 내 정의된 모든 컬렉션 타입(Collection Type)의 메타데이터를 관리하는 Oracle의 데이터 딕셔너리 뷰입니다. 이 뷰는 각 컬렉션의 이름, 데이터 타입, 스키마, 요소 데이터 구조 등을 포함하며, DBA가 오브젝트 기반 테이블이나 PL/SQL 컬렉션의 내부 구조를 파악할 때 매우 유용하게 활용됩니다. 즉, DBA_COLL_TYPES는 오브젝트 타입(Object Type), VARRAY, NESTED TABLE과 같은 고급 데이터 구조를 분석하고 관리하기 위한 핵심 정보 뷰입니다.


2. 컬렉션(Collection) 개념 요약

Oracle의 컬렉션은 한 데이터 타입에 속하는 여러 개의 값을 하나의 논리적 단위로 묶은 구조입니다. 이는 프로그래밍 언어의 배열(Array)과 유사하지만, 데이터베이스 내부에 저장되고 SQL 또는 PL/SQL에서 직접 조작할 수 있다는 점에서 차별화됩니다.

컬렉션 타입 설명 특징
VARRAY (Variable-Size Array) 고정된 최대 크기를 가진 배열 순서 유지, 인덱스로 접근 가능, 제한된 크기
NESTED TABLE 컬렉션 형태의 테이블 구조 무한 확장 가능, 정렬 및 조작 용이
OBJECT TYPE 사용자 정의 객체형 데이터 구조 속성(Attribute)과 메서드(Method) 포함 가능

3. DBA_COLL_TYPES 주요 컬럼 구조

컬럼명 데이터 타입 설명
OWNER VARCHAR2(30) 컬렉션 타입을 소유한 스키마 이름
TYPE_NAME VARCHAR2(30) 컬렉션 타입 이름
TYPE_OID RAW(16) 컬렉션 타입의 내부 객체 식별자(Object ID)
COLL_TYPE VARCHAR2(12) 컬렉션의 종류 (VARRAY 또는 NESTED TABLE)
ELEM_TYPE_MOD VARCHAR2(7) 컬렉션 요소의 타입 수정자 (REF, SYS 등)
ELEM_TYPE_OWNER VARCHAR2(30) 요소 데이터 타입의 소유자 스키마
ELEM_TYPE_NAME VARCHAR2(30) 요소 데이터 타입 이름
UPPER_BOUND NUMBER VARRAY의 최대 크기 (NULL이면 무제한)
CHARSET_FORM VARCHAR2(12) 문자 데이터 컬렉션의 문자 집합 형태
FINAL VARCHAR2(3) 컬렉션 타입이 상속 불가능(FINAL=YES)한지 여부
INSTANTIABLE VARCHAR2(3) 인스턴스 생성 가능 여부

이 중 COLL_TYPEELEM_TYPE_NAME은 컬렉션 구조를 파악할 때 가장 중요한 정보로, 컬렉션의 종류와 내부 데이터 타입을 동시에 이해할 수 있게 해줍니다.


4. DBA_COLL_TYPES 조회 예제

① 전체 컬렉션 타입 조회

SELECT OWNER, TYPE_NAME, COLL_TYPE, ELEM_TYPE_NAME, UPPER_BOUND
FROM DBA_COLL_TYPES
ORDER BY OWNER, TYPE_NAME;

② 특정 스키마의 컬렉션 타입 확인

SELECT TYPE_NAME, COLL_TYPE, ELEM_TYPE_NAME, UPPER_BOUND
FROM DBA_COLL_TYPES
WHERE OWNER = 'HR';

이 쿼리를 통해 HR 스키마에 정의된 컬렉션 타입 목록과 각 타입의 요소 데이터 구조를 확인할 수 있습니다. 특히 VARRAY의 경우 UPPER_BOUND를 통해 배열의 최대 크기를 점검할 수 있습니다.


5. 컬렉션 타입의 실제 생성 예시

① VARRAY 타입 정의

CREATE OR REPLACE TYPE phone_list AS VARRAY(5) OF VARCHAR2(20);
/

② NESTED TABLE 타입 정의

CREATE OR REPLACE TYPE address_list AS TABLE OF VARCHAR2(100);
/

③ OBJECT TYPE 내 컬렉션 포함

CREATE OR REPLACE TYPE employee_obj AS OBJECT (
  empno NUMBER,
  ename VARCHAR2(50),
  phones phone_list,
  addresses address_list
);
/

이렇게 정의된 타입들은 DBA_COLL_TYPES를 통해 구조를 조회할 수 있으며, 컬렉션 요소의 데이터 타입 및 상속 가능 여부를 분석할 수 있습니다.


6. 컬렉션 타입의 특징 비교

항목 VARRAY NESTED TABLE
크기 제한 고정된 최대 크기 (UPPER_BOUND 존재) 무제한 확장 가능
저장 방식 기본 테이블 내부에 인라인 저장 별도의 스토리지 테이블에 저장
정렬 순서 정의된 인덱스 순서 유지 순서 없음
수정/삭제 전체 교체 필요 개별 요소 수정 가능
성능 특성 읽기 중심에 유리 쓰기·갱신 중심에 유리
대표 사용 예 고정된 연락처 목록, 코드 집합 다중 주소, 다대다 관계 매핑

7. DBA_COLL_TYPES 활용 포인트

  • 데이터 모델 점검: 오브젝트 기반 모델 설계 시 컬렉션 타입 구조를 검증
  • 성능 진단: UPPER_BOUND, CHARSET_FORM, COLL_TYPE을 통한 저장 효율 분석
  • 응용 프로그램 연계: PL/SQL 프로시저나 Java 객체 매핑 시 타입 일관성 확인
  • DB 마이그레이션: 다른 환경으로 이동 시 컬렉션 정의 자동 생성 스크립트 기반 확보
  • 오류 추적: ORA-22905 (non-nested table item)과 같은 컬렉션 접근 오류 진단 시 참고

8. 컬렉션 타입 관리 시 주의사항

  • 컬렉션 타입 변경 시, 이를 참조하는 테이블이나 PL/SQL 객체를 모두 재컴파일해야 함
  • VARRAY는 크기 초과 시 오류 발생하므로 적절한 UPPER_BOUND 설정 필요
  • NESTED TABLE은 외부 조인 시 성능 부담이 있으므로 인덱스 보조 테이블 생성 고려
  • CHAR 데이터 컬렉션은 NLS 설정에 따라 문자셋 충돌 가능
  • 컬렉션 타입의 상속 구조 사용 시 FINAL/INSTANTIABLE 속성 주의

9. DBA_COLL_TYPES와 관련된 주요 뷰 비교

뷰 이름 설명 활용 목적 비교 요약
DBA_COLL_TYPES 컬렉션 타입 정의 및 속성 정보 VARRAY/NESTED TABLE 구조 분석 컬렉션 중심 뷰
DBA_TYPES 오브젝트 및 컬렉션 타입의 메타데이터 객체형 데이터 타입 전체 구조 관리 상위 개념 뷰
DBA_TYPE_ATTRS 오브젝트 타입의 속성(Attribute) 상세 정보 오브젝트 필드 구조 파악 세부 속성 분석용
USER_COLL_TYPES 사용자 스키마 내 컬렉션 정의 개인 스키마 중심 조회 DBA_COLL_TYPES의 제한된 버전

10. 성능 최적화 전략

컬렉션 타입을 사용할 때, 단순한 데이터 구조 이상의 관리 전략이 필요합니다. DBA_COLL_TYPES를 통해 다음과 같은 성능 최적화 포인트를 지속적으로 점검해야 합니다.

  • VARRAY 크기 조정: 실제 사용량 대비 과도한 UPPER_BOUND는 메모리 낭비를 초래
  • NESTED TABLE 인덱싱: 컬렉션 요소에 인덱스를 생성하여 조인 성능 향상
  • CHARSET 일관성 유지: 다국어 환경에서는 CHARSET_FORM 통일 필요
  • PL/SQL 컬렉션 매핑 최적화: 컬렉션을 커서 기반 접근 방식으로 변환 시 불필요한 로드 최소화

11. 결론

DBA_COLL_TYPES는 Oracle의 객체 지향적 데이터 구조를 이해하고 관리하기 위한 핵심 뷰입니다. 이 뷰를 통해 컬렉션 타입의 정의, 크기 제한, 문자셋, 상속 구조 등을 파악함으로써 데이터 모델의 복잡성을 관리하고 애플리케이션과의 연동 안정성을 보장할 수 있습니다. Oracle의 고급 데이터 구조를 사용하는 모든 DBA와 개발자에게 DBA_COLL_TYPES는 필수적인 참조 지식이라 할 수 있습니다.


출처

  • Oracle® Database Reference 19c - DBA_COLL_TYPES View
  • Oracle® Object-Relational Developer’s Guide
728x90