2014-05-23 10 views
10

매우 큰 데이터베이스 (50GB 이상)가 있습니다. 내 하드 드라이브의 여유 공간을 확보하기 위해 테이블 ​​중 하나에서 오래된 레코드를 삭제하려고했습니다.SQL 서버 - ACTIVE_TRANSACTION으로 인해 로그가 가득합니다.

delete from Table1 where TheDate<'2004-01-01'; 

그러나 SQL Server 2012 말했다 : 나는 명령을 실행

Msg 9002, Level 17, State 4, Line 1 
The transaction log for database 'MyDb' is full due to 'ACTIVE_TRANSACTION'. 

을하며 일을 삭제하지 않았다. 그 메시지는 무엇을 의미합니까? 기록을 삭제하려면 어떻게해야합니까?

+0

작은;)별로 크지 않습니다. 확실히 중간 범위 서버의 메모리에 맞는 한 크게 변경하지 마십시오. – TomTom

답변

3

SQL Server를 다시 시작하면 데이터베이스에서 사용되는 로그 공간이 정리됩니다. 이 그러나 옵션이없는 경우, 다음과 같은 시도 할 수 있습니다 :

* Issue a CHECKPOINT command to free up log space in the log file. 

* Check the available log space with DBCC SQLPERF('logspace'). If only a small 
    percentage of your log file is actually been used, you can try a DBCC SHRINKFILE 
    command. This can however possibly introduce corruption in your database. 

* If you have another drive with space available you can try to add a file there in 
    order to get enough space to attempt to resolve the issue. 

희망이 당신의 솔루션을 찾는 데 도움이 될 것입니다.

+0

DBCC SQLPERF ('logspace')는 "Log Size (MB)"및 "Log Space Used (%)"를 표시합니다. 로그 크기는 기록 된 로그의 실제 크기가 아니라 디스크에있는 로그 파일의 크기를 나타냅니다. 따라서 로그의 실제 크기를 MB로 얻으려면 두 열을 곱하십시오. 예 : 2.00MB의 로그 크기와 70 %는 1.4MB의 로그 데이터가 있음을 의미합니다. – brentlightsey

8

다음은 오류를 해결하기 위해 수행 한 작업입니다.

먼저 데이터베이스 복구 모델을 SIMPLE로 설정합니다. 더 많은 정보 here.

그런 다음 오래된 파일을 삭제하여 5GB의 여유 공간을 만들어 로그 파일의 확장 공간을 확보했습니다.

아무런 경고없이 DELETE 문을 성공적으로 수행했습니다.

DELETE 문을 실행하면 데이터베이스가 곧 축소되어 하드 드라이브의 공간을 확보 할 수 있다고 생각했습니다. 하지만 그건 사실이 아니야. 이 명령 here에 대한

DBCC SHRINKDATABASE (MyDb, 0); 
GO 

더 많은 정보 : 다음 명령을 실행하지 않는 한 DELETE 문 다음에 사용 가능한 공간이 inmediatedly 운영 체제에 반환되지 않습니다.

관련 문제