Oracle DB DCL, view

강정우·2022년 7월 12일
0

DB

목록 보기
25/30
post-thumbnail

DCL

  • DB의 객체
  1. table : 기본 저장 단위이며 행과열로 구성됩니다.
  2. 뷰 : 논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냅니다.
  3. sequence : 기본 키 값을 생성합니다.
  4. index : 질의의 성능을 향상시킴.(튜닝영역)

1. 뷰

  1. data의 access를 제한하기 위해
  2. 복잡한 질의를 쉽게 작성하기 위해
  3. 데이터 독립성을 제공하기 위해
  4. 동일한 데이터로부터 다양한 결과를 얻기위해
  • 단순 뷰는 원본 그대로, 복합 뷰는 가공된(sal*12)셀 이런거
  • 뷰의 또 다른 특징으로는 뷰는 자체로 가상의 table을 만들 수 있는데 이때, 가상의 table의 컬럼들은 alias로 지정된다.
  • 1) 개념

  • 테이블은 저장공간을 할당 => 물리적으로 저장, data dictionary에 저장한다. 그리고 실제 data는 별도의 저장공간에 저장한다.
  • 뷰는 논리 | 가짜 테이블이라고도 하며 물리적구조가 존재하지 않는다.
  • data dictionary만 쓰며 select절의 쿼리 자체를 저장하며 불러올 때마다 그것을 실행한다. 따라서 data가 항상 최신으로 보여진다.
  • 수정은 create or replace view 절에서 사용하며 거의 default 값처럼 쓴다.
create or replace view 뷰이름( column 들)
as select (위줄에 명시된 column들)
from 테이블 이름
where 조건;

2) 복합 뷰

  • 뷰의 join
  • 단순 뷰를 통해 DML 작업을 수행할 수 있습니다.(복합 뷰는 불가.)
  • 뷰 제거
    뷰는 앞서 말 했듯 가상의 table이므로 select 절 처럼 실제 DB에 영향을 끼치진 않으므로 편하게 제거해도 된다. (Drop 절로 삭제)

    3) 인라인 뷰

  • 현업에서 활용도가 가장 높음.
  • SQL문에서 사용 가능한 alias를 이용한 서브 퀄리이다.
  • 가본 질의의 from절에 있는 명명된 서브 쿼리는 인라인 뷰의 예이다.

    4) Top-N 분석

  • 문제풀이 참조

DB의 객체

  • sequence : 기본 키 값을 생성합니다.
  • index : 질의의 성능을 향상시킴.(튜닝영역)

1. sequence

  1. 고유번호를 자동으로 생성
  2. 공유 가능한 객체
  3. 일반적으로 기본 키 값을 생성하는데 사용
  4. 응용 프로그램 코드 대체
  5. 시퀀스 값을 메모리에 캐시하면 액세스 효율이 높아짐
  6. 날짜, 문자열은 안 되고 오직 숫자만 됨.

    1) 시퀀스 생성

create sequence 테이블이름_컬럼이릅_seq
increment by 00		// 시작 숫자로부터 몇 씩 증가시킬건지
start with 00	// 테이블에 들어갈 시작 숫자
maxvalue 00		// 최대 숫자
nocache		// 캐시 메모리에 저장할 것인지
nocycle;	// maxvalue를 찍는다면 다시 시작할 것인지
  • 캐시 설정을 한다면 해당 값을 더 빠르게 접근 할 수 있다.

    2) nextval 및 currval 의사열

  • naxtval은 사용 가능한 다음 시퀀스 값을 반환하며, 참조될 대마다 고유한 값을 반환한다.
  • currval은 현재 시퀀스 값을 반환한다.
  • currval이 값을 포함하려면 먼저 해당 시퀀스에 대해 nextval이 실행되어야한다.
  • 그리고 또한 위 사진처럼 한 번 지나간 번호는 cycle이 yes이지 않는 이상 무조껀 다시 반환하지 않는다.
    이것을 gap이라고 하는데 롤백이 발생한 경우, 시스템이 고장난 경우, 시퀀스가 다른 테이블에서 사용된 경우 전부 숫자의 gap이 발생한다.

    3) 시퀀스 수정

  • 수정은 생성값에서 startwith만 빼면 된다 왜냐하면 이미 생성된 값을 다시 돌이킬 수 없기 때문이다.
  • 시퀀스의 소유자이거나, 시퀀스에 대한 alter권한이 있어야한다.
  • 이후 시퀀스 번호에만 영향을 준다.
  • 시퀀스를 다른 번호로 다시 startwith를 하려면 삭제하고 처음부터 다시 해야한다.
  • 일부 검증이 수행된다.

    4) 시퀀스 제거

  • 마찬가지로 drop문을 이용하여 제거하여 data dictionary에서 삭제된다.

2. Index

1) 생성방법

  • 자동 : 테이블 정의에 pk또는 uk제약 조건을 정희하면 고유 인덱스가 자동으로 생성됩니다.
  • 수동 : 사용자가 열에 고유하지 않은 인덱스를 생성하여 행에 대한 엑세스 시간을 줄일 수 있습니다.
create index 테이블이름_컬럼이블_idx
on 테이블이름(컬럼이름)
  • 필요한 경우
    1.열에 광범위한 값이 포함된 경우
    2.열에 null값이 많이 포함된 경우
    3.where절 또는 join조건에서 하나 이상의 열이 함께 자주 사용되는 경우
  1. 큰 table에서 대부분의 질의에 의해 검색되는 행이 2~4%미만인 경우
  • 필요하지 않은 경우
    1.table이 작은 경우
    2.열의 질의 조건으로 자주 사용되지 않은 경우
    3.대부분의 질의가 table에 있는 행의 2~4% 이상을 검색할 경우
    4.table이 자주 갱신되는 경우

    2) 제거

  • 역시 drop함수로 제거함

    사용자 액세스 제어

  • 보안 -> 권한 DCL

  • 사용자 시스템 권한

create session
create table
create sequence
create view
create procedure
  • 시스템 권한 부여
    grat 절로 부여하며 뒤에 시스템 권한 5가지 중 필요한 것을 뽑아서 부여 후 to 절로 특정 사람일 지정한다.

1) roll이란?

// 롤 생성
create role 롤 이름

// 롤에 권한 부여
grant create table, create view
to manager

// 사용자에게 룰 부여
grant manager 
to 사람이름

2) 암호 변경

  • DBA는 사용자 계정을 생성하고 암호를 초기화 할 수 있다.
  • alter user문을 사용하여 암호변경도 가능하다.
alter user 이름
identified by 비번;

3) 객체 권한

grant 객체권한
on 테이블이름
to 사람이름;

grant 객체권한(특정 컬럼)
on 테이블이름
to 사람이름, 사람이름;
  • 취소(revoke)
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글