Upgrade database SQL Server 2000 ke 2008 R2 dan aktifkan fitur baru

23

Saya baru saja memutakhirkan database SQL Server 2000 ke 2008 R2.


Apa yang saya lakukan adalah:

  1. Shutdown SQL Server 2000 (express) service di mesin lama,
  2. Pindahkan datafiles ( mydatabase.mdf dan mydatabase.ldf ) ke mesin baru,
  3. Jalankan SQL Server Management Studio 2008,
  4. Terhubung ke mesin basis data lokal,
  5. Lampirkan datafiles ke basis data.
  6. Ubah tingkat kompatibilitas database ke SQL 2008 (100).

Pertanyaan: Apa lagi yang harus saya lakukan untuk menyelesaikan migrasi?

Aku ingin:

  1. menggunakan fitur baru seperti checksumming dan model pemulihan penuh,
  2. membuat database ini persis seperti yang dibuat di SQL 2008 R2,
  3. membuat database ini sepenuhnya kompatibel, benar dan sangat cocok untuk yang baru, mesin database SQL 2008 R2.

Dengan kata lain: Saya hanya ingin tahu bagaimana dengan benar dan lengkap mengkonversi database SQL 2000 lama ke database 2008 R2 baru, tenang bahwa semuanya dilakukan dengan benar dan senang dengan semua fitur baru.


Saya mengajukan pertanyaan ini, karena saya telah menemukan banyak situs di Internet yang mengatakan banyak hal berbeda yang membuat saya bingung: beberapa mengatakan bahwa diperlukan untuk membangun kembali indeks, yang lain mengatakan untuk melakukan hal-hal lain ... dan sekarang saya tidak tahu apa-apa jadi saya ingin mendengar pendapat orang yang berpengalaman dan instruksi yang jelas, langkah-demi-langkah. Saya bekerja untuk perusahaan yang sangat kecil, saya sendiri dan saya tidak ingin mengacaukan semuanya.


Pak, saya sangat terkesan dengan jawaban Anda, saya tidak terlalu berharap.


Demikian beberapa komentar:

  1. Basis data sekarang dalam produksi. Seperti yang saya katakan, itu ditingkatkan menggunakan metode deattach-attach seperti yang saya deskripsikan di posting pertama dan seperti yang dijelaskan pada MSDN: http://msdn.microsoft.com/en-us/library/ms189625.aspx Itu harus dilakukan dengan cepat, jadi saya terpaksa melakukannya dengan cara itu. Mari kita lupakan betapa tidak pantasnya itu dan fokus pada situasi saat ini.

  2. Pengguna / pengajuan bukan masalah di sini - hanya ada sedikit dan izinnya sederhana.

  3. Aplikasi yang menggunakan basis data kompatibel dengan SQL 2000 hingga 2012 jadi ini bukan masalah juga.

  4. File database (MDF) tidak besar - hanya sekitar 1GB.


