문제

인터넷을 통해보고 있었는데 내 문제에 대한 수용 가능한 해결책을 찾을 수 없습니다. 타협이없는 해결책이 있는지 궁금합니다 ...

나는 DBA가 아니지만 여분의 신체에 대한 추가 자금이없는 거대한 웹 사이트에서 일하는 한 남자 팀이므로 최선을 다하고 있습니다.

우리의 백업 계획은 짜증나고, 나는 그것을 개선하는 데 정말 힘들고 있습니다. 현재 SQL Server 2005를 실행하는 두 개의 서버가 있습니다. 잘 작동하는 것으로 보이는 미러링 된 데이터베이스 (증인 없음)가 있습니다. 나는 정오와 자정에 전체 백업을합니다. 이것은 밤에 서비스 제공 업체가 테이프로 백업되며, 백업 파일을 DVD 주간에 태우기 위해 오래된 레코드를 유지합니다. 거울은 증인 서버 없이는 무의미 해 보이기 때문에 결국 로그 배송으로 전환하고 싶습니다.

문제는 트랜잭션 로그가 논스톱으로 증가하고 있다는 것입니다. 내가 한 연구에서, 나는 미러링 된 데이터베이스의 로그 파일을 잘라낼 수없는 것 같습니다. 그렇다면 파일이 성장하는 것을 어떻게 막을 수 있습니까!?

기반 이 웹 페이지, 나는 이것을 시도했다 :

USE dbname
GO
CHECKPOINT
GO
BACKUP LOG dbname TO DISK='NULL' WITH NOFORMAT, INIT, NAME = N'dbnameLog Backup', SKIP, NOREWIND, NOUNLOAD
GO
DBCC SHRINKFILE('dbname_Log', 2048)
GO

그러나 그것은 작동하지 않았습니다. 내가 찾은 다른 모든 것에 따르면 백업 로그 명령을 실행하기 전에 거울을 비활성화해야한다고 말합니다.

내 질문 (tl; dr)

미러를 비활성화하지 않고 트랜잭션 로그 파일을 축소하려면 어떻게해야합니까?

도움이 되었습니까?

해결책 3

나는 그것이 잊혀진 상태에서 실제로이 보는 것을 실제로 대답해야한다고 생각했다.

거울을 비활성화하지 않으면 데이터베이스가 미러링되면 T-Log를 축소 할 수 없습니다. 내가 틀렸다면, 저를 수정 해주세요. 그러나 나는 작동하는 해결책을 찾지 못했습니다!

서버가 두 개만 있으면 로그 배송이 진행되는 방법입니다. 장애 조치 유일한 방법은 교장의 유일한 방법이기 때문에 증인 서버가 없으면 미러링은 거의 무의미합니다. 주요 충돌이 발생할 때 장애 조치를 할 수 없다면 미러가있는 목적을 물리칩니다.

이 문제에 대해 더 많은 정보 나 제안을 공유하는 사람이라면, 나는 그것들을들을 수 있습니다.

다른 팁

글쎄, 기술적으로 거울 로그를 축소 할 수 있습니다. 문제가 발생하는 것은 truncate_only로 로그를 백업하는 것입니다. 미러링은 그것을 받아들이지 않습니다. 한 가지 방법은 디스크에 백업 로그를 수행하는 것입니다.

use [DATABASE_NAME]
checkpoint
BACKUP LOG [DATABASE_NAME] TO DISK =  'C:\LOG_BACKUPS\DATABASE_NAME'
dbcc shrinkfile(DATABASE_NAME_Log,1)

이것은 현재 유지 보수 계획의 일부이며 약 2 년 동안 문제와 함께 작업 해 왔습니다.

미러 서버 인스턴스가 주요 서버 인스턴스 뒤에 떨어지면 활성 로그 공간의 양이 커집니다. 이 경우 데이터베이스 미러링을 중지하고 로그를 자르는 로그 백업을 가져 와서 로그 백업을 미러 데이터베이스에 적용하고 거울을 다시 시작합니다.

파일을 축소하려면 다음 스크립트를 시도 할 수 있습니다.

exec sp_dboption dbname, 'trunc. Chkpt. ', True Checkpoint DBCC ShrinkFile (dbnamefilename, 500); exec sp_dboption dbname, 'trunc. chkpt. ', false에 로그인하십시오

도움이 되었기를 바랍니다.

미러가있는 데이터베이스의 트랜잭션 파일을 축소 할 수 있습니다. 가상 로그 파일이 있으므로 백업을 수행해야합니다.http://www.xoowiki.com/article/sql-server/tronquer-journal-log-sur-base-miroir-499.aspx

  1. 사용하여 미러 파트너를 설정하십시오. ALTER [DatabaseName] SET PARTNER OFF
  2. 교장에서 트랜잭션 로그 백업을 취하십시오 ..BACKUP LOG [DatabaseName] TO DISK='Drive:\DatabaseName_log_datetime.trn'
  3. 이것을 복사하십시오 DatabaseName_log_datetime.trn 미러 서버의 모든 위치에.
  4. 이 트랜잭션 로그를 복원하십시오 NoRecovery 옵션 .. 미러 데이터베이스.RESTORE LOG [DatabaseName] FROM DISK ='Drive:\DatabaseName_log_datetime.trn'
  5. Principal & Mirror Server의 로그 파일 축소.
  6. 교장에서 트랜잭션 로그 백업을 다시 가져 와서 복구 옵션 없이이 트랜잭션 로그를 복원합니다. Mirror Server의 Mirrored 데이터베이스.
  7. 미러링 보안을 구성하십시오.

