[sql] 데이터베이스의 트랜잭션 로그가 가득 찼습니다.

전체 기간 동안 트랜잭션을 보류하는 장기 실행 프로세스가 있습니다.

나는 이것이 실행되는 방식을 통제 할 수 없습니다.

트랜잭션은 전체 기간 동안 열려 있기 때문에 트랜잭션 로그가 가득 차면 SQL Server에서 로그 파일의 크기를 늘릴 수 없습니다.

따라서 프로세스가 오류와 함께 실패합니다 "The transaction log for database 'xxx' is full".

데이터베이스 속성에서 트랜잭션 로그 파일의 크기를 늘려이를 방지하려고 시도했지만 동일한 오류가 발생합니다.

다음에 무엇을 시도해야할지 모르겠습니다. 프로세스는 몇 시간 동안 실행되므로 시행 착오를하기가 쉽지 않습니다.

어떤 아이디어?

관심있는 사람이 있다면 프로세스는 Microsoft Dynamics CRM 4.0.

충분한 디스크 공간이 있으며 로그가 단순 로깅 모드로되어 있으며 프로세스를 시작하기 전에 로그를 백업했습니다.

-=-=-=-=-업데이트-=-=-=-=-

지금까지 의견을 보내 주셔서 감사합니다. 다음은 열린 트랜잭션으로 인해 로그가 커지지 않을 것이라고 믿게 만든 이유입니다.

다음과 같은 오류가 발생합니다.

Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

그래서 그 조언에 따라 ” log_reuse_wait_desc column in sys.databases“로 갔고 ” “의 가치를 유지했습니다 ACTIVE_TRANSACTION.

Microsoft에 따르면 :
http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx

이는 다음을 의미합니다.

트랜잭션이 활성 상태입니다 (모든 복구 모델). • 로그 백업을 시작할 때 장기 실행 트랜잭션이있을 수 있습니다. 이 경우 공간을 확보하려면 다른 로그 백업이 필요할 수 있습니다. 자세한 내용은이 항목 뒷부분의 “장기 실행 활성 트랜잭션”을 참조하십시오.

• 트랜잭션이 지연됩니다 (SQL Server 2005 Enterprise Edition 이상 버전 만 해당). 지연된 트랜잭션은 사용할 수없는 리소스로 인해 롤백이 차단 된 활성 트랜잭션입니다. 지연된 트랜잭션의 원인과이를 지연된 상태에서 제거하는 방법에 대한 자세한 내용은 지연된 트랜잭션을 참조하십시오.

내가 뭔가를 오해 했나요?

-=-=-=-업데이트 2-=-=-=-

초기 로그 파일 크기를 30GB로 설정하여 프로세스를 시작했습니다. 완료하는 데 몇 시간이 걸립니다.

-=-=-=-최종 업데이트-=-=-=-

이 문제는 실제로 사용 가능한 모든 디스크 공간을 사용하는 로그 파일로 인해 발생했습니다. 마지막 시도에서 120GB를 확보했지만 여전히 모든 것을 사용했고 결국 실패했습니다.

프로세스가 하룻밤 사이에 실행될 때 실패시 롤백 되었기 때문에 이전에 이런 일이 발생한다는 것을 몰랐습니다. 이번에는 롤백 전에 로그 파일 크기를 확인할 수있었습니다.

귀하의 의견에 감사드립니다.



답변

일회성 스크립트입니까, 아니면 정기적으로 발생하는 작업입니까?

과거에는 일시적으로 로그 파일에 많은 공간이 필요한 특수 프로젝트의 경우 두 번째 로그 파일을 만들어서 크게 만들었습니다. 프로젝트가 완료되면 추가 로그 파일을 제거했습니다.


답변

이 문제를 해결하려면 복구 모델단순으로 변경 한 다음 파일 로그 축소

1.
데이터베이스 속성> 옵션> 복구 모델> 단순

2.
데이터베이스 작업> 축소> 파일> 로그

끝난.

그런 다음 데이터베이스 속성> 파일> 데이터베이스 파일> 경로 에서 db 로그 파일 크기를 확인합니다.

전체 SQL 서버 로그를 확인하려면 SSMS> 데이터베이스> 관리> SQL Server 로그> 현재에서 로그 파일 뷰어를 엽니 다.


답변

이 오류가 한 번 발생했는데 디스크 공간이 부족한 서버의 하드 드라이브가되었습니다.


답변

당신은 마십시오 자동 증가 활성화무제한 파일 성장을 로그 파일에 대해 모두 사용 가능? “데이터베이스 속성> 파일”에서 SSMS를 통해 편집 할 수 있습니다.


답변

이것은 구식 접근 방식이지만 SQL에서 반복 업데이트 또는 삽입 작업을 수행하는 경우 (오래 실행되는 작업) 주기적으로 (프로그래밍 방식으로) “체크 포인트”를 호출하는 것이 좋습니다. “체크 포인트”를 호출하면 SQL이 모든 메모리 전용 변경 (더티 페이지, 호출 됨) 및 트랜잭션 로그에 저장된 항목을 디스크에 기록합니다. 이렇게하면 트랜잭션 로그를 주기적으로 정리하여 설명한 것과 같은 문제를 방지 할 수 있습니다.


답변

다음은 로그를 자릅니다.

USE [yourdbname]
GO

-- TRUNCATE TRANSACTION LOG --
DBCC SHRINKFILE(yourdbname_log, 1)
BACKUP LOG yourdbname WITH TRUNCATE_ONLY
DBCC SHRINKFILE(yourdbname_log, 1)
GO

-- CHECK DATABASE HEALTH --
ALTER FUNCTION [dbo].[checker]() RETURNS int AS BEGIN  RETURN 0 END
GO


답변

데이터베이스 복구 모델이 가득 차고 로그 백업 유지 관리 계획이없는 경우 트랜잭션 로그가 .NET으로 인해 가득 차기 때문에이 오류가 발생합니다 LOG_BACKUP.

이렇게하면이 데이터베이스에 대한 작업 (예 : 축소)이 방지되고 SQL Server 데이터베이스 엔진에서 9002 오류가 발생합니다.

이 동작을 극복하려면 문제를 해결하기위한 자세한 단계를 보여주는 LOG_BACKUP으로 인해 데이터베이스 ‘SharePoint_Config’의 트랜잭션 로그가 가득 찼습니다 .