주니어 기초 코딩공부/Database 기초

09장 DDL_데이터 정의어 설명 및 정리 (오라클)

jju_developer 2022. 12. 15. 20:47
728x90

✔ DDL이란? Data Definition Language

DDL이란 데이터베이스의 데이터를 보관하고 관리하기 위해 제공되는 여러 객체(object)의 생성과 변경, 삭제 관련 기능을 수행합니다.

DDL(데이터 정의어)는 DML(데이터 조작어)와는 달리 명령어를 수행하지 마자 데이터베이스에 수행한 내용이 바로 반영되는 특성을 가지고 있으며 자동 COMMIT 기능이 있습니다.

DDL은 ROLLBACK을 통한 실행 취소가 불가능하기 때문에 사용 시 주의해야 합니다.

 

전체적은 내용은 아래 테이블과 같습니다.

 

DDL
CREATE ALTER RENAME TRUNCATE DROP
✔객체 생성 ✔객체 변경
OR
✔테이블 구조 변경
✔테이블 이름 변경 ✔테이블 데이터 삭제 ✔객체 삭제
1. 자료형의 정의
2. 열 구조와 테이블 전체 복사
3. 열구조와 일부 데이터만 복사
4. 열구조만 복사
(데이터 복사 X)
1. ADD : 열 추가
2. RENAME : 열이름 변경
3. MODIFY : 열의 자료형 변경
4. DROP : 특정 열 삭제

 


✔ DDL_CREATE TABLE

 

 

✔ DDL_서브 쿼리 CREATE TABLE 복제

 

✔ DDL_서브쿼리 CREATE TABLE 구조만 복제

 

✔ DDL_ALTER TABLE

새로운 칼럼 추가하는 방법입니다.

 

no ALTER TABLE 개념 설명
1 ADD 새로운 컬럼 추가하기  ALTER TABLE ADD 문은 기존 테이블에 새로운 컬럼을 추가한다.

 새로운 컬럼은 테이블 맨 마지막에 추가되므로 자신이 원하는 위치에 만들어 넣을 수 없다.

 이미 이전에 추가해 놓은 로우가 존재한다면 그 로우에도 컬럼이 추가되지만, 
컬럼 값은 NULL 값으로 입력된다.
2 MODIFY 기존 컬럼 속성 변경하기  ALTER TABLE MODIFY 문을 다음과 같은 형식으로 사용하면 테이블에 
이미 존재하는 컬럼을 변경
할 수 있게 된다.
 컬럼을 변경한다는 것은 컬럼에 대해서 데이터 타입이나 크기, 기본 값들을 변경한다는 의미이다.
3 DROP 기존 컬럼 삭제하기 ALTER TABLE table_name
DROP COLUMN column_name;
4 SET UNUSED
컬럼의 사용을 논리적으로 제한
 ALTER TABLE 에 
SET UNUSED 옵션을 지정하면
컬럼을 삭제하는 것은 아니지만
컬럼의 사용을논리적으로 제한할 수 있게 된다.

 SET UNUSED 옵션은 사용을 논리적으로 제한할 뿐 실제로 컬럼을 삭제하지 않기 때문에 작업 시간이 오래 걸리지 않는다. 그렇기 때문에 락이 걸리는 일도 일어나지 않게 된다.

ALTER TABLE EMP02
SET UNUSED(JOB);

 

 

✔ DDL_DROP TABLE

 DROP TABLE문은 기존 테이블을 제거합니다.

 

 

✔ DDL_TRUNCATE TABLE

 기존에 사용하던 테이블의 모든 로우(ROW)제거하기 위한 명령어로 TRUNCATE가 제공됩니다.

 DML의 DELETE를 사용하게 된다면 ROLLBACK을 하면 데이터가 다시 살아나지만,

DDL의 TRUNCATE를 사용한다면 ROLLBACK을 하더라도 데이터가 살아나지 않습니다.

 

<추가 사항>

※DELETE는 메모리에 있는 것을 지우는거지 디스크에 있는것을 지우는 것이 아닙니다.

※DELETE 후 COMMIT을 하게 된다면, 메모리에 있는 내용을 COMMIT으로 하드디스크에 있는 것까지 지우게 되므로, COMMIT후에 ROLLBACK을 한다면 다시 돌아가지 않습니다.

