2013년 10월 15일 화요일

테이블이 몇개의 블록을 사용중인지 확인하는 방법 각각의 테이블의 행(로우, ROW)은 의사 컬럼인 rowid를 가지고 있습니다.

테이블이 몇개의 블록을 사용중인지 확인하는 방법

각각의 테이블의 행(로우, ROW)은 의사 컬럼인 rowid를 가지고 있습니다 rowid에는 그 Rows의 물리적인 위치정보를 포함하고 있는데 파일번호블록번호블록내 행 번호와 같은 정보를 포함하고 있습니다.

하나의 데이터파일을 가지는 테이블스페이스에 테이블 데이터가 저장 되면 이 테이블의
ROWID는 유일한 블록번호(즉 하나의 테이블의 행들이 같은 블록 번호를 중복해서 가지지않는다는 의미)를 가지는 반면에 둘 이상의 데이터파일로 구성되는 테이블스페이스인 경우에 테이블에 데이터가 저장 되면 동일한 블록번호(서로 다른 파일에 각각의 블록 번호가 부여 되므로)를 가질 수 있습니다이러한 경우엔 블록번호와 파일번호 두 개의 항목을 조합하여 ROWID로부터 유일한 번호를 얻어 낼 수 있습니다.
 
즉 테이블이 몇 개의 블록으로 구성 되어 있는지는 이러한 점을 이용하여 구하면 되는데DBMS_ROWID라는 패키지를 이용하여 rowid에서 특정 값(파일번호블록번호등)을 얻어 낼 수 있습니다.
 
Rowid를 조회 하면 다음과 같습니다.
 
SQL> select rowid, jumin, name from addrbook;
rowed                            JUMIN      NAME
------------------ -------------- ------------
AAAJMZAABAAAPEKAAA 111111-2222222    
:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />홍길동

AAAJMZAABAAAPEKAAB 333333-4444444    
가길동
AAAJMZAABAAAPEKAAC 111111-2222222    
홍길동
 
다음과 같이 유일한 블록의 개수(테이블이 몇 개의 블록으로 구성되어 있는지)를 카운팅 할 수 있습니다.
 
SQL> SELECT COUNT ( DISTINCT
  2           DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)
  3           ||
  4           DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)
  5         ) "Used"
  6  FROM scott.emp;
 
      Used
----------
         2
 
 
또는 다음과 같은 방법도 가능 합니다.
 
SQL> SELECT COUNT (DISTINCT SUBSTR(rowid,1,15)) "Used"
  2  FROM scott.emp;
 
      Used
----------
         2

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


댓글 없음:

댓글 쓰기