본문 바로가기

work/mssql

데이터베이스를 축소하려면

DBCC SHRINKDATABASE

지정한 데이터베이스에서 데이터 파일의 크기를 축소합니다.

구문

DBCC SHRINKDATABASE
     ( database_name [ , target_percent ]
         [ , { NOTRUNCATE | TRUNCATEONLY } ]
    )

인수

database_name

축소할 데이터베이스의 이름입니다. 데이터베이스 이름은 식별자에 대한 규칙을 따라야 합니다. 자세한 내용은 식별자 사용을 참조하십시오. 

target_percent

데이터베이스를 축소한 후 데이터베이스에 남겨둘 여유 공간의 비율입니다.

NOTRUNCATE

해제된 파일 공간을 데이터베이스 파일에서 보유하도록 합니다. 이 옵션을 지정하지 않으면 해제된 파일 공간을 운영 체제에서 사용합니다.

TRUNCATEONLY

데이터 파일에서 사용되지 않는 공간을 운영 체제에 반환하고 마지막으로 할당된 익스텐트까지 파일을 축소하여 데이터를 이동하지 않고 파일 크기를 줄입니다. 할당되지 않은 페이지에 행을 재배치하려는 시도는 이루어지지 않습니다. TRUNCATEONLY를 사용하면 target_percent가 무시됩니다.

비고

Microsoft® SQL Server™에서는 다음을 축소할 수 있습니다.

  • 특정 데이터베이스의 모든 데이터 파일과 로그 파일을 축소하려면 DBCC SHRINKDATABASE를 실행합니다.

  • 특정 데이터베이스의 특정 데이터 파일과 로그 파일을 한 번에 하나씩 축소하려면 DBCC SHRINKFILE을 실행합니다.

DBCC SHRINKDATABASE는 파일 단위로 데이터 파일을 축소합니다. 그러나 DBCC SHRINKDATABASE는 모든 로그 파일이 연속된 하나의 로그 풀에 존재하는 것처럼 로그 파일을 축소합니다.

데이터 파일 두 개와 로그 파일 두 개가 포함된 mydb라는 데이터베이스를 가정해 봅니다. 데이터 파일과 로그 파일의 크기는 모두 10MB이고 첫 번째 데이터 파일에는 6MB의 데이터가 포함되어 있습니다.

SQL Server는 각 파일에 대해 축소할 대상 크기를 계산합니다. DBCC SHRINKDATABASE에 target_percent를 지정하면 SQL Server는 축소 후 파일에 target_percent 만큼의 여유 공간이 남도록 대상 크기를 계산합니다. 예를 들어, mydb 축소 시 target_percent를 25로 지정하면 SQL Server는 이 파일의 대상 크기를 8MB(6MB의 데이터 + 2MB의 여유 공간)로 계산합니다. 따라서 SQL Server는 데이터 파일의 마지막 2MB에서 데이터 파일의 처음 8MB에 포함된 여유 공간으로 데이터를 이동한 다음, 파일을 축소합니다.

mydb의 첫 번째 데이터 파일에 7MB의 데이터가 포함되어 있다고 가정합니다. target_percent를 30으로 지정하면 여유 공간이 30%만 남도록 파일이 축소됩니다. 그러나 target_percent를 40으로 지정하면 현재 데이터가 차지하는 용량보다 작은 크기로 파일을 축소할 수는 없으므로 데이터 파일이 축소되지 않습니다. 이 문제를 다른 방법으로 생각해 볼 수도 있습니다. 원하는 여유 공간 40% + 전체 데이터 파일 70%(10MB 중 7MB)는 100%보다 큽니다. 원하는 여유 공간의 비율과 현재 데이터 파일이 차지하는 비율을 합한 값이 100%를 넘으므로 target_size가 30보다 크면 데이터 파일이 축소되지 않습니다.

로그 파일의 경우, SQL Server는 target_percent를 사용하여 전체 로그의 대상 크기를 계산합니다. 따라서 target_percent는 축소 후 로그에 남겨질 여유 공간의 크기입니다. 그런 다음 전체 로그의 대상 크기가 각 로그 파일의 대상 크기로 변환됩니다. DBCC SHRINKDATABASE는 즉시 각 물리적 로그 파일을 대상 크기로 축소하려고 시도합니다. 가상 로그에 있는 논리 로그 중에서 로그 파일의 대상 크기 이후에 있는 부분이 없는 경우에는 파일이 성공적으로 잘리며 DBCC SHRINKDATABASE는 메시지를 표시하지 않고 완료됩니다. 그러나 가상 로그에 대상 크기 이후에 있는 논리 로그 부분이 있는 경우 SQL Server는 가능한 한 많은 공간을 확보하고 정보 메시지를 표시합니다. 이 메시지는 파일 끝의 가상 로그에서 논리 로그를 제거하기 위해 사용자가 수행해야 하는 작업을 알려 줍니다. 이 작업을 수행한 후에는 DBCC SHRINKDATABASE 명령을 다시 실행하여 나머지 공간을 해제할 수 있습니다. 트랜잭션 로그 축소에 대한 자세한 정보를 보려면 트랜잭션 로그 축소를 참조하십시오.

로그 파일은 가상 로그 파일 크기만큼만 축소할 수 있으므로 사용 중이 아닌 로그 파일이라도 가상 로그 파일의 크기보다 작게 축소할 수는 없습니다. 예를 들어, 로그 파일이 1GB인 데이터베이스는 로그 파일을 128MB까지만 축소할 수 있습니다. 잘라내기에 대한 자세한 내용은 트랜잭션 로그 잘라내기를 참조하십시오. 가상 로그 파일 크기를 확인하는 방법에 대해서는 가상 로그 파일을 참조하십시오.

