Oracle pseudo column(ROWID, ROWNUM, ORA_ROWSCN)

sjo200·2021년 10월 17일

RDBMS

목록 보기
4/4

Pseudo column

pseudo column이란, 테이블에 저장되지 않지만 쿼리를 통해 볼 수 있고 삽입, 삭제, 변경이 불가능한 칼럼을 말한다.
ROWID, ROWNUM, ORA_ROWSCN 외에도 여러가지가 있으므로, 참고 2번의 링크를 따라가서 보기를 바란다.

ROWID

  • rowid는 row마다 유일하게 존재하는 식별 id이며, 저장된 위치에 따라 정해지는 physical address 10bytes 값이다.
  • 어떤 object, 어느 datafile, 어디 block에 있는지를 나타내는 값이고(DB 구현 디테일에 따라 다를 수 있다.), pseudo column이라 저장되있지는 않다.
    • 어디에 저장되있는지를 나타내기 때문에, where 절에서 rowid를 지정해주면 하나의 row를 찾을 때 가장 빠르다.
  • 한 테이블 내에서 primary key 대신 유일한 식별자로 사용해도 좋다.
    • 다만, 값을 삭제하고 재입력했을 때 다른 rowid를 가지게 된다는 등의 특징을 명확하게 알고 사용해야 한다.
    • 또한, 한 database instance 안에서 유일하기 때문에, RAC와 같은 클러스터를 사용하면 유일하지 않을 수 있다.

ROWNUM

  • select 결과에서 몇 번째의 row인지 나타내는 칼럼이다.
  • SELECT * FROM employees WHERE ROWNUM < 5 ORDER BY name과 같이 사용하면, 제대로 정렬한 결과는 나오지 않는다.
    • where절이 order by절보다 먼저 실행되기 때문에, 알 수 없는 순서로 먼저 뽑힌 10개에서 정렬할 것이기 때문이다.
  • UPDATE my_table SET col = ROWNUM을 사용해서 각 row의 col에 유일한 랜덤 값을 넣어줄 수도 있다.

ORA_ROWSCN

  • row가 가장 최근에 수정되었을 때의 scn이다.
    • SCN_TO_TIMESTAMP()를 사용해서 언제 바뀐 것인지 추측할 수 있다.
    • flashback query(select .. as of timestamp 등)를 이용하면 바로 이전의 값을 쉽게 찾을 수 있다.

참고

  1. http://www.gurubee.net/lecture/2927
  2. https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns.htm
profile
데이터 엔지니어

0개의 댓글