개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

* DUAL테이블은 데이터 딕셔너리와 함께 Oracle에 의해 자동으로 생성되는 테이블 입니다.

 

- DUAL테이블은 사용자 SYS의 스키마에 있지만 모든 사용자는

DUAL이라는 이름으로 엑세스 할 수 있습니다.

- DUAL테이블은 VARCHAR2(1)으로 정의된 DUMMY라는 하나의 열이 있으며

값을 가지는 하나의 행도 포함되어 있습니다.

- DUAL테이블은 사용자가 계산이나 사용자 함수등을 실행하고자 할 경우에 유용 합니다.

 

 

* ​아래와 같은 명령을 실제로 사용하는 개발자(또는 DBA)의 수가 얼마나 될 것이라 생각하십니까?

select USER into <some variable> from DUAL

아마 거의 모든 이들이 사용하고 있을 것입니다. DUAL은 호출될 때마다 새로운 논리적 I/O(Buffer I/O)를 생성합니다. 이 기능은 매우 유용하게 활용됩니다.
DUAL은 <somevariable> := USER와 같은 구문만큼이나 자주 사용되고 있습니다.
하지만 오라클 코드는 DUAL을 특수한 형태의 테이블로서 취급하며,

따라서 일반적인 튜닝 방법은 적용할 수 없다는 문제가 있습니다.

 

Oracle Database 10g에서라면 이에 관련한 걱정은 할 필요가 없습니다.
DUAL이 특수한 테이블이기 때문에, 논리적 I/O를 나타내는 consistent gets의 값도 줄어들며, event 10046 trace에서 확인할 수 있는 것처럼 optimization plan도 다른 형태로 나타납니다.

Oracle 9i에서 사용되는 DUAL의 FULL TABLE SCAN 대신,
10g에서는 FAST DUAL optimization plan을 사용하고 있다는 점을 주목하시기 바랍니다. 이러한 기능 개선을 통해 DUAL 테이블을 자주 사용하는 애플리케이션의 연속적인 읽기 작업 성능이 대폭적으로 향상되었습니다. ​

 

 

 

 

 

 

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개요

DATE 타입의 확장된 형태로서 백만분의 일초 단위까지 표현 가능
milli second 의 기본 값은 6자리, 최대 9자리까지 사용 가능

 

종류


TIMESTAMP WITH TIME ZONE
TIMESTAMP 데이터 타입에 지역 시간대(time zone)를 함께 저장
지역 시간대는 세계 표준시간대(universal time)의 표준 시간을 기준으로 현 지역 시간대를 환산한 것
TIMESTAMP WITH LOCAL TIME ZONE
사용자 데이터베이스의 지역 시간대를 따름
지역 시간대를 다른 곳으로 옮겨도 TIME ZONE 를 변경할 필요는 없음

 

 

 

사용 예
- TIMESTAMP 데이터 타입을 포함한 테이블을 생성하고

데이터를 입력하여라

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

 

 

Rownum은 1로 시작해야 작동하는 제한사항이 있다.

ROWNUM은 1로 시작하지 않으면 원하는 결과를 뽑지 못한다.

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 * 사용 예
 - 학생 테이블에서 모든 ROWID와 학번을 출력하여라

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

* 참조만 될 뿐 데이터베이스에 따로 저장되지 않음
* Oracle의 Pseudo-column은 테이블의 실제적인 컬럼은 아니므로 테이블의 describe을 통해서는 보이지 않지만 매우 유용하게 사용
- CURRVAL, NEXTVAL ( sequence number generator )
- LEVEL ( for hierarchical queries )
- ROWNUM ( a row's relative number ) 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

* ROWID는 단지 Transaction의 길이 동안만

Consistence의 유지가 보장
- User 프로그램 내부에 하나 이상의 Transaction이 존재한다면, ROWID가 변화할 수도 있음


* Multi-user 환경에서 예상되는 문제점
- 다른 user가 현재 특정 user가 사용하고 있는 ROWID를 invalidate 하게 하는

UPDATE나 INSERT, DELETE 작업을 수행할 수도 있음
- INSERT나 length를 줄이는 UPDATE 작업 등에서 내부적으로 자동으로 ROWID를 변경할 수 있음 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

Oracle 테이블의 모든 Row는 ROWID라고 하는 물리적인 Address로 assign
- Non-clustered table 에 대해서는 이러한 address는 유일
* 내부적으로 ROWID는 binary 값을 가짐
* 외부적으로 Display 될때 에는 VARCHAR2 type의 column에 저장된 3 part의 hexdecimal string으로 표현 (Oralce 7)

- 첫번째 부분( position 1 through 8 ) : block ID
- 두번째 부분( position 10 through 13 ) : block 내부에서 row의 sequence number
- 세번째 부분( position 15 through 18) : data file ID를 나타낸다.

 

 

 

* Oracle 8에서 Object와 Partition의 개념이 도입되면서 Database의 Segment를 식별하기 위한 Data Object Number가 추가 -> A four-piece FORMAT
- 지수가 64인 Encoding 형태로 사용
- 18문자 넓이를 가짐
* OOOOOOFFFBBBBBBRRR
- OOOOOO : Database Segment를 식별하기 위한 Data Object Number (오브젝트번호)
- FFF : Tablespace에 상대적인 Datafile Number (데이터파일번호)
- BBBBBB : Row를 포함하는 Data Block Number (블록번호)
- RRR : Block에서의 Row의 Slot (로우스롯번호)
* Rule-based optimizer에서 ROWID를 이용하여 데이터를 엑세스하는 것이 가장 상위로 랭크된 엑세스 방법이며 가장 빠른 방법
* Pseudo-column 임
- 참조만 가능하며 데이타베이스에 값이 저장되지 않음

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

개발자에게 배우는 개발자교육! 구로 오라클자바교육학원 www.oraclejava.co.kr

 

 

 

 

 

 

형식


- 데이터 객체 번호(data object number)
데이터 객체 생성 시 할당(32bit)
- 상대적 파일 번호(relative file number)
데이터가 저장되는 물리적인 데이터 파일 번호(10bit)
- 블록 번호( block number)
데이터 파일내에서 행을 포함하는 블록 위치(22bit)
- 행 번호(row number)
블록 헤더내에서 행 디렉토리 슬롯의 위치(16bit)

 

 

 

 

+ Recent posts