Beberapa pertanyaan lagi:

  1. Anda merekomendasikan untuk menggunakan metode backup / restore, tetapi saya lakukan seperti yang ditulis di atas, jadi bisakah saya menemui masalah sekarang? Semuanya bekerja tanpa masalah.

  2. Tentang checksumming dan model pemulihan penuh: tidak tersedia / diaktifkan pada SQL 2000, jadi saya ingin menggunakannya sekarang. Anda mengatakan bahwa satu-satunya hal yang perlu saya lakukan adalah mengaktifkan opsi itu di properti basis data? Saya pernah membaca di suatu tempat, bahwa itu tidak cukup dan saya juga harus membangun kembali indeks atau sesuatu. Saya benar-benar tidak tahu, saya hanya bertanya.

  3. Saya bersiap untuk memigrasi database ini ke SQL 2012 - jadi pertama-tama dari SQL 2000 ke 2008 R2, sekarang dari 2008 R2 hingga 2012 (tidak mungkin untuk melakukan ini secara langsung karena kurangnya dukungan dari database SQL 2000 di SQL 2012). Jadi saya mengerti bahwa saya harus mengikuti panduan Anda: backup di 2008 R2 dan restore pada 2012, lalu lakukan sisa tips Anda, kan?

  4. Tolong jelaskan saya metode backup / restore: Apakah ini seperti dump database ke query SQL dan kemudian mengembalikannya dengan mengeksekusi sekelompok query? Akankah metode ini dengan cara "defragment" database saya? Jika tidak, bagaimana cara defrag / mengoptimalkannya secara manual?

  5. Karena kami menggunakan SQL 2000 Express selama bertahun-tahun (tanpa antarmuka manajemen), kami melakukan pencadangan hanya dengan menghentikan engine dan RAR direktori DATA. Untuk saat ini, karena kami menggunakan SQL 2008, bukankah ini masih lebih baik daripada menggunakan fungsi cadangan di Management Studio?

  6. Mode pemulihan penuh dengan cadangan log Transaksi yang sering - Di mana log Transaksi disimpan - apakah ini file LDF? Bagaimana saya bisa mencadangkannya dengan benar?


Saya tahu bahwa pertanyaan saya mungkin terdengar konyol, saya bukan admin basis data profesional, tetapi saya satu-satunya orang di sini yang dapat melakukan tugas "inti" seperti memperbarui mesin basis data. Saya juga yakin bahwa pengetahuan Anda akan banyak membantu orang lain seperti saya.

Terima kasih banyak atas waktu dan pengetahuan Anda, saya sangat menghargai ini.

Mark Saelic
sumber
2
Lain kali saya sangat merekomendasikan backup / restore daripada mematikan SQL Server, memindahkan file dan melampirkannya. Persis, begitu banyak hal yang bisa salah. Di sisi positifnya, selamat atas akhirnya membuang perangkat lunak database berusia 14 tahun!
Aaron Bertrand

Jawaban:

37

Langkah terpenting yang harus dilakukan adalah menjalankan Upgrade Advisor pada database SQL Server 2000 dan mengatasi semua masalah yang dilaporkan olehnya.

Sebagai praktik terbaik, gunakan alat Penasihat Upgrade pada database warisan SQL Server 2000 Anda dan impor file jejak ke alat Penasihat Upgrade untuk analisis. File jejak memungkinkan Penasihat Peningkatan mendeteksi masalah yang mungkin tidak muncul dalam pemindaian sederhana dari database, seperti TSQL yang tertanam dalam aplikasi. Anda bisa menangkap jejak TSQL menggunakan SQL Profiler di server SQL Server 2000 Anda selama jam-jam biasa dan menganalisis jejak ini menggunakan Upgrade Advisor.

Jadi sisa langkahnya adalah:

Pada hari migrasi:

  1. skrip login kami di server 2000 menggunakan sp_help_revlogin .
  2. Script out jobs dan server tertaut dari sql 2000 server.
  3. hentikan server web yang terhubung ke 2000 server. Pastikan tidak ada aplikasi yang terhubung ke server 2000.
  4. backup database Anda dan pulihkan pada tujuan sql 2008 R2 server. (catatan: Jangan lepaskan / pasang karena ada yang salah dan Anda akan berakhir dengan database terpisah dan tidak ada cadangan!)
  5. Setelah cadangan Anda dipulihkan pada server R2 2008, jalankan output dari sp_help_revlogin pada server 2008 R2 untuk membuat ulang login.
  6. Sinkronkan pengguna yatim piatu (Jika ada) dan buat kembali pekerjaan agen sql dan server yang ditautkan pada server baru.
  7. ubah tingkat kompatibilitas pada database yang dipulihkan menjadi 100.
  8. Dbcc checkdb dengan opsi all_errormsgs dan data_purity dihidupkan: DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. jalankan DBCC UPDATEUSAGE pada database yang dipulihkan DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. Perbarui statistik pada semua tabel dengan pemindaian penuh: Update Statistics table_name with FULLSCAN
  11. Opsional: Periksa level fragmentasi dan tergantung pada level fragmentasi, jalankan reorg / rekondisi semua Indeks. Anda dapat menggunakan skrip Ola .
  12. Kompilasi ulang semua SP yang digunakan sp_recompile 'procedureName'
  13. Segarkan pandangan Anda SP_REFRESHVIEW view_name
  14. pastikan untuk mengubah opsi basis data: halaman verifikasi ke CHECKSUM.
  15. Ubah model pemulihan (jika berbeda dari sql 2000) ke FULL. Jika Anda berubah menjadi model pemulihan LENGKAP, PASTIKAN Anda melakukan pencadangan Log Transaksi. Ini akan membantu Anda memulihkan point-in-time dan juga tidak mengasapi T-Log Anda.
  16. Di SQL Server 2005 dan lebih tinggi, Database Mail diperkenalkan. Jadi, Anda harus bermigrasi dari SQLMail ke Database Mail.

    USE [master]
    GO
    sp_configure 'show advanced options',1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    sp_configure 'Database Mail XPs',1
    GO
    RECONFIGURE 
    GO

