위의 메세지는 로그파일이 꽉 찼으니 공간확보를 위해 가득 찬 로그를 비우라는 말입니다.
아시다시피 SQL Server DB는 두 가지 영역의 공간을 가지게 됩니다. 하나는 실제적인 데이터가 저장되는 .mdb라는 확장자를 가지는 데이터 영역이고, 다른 하나는 .ldb라는 확장자를 가지는 로그 영역입니다.
데이터 영역에는 말 그대로 실제적인 데이터가 저장되는 곳이고, 로그 영역에는 데이터베이스에서 수행한 작업을 기록하는 곳입니다.
예를 들어 우리가 게시판에 새로운 글을 등록하는 경우에 SQL Server는 먼저 로그 영역에 insert 작업을 하겠다는 기록을 합니다. 그리고나서 데이터 영역에 실제적인 데이터를 insert합니다. 이 때는 두 영역 모두 공간이 필요하겠죠. 반면 게시판의 데이터를 삭제하는 경우에는 먼저 로그 영역에 delete 작업을 하겠다고 기록합니다. 그리고나서 데이터 영역에서 delete 작업을 합니다. 이 경우에는 데이터 영역의 공간은 필요없지만 로그 영역은 여전히 필요하게 됩니다.
따라서 위의 메세지는 로그에 기록하려고 하는데 로그 영역이 가득차서 작업을 수행할 수 없다는 말입니다. 기본적으로 데이터베이스를 만들면 데이터 영역의 크기와 로그 영역의 크기가 하드디스크가 다 찰 때까지 자동으로 늘게 되어 있습니다. 그러나 데이터베이스를 만들 때 영역의 제한 크기를 지정해 두면 더 이상 늘어날 수 없게 됩니다.
이 경우에는 두 가지 해결 방법이 있습니다. 하나는 영역의 할당 크기를 늘려주는 것입니다. 이 작업은 EM(엔터프라이즈 매니저)에서 해당 데이터베이스의 등록정보에서 로그 파일(.ldf)의 크기를 늘려주면 됩니다. 그러나 이 방법은 하드디스크에 공간이 남아 있어야 하고 매번 이렇게 하면 계속 로그 파일만 커지게 됩니다. 사실 로그 파일에는 데이터가 없으니 공간이 좀 아깝기는 하잖아요. ~~
두 번째 방법은 로그 파일의 내용을 비우는 것입니다. 로그 파일의 크기는 EM에서 쉽게 늘릴 수가 있지만 로그의 내용을 비우기 위해서는 백업을 해야 합니다.
이 작업은 쿼리분석기(SQ)에서 BACKUP LOG 데이터베이스이름 WITH NO_LOG 라는 SQL 구문을 수행하면 됩니다. 이 작업은 로그 파일을 거의 10% 정도만 남기고 비워줍니다.