ROWID 데이터 타입

 

*사용 예

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

 

 

 

[참조] Pseudo-column

 

*참조만 될 뿐 데이터베이스에 따로 저장되지 않음

 

*Oracle의 Pseudo-column은 테이블의 실제적인 컬럼은 아니므로 테이블의 describe을 통해서는 보이지 않지만 매우 유용하게 사용

-CURRVAL, NEXTVAL(sequence number generator)

-LEVEL(for hierarchical queries)

-ROWNUM(a row's relative number)

 

 

 

[참조] Oracle ROWID의 변화

 

*ROWID는 단지 Transaction의 길이 동안만 Consistence의 유지가 보장

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

 

*Multi-user 환경에서 예상되는 문제점

-다른 user가 현재 특정 user가 사용하고 있는 ROWID를 invalidata하게 하는 UPDATE나 INSERT, DELETE 작업을 수행할 수도 있음

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

 

 

 

[참조] Oracle ROWID(1/2)

 

 

[참조] Oracle ROWID(2/2)

 
*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임
-참조만 가능하며 데이타베이스에 값이 저장되지 않음

 

 

 

[참조] Oracle ROWID(1/2)

 

*Oracle 테이블의 모든 Row는 ROWID라고 하는 물리적인 Address로 assign

-Non-clustered table에 대해서는 이러한 address는 유일

*내부적으로 ROWID는 binary 값을 가짐

*외부적으로 Display 될때에는 VARCHAR2 type의 column에 저장된 3 part의 hexdecimal string으로 표현(Oracle 7)

-첫번째 부분(position 1 through 8) : block ID

-두번째 부분(position 10 through 13) : block 내부에서 row의 sepuence number

-세번째 부분(position 15 through 18) : data file ID를 나타낸다.

 

 

 

 

 

 

ROWID 데이터 타입

 

*형식

-데이터 객체 번호(data object number)

。데이터 객체 생성 시 할당(32bit)

-상대적 파일 번호(relative file number)

。데이터가 저장되는 물리적인 데이터 파일 번호(10bit)

-블록 번호(block number)

。데이터 파일내에서 행을 포함하는 블록 위치(22bit)

-행 번호(row number)

。블록 해더내에서 행 디렉토리 슬롯의 위치(16bit)

 

 

 

 

 

ROWID 데이터 타입

 

 

+ Recent posts