Juga, jika Anda memiliki replikasi, maka Anda harus mengatur ulang. Jika ada DR yang suka logshipping atau Mirroring (baru tahun 2005 dan lebih tinggi, tetapi terdepresiasi pada tahun 2012) maka Anda harus mengatur ulang juga.

Paket DTS lama perlu dimigrasi ke SSIS menggunakan C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(baris perintah) atau menggunakan Package Migration Wizard .

Anda juga dapat menggunakan skrip saya yang ditemukan di /dba//a/36701/8783 . Meskipun, ia menggunakan metode detach / attach, saya sangat menyarankan Anda untuk menggunakan metode CADANGAN / KEMBALIKAN . Ubah skrip yang sesuai.


Sebagai catatan:

  • nyalakan Inisialisasi File Instan di server baru.
  • Memiliki beberapa file data tempdb dengan ukuran yang sama.
  • Aktifkan Bendera Jejak 1118
  • Konfigurasikan maks dan min memori dengan benar. Terutama memori Max jauh dari default.
  • Sesuaikan pengaturan MAXDOP dengan benar. Lihat /dba//a/36578/8783 untuk lebih jelasnya.
  • Yang terbaik adalah menginstal sp_Blitz dari Brent Ozar. Jalankan dan atasi masalah-masalah kritis dan prioritas tinggi yang dilaporkan olehnya.
  • Anda bahkan dapat menggunakan SQL Power Doc dari kendalvandyke - SQL Power Doc bekerja dengan semua versi SQL Server dari SQL Server 2000 hingga 2012, dan semua versi Windows Server dan sistem operasi Windows konsumen dari Windows 2000 dan Windows XP melalui Windows Server 2012 dan Windows 8. Juga berguna untuk merencanakan peningkatan - lihat fitur tersembunyi apa yang digunakan pada sebuah instance.
  • Aktifkan Optimalkan untuk beban kerja ad-hoc dan opsi kompresi cadangan default.

Mari kita jawab pertanyaan Anda ...

Apa lagi yang harus saya lakukan untuk menyelesaikan migrasi?

Lihat jawaban saya. Ini akan membantu Anda dengan benar membuat rencana migrasi. Selalu uji rencana migrasi Anda dalam UAT (non produksi) bersama dengan pengujian aplikasi yang tepat oleh pengguna bisnis.

gunakan fitur baru seperti checksumming dan model pemulihan penuh.

CHECKSUMbaru di SQL Server 2005 dan lebih tinggi. Saya telah membahasnya sebagai bagian dari langkah migrasi yang dijelaskan di atas.

full recovery modelbukan hal baru. Itu tergantung pada jenis bisnis Anda dan menentukan berapa banyak data yang bisa Anda kehilangan jika terjadi bencana.

