Oracle 데이터 사전(Data dictionary)

Dec 28, 2015    

이 글은 오라클(11.1) 기술문서-Oracle 11g Documentation : Data Dictionary를 번역한 글입니다.

데이터 사전(Data Dictionary)

  1. 데이터 사전에 대한 소개
  2. 어떻게 이용되는가
  3. Dynamic Performance Tables
  4. Database Object Metadata

1. 데이터 사전에 대한 소개

데이터 사전(Data Dictionary)는 오라클 데이터베이스의 가장 중요한 부분 중 하나이며, 데이터베이스에 대한 정보를 제공하는 읽기 전용(Read-Only) 테이블로 이루어져있다.

데이터 사전이 포함하는 내용

  • 데이터베이스 내 스키마 오브젝트의 정의 (tables, views, indexes, functions 등)
  • 스키마 오브젝트에 할당된 공간과 사용현황
  • 컬럼의 기본(Default) 값
  • 무결성 제약(Integrity constraint) 정보
  • Oracle 데이터베이스 유저의 이름
  • 각 사용자(User)에게 허용된 권한(Previlege)과 역할(Role)
  • (사용자가 스키마 변경하거나 접근할 때와 같은) 정보 검증
  • 그 외 일반적 데이터베이스 정보

데이터 사전은다른 데이터베이스 데이터처럼 테이블(Table)과 뷰(View)로 구조화되어있다. 모든 데이터 사전은 데이터베이스의 SYSTEM 테이블스페이스에 저장되어있다.

데이터 사전은 모든 오라클 데이터베이스에서 중요할 뿐만 아니라, 모든 사용자들-Application 개발자부터 DBA-에게 중요한 툴(tool)이다. 그리고 모든 데이터 사전은 읽기 전용이기 때문에, 오직 Select 문만 사용할 수 있다.

1.1. 데이터 사전의 구조

데이터 사전은 다음과 같이 구성된다.

  • Base Tables : 연결된 데이터베이스에 대한 정보를 저장하는 근본적인 테이블. 오직 오라클 데이터베이스만 읽기/쓰기가 가능하다. 사용자는 드물게 이 테이블에 직접 접근할 수 있다(because they are normailized). 그리고 대부분의 데이터가 암호화(cryptic format)되어있다.

  • User-Accessible View : 데이터 사전의 베이스 테이블 내에 저장된 정보를 요약해서 나타낸 뷰의 집합이다. 이 뷰들은 베이스 테이블 데이터를 유용한 정보로 해독한다. 대부분의 사용자는 base table보다 이 뷰에 접근권한이 주어진다.

1.2. SYS, 데이터 사전의 주인

오라클 데이터베이스 유저 ‘SYS’는 모든 base table과 user-accessible view를 소유하고 있다. 어떤 오라클 데이터베이스 사용자도 SYS 소유의 오브젝트 or row를 변경할 수 없다. 왜냐하면 이런 활동은 데이터 무결성(Data Integrity)를 위태롭게 할 수 있기 때문이다. 보완 관리자는 엄격하게 중요 계정을 제어해야 한다. (데이터 사전의 데이터 변경/조작은 데이터베이스 운영에 영구적으로 해로운 영향을 준다.)

2. 어떻게 이용되는가

데이터 사전은 아래와 같이 사용된다.

  • 오라클 데이터베이스는 유저와 스키마 객체, 저장 구조에 대한 정보를 찾기위해 데이터 사전에 접근한다.
  • 오라클 데이터베이스는 DDL(Data Definition Language) 작업이 일어날 때마다 데이터 사전을 수정한다.
  • 데이터베이스 정보를 참조하기 위한 접근(Read-only reference about DB information)

2.1. 오라클 데이터베이스는 데이터사전을 어떻게 이용하는가

