트랜잭션 로그 비활성화


79

Oracle에는 트랜잭션이 기록되지 않도록 실행할 수있는 SQL 명령이 있습니다. SQL Server 2008에도 비슷한 것이 있습니까?

내 시나리오 : 서버 (Dev, QA, Prod)에 Tx 로그가 필요하지만 개발자 컴퓨터에서는 이러한 로그없이 수행 할 수 있습니다.


1
계산 된 데이터에보기를 사용해 보셨습니까?

질문을 가로 채서 죄송합니다. 특정 절차 / 쿼리를 위해 Oracle에서 트랜잭션 로깅을 비활성화하는 방법은 무엇입니까? 감사합니다!
Victor

3
@Kaushik 자신의 질문이므로 이것을 묻는 것이 좋습니다.
Raj More

" 트랜잭션이 기록되지 않도록 " NOLOGGED옵션을 참조하는 경우에는 해당되지 않습니다 .
a_horse_with_no_name jul.

@RajMore이 주제에 대해 더 배운 것이 있습니까? 우리의 경우 대량로드를 수행하고 있으며 SIMPLE 모드에서 너무 많은 데이터가 디스크에 삽질되는 것을 보는 것은 놀랍습니다. 이제 그 이유를 이해했지만 트랜잭션 로깅을 제거 할 수 있다면 성능이 얼마나 향상 될지 궁금합니다.
D-Klotz

답변:


124

어떤 상황에서도 SQL Server에서 트랜잭션 로그 없이는 할 수 없습니다. 엔진은 단순히 작동하지 않습니다.

dev 컴퓨터에서 복구 모델을 SIMPLE로 설정할 수 있습니다. 그러면 tran 로그 백업이 완료되지 않은 경우 트랜잭션 로그 팽창을 방지 할 수 있습니다.

ALTER DATABASE MyDB SET RECOVERY SIMPLE;

18
큰주의 :이 답변은 기술적으로 100 % 정확합니다. 그러나 개발자 컴퓨터에서 사용하고 싶거나 데이터 백업에 신경 쓰지 않을 때만 사용할 수 있습니다. 자세한 정보 및 배경 정보는 sqlservervideos.com/video/logging-essentialssqlservervideos.com/video/shrinking-log-files 를 참조하십시오 .
Michael K. Campbell

또는 백업 전략이 트랜잭션 로그가 아닌 스냅 샷을 사용하는 RDS (또는 이와 동등한 서비스)의 데이터베이스의 경우.
bsplosion

어떤 거래 및 로깅을위한 필요가 없습니다 있도록하거나 DB는 다른 소스 예를 들어, 이벤트 소싱에서 구축
안토니 존스턴

45

SQL Server가 작동하려면 트랜잭션 로그가 필요합니다.

즉, 트랜잭션 로그에는 두 가지 작동 모드가 있습니다.

  • 단순한
  • 완전한

전체 모드 에서는 데이터베이스를 백업 할 때까지 트랜잭션 로그가 계속 증가합니다. 에서 단순 모드 : 트랜잭션 로그 공간은 모든 '재활용'되는 검사 점을 .

전체 복구 모델 에서 데이터베이스를 실행해야하는 사람은 거의 없습니다 . 전체 모델을 사용하는 유일한 요점은 데이터베이스를 하루에 여러 번 백업하고 전체 데이터베이스를 백업하는 데 너무 오래 걸리므로 트랜잭션 로그 만 백업하는 것입니다.

트랜잭션 로그는 하루 종일 계속 증가하며 계속 백업합니다. 그날 밤 당신이 당신의 전체 백업을 수행하고 SQL 서버는 다음 자릅니다 트랜잭션 로그는 트랜잭션 로그 파일에 할당 된 공간을 다시 사용하기 시작합니다.

전체 데이터베이스 백업 만 수행 하는 경우 전체 복구 모드를 원하지 않습니다.


이것은 약간 잘못되었습니다. 트랜잭션 로그 증가를 막기 위해 로그 를 백업해야합니다 . 물론 열린 트랜잭션이나 거대한 트랜잭션이있는 경우 내부 로그 파일 할당 (VLF)을 재사용 할 수 없거나 더 많이 필요하기 때문에 로그가 커집니다. 그것은 장과 구절이 아닌 빠른 개요 BTW입니다
gbn

