[sql] SQL 데이터베이스 관리자 권한으로 SQL 서버 디스크 공간을 관리하는 방법은 무엇인가요?
  1. 디스크 사용 현황 조사: 서버 디스크의 사용 현황을 확인하고 어떤 데이터베이스 또는 파일이 가장 많은 공간을 차지하는지 파악합니다.
-- 디스크 사용 현황 조회
EXEC sp_MSforeachdb 'USE [?]; 
    SELECT 
        DB_NAME() AS [Database],
        name AS [LogicalFileName],
        physical_name AS [PhysicalFileName],
        size * 8 / 1024 AS [FileSizeMB],
        FILEPROPERTY(name, ''SpaceUsed'') * 8 / 1024 AS [UsedSpaceMB],
        size * 8 / 1024 - FILEPROPERTY(name, ''SpaceUsed'') * 8 / 1024 AS [FreeSpaceMB]
    FROM sys.database_files;'
  1. 로그 파일 관리: 트랜잭션 로그 파일이 과도하게 커지는 경우에는 백업 및 축소을 통해 로그 파일을 관리합니다.
-- 트랜잭션 로그 백업
BACKUP LOG [DatabaseName] TO DISK = 'D:\Backup\DatabaseName_LogBackup.trn';

-- 트랜잭션 로그 축소
DBCC SHRINKFILE([LogicalLogFileName], 1024);
  1. 데이터 파일 관리: 데이터 파일이 커지는 경우에는 새로운 파일 그룹을 생성하거나 기존 파일 그룹을 확장하여 공간을 확보합니다.
-- 새로운 파일 그룹 추가
ALTER DATABASE [DatabaseName] ADD FILEGROUP [NewFileGroup];

-- 파일 그룹에 새 데이터 파일 추가
ALTER DATABASE [DatabaseName] ADD FILE 
    (NAME = [NewDataFile], FILENAME = 'D:\DatabaseFiles\NewDataFile.ndf', SIZE = 100MB);
  1. 데이터 이동 및 정리: 더 이상 사용되지 않는 데이터를 다른 파일 그룹으로 이동하거나 삭제하여 공간을 확보합니다.
-- 사용하지 않는 데이터 이동
CREATE CLUSTERED INDEX [NewIndex] ON [TableName] (Column1, Column2) WITH (DROP_EXISTING = ON);

-- 사용하지 않는 데이터 삭제
DELETE FROM [TableName] WHERE [Condition];

SQL 데이터베이스 관리자 권한으로 이러한 작업을 수행할 수 있습니다. 단, 과도한 파일 축소 또는 로그 파일 백업 없이 로그 파일을 축소하면 데이터 손실의 가능성이 있으므로 주의해야 합니다.