DBMS_ROWID.ROWID_BLOCK_NUMBER,ROWID_RELATIVE_FNO 패키지함수를 이용하여 테이블이 몇개의 블록을 사용중인지 확인하는 방법
테이블이 몇개의 블록을 사용중인지 확인하는 방법인하는 방법각각의 테이블의 행(로우, ROW)은 의사 컬럼인 rowid를 가지고 있습니다. 이 rowid에는 그 Rows의 물리적인 위치정보를 포함하고 있는데 파일번호, 블록번호, 블록내 행 번호와 같은 정보를 포함하고 있습니다.
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
하나의 데이터파일을 가지는 테이블스페이스에 테이블 데이터가 저장 되면 이 테이블의
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홍길동
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
댓글 없음:
댓글 쓰기