Mode pemulihan penuh dengan cadangan log transaksi yang sering akan memungkinkan Anda untuk mengembalikan point-in-time dan dengan mengurangi jumlah kehilangan data.

membuat database ini persis seperti yang dibuat di SQL Server 2008 R2.

membuat database ini sepenuhnya kompatibel, benar dan sangat cocok untuk mesin database SQL 2008 R2 baru.

Jangan sepenuhnya memahami ini! Tetapi langkah migrasi di atas akan membantu Anda. Anda hanya perlu mengembalikan database dan mengubah level 10 kompatibilitas 100bersama dengan langkah-langkah di atas.

Saya hanya ingin tahu bagaimana cara benar dan sepenuhnya mengkonversi database SQL Server 2000 lama ke database 2008 R2 baru, tenang bahwa semuanya dilakukan dengan benar dan senang dengan semua fitur baru.

Anda harus berhati-hati dengan ini, karena ini akan memerlukan perubahan pada kode aplikasi Anda juga. Jika kode aplikasi Anda diubah untuk menggunakan fitur-fitur baru di SQL Server 2008 R2, maka Anda tidak akan menghadapi masalah apa pun - DIBERIKAN Anda telah sepenuhnya melakukan pengujian regresi lengkap aplikasi Anda di lingkungan UAT atau DEV. Ini akan memberi Anda kepercayaan diri terbaik saat melakukan migrasi aktual di PROD.


Catatan: Di atas adalah langkah-langkah yang bisa saya ingat dan saya cukup yakin bahwa tidak ada yang tertinggal. Jika saya melihat ada sesuatu yang terlewat, maka saya akan menambahkannya atau pakar lain di situs ini - silakan menambahkan!

Segala sesuatu yang diuraikan di atas perlu terlebih dahulu diputar ulang di lingkungan NON PRODUKSI untuk menghindari kejutan selama migrasi yang sebenarnya.

----------

Beberapa pertanyaan lagi:

Anda merekomendasikan untuk menggunakan metode backup / restore, tetapi saya lakukan seperti yang ditulis di atas, jadi bisakah saya menemui masalah sekarang? Semuanya bekerja tanpa masalah.

Jika semuanya bekerja dengan baik dan Anda dapat melampirkan database, maka TIDAK Anda tidak akan mengalami masalah. Detach / Attach vs Backup / Restore hanyalah sebuah metode tentang bagaimana Anda memindahkan database Anda ke tempat yang berbeda. Hanya FYI .. Backup / Restore lebih aman dan dapat diandalkan seolah-olah ada yang salah (dalam kasus terburuk) maka setidaknya Anda memiliki cadangan untuk memulihkan dan memulihkan database Anda.

Tentang checksumming dan model pemulihan penuh: tidak tersedia / diaktifkan pada SQL Server 2000, jadi saya ingin menggunakannya sekarang. Anda mengatakan bahwa satu-satunya hal yang perlu saya lakukan adalah mengaktifkan opsi itu di properti basis data? Saya pernah membaca di suatu tempat, bahwa itu tidak cukup dan saya juga harus membangun kembali indeks atau sesuatu. Saya benar-benar tidak tahu, saya hanya bertanya.

Seperti yang saya katakan, checksum baru dalam versi 2005 dan lebih tinggi. Ini adalah mekanisme di mana SQL Server akan mendeteksi kerusakan halaman terutama karena I / O. Lihat jawaban saya di sini untuk perincian lebih lanjut.

Untuk mengaktifkan CHECKSUM dan juga mengubah model pemulihan ke FULL, Anda dapat melakukannya menggunakan kode T-SQL di bawah ini:

USE master;
GO
ALTER DATABASE [your_database_name] -- change this !!
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

Catatan: Setelah Anda mengatur opsi database, itu akan bertahan ketika Anda melakukan migrasi dari 2008R2 ke 2012.

