2016. 1. 19. 13:17

DBCC SHRINKFILE(Transact-SQL)

적용 대상: SQL Server(SQL Server 2008)


DBCC SHRINKFILE은 현재 데이터베이스의 파일에만 적용됩니다. 현재 데이터베이스를 변경하는 방법은 USE(Transact-SQL)를 참조하십시오.

DBCC SHRINKFILE 작업은 진행 도중에 언제든지 중지될 수 있으며 완료된 작업은 모두 그대로 보존됩니다.

DBCC SHRINKFILE 작업이 실패하면 오류가 발생합니다.

축소할 데이터베이스는 단일 사용자 모드가 아니어도 됩니다. 즉, 다른 사용자가 데이터베이스에서 작업 중이라도 파일을 축소할 수 있습니다. 시스템 데이터베이스를 축소하기 위해 SQL Server 인스턴스를 단일 사용자 모드에서 실행하지 않아도 됩니다.

1.데이터 파일을 지정한 대상 크기로 축소

다음 예에서는 UserDB 사용자 데이터베이스에 있는 DataFile1이라는 데이터 파일의 크기를 7MB로 축소합니다.

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO

2.로그 파일을 지정한 대상 크기로 축소

다음 예에서는 AdventureWorks 데이터베이스에 있는 로그 파일을 1MB로 축소합니다. DBCC SHRINKFILE 명령이 파일을 축소할 수 있도록 먼저 데이터베이스 복구 모델을 SIMPLE로 설정하여 파일을 자릅니다.

USE AdventureWorks2012;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2012
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2012_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL;
GO

3.데이터 파일 자름

다음 예에서는 AdventureWorks 데이터베이스의 주 데이터 파일을 자릅니다. sys.database_files 카탈로그 뷰를 쿼리하여 데이터 파일의 file_id를 가져옵니다.

USE AdventureWorks2012;
GO
SELECT file_id, name
FROM sys.database_files;
GO
DBCC SHRINKFILE (1, TRUNCATEONLY);

4.파일 비우기

다음 예에서는 데이터베이스에서 제거할 수 있도록 파일을 비우는 프로시저를 보여 줍니다. 이 예의 목적을 위해 데이터 파일이 먼저 생성되고 파일에 데이터가 있다고 가정합니다.

USE AdventureWorks2012;
GO
-- Create a data file and assume it contains data.
ALTER DATABASE AdventureWorks2012 
ADD FILE (
    NAME = Test1data,
    FILENAME = 'C:\t1data.ndf',
    SIZE = 5MB
    );
GO
-- Empty the data file.
DBCC SHRINKFILE (Test1data, EMPTYFILE);
GO
-- Remove the data file from the database.
ALTER DATABASE AdventureWorks2012
REMOVE FILE Test1data;
GO


Trackback 0 Comment 0