본문 바로가기

DB/오라클

오라클객체( 시퀀스, 뷰, 인덱스 ) + 트리거, 사용자와권한 , 롤


# 오라클의 객체

*sequence(시퀸스)
     고유한 한 숫자를 자동으로 생성함
     일반적으로 primaty key 로 사용
     공유 가능한 객체!

ex> create sequence member_sql;
     insert into member values (member_sql.nextval,'test');
     insert into member values (member_sql.nextval,'test');
     insert into member values (member_sql.nextval,'test');
     -->결과-->          1     test
                                 2     test    
                                 3     test

*순차적인 번호를 생성하기 위한 : nextval
*현재의 시퀸스 값을 리턴          :currval-->nextval을 한번이상 사용한 후 실행됨

확인ex> select member_sql.nextval from dual;--->4(위 예제의 다음 실행시..)
              select member_sql.currval from dual;--->3(위 예제의 다음 실행시..)








# 뷰(view)( 가상 테이블 )
*뷰란 테이블이나 다른 뷰를 기초로 한 논리적인 테이블이다.
  차체의 데이터는 없지만 테이블의 데이터를 보거나 변경할수있다.
*뷰는 데이터베이스의 선택적인 내용만 따로 보여줄수있기때문에 보안성이 있다.
*미리 조인해 놓은 뷰를 이용해서 다시 간단한 질의어를 써서 구할수 있으므로
  질의 단순화가 가능하다
복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화 시킬 수 있다. 
* 뷰는 항상 최신데이터를 보여줌( 사용자가 뷰를 쿼리할때마다 뷰의 SQL문을 
    사용하여 데이터를 최신화함 )
* 쓰는이유는 특정데이터와 컬럼만 공개가능하고 민감한 월급같은정보를 가릴수 있음
    또 복잡한 쿼리가 있는데 사용빈도가 높고 복잡하다면 VIEW로 만들어 사용하는것이 편리
* 뷰생성시 select문장이 딕셔너리에 저장됨
* 뷰조회시 딕셔너리에 저장되어있는 view의 sql문장을이용하여 table access함
* 뷰와관린된 딕셔너리 : user_views
  뷰를 생성할 때 사용하는 옵션      

ex> 생성,수정시
CREATE OR REPLACE VIEW V_EMP AS
        SELECT EMPNO, ENAME, HIREDATE, DEPTNO, FROM EMP;   

SELECT * FROM V_EMP;
emp테이블 전체를 보는 것이 아닌 뷰테이블의 설정값만 보여짐
실질적 의미는 ..
 >>>>      select * from (select empno,ename,hiredate,deptno from emp)와 같음

EX> 삭제시 :
DROP VIEW V_EMP;



*조인값도 가능함
ex> create view vemp
       as
       select e.empno,e.ename, d.dname
       from emp e,dept d
       where e.deptno=d.deptno

예제> 45번 부서 사원의 사번과 성을 볼수있는 뷰를 생성...
>create view empvi45
  as
  select id,last_name
  from s_emp
  where dept_id=45;
 
>>> select * from empvi45;






# 인덱스
-->테이블의 값을 빠르게 액세스 하기 위해 만드는 데이터 베이스 객체이다
     마치 책의 목차  와 도 같은 의미
   * primary key(pk)생성시 자동으로 index가 생성되며 자동으로 생성되는
        index의 이름은 앞이 SYS_ <<< 가 들어간다

    *인덱스생성
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
CREATE INDEX EMP_NAME_IDX ON EMP(NAME);

컬럼조합한 INDEX도 가능!
CREATE INDEX 인덱스명 ON 테이블명(컬럼1, 컬럼2);
CREATE INDEX EMP_NAME_AGE_IDX ON EMP(NAME, AGE);

    * UNIQUE 인덱스 생성
CREATE UNIQUE INDEX 인덱스명 ON 테이블명(컬럼명) 
반드시 컬럼은 중복된값이 들어가면안된다( 고유한값을 가지는 ID같은거로해야함 )

                    
    *인덱스 삭제
        ( 수정불가능하며 삭제후 다시만들어야함 )
DROP INDEX 인덱스명





# 트리거
    제약조건같은거? A테이블변경시 B, C테이블도 변경되어야할경우...
    테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미
    남용될경우 시스템에 심각한문제되서 사용안한지 오래됨..
    트리거 들어가면 해당 ROW는 건BY건으로 흘러가서 매우느림
    폭탄같은존재
    트리거는 가급적 사용안하고 트랜잭션으로 묶어서 순차적으로 업데이트하는걸 추천
     



#사용자와 권한
사용자 - 오라클 서버에 접속하여 데이터베이스를 사용할 수 있는 인증된객체
              사용자 생성후 적절한 권한을 부여해야 오라클 서버에 접속하거나
              테이블 생성이 가능하다
권한  -  시스템 권한, 객체권한

사용자(USER) 만들기
CREATE USER 사용자명 IDENTIFIED BY 패스워드 DEFAULT TABLESPACE 테이블스페이스명;
혹은
CREATE USER 사용자명 IDENTIFIED BY 패스워드;

권한부여
GRANT CREATE SESSION TO 사용자명    :    DB접속할수 있게함
GRANT CREATE TABLE TO 사용자명    :    테이블 생성할수 있게함
GRANT CREATE SEQUENCE TO 사용자명    :    시퀀스생성할수 있게함
GRANT CREATE VIEW TO 사용자명    :   VIEW생성할수 있게함

여러개가능
GRANT CREATE SESSION,TABLE, VIEW TO 사용자명 

사용자 암호변경
ALTER USER 사용자 IDENTIFIED BY 암호



# 롤(role)
        ->사용자에게 허가할수 있는 관련되 권한들의 그룹
             여러계층의 사용자들에게 권한 부여와 회수가 용이
        -->먼저 롤을 생성하고 관련 권한들을 롤에 부여하고
             필요한 사용자에게 롤을 부여함

롤생성
CREATE ROLE 롤명;

롤에게 권한부여
GRANT CREATE TABLE,VIEW TO TO 롤명;    ---- 위 사용자에게 권한부여하듯이 [사용자명=>롤명] 만 바뀜

사용자에게 위 롤을 부여
GRANT 롤명 TO 사용자명;        -----( CREATE없음! 잘보길 )

객체권한부여
GRANT SELECT, INSERT, UPDATE ON 객체명 TO 사용자명;
GRANT SELECT, INSERT, UPDATE ON EMP TO SCOTT;

객체권한 회수
REVOKE SELECT,INSERT,UPDATE ON 객체명 FROM 사용자명;


    







'DB > 오라클' 카테고리의 다른 글

오라클 분석함수  (0) 2019.04.05
오라클 구조  (0) 2019.04.03
오라클 시퀀스(sequence)  (0) 2019.04.03
오라클 트랜잭션  (0) 2019.04.03
오라클 집합 연산자( union, intersect, minus )  (0) 2019.04.03