Chapter 14. OBJECT

김승현·2021년 10월 18일
0

OBJECT


  • DBMS에서 Object는 데이터를 담고 있거나, 데이터 처리시 효율적으로 사용될 수 있도록 만들어 놓은 객체를 뜻 한다.
  • Table, Index, View, Trigger, Role, Constraint, Stored Procedure, PL/SQL 등 다양한 Object가 있다.

Data Dictionary


  • 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블

  • 데이터 딕셔너리는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 하게 되면 데이터베이스 서버에 의해서 자동으로 정보를 갱신하는 테이블

  • 사용자는 데이터 딕셔너리의 내용을 직접 수정하거나 삭제 할 수 없음

  • 데이터 딕셔너리 안에는 중요한 정보가 많이 있기 때문에 사용자를 이를 활용하기 위해 데이터 딕셔너리 뷰를 사용하여 정보를 확인할 수 있다.

    • View는 원본 테이블을 커스터 마이징해서 보여주는 원본 테이블에 연결된 가상의 Table
    • 딕셔너리뷰는 데이터를 확인할때 사용하는 것 일뿐, 딕셔너리 뷰를 수정하거나 삭제하는 행위를 하는것이 아니다. (할수도 없음)
  • 대표적인 3개의 데이터 딕셔너리 뷰

    • DBA_XXXX : 데이터베이스 관리자만 접근이 가능한 객체 등의 정보를 조회할 수 있는 Table
    • ALL_XXXX : 자신의 계정이 소유하거나 권한을 부여받은 객체 등에 관한 정보를 조회할 수 있는 Table
    • USER_XXXX : 자신의 계정이 소유한 객체 등에 관한 정보를 조회할 수 있는 Table
구분작성법
DBA_XXXX (최고관리자)SELECT OWNER, TABLE_NAME FROM DBA_TABLES;
ALL_XXXX (모든 계정 접근 가능)SELECT OWNER, TABLE_NAME FROM ALL_TABLES;
USER_XXXX (자신이 소유한 객체만)SELECT TABLE_NAME FROM USER_TABLES;
테이블, 인덱스, 뷰 등과 같은 자신이 소유한 객체의 정보를
저장하고 있는 데이터 딕셔너리
DESC ALL_TABLES;
현재 계정으로 생성한 객체 테이블 목록을 확인할 수 있음SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';



View


  • 하나 이상의 테이블에서 원하는 데이터를 선택하여 새로운 가상 테이블을 만들어 주는 것

  • 데이터 자체를 가지고 있는게 아니라 링크 개념이라고 볼 수 있음

    • 저장장치 내에 물리적으로 존재하지 않고, 가상의 테이블로 만들어 짐
  • 뷰를 사용하면 특정 사용자가 원본 테이블에 접근하여 모든 데이터를 보게 하는 것을 방지 할 수 있음

  • 뷰를 만들기 위해서는 뷰 생성 권한이 필요

  • View 사용시 주의할점 :

    • 원본 테이블과 연동되어있기 때문에 DML 권한에 따라 데이터를 입력, 수정, 삭제 할 수 있음
       (생성한 본인은 기본적으로 수정이 가능)
    • 수정시 링크를 따라 원본 데이터도 수정됨

구분작성법
View Data Dictionary 확인SELECT * FROM USER_VIEWS;
View 생성 권한 부여 (System 계정에서 가능)GRANT CREATE VIEW TO 계정명;
View 만들기CREATE VIEW 뷰이름 AS SELECT 구문
View 만들기+옵션CREATE [OR REPLACE]   [FORCE | NOFORCE] VIEW 뷰이름 AS SELECT 구문
[WITH READ ONLY ]  [ WITH CHECK OPTION ] ;
VIEW 확인SELECT * FROM 뷰이름;
다른계정에서 VIEW를 검색할 수 있는 권한 설정
(VIEW를 만든 계정에서 진행)
GRANT SELECT ON 계정명1.뷰이름 TO 계정명2;
VIEW 삭제DROP VIEW 뷰이름

  • VIEW 생성시 사용 옵션
구분의미
OR REPLACE생성한 뷰가 존재하면 뷰를 갱신
FORCE / NOFORCEFORCE옵션은 기본 테이블이 존재하지 않더라도 뷰를 생성
NOFORCE는 기본 테이블이 없으면 생성하지 않음(기본값은 NOFORCE)
WITH CHECK OPTION설정한 컬럼의 값을 수정하지 못하게 함
WITH READ ONLY뷰에 대해 조회만 가능하고, 삽입, 수정, 삭제 등을 하지 못하게 함



SEQUENCE


  • 순차적인 정수값을 자동으로 생성하는 객체로 자동 번호 발생기의 역할
  • 작성법
