EXPLAIN PLAN, ORACLE에서 실행 계획 확인하기

에서 언급했듯이 Oracle DBMS에서 SQL 문장의 실행 계획을 분석하는 방법을 살펴보겠습니다. Oracle DBMS는 실행 계획을 확인하는 방법을 여러 가지 제공하고 있습니다. 이번 시간에는 Oracle DBMS에서 실행 계획을 분석하기 위해 사용하는 도구 중 가장 간편하게 사용할 수 있는 EXPLAIN PLAN에 대해 알아보겠습니다. EXPLAIN PLAN은 세션(SESSION) 레벨에서 실행 계획을 수집하고 분..

소스: ngelmaum notes – EXPLAIN PLAN, ORACLE에서 실행 계획 확인하기

BASIC SQL 목차

1. SQL의 종류

1.1. SQL의 종류


2. USER의 생성과 권한의 설정

2.1. USER의 생성
2.2. USER의 변경 및 삭제
2.3. 권한과 롤
2.3.1. 시스템 권한(System Privileges) 40
2.3.2. 객체 권한(Object Privileges) 35
2.3.3. 롤(Role) 24
2.3.4. 오라클 데이터베이스를 설치하면 기본적으로 생성되는 Role


3. 테이블의 생성과 수정 그리고 삭제

3.1. 테이블의 생성
3.2. 테이블의 제약조건
3.3. 오라클 데이터 타입
3.4. LOB, LONG, LONG RAW 데이터 타입 간의 비교
3.5. 테이블의 관리


4. 데이터 조작어(DML)

4.1. 데이터의 삽입, 수정, 삭제
4.1.1. MERGE 문의 이해 및 활용
4.2. SELECT문 및 연산자
4.3. 예명(Alias)

4.4. 조인(Join)

4.4.1. Equi Join, Non_Equi Join, Self Join
4.4.2. Outer Join (LEFT, RIGHT, FULL OUTER JOIN)
4.4.3. CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON
4.5. 트랜잭션(commit과 rollback)
4.6. Commit과 Rollback 예제


5. 내장 함수(Sing-Row Functions)

5.1. Numeric Functions (숫자형 함수)
5.2. Character Functions (문자형 함수)
5.3. Datetime Functions (날짜 함수)
5.4. Conversion Functions (변환 함수)
5.5. 기타 함수들
5.6. DECODE와 CASE
5.7. NVL, NVL2, NULLIF, COALESCE


6. 집계함수(Aggregate function)의 이해

6.1. 집계함수(Aggregate function)란?
6.2. GROUP BY와 HAVING절


7. 서브쿼리(Subquery)

7.1. Subquery란?
7.2. Single-Row Subquery
7.3. Multiple-Row Subquery
7.4. Multiple-Column Subquery
7.5. Inline View (From절 Subquery)
7.6. Scalar Subquery
7.7. UNION [ALL], INTERSECT, MINUS 연산자


9. 데이터 사전 (Data Dictionary)

9.1. 데이터 사전(Data Dictionary)이란?
9.2. 데이터 사전(Data Dictionary) 정보조회


10. 오라클 객체

10.1. 인덱스(Index)
10.2. VIEW 테이블
10.3. 시퀀스(Sequence)의 이해 및 활용
10.4. SYNONYM(동의어)


강좌 URL : http://www.gurubee.net/oracle/sql

SQL의 종류

  • 1. DDL (Data Definition Language) : 데이터베이스 객체(테이블,뷰,인덱스..)의 구조를 정의 합니다.
SQL문내 용
CREATE데이터베이스 객체를 생성 합니다.
DROP데이터베이스 객체를 삭제 합니다.
ALTER기존에 존재하는 데이터베이스 객체를 다시 정의하는역할을 합니다.
  • 2. DML (Data Manipulation Language) : 데이터의 삽입,삭제,갱신등을 처리
SQL문내 용
INSERT데이터베이스 객체에 데이터를 입력 한다.
DELETE데이터베이스 객체의 데이터를 삭제 한다.
UPDATE데이터베이스 객체안의 데이터 수정 한다.
  • 3. DCL (Data Control Language) : 데이터베이스 사용자의 권한을 제어