Base table의 데이터는 데이터베이스가 동작하기 위해서 필요하다. 그러므로, 오직 오라클 데이터베이스만이 데이터 사전 정보를 작성하거나, 변경 가능하다. 오라클은 데이터베이스의 업그레이드/다운그레이드 시 데이터 사전을 수정할 수 있는 스크립트를 제공한다. (어떤 사용자도 데이터 사전의 정보를 변경/삭제할 수 없다.)

데이터베이스가 작동하는 동안, 오라클 데이터베이스는 스키마 객체가 존재여부와 사용자가 적절하게 스키마에 접근하는지 확인하기 위해 데이터 사전을 조회한다. 그리고 데이터베이스 변화를 반영하기 위해 지속적으로 데이터사전을 업데이트한다.

한 예로, 사용자가 ‘TEMP_TABLE’이란 이름의 테이블을 생성한다면, 데이터 사전은 해당 테이블에 대한 테이블, 컬럼, 세그먼트, 권한 등의 정보를 데이터 사전에 추가한다. 이 정보는 바로 다음 데이터 사전을 조회할 때 볼 수 있다.

2.1.1. Public Synonyms for Data Dictionary Views

오라클 데이터베이스는 사용자가 편하게 데이터 사전에 접근하게 하기위해 public synonym을 만든다. 보안 관리자 역시 시스템 전반에 걸쳐 사용되는 public synonym을 추가로 만들 수 있다. 사용자는 그들의 스키마 객체에 public synonym으로 사용되는 이름을 붙이는 것을 피해야 한다.

2.1.2. 빠른 접근을 위한 캐싱

대부분의 데이터 사전 정보는 Dictionary cache(SGA > Shared Pool)에 유지된다. DBMS가 동작하는 동안 사용자 접근을 검증하고, 스키마 객체의 상태를 입증하기 위해 수시로 접근해야하기 때문이다. 모든 정보는 LRU(Least Recently Used) 알고리즘에 의해서 메모리 내에 저장된다. 분석된 정보는 일반적으로 캐시 안에 유지된다. 테이블과 테이블의 컬럼을 설명하는 ‘COMMENTS’ 컬럼은 자주 접근하지 않는 한 캐시에 저장되지 않는다.

2.1.3. 다른 프로그램과 데이터 사전

(데이터 사전을 사용하는) 어플리케이션 개발자는 base table보단 시노님을 이용하여 조회해야 한다.(시노님의 변경은 흔치않다.)

2.2. 어떻게 데이터 사전을 이용해야 하는가

데이터 사전의 뷰는 모든 데이터베이스 사용자를 위한 레퍼런스로 제공된다. SQL문으로 데이터 사전에 접근해보면, 몇몇 뷰는 모든 사용자에게 접근가능한 상태일 것이다. 그리고 나머지는 DBA의 허용 하에 접근 가능하다.

데이터 사전은 데이터베이스가 운용 중인 경우 항상 사용가능하다. ‘SYSTEM’ 테이블스페이스 내에 있기때문에, 항상 Online 상태이다.

데이터 사전은 뷰의 셋(set)으로 구성되어 있다. 많은 경우, 세 종류의 뷰가 비슷한 정보를 제공하고, 접두어로 각각을 구분한다.

  • USER : (사용자 계정에 존재하는 스키마의) 뷰
  • ALL : (사용자가 접근 가능한 범위 내의) 뷰
  • DBA : (모든 사용자의 스키마에 접근 가능한) DBA의 뷰

컬럼 셋은 다음의 예외를 제외하고 동일하다.

  • USER 접두사로 시작하는 뷰는 ‘OWNER’ 컬럼이 제외된다.
  • 몇몇 DBA 뷰는 관리자에게 유용한 정보를 제공하는 컬럼이 추가된다.

2.2.1. ‘USER’ 접두사의 뷰