DBCC SHRINKDATABASE에서 계산되는 데이터 파일과 로그 파일의 대상 크기는 파일의 최소 크기보다 작을 수 없습니다. 파일의 최소 크기란 파일을 처음 만들 때 지정된 크기나 MODIFY FILE 옵션이 있는 ALTER DATABASE, DBCC SHRINKFILE 등의 파일 크기 변경 작업에서 명시적으로 설정한 최종 크기입니다. 예를 들어, CREATE DATABASE를 실행할 당시 mydb의 모든 데이터 파일과 로그 파일의 크기가 10MB였다면 각 파일의 최소 크기는 10MB입니다. 이 경우 DBCC SHRINKDATABASE는 파일을 10MB보다 작게 축소할 수 없습니다. MODIFY FILE 옵션이 있는 ALTER DATABASE를 사용하여 이 중 한 파일의 크기를 20MB로 늘리면 해당 파일의 최소 크기는 20MB로 변경됩니다. 파일을 최소 크기보다 작게 축소하려면 DBCC SHRINKFILE을 사용하고 새 크기를 지정합니다. DBCC SHRINKFILE을 실행하면 파일의 최소 크기가 새로 지정된 크기로 변경됩니다.

데이터 파일을 사용할 경우 DBCC SHRINKDATABASE에는 NOTRUNCATE와 TRUNCATEONLY 옵션이 있지만, 로그 파일에 이러한 옵션을 지정하면 모두 무시됩니다. DBCC SHRINKDATABASE에 아무 옵션도 지정하지 않으면 NOTRUNCATE 옵션이 있는 DBCC SHRINKDATABASE 다음에 TRUNCATEONLY 옵션이 있는 DBCC SHRINKDATABASE를 실행하는 것과 같습니다.

NOTRUNCATE 옵션은 target_percent 지정 여부에 관계 없이 파일 끝에 있는 할당된 페이지를 파일 앞의 할당되지 않은 페이지로 이동하는 등 DBCC SHRINKDATABASE 의 실제 데이터 이동 작업을 수행합니다. 그러나 파일 끝에 남은 여유 공간을 운영 체제에 반환하지 않으므로 파일의 물리적 크기는 변경되지 않습니다. 따라서 NOTRUNCATE 옵션을 지정하면 데이터 파일이 축소되지 않은 것처럼 보입니다. 예를 들어, 데이터 파일 두 개와 로그 파일 두 개가 포함된 mydb 데이터베이스를 사용하는 것을 가정합니다. 두 번째 데이터 파일과 두 번째 로그 파일의 크기는 모두 10MB입니다. DBCC SHRINKDATABASE mydb NOTRUNCATE를 실행하면 Microsoft SQL Server는 데이터 파일의 뒷페이지에서 앞페이지로 데이터를 이동하지만 파일의 크기는 여전히 10MB입니다.

TRUNCATEONLY 옵션은 파일 끝에 남은 모든 여유 공간을 운영 체제에 반환합니다. 그러나 TRUNCATEONLY는 파일 내에서나 파일 간에 페이지를 이동하지 않고 마지막으로 할당된 익스텐트까지 해당 파일을 축소합니다. TRUNCATEONLY 옵션을 지정하면 target_percent는 무시됩니다.

데이터베이스는 model 데이터베이스보다 작은 크기로 축소할 수 없습니다.

축소할 데이터베이스는 단일 사용자 모드가 아니어도 됩니다. 즉, 다른 사용자가 데이터베이스에서 작업 중이라도 데이터베이스를 축소할 수 있습니다. 여기에는 시스템 데이터베이스도 포함됩니다.

결과 집합

다음 표는 결과 집합의 열을 설명한 것입니다.

열 이름 설명
DbId 축소할 파일의 데이터베이스 ID 번호
FileId 축소할 파일의 파일ID 번호
CurrentSize 현재 파일이 차지하고 있는 8KB 페이지의 수
MinimumSize 파일이 최소한으로 차지할 수 있는 8KB 페이지의 수. 이것은 파일의 최소 크기나 원래 만들어진 크기와 일치합니다.
UsedPages 현재 파일에서 사용되는 8KB 페이지의 수
EstimatedPages SQL Server에서 예상하는 파일 축소 가능 크기에 해당하는 8KB 페이지의 수

참고   SQL Server는 축소되지 않은 파일의 행은 표시하지 않습니다.

사용 권한

DBCC SHRINKDATABASE 권한은 sysadmin 고정 서버 역할이나 db_owner 고정 데이터베이스 역할의 구성원에게 기본적으로 부여되며, 양도할 수 없습니다.

예제

다음은 UserDB 사용자 데이터베이스에서 파일에 10%의 여유 공간이 남도록 파일 크기를 줄이는 예제입니다.

DBCC SHRINKDATABASE (UserDB, 10)
GO











기흥 site 예제

USE SiteMss2;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE SiteMss2
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated database file to 10%.
DBCC SHRINKDATABASE (SiteMss2, 10);
GO
-- Reset the database recovery model.
ALTER DATABASE SiteMss2
SET RECOVERY FULL;
GO


관련 항목

ALTER DATABASE

DBCC

물리적 데이터베이스 파일 및 파일 그룹

©1988-2000 Microsoft Corporation. All Rights Reserved.