SQL문내 용
GRANT데이터베이스 객체에 권한을 부여 한다.
REVOKE이미 부여된 데이터베이스 객체 권한을 취소한다.

SYNONYM(동의어)

시노님은 오라클 객체(테이블, 뷰, 시퀀스, 프로시저)에 대한 대체이름(Alias)를 말하며, 실질적으로 그 자체가 객체가 아니라 객체에 대한 직접적인 참조 이다.

시노님을 사용하는 이유

① 데이터베이스의 투명성을 제공하기 위해서 사용 한다고 보면 된다. 시노님은 다른 유저의 객체를 참조할 때 많이 사용을 한다.

② 만약에 실무에서 다른 유저의 객체를 참조할 경우가 있을 때 시노님을 생성해서 사용을 하면은 추후에 참조하고 있는 오프젝트가 이름을 바꾸거나 이동할 경우 객체를 사용하는 SQL문을 모두 다시 고치는 것이 아니라 시노님만 다시 정의하면 되기 때문에 매우 편리 하다.

③ 객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL코딩을 단순화 시킬 수 있다.

④ 또한 객체를 참조하는 사용자의 오브젝트를 감추 수 있기 때문에 이에 대한 보안을 유지할 수 있다. 시노님을 사용하는 유저는 참조하고 있는 객체를에 대한 소유자, 이름, 서버이름을 모르고 시노님 이름만 알아도 사용 할 수 있다.

시노님을 사용하는 경우

객체의 실제 이름과 소유자 그리고 위치를 감춤으로써 데이터베이스 보안을 개선하는데 사용 한다

객체의 Public Access를 제공 한다

Remote 데이터베이스의 TABLE, VIEW, PROGRAM UNIT를 위해 투명성을 제공 한다.

데이터베이스 사용자를 위해 SQL 문을 단순화 할 수 있다.

시노님의 두 가지 종류

Private Synonym : 전용 시노님은 특정 사용자만 이용할수 있다.

Public Synonym : 공용 시노님은 공용 사용자 그룹이 소유하며 그 데이터베이스에 있는 모든 사용자가 공유 한다.

시노님 문법

– PUBLIC : 모든 사용자가 접근 가능한 시노님을 생성 한다.
시노님 예제

scott USER의 emp테이블을 test USER가 사용 하는 예제.

-- ① 먼저 scott/tiger USER로 접속해서 test USER에게 
-- emp 테이블을 조작할 권한을 부여합니다.
SQL> GRANT ALL ON emp TO test;

-- ② test USER로 접속해 동의어를 생성합니다. 
SQL> CONNECT test/test 
SQL> CREATE SYNONYM scott_emp FOR scott.emp ;

-- scott USER가 소유하고 있는 emp 테이블에 대해 
scott_emp라는 일반 시노님을 생성했다. 
-- scott 사용자의 emp테이블을 test 사용자가 
scott_emp라는 동의어로 사용 합니다.

-- ③ 시노님을 이용한 쿼리
SQL> SELECT empno, ename FROM scott_emp;

-- 일반 테이블을 쿼리
SQL> SELECT empno, ename FROM scott.emp; 
이 두 쿼리의 결과는 같다.

EMPNO ENAME
-------- ---------
7369 SMITH
7499 ALLEN
...

-- ④ 동의어 삭제 
SQL> DROP SYNONYM scott_emp;

-- 시노님을 이용한 조회
SQL> SELECT empno, ename FROM scott_emp; 
라인 1 에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

 

– 강좌 URL : http://www.gurubee.net/lecture/1038

시퀀스(Sequence)의 이해 및 활용

시퀀스란?

– 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다.
– 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.
– 보통 PRIMARY KEY 값을 생성하기 위해 사용 한다.
– 메모리에 Cache되었을 때 시퀀스값의 액세스 효율이 증가 한다.
– 시퀀스는 테이블과는 독립적으로 저장되고 생성된다.
시퀀스 생성

-- 시퀀스 생성 Syntax
CREATE SEQUENCE sequence_name
[START WITH n]
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]