즉, DML은 메모리에 있는 것을 작업합니다.

*DML : INSERT, UPDATE, DELETE

*DDL : TRUNCATE (= DELETE+COMMIT) , CREATE, ALTER, RENAME, DROP

-> DDL언어는 COMMIT이 되어있는 것이 전제 조건이기 때문에 영구적으로 디스크에 반영이 되는 것입니다.

데이터의 신뢰성을 보존하기 위해서 원래대로 복구가 가능하도록 이렇게 다르게 구성을 해 놓은 것입니다.

 

✔ DDL_RENAME TABLE

 기존에 사용하던 테이블의 이름을 변경합니다.

 

 

✔ DDL_데이터 딕셔너리

no 딕셔너리와 데이터 딕셔너리 뷰
1 데이터베이스 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블데이터 딕셔너리라고 한다.
2 데이터 딕셔너리는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신되는 테이블로 사용자는 데이터 딕셔너리의 내용을 직접 수정하거나 삭제 할 수 없다.

 

no 딕셔너리 내용 설명
1 USER_ 데이터 딕셔너리  접두어로 USER가 붙은 데이터 딕셔너리는 자신의 계정이 소유한 객체 등에 관한 정보를 조회 한다.

SHOW USER : 현재 접속한 USER가 누구인지를 보여줍니다.

예시)
SELECT TABLE_NAME FROM USER_TABLES
ORDER BY TABLE_NAME ASC;

내가 만든 (SCOTT USER) 에서 만든 테이블의 작업 정보들을 쭉 보여줍니다.
USER_ 디셔너리는 뒤에 오는 문구들이 많습니다.
해당 문구에 따라서 반환하는 값들이 달라집니다.
2 ALL_ 데이터 딕셔너리 *객체 = > 테이블
*스키마 => 유저가 만든 객체들 (유저 포함)

 사용자 계정이 소유한 객체는 자신의 소유이므로 당연히 접근이 가능하다.
그러나 만일 자신의 계정이 아닌 다른 계정 소유의 테이블이나 시퀀스 등은 어떨까?

 오라클에서는 타계정의 객체는 원천적으로 접근 불가능하다.

하지만 그 객체의 소유자가 접근할 수 있도록 권한을 부여하면 타 계정의 객체에도 접근이 가능하다.

 ALL_ 데이터 딕셔너리 뷰는 현재 계정이 접근 가능한 객체, 즉 자신 계정의 소유이거나 접근 권한을 부여 받은 타계정의 객체 등을 조회 할 수 있는 데이터 딕셔너리 뷰이다.

 현재 계정이 접근 가능한 테이블의 정보 조회하는 뷰이다.

-DESC ALL_TABLES;
->모든 테이블 나열

-SELECT OWNER, TABLE_NAME FROM ALL_TABLES;
-> 내가 접근 가능한 테이블의 오너 이름과 테이블 이름들 전부 출력
3 DBA_ 데이터 딕셔너리 뷰 기본적으로 오라클을 깔면 SYS가 있고, 사용자 계정인 SCOTT이 있습니다.
SYS는 슈퍼 유저이고
SYSTEM은 DBA(데이터베이스관리자) 유저이고
SCOTT은 사용자 유저입니다.

 DBA_ 데이터딕셔너리는 DBA가 접근 가능한 객체 등을 조회 할 수 있는 뷰이다.
 앞서도 언급했지만 DBA가 접근 불가능한 정보는 없기에 데이터베이스에 있는 모든 객체 등의 의미라 할 수 있다.
 USER_ 와 ALL_ 와 달리 DBA_ 데이터딕셔너리뷰는 DBA 시스템 권한을 가진 사용자만 접근할 수 있다.

SHOW USER;
SELECT TABLE_NAME, OWNER FROM DBA_TABLES;

이거는 SCOTT계정에서는 검색이 안되고, DBA권한이 있는 SYSTEM 계정에서 검색이 가능했습니다!

 

 

 

그럼 지금까지 DDL에 관한 설명을 마치겠습니다.

 

오늘도 수고하셨습니다.

 

감사합니다.

 

 

728x90