WorkaHolic

데이터베이스 조각 정리하는 SQL 스크립트 전체공개

2008. 12. 17. 23:05
반응형

출처 : 블로그

원문 : 그는 무슨생각을 하는가?

 

오랜 기간 동안 데이터베이스를 정리하지 않았다면 insert, update, delete 등의 명령 실행으로 인해 데이터와 인덱스 페이지가 상당 부분 조각 조각나 있을 것이다. 이 SQL 스크립트는 데이터베이스 조각 정리를 도와준다.

SQL 스크립트 소스는 다음과 같다.

 

--Re-indexes the specified database
CREATE PROCEDURE usp_DefragDatabase
-- We don't use sysname because it might not be long enough.  
-- sysname is 128 chars, so we use double that.
@dbname nvarchar(256)
AS
BEGIN   
    -- Quote the database name with brackets
    DECLARE @quoteddbname nvarchar(256)
    set @quoteddbname = quotename( @dbname )
 
    -- The outer EXEC is so we can do USE, not allowed in stored procs
    -- The inner EXEC does the actual reindex on each table in the
    -- specified database
    
    EXEC('
    USE '+ @quoteddbname +'
    DECLARE @sTableName sysname
    DECLARE PKMS_Tables CURSOR LOCAL FOR
        select table_name from information_schema.tables
        where table_type = ''base table'' order by 1
    OPEN PKMS_Tables
    FETCH NEXT FROM PKMS_Tables INTO @sTableName
 
    WHILE @@FETCH_STATUS = 0
    BEGIN
    select @sTablename = quotename(@sTablename, ''[]'')
        EXEC('' DBCC DBREINDEX ( ''+@sTableName+'') WITH NO_INFOMSGS'')
        FETCH NEXT FROM PKMS_Tables INTO @sTableName
    END
    CLOSE PKMS_Tables')
END
GO


반응형