Laboratory/MSSQL

[mssql] DBCC (DataBase Consistency Checker)

theking 2008. 1. 29. 20:00

from :http://sqler.pe.kr/sqllec/lec102.asp

 

DBCC (DataBase Consistency Checker)

데이타베이스의 일관성에 문제가 있는지 없는지를 점검한다.

        - 데이터베이스를 백업하기 전에는 반드시 문제가 있는지를 점검해야 한다.

 

DBCC는 많은 명령어로 구성되어 있다.

        - DBCC CHECKCATALOG

        - DBCC NEWALLOC

        - DBCC CHECKDB

 

 

DBCC NEWALLOC

데이타베이스의 할당 페이지가 정상적인지를 점검한다.

SQL 서버에서는 어떤 extent와 어떤 페이지가 어떻게 사용되고 있다는 정보가 모든 할당 단위의 첫 페이지에 항상 기록되어 있다.

        - 할당 단위(allocation unit) = 32extents = 256페이지

 

 

DBCC CHECKDB

DBCC CHECKTABLE을 데이터베이스 전체에 대해 실행한다.

DBCC CHECKTABLE

        - 데이터와 인덱스가 올바른 관계에 있는지를 점검한다.

        - 데이터 페이지들이 서로 올바른 관계로 링크되어 있는지를 점검한다.

 

 

--------------------------------------------------------------------------------------

from :http://cespc1.kumoh.ac.kr/~ygkim/sql/SQL16.ppt

4. DataBase Consistency Checker 

  - 데이터베이스 일치성 검사기(DataBase Consistency Checker)

    데이터베이스 관리자가 데이터베이스의 논리적/물리적 일치성,
    메모리 사용, 성능 통계치에 대한 정보를 얻고, 이들을 관리할 수 있는
    기능을 제공 함.

    DBCC는 각 객체에 대해서 수행되는 명령으로
    객체의 소유자(Object Owner)나
    데이터베이스 소유자(DataBase Owner) 혹은 시스템 관리자에
    의해서 실행 됨.

    DBCC는 검사작업 동안에 발견되는 오류를 수정 가능.
    백업을 할 수 없는 상황에서 유용함.
   
  - 백업에 대한 데이터 보존이 데이터베이스 일관성 유지에 더 확실
    하다고 인식하기 때문에 잘 사용 안됨.

- 기본적인 DBCC명령문은

    DBCC  command ( parameter1, parameter2, … )
   
  - 다음은 DBCC에서 지원하는 보다 상세한 사용법임.

    DBCC
      { CHECKTABLE(table_name) |
                 CHECKDB [(database_name)] |
         CHECKALLOC [(database_name)] |
         CHECKCATALOG [(database_name)] |
         ……
         DBCC SHOW_STATISTICS ( table_name,
                           target_object_name ) |
         SQLPERF( LOGSPACE ) | dllname(FREE) }


- 앞에서와 같이 DBCC에는 여러 개의 명령어가 있는데 주로
    사용되는 몇 가지 명령어들은

 

    DBCC  CHECKTABLE
       테이블에 저장된 데이터 페이지들간의 관계가 올바른 상태로 유지
       되고 있는가를 점검.

       테이블 내에 인덱스가 존재하면 데이터 페이지와 인덱스 페이지가
       정상적으로 연결되어 있는지를 점검.

       CHECKTABLE 명령은 데이터가 자주 갱신되는 테이블을 조사하는데
       유용함. 


  - DBCC CHECKDB
     DBCC CHECKTABLE 명령을 일괄적으로 처리하는 것으로,
     해당 데이터베이스에 대해서 DBCC CHECKTABLE명령어를 수행함.

  - DBCC CHECKDB
     명시된 데이터베이스에 대한 모든 페이지 사용과 할당을 체크 함.

  - DBCC CHECKCATALOG
     시스템 테이블(카탈로그)간의 관계가 정상적인 상태인지를 점검.
     sysobjects에 존재하는 테이블이라면 syscolumn에도 그 테이블의
     정보가 있어야 함,
     그 테이블에 인덱스가 존재한다면 sysindexes에도 그 테이블에
     대한 정보가 있어야 정상임.

 

 

 - 페이지의 크기

    SQL서버에서 사용하는 데이터 최소 할당 단위인 1페이지(Pages)의
    크기는 8K(8192 Byte)로 이런 페이지가 연속적으로 8개 모여서
    하나의 익스텐트(Extent)를 형성 함.

    1익스텐트 = 8페이지

    1개의 익스텐트의 크기는 64K( 8K*8= 64K )가 됨.
   
    다음은 각 할당 단위와 개체와의 관계를 나타냄.

    1rows : 한 개 이상의 페이지 필요.
    개체 : 테이블이나 인덱스는 한 개의 익스텐트가 필요.

 

- DBCC PINTABLE 

    특정 테이블에 대해서 고정 테이블을 만들고자 할 때 사용하는 명령어.

    인덱스와 함께 어떤 테이블을 데이터 캐시에 고정시키기 위해서 사용.
    데이터 캐시에 고정된 테이블에 연결된 페이지들은 데이터 캐시에서
    사라지지 않음.

    데이터 캐시에서 강제로 삭제시키기 위해서는 SQL서버 서비스를
    정시시키거나 DBCC UNPINTABLE 명령을 실행시키면 됨.

    sp_tableoption 스토어드 프로시저를 통해서도 테이블을
       pinned/unpinned 시킬 수 있음.


- Pinning 테이블  

    데이터 캐시에 고정된 테이블을 지칭함.
    가장 간단하게 피닝된(Pinned) 테이블을 메모리에 옮기는 방법은 
    select count(*) from <테이블 명>


  - DBCC UPDAEUSAGE

    테이블이나 인덱스가 커지거나 작아짐에 따라서 혹은 인덱스가 추가
    되거나 삭제되는 과정에서 잘못된 정보가 발생하는 경우,

    이때 DBCC UPDATEUSAGE를 사용하여 부정확한 정보를 올바르게
    수정 가능.

    주로 객체들에 사용되는 저장 공간을 정확히 계산하기 전에 사용됨.

    DBCC에 비해서 제한적이기는 하나 sp_spaceused 스토어드
    프로시저도 유사한 기능을 제공함.

 

  - DBCC SHOW_STATISTICS( table_name, target_object_name )
    명시된 테이블에 대한 오브젝트(인덱스 등) 통계치를 보여 줌.

 

- DBCC SQLPERF(logspace)
    데이터베이스에 트랜잭션 로그를 저장하는데 사용하였던 공간을
    되찾는데 사용 됨.

--------------------------------------------------------------------------------------