티스토리 뷰
select * from user_sequences;
조회시 나오는 정보들에 대한 설명 자료.
--------------------------------------------------------------------------
# updatable join view :: http://orapybubu.blog.me/40035845854
# view 에는 check 제약 한가지만 가능하며 with read only 도 가능
# view 를 생성하면 select 문 이하의 쿼리 자체가 저장이 되는 것이지
그 select 문의 결과가 저장되는게 아니다.
# 쿼리트랜스포메이션 입장에서 보면 view 는 이하 select 문으로 변형된다.
# view를 구성할 때 distinct 가 걸리면 insert 도 안되고 update 도 안되고, delete도 안된다.
때에 따라 단순히 컬럼값 +100 과 같은 컬럼에 대해서는 해당 컬럼을 제외하고 업데이트가 가능하다
다시말해, 원래 테이블에 조작을 가한 컬럼에 대해서 DML 이 안된다.
group function (DML 모두 불가능)
A group by (DML 모두 불가능)
Distinct (DML 모두 불가능)
RowNum (DML 모두 불가능)
sal + 100 (해당컬럼제외하고 부분적 update 가능)
# CONSTRAINT_TYPE
O :: Read only
V :: View의 constraint
P :: primary
C :: null , Check
R :: foreign
# sequence
유일한 값을 생성해주는 오라클 객체
기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성
보통 primary key 값을 생성하기 위해 사용
테이블과는 독립적으로 저장되고 생성되므로 하나의 sequence를 여러 테이블에서 사용가능
캐싱을 사용
SQL) select * from user_sequences; :: 에서 보이듯 CACHE_SIZE 20 은 미리 20 개 단위로 뽑아 놓는다는 말이다.
즉 21 번째는 20개를 다시 뽑는다. no chache 를 줌으로써 CACHE 를 안줄 수 도 있다.
다른 세션에서 시퀀스의 currval 을 확인하려면 한번이라도 nextVal 을 써야한다.
CYCLE 은 min~max 까지 반복하는 사이클 수 를 말한
# 시퀀스를 사용하면 값의 갭이 생길 수 있다.
# pseudocolumn :: 오라클에서 내부적으로 사용되는 컬럼
# Index :: Table 의 풀스캔을 대비해 효율적으로 사용하기 위함
테이블의 특성때문에 인덱스가 필요하다. (테이블에는 데이터가 무질서하게 들어가있다는 특성.)
이것을 극복하기 위해서 보통 hashing, partitioning, rowid 등을 사용한다,
cf)Rowid 의 구성 :: 6(object) 3(File) 6(Block) 3(Row) , 64진법
rowid 를 사용하면 금방 검색할 수 있다.
결정적 문제는 유저가 rowid 를 외우기 쉽지 않다, 따라서 index 사용
'index 는 rowid 를 전문적으로 관리하는 객체이다'
결론적으로 index 가 있으면 테이블내에 index 일부만 읽어서 가져오기 때문에 속도가 증가한다.
테이블에서 아주 조금(1~2%) 꺼낼때에만 Index 를 사용하도록 하자.
cf) Single block IO :: Index Scan (Parallel 불가능)
Multi block IO :: Table Full Scan (Parallel 가능 : 병렬처리)
인덱스의 단점 :: 검색속도 저하(테이블 족족 만든다면), 스토리지 소비, DML속도저하(Insert/update 시 같은 인덱스도 처리)
인덱스의 장점 :: 검색속도 향상(잘만든다면), Pk/Uk 강화, Fk:lock 관련 상황해결
# 데이터가 들어있는 row 들만 index entry 를 갖는다.
인덱스가 걸린 컬럼의 가공은 인덱스가 안탄다.
즉, select * from emp where sal*12 >=3600; -> select * from emp where sal>=3600/12; 로...
# Synonym
table, view 나 sequence 등 에 대해서 만들수 있다.
CREATE PUBLIC SYNONYM ~ 하면 모두가 사용할 수 있는 객체를 생성한다.
# Internal Table :: 오라클 고유의 Table 로서 'sys' 유저에게 있다.
obj$, tab$, user$ 따위.. 이러한 것은 일반 유저가 view 를 통해 볼수만 있다. 이것을 Data Dictionary
라고 한다. 일종의 메타데이터 이다. 정식명칭은 Static Data Dictionary View
메뉴얼 말고도 간단히 select * from dict; 하면 볼 수 있다.
---------------------------------------------------------------------------
1.sequences
-INCREMENT BY :증가값 ex) 값을 5로 줬으면 1 6 11 16......
-START WITH :시작값 (디폴트는 1)
-MAXVALUE :최대값
-MINVALUE :최소값
-cycle : ex)최소1최대100을 줬을때 100이 되면 다시 1로 돌아간다
-cache :(디폴트값은 20) 케쉬를 큰값을 놓고 사용하는것을 권장한다
사원번호 제품번호 등등...
일련번호가 계속 나온다
공용가능한 객체
pk에 많이 사용한다
drop view empv1;
drop view empv2;
drop view empv3;
drop view empv4;
drop table emp purge;
select * from tab;
select SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from user_sequences;
기존에 만들어져 있는 시퀀스
create sequence s1;
create sequence s2
nocache;
create sequence s3
cache 1000;
select SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from user_sequences;
시퀀스가 생성된다
2.**currval, nextval**
currval 는 조회할때만 사용하는것이 좋다
select SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from user_sequences;
drop table test purge;
create table test (id number);
select s1.currval from dual; (x)
insert into test values(s1.nextval);
insert into test values(s1.nextval);
select * from test;
select s1.currval from dual;
select SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from user_sequences; s1을 보면 케쉬를 섰을때 모른다 노케쉬를 쓰면 알수있다
rollback;
insert into test values(s1.nextval);
select * from test;
rollback;
insert into test values(s2.nextval);
insert into test values(s2.nextval);
select * from test;
select SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from user_sequences;
insert into test values(s3.nextval);
select SEQUENCE_NAME, CACHE_SIZE, LAST_NUMBER from user_sequences;
3.시퀀스 변경
보통 max값을 많이 바꾼다
보통 권한있는자 DBA가 바꾼다
ALTER SEQUENCE s1 INCREMENT BY 100;
insert into test values(s1.nextval);
select * from test;
ALTER SEQUENCE s1 maxvalue 50; 안된다
'program' 카테고리의 다른 글
[오라클] GRANT , 오라클 권한 부여의 모든 것 (0) | 2014.10.27 |
---|---|
ORA-08002: sequence is not yet defined in this session. (0) | 2014.10.24 |
Spring source 배포 및 Tomcat Server 셋팅 (0) | 2014.10.22 |
[25] EL(Expression Language)과 JSTL(JSP Standard Tag Library) (0) | 2014.09.04 |
[34] JSTL core : 변수 설정 태그 <c:set> <c:remove> (0) | 2014.09.04 |