파일 관리는 완전히 온라인 작업이 될 수 있습니다. 복구 목적으로 로그 정보를 보존해야 할 필요성에 따라 두 가지 경로가 있습니다.
특정 시점 복구가 필요하지 않습니다
- 데이터베이스를
SIMPLE
복구로 변환하십시오 . 디스크에 트랜잭션을 쓰려면 검사 점을 실행하십시오.
- 로그를 평평하게하십시오.
- 로그를 적절한 크기로 조정하십시오.
또한 고정 증가량과 무제한 증가를 설정하는 것이 좋습니다 (로그를 더 잘 관리 할 수 있도록). 고정 증가량은 그 양에 따라 크게 다르므로 로그에서 볼 수있는 증가량에 따라 처음에는 1-2GB를 사용하는 것이 좋습니다. 이상적으로는 로그가 많이 자라지 않으므로 큰 영향을 미치지 않습니다. 로그가 정기적으로 커지면 크기를 다시 방문해야 할 수도 있습니다.
다음을 사용하여 달성 :
ALTER DATABASE [foo]
SET RECOVERY SIMPLE;
CHECKPOINT;
DBCC SHRINKFILE (foo_log,0);
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
--Optional if you want the database in full recovery mode
--for point in time recovery going forward
ALTER DATABASE [foo]
SET RECOVERY FULL;
특정 시점 복구 필요
가장 큰 문제는 현재 활성화 된 VLF 세그먼트를 지나서 로그 파일을 축소 할 수 없다는 것입니다. 이를 확인하기 DBCC LOGINFO
위해 데이터베이스 컨텍스트에서 사용할 수 있습니다 . Status = 2 인 세그먼트가 활성화되었습니다. 활성 세그먼트를 지우려면 해당 세그먼트에서 현재 활성화 된 트랜잭션이 없을 때 트랜잭션 로그 백업을 실행해야합니다. 당신의 단계는 다음과 같습니다
- 트랜잭션 로그 백업을 실행하십시오.
- 파일을 축소하십시오. (이상적으로 평평하지만 데이터베이스가 활성화되어 있으면 수행하기가 어렵습니다).
- 로그가 적절한 크기, 가능한 한 작은 크기가 될 때까지 1 단계와 2 단계를 반복하십시오.
- 로그를 적절한 크기로 조정하십시오.
다음을 사용하여 달성 :
BACKUP LOG [foo] TO DISK='<Location of t-log backup>';
DBCC SHRINKFILE (foo_log,0);
--Repeat the above until your log file is small "enough"
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
여기에서 무슨 일이 일어나고 있는지 이해하기위한 추가 자료 :