안녕하세요.
오라클의 경우 redo log file의 사이즈를 고정해두고, 여러개의 redo log file이 circular 방식으로 사용되잖아요...
헌데 sqlserver는 이 redo log file을 transaction log file이라고 칭하며 이 로그파일이 자동으로 사이즈가 늘어나는 방식이라고 알고있는데...
어떠한 장점때문에 이러한 방식을 사용하는 것 일가요?
제 생각에....... 오라클의 경우
리두로그 파일은 결국 데이터파일에 쓰여지게 되는 내용이고 (write ahead log 방식은 두 dbms모두 동일하다고 알고있습니다)
더이상 리두로그 보존의 필요가 없어지면 재사용해도 되기때문에 circular방식을 채택했다라는 아주 초보적인 생각을 갖고있는데,
sqlserver의 경우 transaction log file이 재사용되지 않는것인가요? 만약 재사용이 된다면 로그파일사이즈가 자동으로 증가되는 이유가 뭔가요..?
질문이 두서가 없는게, 제가 제대로 알지도 못하면서 질문을 드린다는 느낌이 드네요 ㅠ_ㅠ
답변 기다리면서 더 공부하겠습니다. 죄송합니다.
가닥이라도 잡아주신다면 감사드리겠습니다..
MS-SQL 로그는 데이터의 모든 변경 사항이 기록되어 있으므로.. 오라클의 리두 로그에 대응하는 개념이 맞습니다.
다만, 트랜잭션 로그 파일이 항상 계속 커지는 것은 아닙니다. (물론 순환하지도 않지만요..) 이건 MS-SQL의 Recovery Model에 따라 다른데.. SIMPLE, Bulk Logged, FULL 이 있습니다.
- SIMPLE인 경우.. DML문이 실행되었을 때 트랜잭션이 커밋되면 트랜잭션 로그를 비웁니다. (시간이 지나도 로그 파일이 커지진 않지만, 대량 변경이 있으면 순간적으로는 커집니다. 하지만 커밋되면 다시 빈공간으로...)
- Bulk logged에서는.. 최소로깅 쿼리에 대해서는 로그를 남기지 않는 모드입니다. insert ~ select ~ 라던가, truncate table 같은 구문.. 저는 이 모델을 거의 안써봐서 백업/복구 규칙은 잘 모르겠군요.
- 마지막으로 FULL인 경우가 질문자께서 말씀하신 것처럼.. 로그 파일이 마냥 커지는 모델입니다. 주로 Production인 경우에 사용하고, 리두 로그이기 때문에 지정 시간 복구가 가능합니다. 이 경우에는.. 트랜잭션 로그를 백업했을 때 로그 파일이 사용하던 공간이 비게 됩니다.
참고로.. MS-SQL에서 트랜잭션 로그에 할당된 공간은 저절로 줄어들지 않습니다. 무슨 말이냐하면.. ldf 파일에 할당된 크기가 1GB인데 DML 실행이 많아서 2GB가 될 수 있는데, 트랜잭션 로그를 백업해서 비우더라도 ldf 파일의 크기는 계속 2GB라는 뜻입니다.
이유는 당연히 성능 때문이구요.. (디스크에 공간을 할당하는 것이 꽤 부하를 줍니다.)
임의로 줄이기 위한 shrink 명령이 따로 있습니다.