Ayırma / kopyalama / ekleme veya yedekleme-geri yükleme-yeniden oynatma yoluyla veri taşımalı mıyım?


17

Veritabanı dosyalarını yeni bir SAN'a (eski bir SAN'dan) geçirmeye başlamak üzereyim abd Bunu uygulamak için birkaç seçeneğim var. (1) Sunucudaki yeni bir veritabanına tam yedeklemeyi geri yükleme çabası düzeyine bakmam önerildi. Ancak, (2) orijinal planım, veritabanını ayırarak ve sonra yeniden bağlayarak dosyaları eski SAN'dan yeni SAN'a kopyalamaktı.

Bağırsaklarım, daha güvenli olduğu için ayırmayı, kopyalamayı ve eklemeyi tercih ettiğimi söylüyor, ama bu sadece benim naifim olabilir. Bir işlemi kaçırmak ya da veritabanlarını yeniden adlandırma sürecinde bir şekilde "bir şey kırmak" istemiyorum.

Sanırım sorum, YEDEKLEME-GERİ YÜKLEME-Tekrarla seçeneğine olan şüphemde haklı olup olmadığım ve bu seçeneğin diğer yararları veya riskleri nelerdir?

Yanıtlar:


16

Şahsen, ayırma / bağlama mekanizmalarından kaçınırım. Özellikle SQL Server 2000'de, sunucuyu her zaman geri getireceğinize ve bu dosyaları ekleyebileceğinize güvenmiyorum. Bunun düzgün bir şekilde gerçekleşmediği birçok hikaye duydum - sadece bir B Planınız olması Plan A'yı otomatik olarak mantıklı kılmaz.

Yedekleme / geri yükleme ile B Planına gitmek zorunda kalmazsınız. Yedekleme başarısız olursa, veritabanınız hala çalışır durumdadır. Geri yükleme başarısız olursa, eski veritabanınız hala çalışır durumdadır. Her iki durumda da orijinal veritabanının çalışmasını geri yükleyebilir ve planı daha sonra yeniden ziyaret edebilirsiniz. Buradaki SQL Server'ı durdurma ve / veya ayırma üzerindeki ekstra güvenliğe ek olarak, bu aynı zamanda yedekleme / geri yükleme metodolojisinden ayırmayı da test edebileceğiniz anlamına gelir (şu anda yedeklemeleri gerçekleştirmek için alanınız ve test etmek için başka bir örnek varsa) onarmak). Veritabanlarını ayırmadan veya SQL Server'ı durdurmadan ayırma yaklaşımını gerçekten test edemezsiniz ve bu, uygun bir bakım penceresinin dışında yapmak zordur. Ve son olarak, diğer yaklaşımlarla SQL Server'ı ayırana veya indirene kadar dosyaları kopyalamaya bile başlayamazsınız.

SQL Server'ın altında-çek-sürücü-out yönteminden başka bir avantajı: yedekleme / geri yükleme ile çeşitli dosyaları daha önce olduğundan farklı sürücü harflerine taşıyabilirsiniz. Örneğin, yeni bir SAN'a taşındığımızda daha fazla birime sahip olduk, böylece tempdb'yi T: \ (daha önce var olmayan), bazı veri ve günlük dosyalarını yeni sürücü harflerine, vb. sahip olduğumuz tüm yeni I / O kapasitesini daha iyi kullanmak için. SQL Server'ı kapatıp diskleri değiştirirseniz, aynı sürücü harflerine ve aynı sayıda birime sahip olmanız gerekir.


7

SAN'ı yeniden yapılandırma ve taşıma işlemleri nedeniyle veritabanlarını neredeyse sürekli taşıyordum.

Bir seferde tüm sunucuyu taşıdığınızı varsayarsak, # 2 yolunuz gibi bir şeyle giderdim. (Bir kerede bir veritabanı taşıyorsanız ve sonunda bir sunucudaki her veritabanını yapıyorsanız, dosyaların yollarını değiştirmeniz gerektiğinden bu daha sorunlu olacaktır.)

