본문으로 바로가기

[DataBase] 데이터 딕셔너리

category Programming/ DataBase 2018. 4. 17. 20:38

데이터 딕셔너리란?



데이터 딕셔너리는 데이터베이스의 가장 중요한 부분 중의 하나인 데이터베이스와 관련된 정보를 제공한다.

데이터 딕셔너리의 내용은 DDL 혹은 DML이 수행될 때 오라클 서버에 의해 변경된다. 소유자는 SYS이며 오라클 서버에 의해 유지되므로 사용자는 데이터 딕셔너리의 내용을 변경할 수 없다. 단지 일반 사용자는 SELECT 명령으로 데이터 딕셔너리의 내용을 조회만 할 수 있다.


데이터 딕셔너리는 기본 테이블과 딕셔너리 뷰의 두 가지 형태로 제공한다. 기본 테이블은 데이터베이스에 관한 정보를 갖고 있는 테이블로서 오라클 서버만 기록할 수 있고 데이터가 은폐되어 있으므로 사용자가 직접 접근할 수 없다.


데이터 딕셔너리 뷰는 기본 테이블의 정보를 더 유용하게 보여주기 위해서 기본 테이블을 요약한 형태이다. (뷰란 기본 테이블의 내용을 보여주는 하나의 방식으로, 사용자는 뷰를 마치 테이블처럼 사용할 수 있다. 엄밀히 따지자면 여기서 말하는 데이터 딕셔너리도 데이터 딕셔너리 뷰이다.)


데이터 딕셔너리의 내용은 데이터베이스 안의 모든 객체에 대한 정의로서 객체들에 할당된 공간과 사용된 공간, 무결성 제약 조건, 사용자 정보, 사용자에게 부여된 권한과 역할(ROLE) 정보, 감사 정보 등 다양한 정보를 알려준다.

이를 간략하게 정리하면 다음과 같다.



------------------------------------------------------------------------------------------------------------------------


데이터 딕셔너리

  • 데이터베이스 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블이다.
  • 사용자가 테이블을 생성하거나 변경하는 등의 작업을 할 때, 데이터베이스 서버에 의해 자동으로 갱신되는 테이블이다.
  • 사용자는 데이터 딕셔너리의 내용을 직접 수정하거나 삭제할 수 없다.
  • 사용자가 데이터 딕셔너리를 조회해 보면 시스템이 직접 관리하는 테이블이기 때문에 암호 같은 기호만 보여질 뿐 내용을 알 수는 없다.


데이터 딕셔너리 뷰
    • 오라클은 데이터 딕셔너리의 내용을 사용자가 이해할 수 있는 내용으로 변환하여 제공한다.



------------------------------------------------------------------------------------------------------------------------


데이터 딕셔너리는 접두어에 따라 다음과 같이 세 종류로 나뉜다.


 DBA_XXXX

 데이터베이스 관리자만 접근 가능한 객체 등의 정보조회(DBA는 모두 접근 가능하므로 결국 데이 터이스에 있는 모든 객체에 관한 조회)

 ALL_XXXX

 자신 계정 소유 또는 권한을 부여받은 객체 등에 관한 정보 조회

 USER_XXXX

 자신의 계정이 소유한 객체 등에 관한 정보 조회



- ALL_XXXX 데이터 딕셔너리를 사용하기 위해 다른 계정에 권한을 주는법 예시 - 


A 로 접속후

   grant select on Table1 to B;

   grant select on Table2 to B;

   grant select on Table3 to B;


그런후

B 로 접속후

   select * from A.Table1;

   select * from A.Table2;

   select * from A.Table3;   과 같이 부여 받은 권한에 한해서 다른 계정의 테이블에 접근, 혹은 수정이 가능하다.




<데이터 딕셔너리 예시>


1. USER 데이터 딕셔너리 - 자신의 계정이 소유한 객체 등에 관한 정보를 조회할 수 있다.

( 일부만 알아본다. USER 데이터 딕셔너리에 대해서는 제약조건과 관련하여 따로 포스팅 함.)


자신이 생성한 테이블, 인덱스, 뷰 등과 같은 자신의 계정이 소유한 객체의 정보를 저장하는 USER_TABLES 데이터 딕셔너리

--> DESC USER_TABLES



현재 유저가 생성한 테이블 목록 보기 (USER_TABLES 데이터딕셔너리(일종의 테이블개념)안의 TABLE_NAME 칼럼명을 사용한다.)

--> SELECT TABLE_NAME

  FROM USER_TABLES

  ORDER BY TABLE_NAME DESC;

--> SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE'; (좀더 상세하게 보여줌)


(SELECT * FROM TAB; 과 비교해보기)





2. ALL 데이터 딕셔너리

- 자신 계정 소유 또는 권한을 부여 받은 객체 등에 관한 정보를 조회할 수 있다.

- 타 계정의 객체는 원천적으로 접근이 불가능하지만, 그 객체의 소유자가 접근할 수 있도록 권한을 부여하면 타 게정의 객체도   접근이 가능하다.

- DESC 명령어로 데이터 딕셔너리 뷰 ALL_TABLES의 구조를 확인할 수 있다


DESC ALL_TABLES; 



OWNER, TABLE_NAME 컬럼값의 내용을 확인할 수 있다. 

SELECT OWNER, TABLE_NAME FROM ALL_TABLES; 



3. DBA 데이터 딕셔너리 데이터베이스 관리자만 접근 가능한 객체 등의 정보를 조회할 수 있다.


DBA는 모두 접근 가능하므로, 결국 DB에 있는 모든 객체에 관한 조회를 한다.


DBA_TABLES 데이터 딕셔너리 뷰의 내용을 조회할 수 있다.


SELECT OWNER, TABLE_NAME FROM DBA_TABLES; 


오류가 나는 이유는 현재 접속한 사용자가 SCOTT이므로, DBA_로 시작하는 데이터 딕셔너리 뷰를 사용할 권한이 없어서이다


DBA 권한을 가진 SYSTEM 계정으로 접속하면 DBA_TABLES 데이터 딕셔너리 뷰의 내용을 조회할 수 있다. 테이블이 어마어마무시무시하게 많이 나오기 때문에 사진 자료는 생략하겠다.


CONNECT SYSTEM/[사용자 암호] 

    • SQL> SELECT OWNER, TABLE_NAME FROM DBA_TABLES;