데이터베이스 ldf 파일 축소
카테고리 없음 / 2024. 2. 2. 11:18
-- size
select
b.name dbname
, a.name dbnameDetail
, c.recovery_model_desc
, c.log_reuse_wait_desc
, c.user_access_desc
, a.fileid
, a.groupid
, a.size
, a.maxsize
, a.growth
, a.status
, a.perf
, a.filename
, computedsizemb = cast(a.size / 128. as int)
, computedgrowth = case when a.status & 0x100000 = 0x100000 then a.growth else cast(a.growth / 128. as int) end
, computedgrowthunit = case when a.status & 0x100000 = 0x100000 then 'percent' else 'mb' end
, d.first_lsn, d.last_lsn, d.checkpoint_lsn, d.database_backup_lsn, d.backup_finish_date
from master.dbo.sysaltfiles a with (nolock)
join master.dbo.sysdatabases b with (nolock)
on a.dbid = b.dbid
join master.sys.databases c
on a.dbid = c.database_id
outer apply
(
select top 1 first_lsn, last_lsn, checkpoint_lsn, database_backup_lsn, backup_finish_date
from msdb.dbo.backupset
where database_name = db_name(a.dbid)
order by backup_finish_date desc
) d
where b.name not in ('master', 'msdb', 'tempdb', 'model', 'lazylog')
-- ****************************************
dbcc sqlperf(logspace) -- 사용량
go
use sampledb
go
dbcc loginfo -- 로그파일 확인
go
-- 혹은 아래 명령으로 확인
-- select * from sys.dm_db_log_info(6)
-- 6은 select * from sysdatabases의 해당 dbid입니다.
use sampledb
go
-- 파일 끝에서 자르기
-- truncateonly 옵션이 들어가면 사이즈는 무시된다. 그래서 0
-- 백업되지 않으면 비활성 상태로 사용된다. 그러므로 백업 후에 자르거나
-- reocvery level 을 simple 로 하고 자른 후 원래 recovery level 로 변경한다.
DBCC SHRINKFILE ('sampledb_log', 0, TRUNCATEONLY);
go
-- 로그파일의 끝을 변경시킴 (linux 의 dev/null 로 백업)
-- 실제 프러덕션 환경은 파일 이름 바꾸어서 수행해야 함
backup log sampledb to
disk ='NUL'
;
-- 1GB 로 늘이기 (프러덕션은 최소 10GB 이상 확보할 것)
USE [master]
GO
ALTER DATABASE [sampledb] MODIFY FILE ( NAME = N'sampledb_log', SIZE = 1024000KB )
GO