■ 유저 관리
a. 권한(prvilege)
1) 특정한 SQL 문을 수행할 수 있는 권리.
2) 시스템권한 : 데이터베이스 영향을 줄 수 있는 권한.
3) 객체권한 : 객체(테이블)를 사용할 수 있는 권한. EX) SELECT문
4) ROLE(롤) : 유저에게 부여할 수 있는 권한을 모아 놓은 객체, 관리에 대한 편리성
# 본인이 DBA 로부터 직접 받은 시스템 권한을 확인
SELECT * FROM user_sys_privs;
# 본인이 '부여'하거나 '받은' 객체 권한을 확인
SELECT * FROM user_tab_privs;
# 본인이 받은 role에 대한 정보를 확인
SELECT * FROM session_roles;
# 본인이 받은 role 안에 시스템 권한 확인
SELECT * FROM role_sys_privs;
# 본인이 받은 role 안에 객체 권한 확인
SELECT * FROM role_tab_privs;
■ 유저 생성
# '본인' 계정 확인
SELECT * FROM user_users;
■ 권한 부여
DCL(Data Control Language)
a. GRANT
b. REVOKE
# 객체 권한 부여
GRANT SELECT ON hr.departments TO insa;
GRANT INSERT, UPDATE, DELETE ON hr.employees TO insa;
SELECT * FROM user_tab_privs;
SELECT 문, INSERT 문, UPDATE 문, DELETE 문 의 권한만 부여 의미
# 객체 권한 회수
REVOKE SELECT ON hr.departments FROM insa;
SELECT * FROM user_tab_privs;
■ USER 삭제
# 오류발생: 접속중에는 삭제가 되지 않는다.
DROP USER insa CASCADE;
'CASCADE' 키워드를 작성해줘야 전부 삭제가 가능하다.
■ TABLE
a. 행(ROW)과 열(COLUMN)으로 구성되어 있는 데이터의 저장구조
A. 데이블을 생성하려면 두가지를 체크해야 한다.
a. 테이블을 생성할 수 있는 권한.
b. 테이블을 저장할 수 있는 테이블스페이스 권한
UNLIMITED TABLESPACE 시스템 권한
SELECT * FROM user_sys_privs;
SELECT * FROM role_sys_privs;
'user_sys_privs' union 'role_sys_privs'
SELECT * FROM session_privs; -- 'UNLIMITED TABLESPACE'
■ TABLE 이름, 컬럼명, 유저 이름, 다른 객체 이름, 제약조건 이름
a. 문자시작
b. 문자의 길이 : 1~30 글자
c. 문자, 숫자, 특수문자(_, $, #) 가능하나, 숫자가 먼저 올 수 없다.
b. 대소문자는 구분하지 않는다.
e. 동일한 유저가 소유한 객체 이름은 중복할 수 없다.
■ 컬럼 타입
a. NUMBER(p, s) : 가변길이 숫자 타입
- p: 전체 자릿수, s: 소수점 자릿수
b. VARCHAR2(4000) : 가변길이 문자타입
c. CHAR(2000) : 고정길이 문자 타입, 용량 주의
d. DATE : 날짜타임
PL/SQL 관리 ↓ 아래 3가지 타입
e. CLOB : 가변길이 문자타입, 4GBYTE
ex) 긴 문자열 저장
f. BLOB : 가변길이 이진 데이터 타입, 4GBYTE,
ex) 원본자료(이미지, 동영상 등) DB를 내부에 저장
g. BFILE : 외부 파일에 저장된 이진 데이터 타입, 4GBYTE
ex) 원본자료(이미지, 동영상 등) DB를 외부에 저장 + 경로정보 + 파일
■ 테이블 복제, CTAS
- 테이블의 구조, 행(데이터), 제약조건에서는 not null 만 복제 된다.
CREATE TABLE hr.emp
AS
SELECT * FROM hr.employees;
CREATE TABLE 소유자.테이블명
AS
SELECT * FROM 복제할 테이블명;
SELECT * FROM hr.emp; -- 복제 테이블 확인
SELECT * FROM user_users; -- DEFAULT TABLESPACE을 확인
SELECT * FROM user_tables WHERE table_name = 'EMP';
DROP TABLE hr.emp PURGE; -- 테이블 영구 삭제
# 테이블 복제
CREATE TABLE hr.emp
TABLESPACE users -- TABLESPACE 지정
AS
SELECT employee_id as id, upper(last_name||' '||first_name) name, salary * 12 sal
FROM hr.employees;
# CATS 사용시에 TABLESPACE 절에 생략하게 되면 DEFAULT TABLESPACE 로 지정되어 있는 TABLESPACE 에 저장된다.
SELECT * FROM user_users; -- DEFAULT TABLESPACE을 확인
# 테이블 영구 삭제
DROP TABLE hr.emp PURGE;
'PURGE' : Shift + Delete 누르면 영구삭제 되는 것과 동일한 키워드다.
# 테이블 구조만 복제, 데이터X
CREATE TABLE hr.emp
TABLESPACE users -- TABLESPACE 지정
AS
SELECT *
FROM hr.employees
WHERE 1 = 2;
■ INSERT SUBQUERY
# 데이터 하우징 작업, Transaction
INSERT INTO hr.emp
SELECT * FROM hr.employees; -- Transaction 시작
SELECT * FROM hr.emp; -- 미리보기
COMMIT; -- Transaction 종료
SELECT * FROM hr.emp; --INSERT 확인
EX) TABLE 생성
CREATE TABLE hr.test (
id NUMBER(4),
name VARCHAR2(50),
sal NUMBER,
dept_id NUMBER
)
TABLESPACE users;
DESC TEST
# DATA 삽입
INSERT INTO hr.test(id, name, sal, dept_id)
SELECT employee_id, last_name||' '||first_name, salary, department_id
FROM hr.employees
WHERE hire_date BETWEEN to_date('20060101', 'yyyymmdd')
AND to_date('20061231', 'yyyymmdd') ; -- Transtiona 시작 시점
# SELECT 확인 및 COMMIT
SELECT * FROM hr.test; --미리보기
COMMIT; -- Transaction 종료