Saya dulu sering memindahkan database, karena konfigurasi ulang SAN dan migrasi.
Dengan asumsi bahwa Anda memindahkan seluruh server pada satu waktu, saya akan pergi dengan sesuatu seperti jalur Anda # 2. (Jika Anda memindahkan satu database pada suatu waktu, dan akhirnya melakukan setiap database pada server, itu akan lebih bermasalah karena Anda harus mengubah jalur ke file.)
Perhatikan bahwa "single_user" tidak selalu berarti ANDA. Anda bisa pergi ke database DBCC CHECKDB dan tidak dapat masuk karena seseorang sudah ada di sana. Persiapkan skrip yang dapat Anda jalankan untuk mem-boot "semua orang kecuali Anda" dari database dan simpan di tempat yang praktis. Perhatikan bahwa SQL 2000 tidak memiliki fitur "jauhkan semua orang" yang sama dengan versi yang lebih modern.
Salah satu trik lama adalah menghentikan layanan SQL Server. Ini akan mencegah login baru, tetapi siapa pun yang sudah terhubung dapat melanjutkan seperti biasa. Jadi: hubungkan melalui jendela SSMS sehingga Anda dapat melakukan pekerjaan, lalu jeda layanan, lalu keluarkan koneksi yang tidak diinginkan, lakukan hal Anda melalui jendela perintah SSMS (bukan GUI, itu membuat dan merusak banyak koneksi) dan kemudian berhenti-jeda layanan. Peringatan: Saya tidak yakin bagaimana itu akan dimainkan di sebuah cluster. Mungkin ingin failover.
Sangat berguna untuk memiliki cara untuk menjaga semua pengguna aplikasi keluar dari server sampai Anda menyelesaikan pekerjaan Anda. Jika tidak, koneksi dapat mulai bermunculan saat Anda mencoba melakukan sesuatu, yang dapat menyebabkan pertentangan sumber daya dan / atau kelambatan. Saya telah menggunakan cara-cara berikut di masa lalu, tergantung pada situasi yang tepat: Mematikan server aplikasi. Penggunaan ALTER DATABASE .. SET RESTRICTED_USER (Jika akun aplikasi adalah anggota peran db_owner, sysadmin, atau dbcreator, itu masalah. ) Memberitahu pengguna bahwa sistem akan offline pada waktu tertentu, seperti hari Minggu pagi. (Ini tidak akan bekerja di lingkungan 24x7 "nyata".) Mencabut NIC yang menghadap server aplikasi atau pengguna. (Dalam hal ini, saya bisa masuk melalui NIC lain yang terhubung ke jaringan khusus admin atau melalui ILO.)
Melepaskan sejumlah besar basis data dan memasangnya kembali bisa jadi banyak pekerjaan. Jika Anda melakukannya, pastikan skrip "attach" Anda sudah ditulis sebelumnya.
Saya sudah banyak berhasil menghentikan SQL Server, menyalin semuanya, mengubah huruf drive dan memulai SQL Server. Tidak ada detach / attach. Selama SQL Server tidak aktif dan Anda menyalin (bukan PINDAHKAN) file, Anda tidak bisa mendapatkan terlalu banyak masalah, bahkan jika Anda memindahkan database sistem. Karena jalurnya sama, SQL Server tidak akan menyadari ada yang berubah saat layanan dimatikan. Pastikan Anda mendapatkan huruf drive yang diarahkan kembali ke volume yang benar atau hal-hal buruk akan terjadi pada Anda.
Masalah saya yang paling sering adalah tidak mendapatkan ACL pada direktori file yang benar. Versi yang lebih modern dari SQL Server lebih baik di pengaturan hanya izin yang kebutuhan account layanan sementara versi tampak kurang rewel. Jika Anda lupa mengatur ACL, dan akun layanan bukan administrator lokal (bukan yang saya sarankan), satu atau lebih database mungkin tidak terbuka saat instance dimulai. Jangan panik, ubah saja ACL dan lampirkan database.
Saya biasanya menggunakan ROBOCOPY untuk melakukan pekerjaan semacam ini. Ada saklar baris perintah untuk melestarikan ACL.
Menggunakan perhitungan / verifikasi CRC bukanlah ide yang buruk, tetapi saya belum pernah melakukannya. Ketika basis data kembali, saya menjalankan CHECKDB () pada semuanya. Saya biasanya akan menyiapkan skrip untuk ini sebelumnya, daripada mengandalkan memulai pekerjaan pemeliharaan secara manual. Dengan begitu, saya dapat memeriksa beberapa database yang lebih kecil terlebih dahulu sebelum memeriksa database besar yang bisa memakan waktu beberapa menit atau berjam-jam untuk dijalankan. Saya ragu bahwa pemeriksaan CRC (atau alat Bandingkan Data Redgate) akan menemukan sesuatu yang CHECKDB () akan lewatkan, dan jika itu SQL Server tidak akan dapat memperbaikinya.
Setelah saya menyalin file, tetapi sebelum saya memulai kembali instance, saya akan pergi dan sedikit mengubah file folder OLD dengan mengganti nama salah satu folder. Ini adalah pemeriksaan tambahan terhadap masalah "oops, server masih menunjuk ke file lama".
Jangan terburu-buru untuk menjatuhkan file lama dan memulihkan ruang pada penyimpanan lama dan pastikan bahwa cadangan lengkap Anda telah berjalan dengan sukses. Tes kembalikan beberapa cadangan tersebut ke tempat lain. Setelah Anda memiliki checkdb () yang berjalan baik dan cadangan lengkap yang baik, maka Anda dapat berpikir untuk menjatuhkan penyimpanan lama itu dan mematikan Lefthand.
Masalah terburuk yang saya alami dengan migrasi ini terjadi setelah saya pikir saya sudah selesai. Itu akan menjadi admin SAN yang memberi tahu saya bahwa sesuatu telah terjadi dan sistem file saya diacak. .
Masalah menyenangkan lainnya adalah SAN menjadi lambat tanpa alasan yang jelas. Jika Anda berpikir bahwa akan memakan waktu 10 jam untuk menyalin data Anda dan Anda 30% disalin pada jam nomor 9, Anda memiliki masalah. Tonton waktu transfer (acara robocopy% disalin dan berikan perkiraan waktu, atau Anda dapat menggunakan Perfmon) dan miliki paket cadangan jika terjadi sesuatu yang aneh.
Juga, saya tidak yakin apakah volume Anda akan dipartisi untuk Anda, tetapi Anda mungkin ingin memastikan bahwa mereka menggunakan offset 1 MB. Pada Windows Server 2008 dan lebih baik, ini seharusnya tidak menjadi masalah. Pada OS yang lebih lama, itu. Ada banyak hal yang bisa googlable dalam hal ini, dan orang-orang penyimpanan Anda harus mengetahuinya, tapi saya akan bertanya.