"Single_user" ifadesinin SİZİN anlamına gelmediğini unutmayın. DBCC CHECKDB veritabanına gidebilir ve içeri giremezsiniz çünkü birisi zaten oradadır. Bir veritabanından "siz hariç herkesi" önyüklemek için çalıştırabileceğiniz bir komut dosyası hazırlayın ve kullanışlı bir yerde saklayın. SQL 2000'in daha modern sürümlerle aynı "herkesi dışarıda tutma" özelliklerine sahip olmadığını unutmayın.

Eski bir hile SQL Server hizmetini duraklatmaktır. Bu, yeni girişleri engelleyecektir, ancak zaten bağlı olan herkes her zamanki gibi devam edebilir. Yani: bir SSMS penceresi üzerinden bağlanın, böylece işi yapabilir, ardından hizmeti duraklatabilir, ardından istenmeyen bağlantıları başlatabilir, SSMS komut penceresi (GUI değil, çok sayıda bağlantı kurar ve keser) hizmet. Uyarı: Bunun bir kümede nasıl oynayacağından emin değilim. Yük devretme isteyebilir.

İşinizi tamamlayana kadar tüm uygulama kullanıcılarını bir sunucudan uzak tutmak için kullanışlı bir yöntemdir. Aksi takdirde, bir şeyler yapmaya çalışırken bağlantılar açılmaya başlayabilir, bu da kaynak çekişmesine ve / veya yavaşlığa yol açabilir. Kesin duruma bağlı olarak, geçmişte aşağıdaki yolları kullandım: Uygulama sunucularının kapatılması ALTER DATABASE kullanımı .. SET RESTRICTED_USER (Uygulama hesapları db_owner, sysadmin veya dbcreator rollerinin üyesiyse, bu bir sorundur. ) Kullanıcılara sistemin Pazar sabahı gibi belirli bir zamanda çevrimdışı olacağını söyleyin. (Bu, "gerçek için" 24x7 ortamda çalışmaz.) Uygulama sunucularına veya kullanıcılara bakan NIC'nin bağlantısını kesin. (Bu durumda, yalnızca yönetici ağına bağlı başka bir NIC veya ILO aracılığıyla girebilirim.)

Çok sayıda veritabanını ayırmak ve bunları yeniden bağlamak çok iş olabilir. Bunu yaparsanız, "insert" komut dosyanızın önceden yazılmış olduğundan emin olun.

SQL Server'ı durdurma, her şeyi kopyalama, sürücü harflerini değiştirme ve SQL Server'ı başlatma konusunda çok başarılı oldum. Çıkarma / takma yok. SQL Server kapalı olduğu ve dosyaları (MOVING değil) kopyaladığınız sürece, sistem veritabanlarını taşıyor olsanız bile çok fazla sorunla karşılaşamazsınız. Yollar aynı olduğundan, SQL Server hizmet kapalıyken hiçbir şeyin değiştiğini fark etmez. Sürücü harflerini doğru ciltlere geri döndürdüğünüzden emin olun, aksi takdirde işler sizin için kötü gider.

En sık karşılaştığım sorun, dosya dizinlerindeki ACL'leri doğru almamaktı. SQL Server'ın Daha modern versiyonları daha iyi ayarlanması altındadır sadece eski sürümleri ise hizmeti hesabı için gereken daha az huysuz görünüyor izinleri. ACL'leri ayarlamayı unutursanız ve hizmet hesabı yerel bir yönetici değilse (bunu önermediğimden değil), örnek başlatıldığında bir veya daha fazla veritabanı açılmayabilir. Panik yapmayın, sadece ACL'leri değiştirin ve veritabanını ekleyin.

Genelde bu tür işleri yapmak için ROBOCOPY kullanıyorum. ACL'leri korumak için bir komut satırı anahtarı vardır.