이 게시물에서 몇 가지 제안을 테스트 한 결과, 전체 백업, 체크 포인트 명령 및 트랜잭션 로그 백업 후 주요 데이터베이스 트랜잭션 로그 크기를 축소 할 수 있음을 발견했습니다. 그런 다음 미러 데이터베이스 트랜잭션 로그 크기는 주요 축소 크기와 동기화됩니다.

USE [DATABASE_NAME];
BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;
CHECKPOINT;
WAITFOR DELAY '00:00:02';
BACKUP LOG [DATABASE_NAME] TO DISK = 'E:\Backup\DATABASE_NAME_TL.trn';
WAITFOR DELAY '00:00:02';
DBCC SHRINKFILE('DATABASE_NAME_log', 500);

사용 OSQL 사용 OSQL은 DOS 배치에서 위의 SQL 명령을 실행할 수 있습니다. 대기 시간은 배치로 실행되면해야합니다.

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe -E -S "DATABASE_SERVER" -Q "USE [DATABASE_NAME]; BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;"

다른 백업도 작동해야한다고 생각하지만 테스트하지는 않습니다. 아래 Diff Backup 명령은 덮어 쓰기 대신 데이터를 추가합니다.

BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_DIFF.bak' WITH DIFFERENTIAL;

유일한 방법 : 1) 미러링 중지 2) 교장의 파일 축소 3) 교장의 백업, + 트랜잭션 jrnl 4) 미러 서버 중지, Mirrordatabase의 MDF 및 LDF 삭제 5) Mirrordatabase 시작 및 삭제 거울을 삭제합니다. 6) 복구 백업없이 복원하십시오. 3) Mirroserver에서 7) OUF를 미러링하십시오!

너무 커지면 데이터베이스 로그를 축소 할 수 없다는 것은 사실입니다. 그 시점에서 유일한 옵션은 거울을 깨고 수축하고 다시 만들어내는 것이라고 생각합니다. 또한, 당신이 문제에도 불구하고 두 개의 서버만으로 미러링을 사용하려면 내가 말할 수있는 것은 정기적으로 트랜잭션 로그를 백업한다는 것입니다. 공간에서 공간이 해제되어 MSSQL이 로그 파일 내에서 데드 스페이스를 재사용 할 수 있습니다. 이것은 아무것도 축소되지 않지만 성장을 막는 요구 사항을 충족합니다.

그런 다음 파일 백업을 정기적으로 삭제하기 만하면됩니다. 예를 들어이 작업을 수행 할 수 있습니다.

USE your_database
GO
BACKUP LOG your_database TO DISK = 'x:\your_backup_filepath\your_database.tlog'
GO

가능하다면 몇 시간을 보내십시오.

나는 이것이 왜 작동하는지 모르겠다. 나는 이것을 쿼리 창에서 블록으로 실행합니다. 자신의 재량에 따라 사용하십시오. Microsoftie가 댓글을 달면 좋을 것입니다.

use my_database
dbcc shrinkfile ( my_database_log, 1000 )
use my_database
dbcc shrinkfile ( my_database_log, 1000 )
alter database my_database
  modify file ( 
    name = my_database_log, 
    size = 1000MB
  )

주요 데이터베이스가 아닌 한 거울에서 꺼내지 않고 미러 데이터베이스에 아무것도 할 수 없습니다.

작동하는 것은 Principal Server OG에서 데이터베이스를 백업하는 경우 나중에 축소됩니다. 즉 유지 보수 계획에는 SOM 수축 작업이 포함되어야합니다. 이러한 변경 사항은 동기화하여 자동으로 2 차 (미러) 서버로 넘어 가야합니다.

트랜잭션 파일 만 축소하여 축소하려면 다음 t-sql을 사용할 수 있습니다.

USE [your_db_name]
GO
DBCC SHRINKFILE (N'your_db_name_logfile' , 0, TRUNCATEONLY)
GO

그런 다음 각 데이터베이스에 해당 스 니펫을 사용하고 백업이 실행 된 직후에 실행합니다.

로그 파일을 Principal Server의 작게 유지하고 보조/미러 서버에서 유지해야합니다.

이게 도움이 되길 바란다.

BTW. 로그 파일의 디스크에 남은 공간이없는 지점에 도달 한 경우, 유일한 옵션은 미러 모드에서 벗어나 데이터베이스를 간단한 복구 모드로 설정하고 로그 파일을 축소하고 전체로 설정하는 것입니다. 복구 모드를 다시 회복하고 미러를 다시 설정합니다 (데이터베이스 OG 로그 파일의 백업을 사용하여 미러 서버에서 복원).

FULHERMORE 문제가 라이센스 인 경우 SQL Express를 증인 서버로 사용할 수 있습니다. 너무 많은 ressources가 필요하지 않아야하므로 웹 응용 프로그램 인 경우 웹 서버를 사용할 수 있습니다. 증인 서버의 로그 파일도 시청하는 것을 잊지 마십시오.

** 로그가 미러 서버로 배송 된 다음 주요 인정이 승인을 기다리는 것이므로 로그를 잘라내는 것입니다.

이 문제에 대한 해결책은 자손없이 로그를 백업 한 다음 로그 파일을 축소하거나 수축을 무시할 수도 있습니다. 그것이 작동하지 않으면 로그를 백업하기 전에 검사 점을 시도하십시오. 이것은 작동해야합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top