A Non-DBA Bertanya: Bagaimana Cara Menyalin / Memindahkan instance SQL Server tanpa rasa sakit ke Server lain melalui Backup / Restore?

11

Kami baru saja mendapat server baru jadi saya perlu menyalin contoh SQL Server 2008 yang ada dari kotak db lama.

Saya biasanya melakukan ini dengan menyalin .mdf dan mencatat file-file dan melampirkannya, tetapi saya tidak dapat menghapus dbs karena mereka digunakan 24/7 jadi saya telah membuat cadangan basis data dan memulihkannya pada yang baru mesin. Namun saya telah berakhir dengan beberapa masalah salah satunya terkait dengan pengguna yatim . Jadi yang saya cari adalah proses gagal-aman untuk memindahkan semuanya dengan sedikit kerepotan / gangguan / sakit kepala. Saya seorang. Net dev dengan jumlah SQL yang cukup di bawah ikat pinggang saya, tetapi pekerjaan dalam SQL Server sebagian besar merupakan misteri bagi saya dan saya menemukan dokumentasi MS menyakitkan untuk menjaring.

Tolong bantu.

5arx
sumber
1
Anda dapat menemukan beberapa ide di pertanyaan sebelumnya ini . Tetapi jawaban sebelumnya cukup jelas. Saya pikir ide terbaik adalah membuat mirroring dan memecahkannya setelah itu, atau pengiriman Log (hanya dapat dilakukan dari wizard) untuk semua dbs dan hanya mengembalikan lebih lanjut cadangan log yang diperlukan, tetapi jika Anda mengatakan Anda bukan DBA , maka mungkin metode cadangan lebih baik.
Marian

Jawaban:

10

Jika Anda tidak dapat membuat database offline, Anda harus melakukan backup / restore. Saya akan menyarankan yang berikut ini:

  1. Instal SQL 2008 di kotak baru, menggunakan struktur file yang sama dengan kotak lama untuk file MDF dan LDF.
  2. Ambil cadangan semua database di kotak lama.
  3. Pulihkan master dari kotak lama ke kotak baru setelah SQL dimulai dalam mode pengguna tunggal. Pulihkan metode master
  4. Pulihkan setiap basis data dari kotak lama ke kotak baru dengan opsi NORECOVERY untuk dapat menerapkan cadangan Diff atau T-log di masa mendatang.
  5. Pulihkan msdb dari kotak lama ke kotak baru.

Jika Anda membangun dan mengonfigurasi kotak baru agar terlihat persis seperti yang lama, maka Anda akan mengalami kerepotan minimal.

Saya tidak tahu seberapa besar database Anda, sehingga metode ini bisa memakan waktu lama. Hal termudah untuk dilakukan adalah mematikan kotak lama dan menyalin file MDF dan LDF dan kemudian (setelah memulihkan master) Anda hanya perlu me-restart SQL agar database Anda daring. Tapi Anda menyatakan bahwa itu bukan opsi, karena basis data tidak diizinkan untuk luring.

SQLRockstar
sumber
3
Jangan lupa menyalin perubahan data apa pun yang dilakukan setelah mengambil cadangan. Anda dapat mengambil cadangan berbeda atau cadangan tlog dan menerapkannya ke server baru setelah itu habis, tetapi sebelum Anda beralih.
Eric Humphrey - lotsahelp
Poin baiknya, saya lupa menyebutkan itu juga. mungkin saya harus memasukkan konfigurasi mirror db, yang dapat rusak setelahnya?
SQLRockstar
1
Saya akan membayangkan seseorang sudah memiliki artikel yang luas tentang berbagai cara untuk memigrasi server. Juga, inilah artikel tentang mentransfer login ke server baru: support.microsoft.com/kb/246133
Eric Humphrey - lotsahelp
8

Anda menyebutkan operasi 24/7, jadi cara terbaik untuk melakukan ini adalah membuat cermin basis data pada sistem baru, maka Anda dapat dengan mudah beralih dengan minimum - mungkin nol, tergantung pada bagaimana aplikasi Anda disusun - downtime menggunakan klien- pengalihan sisi. Langkah-langkah dasarnya adalah:

  1. Pastikan basis data utama Anda berjalan dalam mode pemulihan LENGKAP .
  2. Cadangkan primer dan kembalikan ke cermin WITH NORECOVERY
  3. Buat "titik akhir" pada kedua server, dan pastikan konektivitas (misalnya aturan firewall), mengatur port dan alamat IP dengan benar) misalnya:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
    
  4. Atur mirroring di cermin, arahkan ke primer:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
    
  5. Dan pada primer, menunjuk pada mirror (hanya nama database dan alamat IP yang berbeda.

  6. Kemudian, ketika saatnya tiba, alihkan primer ke cermin:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO
    

Catatan: Saya berasumsi bahwa kedua server ini berada di jaringan yang sama, jadi tidak apa-apa untuk beroperasi dalam mode sinkron. Jika ini lebih dari tautan WAN, gunakan mode async.

Gayus
sumber