SQL Server의 데이터베이스에는 데이터파일과 로그파일이 여러개로 구성 되어 있을 수 있습니다. 이 파일들의 크기를 파악하고 관리하는것은 DBA의 중요한 업무 중 하나입니다. 서버에 있는 모든 데이터베이스의 모든 파일에 관한 정보를 확인하려면 sys.master_files라는 뷰를 사용하면 되지만 안타깝게도 남은 용량에 관한 정보는 제공되지 않습니다. 좀 해주지... 다음 스크립트는 모든 파일에 대한 정보를 출력합니다.IF OBJECT_ID('tempdb..#Database_Files', 'U') IS NOT NULL DROP TABLE #Database_Files GO CREATE TABLE #Database_Files ( database_id int, file_id int, file_guid uniqueidentifier, type tinyint, type_desc nvarchar(60), data_space_id int, name sysname, physical_name nvarchar(260), state tinyint, state_desc nvarchar(60) , size int, used_size int, max_size nvarchar(16), growth nvarchar(16), is_media_read_only bit, is_read_only bit, is_sparse bit, is_percent_growth bit, is_name_reserved bit , create_lsn numeric(25,0), drop_lsn numeric(25,0), read_only_lsn numeric(25,0), read_write_lsn numeric(25,0), differential_base_lsn numeric(25,0), differential_base_guid uniqueidentifier, differential_base_time datetime , redo_start_lsn numeric(25,0), redo_start_fork_guid uniqueidentifier, redo_target_lsn numeric(25,0), redo_target_fork_guid uniqueidentifier, backup_lsn numeric(25,0)) DECLARE @SCRIPT NVARCHAR(MAX) = 'SET NOCOUNT ON' + CHAR(10) SELECT @SCRIPT = @SCRIPT + CHAR(10) + 'USE ' + name + ';' + CHAR(10) + 'INSERT INTO #Database_Files (database_id, file_id, file_guid, type, type_desc, data_space_id, name, physical_name, state, state_desc, ' + 'size, used_size, max_size, growth, is_media_read_only, is_read_only, is_sparse, is_percent_growth, is_name_reserved, ' + 'create_lsn, drop_lsn, read_only_lsn, read_write_lsn, differential_base_lsn, differential_base_guid, differential_base_time, ' + 'redo_start_lsn, redo_start_fork_guid, redo_target_lsn, redo_target_fork_guid, backup_lsn)' + CHAR(10) + 'SELECT database_id = ' + CONVERT(VARCHAR(16), database_id) + ', file_id, file_guid, type, type_desc, data_space_id, name, physical_name, state, state_desc, ' + 'size, used_size = FILEPROPERTY(name, ''SpaceUsed''), ' + 'max_size = CASE WHEN max_size = -1 OR (max_size = 268435456 AND type = ''1'') THEN ''UNLIMITED'' ELSE REPLACE(CONVERT(VARCHAR(30), CONVERT(MONEY, (max_size*8.0/1024)), 112), ''.00'', SPACE(0)) END,' + 'growth = CASE WHEN is_percent_growth = 1 THEN CONVERT(VARCHAR(8), growth) + ''%'' ELSE CONVERT(VARCHAR(512), CONVERT(INT, growth * 8.0 / 1024)) + ''MB'' END, ' + 'is_media_read_only, is_read_only, is_sparse, is_percent_growth, is_name_reserved, ' + 'create_lsn, drop_lsn, read_only_lsn, read_write_lsn, differential_base_lsn, differential_base_guid, differential_base_time, ' + 'redo_start_lsn, redo_start_fork_guid, redo_target_lsn, redo_target_fork_guid, backup_lsn' + CHAR(10) + 'FROM ' + name + '.sys.database_files;' + CHAR(10) FROM SYS.DATABASES EXEC (@SCRIPT) SELECT [DBID] = A.database_id , [DatabaseName] = A.name , [State] = A.state_desc , [AccessMode] = A.user_access_desc , [RecoveryModel] = A.recovery_model_desc , [Type] = B.type_desc , [LogicalName] = B.name , [PhysicalName] = B.physical_name , [Size] = CONVERT(NUMERIC(10, 2), B.size * 8.0 / 1024) , [UsedSize] = CONVERT(NUMERIC(10, 2), B.used_size * 8.0 / 1024) , [FreeSize] = CONVERT(NUMERIC(10, 2), (B.size - B.used_size) * 8.0 / 1024) , [FreeSize(%)] = CONVERT(NUMERIC(10, 2), (B.size - B.used_size) * 100.0 / B.size) , [max_size] = B.max_size , [Growth] = B.growth FROM SYS.DATABASES A INNER JOIN #Database_Files B ON A.database_id = B.database_id ORDER BY CASE WHEN A.database_id < 5 THEN 1 ELSE 2 END, A.name
2014년 4월 15일 화요일
Database File Size 정보 한번에 조회하기
피드 구독하기:
댓글 (Atom)
네이버 블로그로 퍼가겠습니다~
답글삭제감사합니다..