– START WITH : 시퀀스의 시작 값을 지정한다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 한다.
– INCREMENT BY : 시퀀스의 증가 값을 지정한다. n을 2로 하면 2씩 증가한다. START WITH를 1로, INCREMENT BY를 2로 설정하면 1, 3, 5, 7,.. 이렇게 시퀀스 번호가 증가한다.
– MAXVALUE : 시퀀스 최대값
– MINVALUE : 시퀀스 최소값
– CYCLE|NOCYCLE : 최대값 도달시 순환 여부
– CACHE | NOCACHE : CACHE 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의 Library Cache에 상주시킨다.
시퀀스 수정

START WITH 값을 제외하고 ALTER SEQUENCE 명령어로 수정 할 수 있다.

-- 시퀀스 수정 Syntax
ALTER SEQUENCE sequence_name
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]

시퀀스의 사용예

시퀀스 생성

empno를 자동 증가하는 시퀀스를 만들어 보자

-- 8000부터 시작하는 시퀀스를 생성하자
CREATE SEQUENCE seq_empno
START WITH 8000
INCREMENT BY 1
CACHE 20;


-- 시퀀스가 정상적으로 생성되었는지 조회해 보자
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.CURRVAL FROM DUAL;

시퀀스를 이용해서 데이터를 등록해 보자

-- INSERT 시 시퀀스 사용
INSERT INTO emp 
(empno, 
ename, job, mgr, 
hiredate, sal, comm, deptno)
VALUES
(seq_empno.NEXTVAL, 
'TIGER', 'MANAGER', 7839, 
SYSDATE, 3000, null, 20);


-- SELECT 절에서 시퀀스 사용
CREATE TABLE emp2
AS
SELECT seq_empno.NEXTVAL as empno, ename, 
job, mgr, hiredate, sal, comm, deptno
FROM emp; 


-- 시퀀스가 정상적으로 반영되었는지 조회해 보자
SELECT * FROM emp;

시퀀스 수정

시퀀스 수정 예이다.

-- seq_empno 시퀀스의 증과값과 Cache 사이즈를 변경하는 예이다.
ALTER SEQUENCE seq_empno
INCREMENT BY 10
CACHE 40;


-- 시퀀스가 정상적으로 변경되었는지 조회해 보자
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.CURRVAL FROM DUAL;

시퀀스 삭제

DROP SEQUENCE 명령으로 시퀀스를 삭제 할 수 있다.

-- seq_empno 시퀀스를 삭제한다.
DROP SEQUENCE seq_empno;

– 강좌 URL : http://www.gurubee.net/lecture/1037

VIEW

뷰란?

– 뷰는 하나의 가상 테이블이라 생각 하면 된다.
– 뷰는 실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리 할수 있다.
– 뷰는 복잡한 Query를 통해 얻을 수 있는 결과를 간단한 Query로 얻을 수 있게 한다.
– 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.
– 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.
뷰의 제한 조건.

– 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.
– ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터도 INSERT 할 수 없다
– WITH READ ONLY 옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.
– WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제,수정을 할 수 있다

뷰 문법

– FORCE : 기본 테이블 유무에 관계없이 VIEW를 생성
– WITH CHECK OPTION : VIEW에 의해 엑세스될 수 있는 행만이 입력되거나 변경될 수 있음을 지정
– WITH READ ONLY : SELECT만 가능한 VIEW 생성
– 함수를 사용한 컬럼은 반드시 ALIAS를 지정해야 한다.
뷰 예제

-- 뷰 생성 
SQL> CREATE OR REPLACE VIEW name_query
AS
SELECT a.ename, b.dname
FROM emp a, dept b
WHERE a.deptno = b.deptno
AND b.deptno = 20;

-- 뷰를 이용한 조회
SQL> SELECT * FROM name_query;

ENAME DNAME
-------------------- ----------
SMITH RESEARCH
JONES RESEARCH
...

WITH CHECK OPTION

뷰의 조건식을 만족하는 데이터만 INSERT 또는 UPDATE가 가능 하도록 하는 옵션 이다.

-- 부서 번호 10의 데이터를 조회 하는 뷰
SQL> CREATE OR REPLACE VIEW check_option
AS
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 10
WITH CHECK OPTION ;

-- 부서 번호가 10인 사원만 INSERT, UPDATE할 수 있다. 
SQL> INSERT INTO check_option(empno, ename, deptno) 
VALUES (10005, 'jain', 30);

