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.