‘USER’ 접두사의 뷰SMS 일반적으로 데이터베이스 사용자에게 흥미로울 것이다. 이런 뷰는:

  • 사용자가 생성한 스키마 객체와 권한 등과 같은 사용자의 데이터베이스 환경을 나타낸다.
  • 사용자에게 적절한 정보를 나타낸다.
  • 다른 뷰와 (OWNER 컬럼을 제외한) 동일한 컬럼을 가진다.
  • ALL 뷰의 부분정보를 반환한다.
  • 편의를 위한 축약된 PUBLIC 시노님을 가진다.

한 예로, 아래 쿼리는 사용자의 스키마의 모든 객체를 반환한다.

SELECT object_name, object_type, FROM USER_OBJECTS;

2.2.2. ‘ALL’ 접두사의 뷰

위 뷰는 데이터베이스의 종합적인 관점뷰를 제공한다. 사용자가 접근가능한 모든 스키마에 대한 정보를 반환한다. (다른 사용자의 스키마에 대한 접근도 가능하다면 조회 가능하다.) 아래 쿼리문으로 사용자의 권한 하에서 조회 가능한 스키마 객체 목록을 확인할 수 있다.

SELECT owner, object_name, object_type, FROM ALL_OBJECTS;

2.2.3. ‘DBA’ 접두사의 뷰

위 뷰는 데이터베이스 전체의 글로벌 뷰를 제공한다. 이 뷰에 대한 시노님은 생성되지 않았는데, DBA 뷰는 오직 관리자에 의해서만 조회되어야 하기 때문이다. 그러므로, DBA 뷰를 쿼리하기 위해, 관리자는 다음과 같이 뷰의 앞에 ‘SYS’를 붙여야 한다.

SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS;

오라클은 데이터 사전의 권한을 사용하여 시스템 권한을 가진 사용자로부터 보호하기 위하여 데이터 사전 Protection을 운용하는 것을 추천한다. Dictionary Protection 능기(O7_DICTIONARY_ACCESSIBILITY is false)을 사용한다면, SYS 스키마 데이터 사전에 대한 접근은 엄격하게 제한된다. 여기에 접근할 수 있는 사용자는 SYS와 SYSDBA로 접속한 사람뿐이다.

2.2.4. DUAL 테이블

DUAL 테이블은 데이터 사전 내 DBMS와 사용자가 작성한 프로그램의 결과를 참조할 수 있게 만든 작은 테이블이다. 이 테이블은 DUMMY라는 이름의 컬럼과 ‘x’라는 값의 1행만 가지고 있다.

3. Dynamic Performance Tables

데이터베이스의 운영 중, 오라클은 현재 데이터베이스 액티비티를 기록하는 가상의 테이블 셋을 유지한다. 이런 테이블을 Dynamic Performance Table이라 부른다.

이는 실제 테이블이 아니고, 대부분의 유저는 접근할 수 없다. 그러나 DBA는 쿼리를 실행하고 해당 테이블을 이용해서 뷰를 생성할 수 있으며, 이러한 뷰를 다른 사용자가 조회할 수 있도록 권한을 부여할 수 있다. 이러한 뷰 중 몇몇은 fixed view라고 불린다. DBA가 해당 뷰를 변경하거나 삭제할 수 없기때문이다.

SYS는 V_$로 시작하는 이름의 테이블을 소유하고 있다. 이 뷰들은 Dynamic Performance Table로부터 생성되었고 public synonym을 가지고 있다. synonym은 V$로 시작되는 이름을 가지고 있다. 예를 들어, V$DATAFILE은 데이터베이스의 파일에 대한 정보를 제공한다.

4. Database Object Metadata

DBMS_METADATA 패키지는 데이터베이스 객체의 완벽한 개념을 추출하기 위한 인터페이스를 제공한다. 이 개념은 XML이나 SQL DDL로 표현된다. 두 가지 방식의 인터페이스가 제공된다.

  • 프로그래밍적인 제어를 위한 유연하고, 정교한 인터페이스
  • 즉석 질의(query)를 위한 단순 인터페이스

참고