INSERT INTO check_option(empno, ename, deptno)
*
1행에 오류:
ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다

WITH READ ONLY

SELECT만 가능한 VIEW를 생성 한다

 

-- 아래 뷰는 읽기만 가능하다.
SQL> CREATE OR REPLACE VIEW read_only
AS
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 10
WITH READ ONLY;

뷰의 정보 조회

USER_VIEWS 데이터 사전을 통해서 뷰에 대한 정보를 조회 할 수 있다.

 

SQL> SELECT view_name, text
FROM USER_VIEWS;

 

– 강좌 URL : http://www.gurubee.net/lecture/1036

인덱스(Index)

인덱스는 테이블이나 클러스트에서 쓰여지는 선택적인 객체로서, 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조이다.

– 자동 인덱스 : 프라이머리 키 또는 UINQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스.

– 수동 인덱스 : CREATE INDEX 명령을 실행해서 만드는 인덱스

인덱스를 생성하는 것이 좋은 컬럼

① WHERE절이나 join조건 안에서 자주 사용되는 컬럼
② null 값이 많이 포함되어 있는 컬럼
③ WHERE절이나 join조건에서 자주 사용되는 두 개이상의 컬럼들
다음과 같은 경우에는 인덱스 생성이 불필요 하다.

① 테이블이 작을 때
② 테이블이 자주 갱신될 때
오라클 인덱스는 B-tree(binary search tree)에 대한 원리를 기반으로 하고 있다. B-tree 인덱스는 컬럼안에 독특한 데이터가 많을 때 가장 좋은 효과를 낸다.

이 알고리즘 원리는
① 주어진 값을 리스트의 중간점에 있는 값과 비교한다.만약 그 값이 더 크면 리스트의 아래쪽 반을 버린다. 만약 그 값이 더 작다면 위쪽 반을 버린다.
② 하나의 값이 발견될 때 까지 또는 리스트가 끝날 때까지 그와 같은 작업을 다른 반쪽에도 반복한다.
비트맵 인덱스

비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 사용하는 것이 좋다.(ex 남,여의 값을 가지는 성별 컬럼)

비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상 시킨다.

테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용할수 있다.

SQL> CREATE BITMAP INDEX emp_deptno_indx 
ON emp(deptno); 

UNIQUE 인덱스

UNIQUE 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.

프라이머리키 와 UNIQUE 제약 조건시 생성되는 인덱스는 UNIQUE 인덱스이다.

 

SQL> CREATE UNIQUE INDEX emp_ename_indx 
ON emp(ename); 

NON-UNIQUE 인덱스

NON-UNIQUE 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질수 있다.

 

SQL> CREATE INDEX dept_dname_indx 
ON dept(dname);

결합 인덱스

복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개 이다

 

SQL> CREATE UNIQUE INDEX emp_empno_ename_indx 
ON emp(empno, ename); 

인덱스의 삭제

인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향도 미치지 않는다.

인덱스를 삭제하려면 인덱스의 소유자 이거나 DROP ANY INDEX권한을 가지고 있어야 한다.

인덱스는 ALTER를 할 수 없다.

 

SQL> DROP INDEX emp_empno_ename_indx; 

인덱스 데이터사전

인덱스에 대한 정보는 USER_INDEXES 뷰 또는 USER_IND_COLUMNS뷰를 통해 검색할 수 있다.

SQL> SELECT index_name, index_type 
FROM USER_INDEXES 
WHERE table_name='EMP';

INDEX_NAME INDEX_TYPE
------------------- -----------
EMP_DEPTNO_INDX BITMAP
EMP_PK_EMPNO NORMAL 

– 강좌 URL : http://www.gurubee.net/lecture/1035

데이터 사전(Data Dictionary) 정보조회

데이터 사전의 괄호 명칭(dict, obj, tabs, cols..등)은 데이터사전의 시노님이다. 시노님을 이용하여 조회 할 수도 있다.

데이터 사전 뷰

DICTIONARY (DICT)

– 권한이 있는 데이터사전에 대한 데이터사전명과 설명 정보를 제공한다.