구분작성법
시퀀스 객체 생성CREATE SEQUENCE 시퀀스명
1. [START WITH 숫자]
2. [INCREMENT BY 숫자]
3. [MAXVALUE 숫자 | NOMAXVALUE]
4. [MINVALUE 숫자 | NOMINVALUE]
5. [CYCLE | NOCYCLE]
6. [CACHE | NOCACHE]
SEQUENCES Data Dictionary View
(가지고 있는 시퀀스 확인하기)
SELECT * FROM USER_SEQUENCES;
생성된 시퀀스 확인SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '시퀀스명';
현재 시퀀스값의 다음 값을 반환SELECT 시퀀스명.NEXTVAL FROM DUAL;
현재값을 반환SELECT 시퀀스명.CURRVAL FROM DUAL;
시퀀스 수정
(START WITH 값 변경은 불가)
ex)
ALTER SEQUENCE 시퀀스명
INCREMENT BY 10
MAXVALUE 500
NOCYCLE
NOCACHE;
시퀀스 삭제DROP SEQUENCE 시퀀스명;

  • 옵션 설명
  1. 처음 발생시킬 시작 값 지정, 기본값 1
  2. 다음 값에 대한 증가치, 기본값 1
  3. 발생시킬 최대값 지정, 10의 27승-1까지 가능
  4. 발생시킬 최소값 지정, -10의 26승
  5. 시퀀스가 최대값까지 증가를 완료하면 CYCLE은 START WITH 설정값으로 돌아가고, NOCYCLE은 에러 발생
  6. CACHE는 메모리상에서 시퀀스값을 관리, 기본값 20(실제 값은 다 증가하지만 메모리의 효율을 위해 사용됨)

  • NEXTVAL, CURRVAL 을 사용할 수 있는 경우

    • 서브 쿼리가 아닌 SELECT문
    • INSERT문의 SELECT 절
    • INSERT문의 VALUE 절
    • UPDATE문의 SET 절

  • NEXTVAL, CURRVAL을 사용할 수 없는 경우

    • VIEW의 SELECT 절
    • DISTINCT 키워드가 있는 SELECT 절
    • GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 절
    • SELECT, DELETE, UPDATE의 서브쿼리
    • CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값

  • EX)

INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '홍길동',20);
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '김말똥',30);
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '고길똥',40);
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '똥똥똥',50);

SELECT * FROM MEMBER_TEST_TBL; --확인



SYNONYM(동의어)


  • 사용자가 다른 사용자의 테이블을 참조할 때 [사용자ID].[테이블명] 으로 표기해야 하지만 동의어(SYNONYM)를 설정하면 간단히 사용 가능 함

  • 비공개 동의어

    • 객체에 대한 접근 권한을 부여받은 사용자가 정의한 동의어로 해당 사용자만 사용할 수 있다.
    • 단, 테이블에 동의어를 설정하고 난뒤, 해당 테이블을 접근할 수 있는 권한을 타 계정에 부여하게 되면,
      타 계정에서도 비공개 동의어를 사용할 수 있다.
  • 공개 동의어

    • 권한을 주는 사용자(DBA)가 정의한 동의어
    • 모든 사용자가 사용할 수 있다.(PUBLIC)
      ex) DICTIONARY -> DICT

구분작성법
비공개 동의어 생성GRANT CREATE SYNONYM TO 계정명;-- system에서 권한 부여
CREATE SYNONYM 동의어 FOR 테이블명;
공개 동의어 생성CREATE PUBLIC SYNONYM 동의어 FOR 계정명.테이블명; -- system 계정에서 생성
동의어 확인SELECT * FROM ALL_SYNONYMS WHERE TABLE_OWNER = '계정';
동의어 삭제 하기DROP PUBLIC SYNONYM 동의어; -- system 계정
DROP SYNONYM 동의어; -- kh 계정



Role


  • 사용자에게 여러개의 권한을 한번에 부여 할 수 있는 객체

  • 사용자에게 권한을 부여할때 한개씩 부여하게 된다면 권한 부여 및 회수에 따른 관리가 불편함

  • Oracle DB 설치시 기본 제공되는 ROLE

    • CONNECT : 사용자가 데이터 베이스에 접속 가능하도록 하기 위한 권한이 있는 Role
    • RESOURCE : 사용자가 객체(테이블,뷰,인덱스)를 생성하기 위한 시스템 권한 제공되는 Role
    • DBA : 시스템 자원을 무제한적으로 사용가능하며 시스템 관리를 하기 위한 모든 권한 Role
  • EX) ROLE 만들기
CREATE ROLE emptyRole; -- 아무 권한 없는 Role
CREATE ROLE connectRole; -- 접속 권한만 있는 Role
CREATE ROLE managerRole;-- 접속권한 + 리소스 사용 권한이 있는 Role


GRANT CREATE SESSION TO CONNECTROLE;
GRANT CONNECT, RESOURCE TO MANAGERROLE;


CREATE USER EX05 IDENTIFIED BY 1234;

GRANT EMPTYROLE TO EX05;
REVOKE EMPTYROLE FROM EX05;

GRANT CONNECTROLE TO EX05;
REVOKE CONNECTROLE FROM EX05;



GRANT MANAGERROLE TO EX05;
REVOKE MANAGERROLE FROM EX05;
profile
개발자로 매일 한 걸음

0개의 댓글