Data Dictionary

Data Dictionary

  • DB관리에 필요한 모든 정보가 저장되어있다.
  • Data Dictionary 구성
    1. Base Tables : DB의 모든 정보를 oracle이 oracle 스스로 보기 쉬운 형태로 기록해 놓은 테이블.
      • oracle이 스스로를 위한 이진정보를 저장.
      • 시스템정보는 건들면 위험하기때문에 보통 뷰를 통해서 조회만 가능.
    2. Data Dictionary Views(딕셔너리 뷰) : Base Table을 사용자가 보기 쉬운 형태로 만들어 놓은 뷰.
      • 딕셔너리에서 사용하는 뷰를 딕셔너리 뷰라고 함.
      • 시스템뷰에 속함.
      • DB생성시 오라클시스템에 의해 자동 생성됨.
      • 읽기전용(select만 가능)
      • 주요 딕셔너리뷰 4가지 : ALL, USER, DBA, V$

https://fromyou.tistory.com/m/75?category=206850

V$XXX 예시

  • Dynamic Performance View의 약어
  • 주로 DBA에게만 액세스가 허용.
  • 모든 DB의 접근 및 조회가능.
  • 실시간 반영 O
  • 주로 DBA의 모니터링 작업용 정보를 제공.
  • ex) v$session, v$datafile




주요 딕셔너리뷰 4가지 : USER, ALL, DBA, V$

  • 개발자들은 주로 USER, ALL 딕셔너리뷰를 사용하고 DB관리자들은 DBA를 사용한다.
종류 접근가능자 조회가능한 정보 실시간 반영 예시
USER_XXX SQL접속중인 사용자 접속중인 사용자가 소유한 객체 X uesr_tables, user_views, uesr_users, user_constraints, user_indexes
ALL_XXX SQL접속중인 사용자 접속중인 사용자가 소유하거나 접근 권한이 있는 모든 객체 X all_tables, all_view, all_indexes
DBA_XXX DBA (보통 sys유저) 모든 DB의 객체 X dba_users, dba_data_files, dba_tables
V$XXX DBA (보통 sys유저) 모든 DB의 객체 O v$session, v$datafile




개발자가 자주 사용하는 딕셔너리 뷰 예시

dictionary 뷰

  • 테이블에 대한 설명을 볼 수 있다.
  • 사용빈도수가 높음 => 따라서 동의어가 존재함 : dict(딕트)
1
2
3
4
5
6
7
8
9
10
//사용방법
$ desc dictionary;
$ select * from dictionary;
//천개가 넘는 컬럼이 출력된다. 비효율적 따라서 아래와 같이 사용한다.

//예시1 : 테이블명이 user_users인 딕셔너리 뷰의 모든 컬럼 출력
$ select * from dictionary where lower(table_name) = 'user_users';

//예시2 : 테이블단어가 들어간 딕셔너리 뷰의 모든 컬럼 출력
$ select * from dict where lower(table_name) like '%tables%';

USER_views 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//예시
//보통 DB사이즈가 매우 크기때문에 *를 쓰면 데이터처리 시간이 오래걸려서 비추
$ select * from user_views;

//따라서 desc먼저 날린 뒤 원하는 컬럼을 선택하여 select쿼리를 날리면 된다.
$ desc user_views;

$ select view_name, text
$ from user_views;

//출력값
VIEW_NAME TEXT
-------------------- ----------------------------------------
EMPVU80 select employee_id, first_name || ' ' ||
last_name, salary, department_id
from e

DEPT_SUM_VU select d.department_name, min(e.salary),
max(e.salary), avg(e.salary)
from emplo

user_sequences 예시

1
2
3
4
5
6
7
8
9
10
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences

//출력값
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER
-------------------- ---------- ---------- ------------ -----------
DEPARTMENTS_SEQ 1 9990 10 280
DEPT_ID_SEQ 1 1000 10 750
EMPLOYEES_SEQ 1 1.0000E+28 1 207
LOCATIONS_SEQ 1 9900 100 3300