Ekleme / ayırma ve yedekleme / geri yükleme


14

Başka bir sınama ortamı kurmak için yinelenen bir veritabanı yapmak için veritabanı (bir bütün olarak) başka bir sunucuya aktarmak gerekir.

İki seçeneğim var:

  1. Kaynak sunucuda tam yedekleme / hedef sunucuda geri yükleme;
  2. Kaynak sunucudan ayırın / hedef sunucuya ekleyin.

Gereksinimlerime göre iki çözümün artıları ve eksileri nelerdir?

SQL Server 2008 Enterprise kullanıyorum.

Yanıtlar:


12

Yedekleme / geri yükleme normalde tercih ettiğiniz yöntem olmalıdır. Çoğu durumda daha hızlı olacaktır.

Üretimi test etmek için de tutarlı bir şekilde kullanabilirsiniz.

Yedekleme / geri yükleme ile ayırma / ekleme arasında belirtilen bu soruya da bakın:

SQL Server Geçişi, veri ve günlük dosyalarının kopyalanmasına karşı yedeklemeyi geri yükler

WITH COPY_ONLYMevcut bakım planı yedekleme zincirini kırmaması için yedeklemeyi seçeneği eklediğinizden emin olun .


SQL 2008 Enterprise yedek sıkıştırmayı tanıttı; Sıkıştırılmış yedeklemenin 100 GB'den önemli ölçüde küçük olması ve MDF / LDF'lerin kopyalanmasından daha fazla yazma / kopyalama / yükleme yapma olasılığı daha yüksektir.
Thomas Rushton

6
  1. Veritabanının ayrılması veritabanını çevrimdışı duruma getirir. Veritabanını başka bir sunucuya kopyalarken çevrimiçi kalması için bir yedek oluşturun.
  2. Yedekleme dosyasını (.bak) taşımak ve geri yüklemek birden fazla mdf / ldf dosyasını taşımaktan ve eklemekten daha basit / daha kolay olabilir (veritabanını söktüğünüz gibi).
  3. Kağıt üzerinde, bir veritabanı ayırma / ekleme teknik olarak daha hızlı olabilir, ancak pratikte, bir yedekleme / geri yükleme daha hızlı ve daha kolay olabilir. Bir veritabanını çıkardığınızda, önce orijinal veritabanını çevrimdışına almanız gerekir (herkesin ve her şeyin bağlantısını kesin) ve sonra yeniden bağlayana kadar veritabanı kullanılamaz. Yedekleme ile tüm dosyalar gruplandırılırken, tüm dosyaları da takip etmelisiniz.

Yedeklemeye / geri yüklemeye karar verirseniz, mevcut bakım planının yedekleme zincirinin kırık olmadığından emin olmak için yedekleme sırasında WITH COPY_ONLY seçeneğini kullanın.

Bir .bak dosyası iyi sıkıştırır, bu nedenle yedekleme yapmaya karar verirseniz, taşımadan önce yedeklemeyi sıkıştırmak, aktarım zamanından tasarruf edebilir.


4

Orijinal veritabanını çalışır durumda bırakır gibi yedekleme / geri yükleme için gider.

Özellikle 'test etmek için üretim' dönüşümü yapıyorsanız, üretim veritabanının çevrimiçi kalması önemlidir.

Yedekleme / geri yükleme de daha güvenli bir seçenektir: Dosya, ayırmanın başlangıcı, kopya, ek, vb. Arasında bir yerde bozulursa ne olur? En azından bir yedekleme yaparsanız ve dosya bozulursa, baştan başlayabilirsiniz. Bu bir ayırma ile olursa, veritabanınız gitti.

Ayrıca, bana (her şeyden daha fazla bir his olsa da), yedekleme / geri yükleme "günlük iş" iken, ayırma / ekleme istisnai durumlarda yaptığınız bir şeydir. Bana bu fikri nereden bulduğumu sorma ;-)


1

Her zaman yedekleme / geri yükleme "geri yükleme" bölümü ile ilgili sorunlar yaşadım. Sonunda vazgeçtiğim ve o zamandan beri ayrılan / kopyalayan / eklediğim için detayları gösteremiyorum.

Ayırma ile ilgili tek şey, DBMS'nin de veritabanını da silemeyeceğinden emin olmanız gerektiğidir. Bu oldu, ve bu hoş bir manzara değil.


5
DBMS, ayrılırken veritabanını silmez. Detach dosyaları siler ve geri yüklemede sorunlar varsa ne tür bir dükkandasınız?
gbn

@Will: sp_detach_db DROP değil: ayrı olarak verilmesi gereken 2 ayrı ve ilgisiz komut. Ayrılmış veritabanları DROPped edilemez veya SQL yoluyla dosyalar silinemez. Bırakılan bir veritabanı sökülemez. Detach kod veya SSMS aracılığıyla "dosyaları sil" seçeneğine sahip değildir. Bu nedenle, ilk yorumumu haklı çıkarabilirim çünkü DROP'daki dosyaları kasten seçme seçeneğini seçmelisiniz. Ayırmak değil
GBN

1

copy_onlyBu yöntemi kullanarak bir DOS kabuğundan bir yedekleme öneririm (işlem günlüklerini kesmemeniz için) :

Dizinden çalıştır C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backup:

backup.bat SQLDBNAME

Nerede backup.batiçeren (satır sonu okunabilmesi için eklenmiştir) :

sqlcmd.exe -U username -P xxxxxxx -S SQL-SERVERNAME 
    -Q "BACKUP DATABASE %1 TO DISK = '%1_COPYONLY.BAK' WITH COPY_ONLY,INIT;"
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.