-- USER_INDEX로 시작하는 데이터사전을 조회하는 예이다. 
SELECT * 
FROM DICT 
WHERE TABLE_NAME LIKE 'USER_INDEX%';

DICT_COLUMNS

– 데이터사전의 컬럼에대한 정보를 조회 할 수 있다.

-- USER_INDEXES 데이터사전의 컬럼 정보를 조회하는 예이다 
SELECT * 
FROM DICT_COLUMNS 
WHERE TABLE_NAME ='USER_INDEXES';

자주 사용하는 데이터 사전

USER_OBJECTS (OBJ)

– 모든 객체(테이블, 인덱스, 시퀀스등..)에 대한 정보를 제공한다.

-- 사용자의 테이블명을 조회하는 예이다 
SELECT object_name 
FROM USER_OBJECTS 
WHERE object_type='TABLE';


-- 아래는 시노님을 이용해서 조회하는 예이다.
SELECT object_name 
FROM obj 
WHERE object_type='TABLE';

USER_TABLES (TABS)

– 테이블에 대한 정보를 제공한다.

-- 사용자가 소유한 테이블명과 테이블의 테이블스페이스를 조회하는 예이다. 
SELECT table_name, tablespace_name 
FROM tabs;

USER_TAB_COLUMNS (COLS)

– 사용자가 소유한 테이블의 컬럼에 대한 정보를 제공한다.

-- DEPTNO 컬럼이 있는 테이블과 테이터타입, 데이터사이즈를 조회하는 예이다. 
SELECT table_name, data_type, data_length 
FROM cols 
WHERE column_name='DEPTNO' ;

USER_CONSTRAINTS, USER_CONS_COLUMNS

– USER_CONSTRAINTS : 사용자가 소유한 제약조건 정보 제공
– USER_CONS_COLUMNS : 컬럼에 할당된 제약조건 정보 제공

-- 입력받은 테이블의 제약조건 정보를 조회하는 예이다. 
SELECT SUBSTR(a.column_name,1,15) column_name,  
DECODE(b.constraint_type,
'P','PRIMARY KEY',
'U','UNIQUE KEY',
'C','CHECK OR NOT NULL',
'R','FOREIGN KEY') constraint_type,  
a.constraint_name  
FROM user_cons_columns a, user_constraints b  
WHERE a.table_name = UPPER('&table_name') 
AND a.table_name = b.table_name  
AND a.constraint_name = b.constraint_name  
ORDER BY 1;  

-- 테이블 명을 입력 하면 된다.
table_name의 값을 입력하십시오: emp2 

COLUMN_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
------------- ----------------- -----------------
DEPTNO FOREIGN KEY FK_DEPTNO
EMPNO PRIMARY KEY PK_EMP

USER_INDEXES (IND), USER_IND_COLUMNS

– USER_INDEXES(IND) : 사용자가 소유한 인덱스 정보 제공
– USER_IND_COLUMNS: 인덱스 컬럼에 대한 정보 제공

-- 사용자가 소유한 인덱스 정보를 조회하는 예이다. 
SELECT index_name, table_name, tablespace_name 
FROM user_indexes;

주요 데이터 사전

USER_OBJECTS(OBJ) : 모든 오브젝트에 대한 정보를 지원, 오브젝트 유형, 작성시간, 오브젝트에 사용된 최종 DDL 명령, alter, grant 및 revoke 등

USER_TABLES(TABS) : 테이블에 대한 정보

USER_TAB_COLUMNS(COLS) : 컬럼에 대한 정보

USER_VIEWS : 뷰에 대한 정보

USER_SYNONYMS(SYN) : 동의어

USER_SEQUENCES(SEQ) : 시퀀스

USER_CONSTRAINTS : 제약조건

USER_CONS_COLUMNS : 제약 조건을 가진 열에 대한 정보

USER_TAB_COMMENTS : 테이블/뷰에 대한 주석

USER_COL_COMMENTS : 컬럼에 대한 주석

USER_INDEXES(IND) : 인덱스에 관한 정보

USER_IND_COLUMNS : 인덱스열에 대한 정보

USER_CLUSTERS(CLU) : 클러스터와 관련된 정보