1
@gbn 로그가 커지는 것을 막기 위해 로그를 백업하지 않습니다. 내 말 ,하지만 그게 기능 의 요점 은 아닙니다 . Microsoft는 "로그 백업을 잊었 기 때문에 전체 하드 드라이브 사용" 게임을하기 위해 트랜잭션 로그를 만들지 않았습니다 . 이유 로그 성장 유지, 그래서 당신이 백업을 할 수 있다는 것입니다 (다음과 성장을 중지 백업 필요) 단지 로그를.
Ian Boyd

44

위에서 언급하지 않은 세 번째 복구 모드가 있습니다. 복구 모드는 궁극적으로 LDF 파일의 크기와 기록 방법을 결정합니다. 모든 유형의 대량 삽입을 수행하려는 경우 DB를 "BULK / LOGGED"로 설정해야합니다. 이렇게하면 벌크 인서트가 빠르게 이동하고 즉시 변경할 수 있습니다.

그렇게하려면

USE master ;
ALTER DATABASE model SET RECOVERY BULK_LOGGED ;

다시 변경하려면 :

USE master ;
ALTER DATABASE model SET RECOVERY FULL ;

누군가가 LDF를 원하지 않는 이유에 대한 대화에 추가하는 정신으로 다음을 추가합니다. 우리는 다차원 모델링을 수행합니다. 본질적으로 우리는 외부 프로그램을 사용하여 대량으로 처리되는 대규모 변수 저장소로 DB를 사용합니다. 우리는 롤백을 요구하지 않습니다. 모든 로깅을 켜서 성능 향상을 얻을 수 있다면 심장 박동으로 가져갈 것입니다.


1
감사합니다. 우리는 똑같은 방식으로 DB를 사용합니다. 우리는 롤백 할 수 있는지에 대해 덜 신경 쓸 수 없습니다. 순수한 성능은 우리가
Dan a

이 시나리오에서는 Mongo (로그 비활성화 허용) 또는 메모리 (redis 및 기타)와 같은 다른 데이터베이스를 고려할 수 있습니다.
Tim

2

Tx 로그의 문제점은 무엇입니까? 자라나요? 그런 다음 체크 포인트 옵션에서 자르기를 설정하십시오.

Microsoft 문서에서 :

SQL Server 2000 또는 SQL Server 2005에서 "단순"복구 모델은 이전 버전의 SQL Server에서 "검사 점에서 로그 자르기"와 동일합니다. 서버에서 체크 포인트가 수행 될 때마다 트랜잭션 로그가 잘 리면 데이터베이스 복구에 로그를 사용할 수 없습니다. 전체 데이터베이스 백업 만 사용하여 데이터를 복원 할 수 있습니다. "단순"복구 모델을 사용하면 트랜잭션 로그 백업이 비활성화됩니다.


1
음, 공간 문제-일부 개발자는 오래된 기계를 가지고 있고 우리는 없이도 할 수 있습니다. 요점은 이것이 가능한지 궁금합니다! "체크 포인트에서 로그 자르기"옵션이 SQL 2008의 단순 복구 모드를 사용해서 만 설정되었다는 인상을 받았습니다. 다른 방법이 있습니까?
Raj More

1
@Tapori, 그들은 같은 것입니다. 그들은 2000 년에 개명
zvolkov

0

이것이 공간을 절약하기 위해 개발 머신에만 해당되는 경우 간단한 복구 모드로 이동하면 정상적으로 수행됩니다.

프로덕션 컴퓨터에서는 데이터베이스를 전체 복구 모드로 유지하는 것이 좋습니다. 이렇게하면 필요한 경우 특정 시점 복구를 수행 할 수 있습니다.

또한 데이터베이스를 전체 복구 모드로 설정하면 트랜잭션 로그를 읽어 실수로 인한 업데이트 및 삭제를 실행 취소 할 수 있습니다. 아래 또는 자세한 내용을 참조하십시오.

SQL Server 2005에서 UPDATE 쿼리를 롤백하려면 어떻게합니까?

SQL Server 2008에서 로그 파일 (* .LDF) 읽기

프로덕션 시스템에서 공간이 문제가되는 경우 빈번한 트랜잭션 로그 백업을 생성하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.