Oracle/SQL

2012.01.10 SQL 6일차(DELETE, Truncate, Drop들의 차이점, 데이터 딕셔너리)

에몽이ㅋ 2012. 1. 11. 10:07
자료를 삭제하는 명령어는 3가지가 있다.

delete, truncate, drop

이 중
ELETE 는 DML명령어
TRUNCATE, DROP은 DDL명령어이다. 이것으로 인한 트랜젝션관리의 차이가 생길 수 있다.

이것 외에도 차이점이 존재하는데, 

고객테이블이 존재하는데 100만행(건)의 자료가 있고, row칼럼은 데이터에 번호를 매긴 칼럼이다.
(총 고객테이블의 용량은 100M) 

만약에
DELETE FROM 고객
WHERE row BETWEEN 1 and 90만

하게 되면 남는 행은 10만건이 되게 된다.
하지만, 테이블 자체의 용량은 100M그대로이다.
    우리 눈에는 지웠다고 표시되지만, 사실상 살아있다.

TRUNCATE 고객;
    의 경우에는 데이터가 다 지워지고, 용량도 지워지지만, 테이블의 구조는 살아있다.

DROP 고객; 
    의 경우에는 테이블자체가 싹 사라지게 된다.

요약하자면, 

DELETE

(행삭제, DML)

장점 : 원하는 행 삭제가능,

단점 : 테이블의 용량은 줄어들지 않는다.(사실상 자료들은 다 남아있다.)

TRUNCATE (DDL)

테이블 자료들 모두 삭제

단점 : 원하는 데이터만 삭제불가능, 복구가 굉장히 힘들다.

(비유하자면 DROPF준 교수님, TRUNCATED-준 교수님)

DROP (DDL)

테이블 자체의 삭제



======================================================================================================

데이터 딕셔너리

앞에서 서버프로세스는 우리가 SQL>상에서 수행하는 모든 것들을 수행해준다고 했다.

그러면 이 서버프로세스는 어디서 참조를 할까?

바로 데이터 딕셔너리에서 참조를 한다.

테이블은 3가지 종류가 있다.(테이블을 다른 말로 세그먼트라고 지칭하기도 한다.)
1. Data Table(일반적인 테이블)
2. Rollback Table(롤백하기 위한 테이블)
3. Dictionary Table(오라클을 운영하기 위한 테이블, 10g기준 1875,1876개 존재)

이 딕셔너리 테이블은 오라클을 운영하기 위한 테이블인 만큼 이 테이블을 정말 잘 이용해야 한다.
이 테이블을 얼마나 잘 이용하는 가에 따라서 실력이 달라진다고 한다.


딕셔너리 테이블의 종류
 DBA_  전부(dba권한 가진 사람만 사용가능)
 ALL_  접근가능한 것(자신의것 + 다른 계정에서 접근허락한 것...)
 USER_  자신의 것


USER_ 데이터 딕셔너리 뷰
      자신이 생성한 테이블, 인덱스, 뷰, 동의어 등과 같은 객체나 해당 사용자에게
      부여된 권한 정보를 조회할 수 있다.

    사용예) 현재 scott 계정이 생성한 모든 객체 보기
 
    SQL>  SELECT table_name FROM user_tables;


ALL_ 데이터 딕셔너리 뷰

 사용예) 현재 scott 계정이 조회 가능한 모든 객체 보기

    SQL>  SELECT table_name FROM ALL_tables;


DBA_ 데이터 딕셔너리 뷰
 
  사용예) DBA 나 SELECT ANY TABLE 권한을 가진 사용자만 접근할 수 있다
   
    SQL>  SELECT owner,table_name FROM dba_tables;