USER_DB_LINKS : 데이터베이스 링크에 관련된 정보

USER_TRIGGERS : 트리거

USER_SOURCE : 프로시저, 함수 및 패키지

USER_ERRORS : 코드 오류

USER_TABLESPACES : 테이블스페이스

USER_USERS : 사용자

USER_TAB_PRIVS : 테이블 권한

USER_COL_PRIVS : 열 권한

USER_SYS_PRIVS : 시스템 권한

Oracle Database 전체 데이터사전

http://docs.oracle.com/cd/B28359_01/server.111/b28320/index.htm
– 강좌 URL : http://www.gurubee.net/lecture/1850

데이터 사전(Data Dictionary)이란?

데이터 사전(Data Dictionary)이란

데이터 사전(Data Dictionary)이란 대부분 읽기전용으로 제공되는 테이블 및 뷰들의 집합으로 데이터베이스 전반에 대한 정보를 제공 한다.

오라클 데이터베이스는 명령이 실행 될 때 마다 데이터 사전을 Access 한다.

DB작업동안 Oracle은 데이터 사전을 읽어 객체의 존재여부와 사용자에게 적합한 Access 권한이 있는지를 확인 한다. 또한 Oracle은 데이터 사전을 계속 갱신하여 DATABASE 구조, 감사, 사용자권한, 데이터등의 변경 사항을 반영 한다.

데이터 사전에 저장되는 내용은 아래와 같다.

– 오라클의 사용자 정보
– 오라클 권한과 롤 정보
– 데이터베이스 스키마 객체(TABLE, VIEW, INDEX, CLUSTER, SYNONYM, SEQUENCE..) 정보
– 무결성 제약조건에 관한 정보
– 데이터베이스의 구조 정보
– 오라클 데이터베이스의 함수 와 프로지저 및 트리거에 대한 정보
– 기타 일반적인 DATABASE 정보
데이터 사전의 분류

ALL_XXXX

ALL_로 시작하는 데이터 사전으로, 한 특정 사용자가 조회 가능한 모든 데이터사전을 의미 한다.

자신이 조회하려는 객체의 주인이 아니더라도 그 객체에 접근 할 수 있는 권한을 가지고 있다면 ALL_XXXX 뷰를 통하여 조회가 가능 하다.

-- scott 사용자로 접속하여 아래 SQL문장을 실행해 보자. 
SELECT table_name, tablespace_name 
FROM ALL_TABLES;

USER_XXXX

USER_로 시작하는 데이터 사전으로, 한 특정 사용자에게 종속되어 있고, 그 사용자가 조회 가능한 데이터 사전 뷰들로 ALL_XXXX 데이터 사전의 모든 정보의 부분 집합 이다.

-- scott 사용자로 접속하여 아래 SQL문장을 실행해 보자. 
SELECT table_name, tablespace_name 
FROM USER_TABLES;

DBA_XXXX

DBA권한을 가진 사용자 만이 조회할 수 있는 데이터 사전으로서 모든 오라클 데이터베이스 객체에 대한 정보를 볼 수 있다.

SELECT ANY TABLE 권한이 있는 사용자 또한 질의가 가능 하며 다른 사용자가 질의 하려면 앞에 SYS.이라는 접두어를 붙여야 한다.

-- SYS계정으로 접속하여 아래 문장을 실행해 보자
SELECT OWNER, OBJECT_NAME 
FROM SYS.DBA_OBJECTS;

V$_XXXX

Dynamic Performance View라고도 하며, 현재 Database의 상태에 관한 정보로 주로 DBA에게만 액세스가 허용되어 있다.

주로 DBA의 모니터링 작업용 정보를 제공하며, X$ 테이블을 베이스로 하는 뷰이다.

X$_XXXX

X$ 뷰는 V$ 뷰가 보여주지 않는 정보를 보여준다.

X$ 테이블은 오라클의 메모리정보를 볼 수있는 SQL 인터페이스 뷰들로 Oracle 데이터베이스의 가장 숨겨진 영역 중 하나이다.

Oracle Database 전체 데이터사전

http://docs.oracle.com/cd/B28359_01/server.111/b28320/index.htm

 
– 강좌 URL : http://www.gurubee.net/lecture/1520