SQL 서버 - The transaction log for database '...' is full due to 'LOG_BACKUP'. - 두 번째 이야기
예전에 쓴 글에 이어서,
SQL 서버 - The transaction log for database '...' is full due to 'LOG_BACKUP'.
; https://www.sysnet.pe.kr/2/0/1529
개별 log 파일을 truncate 시키는 게 꽤나 귀찮은 작업이어서, 아예 SP를 다음과 같이 만들어 봤습니다.
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Trunc_Log] @dbName VarChar(512)
AS
BEGIN
DECLARE @sqlquery NVARCHAR(1024)
SET @sqlquery = N'USE "' + @dbName + '" ALTER DATABASE "' + @dbName + '" SET RECOVERY SIMPLE;';
exec sp_executesql @sqlquery;
SET @sqlquery = N'USE "' + @dbName + '" DBCC SHRINKFILE ("' + @dbName + '_Log", 7)';
exec sp_executesql @sqlquery;
SET @sqlquery = N'USE "' + @dbName + '" ALTER DATABASE "' + @dbName + '" SET RECOVERY FULL;';
exec sp_executesql @sqlquery;
END
GO
저렇게 해 두면, SQL Server Agent의 Job으로 간단하게 처리할 수 있습니다.
exec dbo.Trunc_Log 'WSS_Content'
exec dbo.Trunc_Log 'SharePoint_Config'
exec dbo.Trunc_Log 'Search_Service_Application_DB_36084c0412ce487bad3a2ee7bfcd0ea6'
exec dbo.Trunc_Log 'Search_Service_Application_CrawlStoreDB_0d6f4aaf36164621b0e1a3e5ecb4a350'
exec dbo.Trunc_Log "SharePoint_AdminContent_13a13d49-57db-4481-a3bf-7d11c857fc49"
exec dbo.Trunc_Log "WSS_UsageApplication"
물론, 테스트 서버가 아니라면 저런 식으로 무자비하게 로그를 날릴 수는 없을 것입니다. 그런 경우에는 결국 디스크 용량이 모자란 것이므로 여유가 있는 디스크로 데이터베이스 파일을 옮겨야 할 텐데 이는 다음의 스크립트를 실행하면 됩니다.
ALTER DATABASE SharePoint_Config
MODIFY FILE ( NAME = SharePoint_Config,
FILENAME = 'd:\db\SharePoint_Config.mdf');
GO
ALTER DATABASE SharePoint_Config
MODIFY FILE ( NAME = SharePoint_Config_Log,
FILENAME = 'd:\db\SharePoint_Config_Log.ldf');
GO
실행 후, 해당 데이터베이스 파일(mdf, ldf)을 대상 디렉터리에 옮기고 DB를 OFFLINE 시킨 후 다시 ONLINE으로 붙이면 됩니다.
ALTER DATABASE WSS_UsageApplication SET OFFLINE;
GO
// ... 파일 복사 후
ALTER DATABASE WSS_UsageApplication SET ONLINE;
GO
그런데, (테스트 서버인 경우에도) OFFLINE 시킬 때 한참 동안 대기하는 경우가 있습니다. 그럴 때는 그냥 SQL Server 서비스를 내려 버리고 다시 시작하는 것이 더 빠르게 작업을 진행할 수 있습니다.
참고로 다음의 PowerShell 명령어를 이용하면 DB 목록도 자동화할 수 있습니다. ^^
// HOW TO LIST THE SHAREPOINT 2010 DATABASES THAT ARE IN USE ? EVENTUALLY TO A FILE ?
// ; https://theblobfarm.wordpress.com/2011/09/29/how-to-list-the-sharepoint-2010-databases-that-are-in-use-eventually-to-a-file/
PS C:\> Get-SPDatabase | Sort-Object Name | Select Name
Name
----
AppMng_Service_DB_7a3a6de8c3af46bc97b79d0602d26f6a
Search_Service_Application_AnalyticsReportingStoreDB_579571845a0b44af963fa8f9ac35dc70
Search_Service_Application_CrawlStoreDB_0d6f4aaf36164621b0e1a3e5ecb4a350
Search_Service_Application_DB_36084c0412ce487bad3a2ee7bfcd0ea6
Search_Service_Application_LinksStoreDB_269342b3f3cb46e7a56cbcf7bd652cce
SharePoint_AdminContent_13a13d49-57db-4481-a3bf-7d11c857fc49
SharePoint_Config
StateService_8453580cc877412eb9fe4d4c7a591472
User Profile Service Application_ProfileDB_e2ca01fc763f48f794e8caf055061b0c
User Profile Service Application_SocialDB_bf498a5c824c4f629cf0852c4b1a7a29
User Profile Service Application_SyncDB_e0517bc2f6764472b70681a15d8d457b
WordAutomationServices_b5b9e659208f48cbba978dd228bd61be
WSS_Content
WSS_UsageApplication
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]