Saya sedang bersiap-siap untuk memigrasi database ini ke SQL Server 2012 - jadi pertama dari 2000 hingga 2008 R2, sekarang dari 2008 R2 hingga 2012 (tidak mungkin untuk melakukan ini secara langsung karena kurangnya dukungan 2000 database dalam SQL Server 2012). Jadi saya mengerti bahwa saya harus mengikuti panduan Anda: backup di 2008 R2 dan restore pada 2012, lalu lakukan sisa tips Anda, kan?

Ya silahkan. Seperti yang saya katakan, pemulihan cadangan adalah metode yang disukai , kecuali jika Anda memiliki alasan yang kuat untuk tidak melakukannya.

Tolong jelaskan saya metode backup / restore: Apakah ini seperti dump database ke query SQL dan kemudian mengembalikannya dengan mengeksekusi sekelompok query? Akankah metode ini dengan cara "defragment" database saya? Jika tidak, bagaimana cara defrag / mengoptimalkannya secara manual?

Backup / restore mirip dengan dump dan load yang digunakan di Sybase, Oracle atau mungkin juga MySQL. Hanya SQL Server menyebutnya .. backup / restore.

A harus membaca: Memahami Backup Server SQL oleh Paul Randall.

Sintaks Sederhana (untuk BOL rujukan sintaksis lengkap ):

backup database database_name
to disk = 'D:\backup\database_name_full.bak'
with init, stats =10

Kemudian restore dapat dilakukan pada server tujuan sebagai:

- dengan asumsi tata letak disk tujuan tidak cocok dengan server sumber

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
move 'logical_data_fileName' to 'physical_path\database_name.mdf'
move 'logical_log_fileName' to 'physical_path\database_name_log.ldf'
with recovery, stats = 10

- dengan asumsi tata letak disk tujuan cocok dengan server sumber

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
with recovery, stats = 10

Akankah metode ini dengan cara "defragment" database saya? Jika tidak, bagaimana cara defrag / mengoptimalkannya secara manual?

backup / restore tidak akan mendefrag database Anda. Anda harus menggunakan Alter Index Reorganize atau Rebuild tergantung pada level fragmentasi Anda.

Karena Anda baru mengenal SQL Server, saya sangat menyarankan Anda untuk menggunakan Ola Hallengren:

Karena kami menggunakan SQL Server 2000 Express selama bertahun-tahun (tanpa antarmuka manajemen), kami melakukan pencadangan hanya dengan menghentikan engine dan RAR direktori DATA. Untuk saat ini, seperti kita di SQL Server 2008, bukankah ini masih lebih baik daripada menggunakan fungsi cadangan di Management Studio?

Menghentikan mesin adalah hal terburuk yang dapat Anda lakukan untuk melakukan backup !!

Baca tautan Paul tentang cadangan yang saya sebutkan dan Gunakan skrip Ola. Microsoft memiliki artikel KB dengan skrip untuk melakukan pencadangan otomatis - Cara menjadwalkan dan mengotomatiskan pencadangan basis data SQL Server di SQL Server Express

Mode pemulihan penuh dengan cadangan log Transaksi yang sering - Di mana log Transaksi disimpan - apakah ini file LDF? Bagaimana saya bisa mencadangkannya dengan benar?

Setiap database SQL Server memiliki log yang mencatat semua transaksi dan modifikasi database yang dibuat oleh setiap transaksi. Log transaksi adalah komponen penting dari setiap basis data.

Ekstensi konvensi penamaan yang biasa untuk log Transaksi adalah '.LDF', tetapi bisa berupa apa saja.

Saya tidak akan menulis lebih banyak tentang ini karena ini akan membuat jawabannya sangat miring. Lihat Manajemen Log Transaksi dan jawaban saya di sini juga memiliki tautan yang sangat baik.


EDIT: 8/24/2016 .. Ini akan membantu pembaca masa depan:

Jika Anda memigrasikan seluruh instance Anda dari satu versi ke versi lain, saya akan sangat menyarankan untuk menggunakan solusi berbasis PowerShellStart-SqlMigration

masukkan deskripsi gambar di sini

Kin Shah
sumber