CRC hesaplaması / doğrulaması kullanmak kötü bir fikir değildir, ancak bunu hiç yapmadım. Veritabanları geri geldiğinde, hepsinde CHECKDB () çalıştırıyorum. Ben genellikle bir bakım işini tekmelemek yerine bu vaktinden önce bir senaryo hazırlayacağım. Bu şekilde, çalıştırmak için birkaç dakika veya saat sürebilen büyük bir veritabanını kontrol etmeden önce birkaç küçük veritabanını kontrol edebilirim. Bir CRC denetimi (veya bir Redgate Veri Karşılaştırma aracı) CHECKDB () özleyecek bir şey bulur ve SQL Server bunu düzeltmek mümkün olmaz şüphe.

Dosyaları kopyaladıktan sonra, ancak örneği yeniden başlatmadan önce, klasörlerden birini yeniden adlandırarak OLD klasörlerinin dosya yolunu biraz değiştireceğim. Bu "ayy, sunucu hala eski dosyaları işaret ediyor" sorununa karşı ek bir denetimdir.

Eski dosyaları bırakmak ve eski depolama alanında yer açmak için acele etmeyin ve tam yedeklemelerinizin başarılı bir şekilde çalıştığından emin olun. Bu yedeklerden birkaçını başka bir yere geri yükleme testini yapın. İyi checkdb () çalışmalarına ve iyi tam yedeklemelere sahip olduğunuzda, eski depolamayı bırakıp Sol El'i kapatmayı düşünebilirsiniz.

Bu göçlerle ilgili yaşadığım en kötü problemler, yapıldığımı düşündükten sonra oldu. Bu SAN yöneticisi bana bir şeylerin olduğunu ve dosya sistemlerimin karıştığını söylerdi. (Yeniden yayınlandı, yeniden biçimlendirildi, tekrar kopyalandı.)

Bir başka eğlenceli sorun da SAN'ın belirgin bir nedenden ötürü yavaş olmasıdır. Verilerinizin kopyalanmasının 10 saat süreceğini ve 9. saatte% 30 kopyalandığınızı düşünüyorsanız, bir sorununuz vardır. Aktarım sürelerini izleyin (robokopi kopyalanan yüzdeyi gösterir ve zaman tahminleri verir veya Perfmon'u kullanabilirsiniz) ve bir şey garipleşirse bir geri dönüş planına sahip olun.

Ayrıca, birimlerinizin sizin için bölümlenip bölünmeyeceğinden emin değilim, ancak 1 MB'lik bir ofset kullandıklarından emin olmak isteyebilirsiniz. Windows Server 2008 ve sonraki sürümlerde bu bir sorun olmamalıdır. Eski işletim sistemlerinde, öyle. Bu konuda bir sürü googlable şey var ve depolama adamlarınız bunu bilmeli, ama sormalıyım.


2

İlk önce veri taşıma işlemek için depolama dizisinin özelliğini kullanma seçeneğine baktım. Satıcı desteklemediği için bunlar mevcut değilse, satın almadınız veya SAN yöneticisi bunu nasıl yapacağını bilmiyor ...

Sonra sadece aşağıdaki adımları kullanırdım.

  1. Yeni depolama alanını SQL Server'a sunun.
  2. SQL Hizmetlerini Durdurma
  3. Eski sürücüden yeni sürücüye tüm verileri KOPYALA (robokopi kullanıyorsanız izinleri dahil etmeyi unutmayın)
  4. Sürücü harflerini eski sürücülerden çıkarın.
  5. Yeni sürücülerdeki sürücü harflerini eski sürücü harfleriyle eşleşecek şekilde değiştirme
  6. SQL Hizmetlerini başlatın

Bu kadar.

SQL Server hiçbir şeyin değişmediğini bildiği sürece, ayırma / ekleme gerekmez. Ve bir şey korkunç bir şekilde yanlış giderse, eski depolama dizisindeki eski LUN'da oturan veritabanlarının eski kopyasına sahipsiniz. Geri dönmek, sadece sürücü harflerini değiştirmekle ilgilidir.

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.