Bir ayna veritabanındaki işlem günlüğü dosyasını daraltabilir miyim?


9

Bu, ana veritabanındaki günlük dosyasını neden küçültemediğim hakkında önceki bir sorunun yanıt sorusu .

Uzun bir hikaye kısaltmak için veritabanı yansıtmayı ayarladım, ancak işlem günlüğünü yedekleyen işin tekrar çalıştığından ve işlem günlüğünün neredeyse 60GB'a ulaştığından emin olmayı unuttum.

Yansıtma ayarlandığından, bu boyut artışı yansıtılmış sunucuda çoğaltıldı ve sonunda tüm disk alanını kapladı ve ayna veritabanını kullanılamaz hale getirdi.

Başına bu soruya bir ayna veritabanı üzerinde işlem günlük bakımı hakkında, aynaya üzerinde günlüğünü yedeklemek olamaz, ama ne zaman özellikle istedi yorumların ayna veritabanı üzerinde büyümüş bir günlük dosyası daraltma hakkında bir açıklama olduğunu bırakıldı

Bunu yapmanın bir yolu, yansıtılmış veritabanına yük devretmek ve küçültmek olacaktır. İstediğiniz / beklediğiniz davranışa sahip olduğundan emin olmak için bunu üretim dışı bir ortamda iyice test edin.

Bu, aynadaki günlük dosyasını küçültmenin başka yolları olabileceğini düşündürmektedir ve bu yöntemin bir üretim sunucusunda yapılması güvenli olmayabilir.

İşlem günlüğü dosyasını bir veritabanı yansıması üzerinde güvenle küçültmenin bir yolu var mı?


2
Desteklenen tek yol, dosyayı aynada daraltan asıl dosya üzerinde küçültmektir. Aynanız artık ana ile aynı değilse, gerçekten aynaya yük devretmeye çalışmak istemezsiniz. Bir önceki sorunuzda söylediğiniz gibi yansıtmayı kırın ve yeniden oluşturun.
Max Vernon

Yanıtlar:


6

DBCC SHRINKFILEKomut yansıtılmış veritabanına anapara gelen yansıtılmış olacaktır. İşte bir kanıt.

Prensipte örnek bir veritabanı oluşturun:

create database MirroredDb;
go

Aynı veritabanını aşağıdakilerden bir yedekten oluşturun NORECOVERY:

restore database MirroredDb
from disk = '\\backupdir\MirroredDb.bak'
with norecovery;
go

Yansıtma oturumunuzu istediğiniz şekilde ayarlayın.

Açık asıl veritabanı veritabanı dosya boyutları bakmak:

use MirroredDb;
go

select
    name,
    size
from sys.database_files;

Sonuç kümem şöyle görünüyor:

name            size
MirroredDb      392
MirroredDb_log  104

Açık ayna veritabanı , bir anlık görüntü oluşturmak ve aynı bilgileri bakmak:

create database MirroredDbss
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb.ss'
)as snapshot of MirroredDb;

use MirroredDbss;
go

select
    name,
    size
from sys.database_files;

Sonuç kümem aşağıdaki gibi görünüyor:

name            size
MirroredDb      392
MirroredDb_log  104

Şimdi asıl veritabanında işlem günlüğü dosyasını büyütün (1 GB'a getirdim):

alter database MirroredDb
modify file
(
    name = MirroredDb_log,
    size = 1GB
);
go

Bakıldığında asıl veritabanının işlem günlük boyutu, şimdi düzeltilmiş boyutunu bakın:

use MirroredDb;
go

select
    name,
    size
from sys.database_files;

Sonuç kümem aşağıdaki gibi görünüyor:

name            size
MirroredDb      392
MirroredDb_log  131072

Yansıtılmış veritabanında başka bir anlık görüntü oluşturun ve oradaki işlem günlüğü dosyasının boyutuna bakın:

create database MirroredDbss2
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb2.ss'
)as snapshot of MirroredDb;

use MirroredDbss2;
go

select
    name,
    size
from sys.database_files;

Sonuç kümem aşağıdaki gibi görünüyor:

name            size
MirroredDb      392
MirroredDb_log  131072

Şimdi yapmak DBCC SHRINKFILEüzerine anapara :

use MirroredDb;
go

dbcc shrinkfile('MirroredDb_log', 0);
go

select
    name,
    size
from sys.database_files;

Sonuç kümem şudur:

name            size
MirroredDb      392
MirroredDb_log  104

Yansıtılmış veritabanında üçüncü ve son bir anlık görüntü oluşturun ve boyuta bakın:

create database MirroredDbss3
on
(
    name = 'MirroredDb',
    filename = 'c:\sqlserver\MirroedDb3.ss'
)as snapshot of MirroredDb;

use MirroredDbss3;
go

select
    name,
    size
from sys.database_files;

Ve aşağıdaki sonuç kümesini alıyorum:

name            size
MirroredDb      392
MirroredDb_log  104

Burada gördüğünüz gibi, DBCC SHRINKFILEkomut aslında ayna veritabanına yansıtılır.


Teşekkür ederim, günlük dosyasının boyutunun ana sunucudan da kopyalandığını fark etmedim. Ancak, işlem günlüğü boyutu nedeniyle yansıtmanın işlevsel olmaması durumunda, aynayı silmek ve yeniden oluşturmak için tek çözüm nedir? Yansıtma işlemi çalışmadığında ayna günlüğünü güvenle küçültmenin bir yolu yok mu?
Rachel

Yansıtılmış veritabanına bağlanamazsınız, bu nedenle DBCC SHRINKFILEüzerinde çalıştıramazsınız . Ya ayna oturumunuzu bu veritabanındaki yansıtmayı kaldırmadan düzeltebiliyorsanız, orada yapılması gereken biraz daha araştırma var. Dosya boyutu nedeniyle askıya alındı ​​gibi görünüyor. Ortağınızı sürdürmeyi denediniz mi?
Thomas Stringer

Evet, ama hemen askıya alındı. Yansıtma durduğundan bu yana çok fazla zaman geçti, bu yüzden çok sayıda veri hala "shrink günlük dosyası" bölümüne ulaşmadan önce aktarılması gerekiyor olduğunu varsayıyorum. Dosyayı küçültmek için ayna veritabanından çalıştırabileceğim bir şey gibi farkında olmadığım başka bir yol olduğunu umuyordum, ya da bazı dosya sistemi manipülasyonu, ama durum böyle görünmüyor. Cevabınız yine de çok yararlı, bu yüzden teşekkür ederim :)
Rachel

Artık umut yok. Veritabanı askıya alındıktan / bağlantısı kesildiğinde ve bir günlük yedeklemesi birincil olarak yürütüldüğünde, aynayı yeniden başlatma olmadan senkronize hale getirmek için hemen hemen durursunuz.
Jason Cumberland
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.