SQL Server 2000 veritabanını 2008 R2'ye yükseltin ve yeni özellikleri etkinleştirin


23

Yakın zamanda SQL Server 2000 veritabanını 2008 R2’ye yükselttim.


Yaptığım şey:

  1. Eski makinede Kapatma SQL Server 2000 (ekspres) servisi,
  2. Veri dosyalarını ( mydatabase.mdf ve mydatabase.ldf ) yeni makineye taşı ,
  3. SQL Server Management Studio 2008'i çalıştırın,
  4. Yerel veritabanı motoruna bağlanın,
  5. Veri dosyalarını veritabanına ekleyin.
  6. Veritabanının uyumluluk seviyesini SQL 2008 (100) olarak değiştirin.

Soru: Geçişi tamamlamak için başka ne yapmalıyım?

İstiyorum:

  1. sağlama toplamı ve tam kurtarma modeli gibi yeni özellikleri kullanmak,
  2. bu veritabanının tam olarak SQL 2008 R2'de oluşturulduğu şekilde olmasını sağlamak,
  3. bu veritabanının tamamen uyumlu, doğru ve yeni SQL 2008 R2 veritabanı motoru için uygun olmasını sağlayın.

Başka bir deyişle: Eski SQL 2000 veritabanını nasıl doğru ve eksiksiz olarak yeni 2008 R2 veritabanına dönüştüreceğimi bilmek istiyorum, her şeyin doğru yapıldığından emin olun ve tüm yeni özelliklerden memnun olun.


Bu soruyu soruyorum, çünkü Internet'te beni kafam karıştıran çok farklı şeyler söyleyen birçok site buldum: bazıları endeksleri yeniden inşa etmenin gerekli olduğunu söylüyor, bazıları ise başka şeyler yapmayı söylüyor ... Şimdi hiçbir şey bilmiyorum bu yüzden tecrübeli bir insan görüşü ve net, adım adım talimatlar duymak istiyorum. Çok küçük bir şirket için çalışıyorum, kendi başımayım ve işleri berbat etmek istemiyorum.


Efendim, cevabınızdan gerçekten etkilendim, pek beklemiyordum.


Yani bazı yorumlar:

  1. Veritabanı şimdi üretimde. Dediğim gibi, ilk yazımda anlattığım gibi deattach-attach yöntemi kullanılarak ve MSDN'de açıklandığı şekilde yükseltildi: http://msdn.microsoft.com/en-us/library/ms189625.aspx Hızlı bir şekilde yapılması gerekiyordu. bu yüzden böyle yapmak zorunda kaldım. Ne kadar uygunsuz olduğunu unutalım ve şu anki duruma odaklanalım.

  2. Kullanıcılar / kullanım süreleri burada sorun değil - yalnızca birkaçı var ve izinler basit.

  3. Veritabanını kullanan uygulama, SQL 2000 ile 2012 arasında uyumludur, dolayısıyla bu da bir sorun değildir.

  4. Veritabanı dosyası (MDF) büyük değil - sadece yaklaşık 1GB.


Birkaç soru daha var:

  1. Yedekleme / geri yükleme yöntemini kullanmanızı öneririz, ancak yukarıda yazıldığı gibi yaptım, şimdi herhangi bir sorunla karşılaşabilir miyim? Her şey sorunsuz çalıştı.

  2. Sağlama toplamı ve tam kurtarma modeli hakkında: SQL 2000'de kullanılabilir / etkin değildi, bu yüzden şimdi kullanmak istiyorum. Yapmam gereken tek şeyin veritabanı özelliklerinde bu seçenekleri etkinleştirmek olduğunu söylediniz. Bir yerde okudum, bu yeterli değil ve aynı zamanda indeksleri veya başka bir şeyi yeniden oluşturmalıyım. Gerçekten bilmiyorum, sadece soruyorum.

  3. Bu veritabanını SQL 2012'ye taşımayı hazırlıyorum - bu yüzden ilk önce SQL 2000'den 2008 R2'ye, şimdi ise 2008 R2'den 2012'ye kadar olacak (SQL 2000 veritabanlarının desteklenmemesi nedeniyle bunu doğrudan yapmak imkansızdı. SQL 2012). Bu yüzden rehberinizi takip etmem gerektiğini anladım: 2008 R2’de yedekleyin ve 2012’de geri yükleyin, sonra diğer ipuçlarını yerine getirin, değil mi?

  4. Lütfen bana yedekleme / geri yükleme yöntemini açıklayın: SQL sorgularına bir veritabanı dökümü gibi ve daha sonra bir sürü sorgu yürüterek geri yükler mi? Bu arada bu arada benim veritabanı "birleştirme"? Değilse, manuel olarak nasıl birleştirebilir / optimize edebilirsiniz?

  5. Yıllardır SQL 2000 Express kullandığımızdan (yönetim arayüzü yok), sadece motoru ve RAR DATA dizinini durdurarak yedekleme yapıyorduk. Şimdilik, SQL 2008'de olduğu gibi, Management Studio'da yedekleme işlevini kullanmaktan daha iyi değil mi?

  6. Sık İşlem günlüğü yedekleriyle birlikte tam kurtarma modu - İşlem günlüğü nerede depolanır - LDF dosyası mı? Nasıl düzgün yedeklerim?


Sorularımın saçma gelebileceğini biliyorum, profesyonel veritabanı yöneticisi değilim, ancak veritabanı motorunu yükseltmek gibi bu "zor çekirdekli" görevi yapabilen tek kişi benim. Ayrıca, bilginizin benim gibi diğer insanlara da çok yardımcı olacağından eminim.

Zaman ayırdığınız ve bilgi edindiğiniz için çok teşekkür ederim, bunu gerçekten takdir ediyorum.


2
Bir dahaki sefere SQL Server'ı kapatmak, dosyaları taşımak ve eklemek yerine yedekleme / geri yükleme yapmanızı şiddetle tavsiye ediyorum. Sadece, çok yanlış giden şeyler olabilir. Artı tarafta, 14 yaşındaki veritabanı yazılımını sonlandırmak için tebrikler!
Aaron Bertrand

Yanıtlar:


37

Yapılacak en önemli adım , Yükseltme Danışmanı'nı SQL Server 2000 veritabanında çalıştırmak ve rapor ettiği tüm sorunları gidermektir.

En iyi uygulama olarak, SQL Server 2000 eski veritabanınızdaki Yükseltme Danışmanı aracını kullanın ve analiz için Yükseltme Danışmanı aracına bir izleme dosyası alın. İzleme dosyası, Yükseltme Danışmanı'nın uygulamalara gömülü TSQL gibi basit bir veritabanı taramasında görünmeyebilecek sorunları algılamasını sağlar. SQL Server 2000 sunucunuzdaki SQL Profiler'ı kullanarak tipik saatlerde TSQL izlerini yakalayabilir ve Yükseltme Danışmanı'nı kullanarak bu izleri analiz edebilirsiniz.

Yani adımların geri kalanı şöyle olurdu:

Göç gününde:

  1. sp_help_revlogin kullanarak oturum açma işlemlerimizi 2000 sunucusunda kodlayın .
  2. Sql 2000 sunucusundan işleri ve bağlantılı sunucuları kodlayın.
  3. 2000 sunucuya bağlanan web sunucularını durdurun. Hiçbir uygulamanın 2000 sunucusuna bağlanmadığından emin olun.
  4. Veritabanlarınızı yedekleyin ve varış noktası sql 2008 R2 sunucusuna geri yükleyin . (not: İşler ters gidebileceğinden bağlantıyı kesmeyin / eklemeyin, ayrı bir veri tabanına sahip olacaksınız ve yedeklemeyeceksiniz!)
  5. Yedeklemeleriniz 2008 R2 sunucusuna geri yüklendikten sonra, girişleri yeniden oluşturmak için çıktıyı 2008 R2 sunucusundaki sp_help_revlogin'den çalıştırın.
  6. Yetim kullanıcıları (varsa) senkronize edin ve yeni sunucudaki sql aracısı işlerini ve bağlantılı sunucuları yeniden oluşturun.
  7. geri yüklenen veritabanlarındaki uyumluluk düzeyini 100 olarak değiştirin.
  8. Dbcc checkdb, all_errormsgs ve data_purity seçenekleriyle açık: DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. geri yüklenen veritabanlarında DBCC UPDATEUSAGE komutunu çalıştırın DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. Tam tarama ile tüm tablolardaki istatistikleri güncelleyin: Update Statistics table_name with FULLSCAN
  11. İsteğe bağlı: Parçalanma seviyelerini kontrol edin ve parçalanma seviyesine bağlı olarak, tüm Endekslerin yeniden oluşturulmasını / yeniden oluşturulmasını çalıştırın. Ola'nın komut dosyalarını kullanabilirsiniz .
  12. Tüm SP’leri kullanarak derle sp_recompile 'procedureName'
  13. Görünümlerinizi yenileyin SP_REFRESHVIEW view_name
  14. veritabanı seçeneğini değiştirdiğinizden emin olun: sayfa CHECKSUM ile doğrulayın.
  15. Kurtarma modelini (sql 2000'den farklıysa) FULL olarak değiştirin. TAM kurtarma modeline geçerseniz, İşlem Günlüğü'nü sık sık yedeklediğinizden emin olun. Bu, T-Log'unuzu şişirmemenizin yanı sıra, hem anında hem de iyileşmenizi sağlayacak
  16. SQL Server 2005 ve daha yeni sürümlerinde Database Mail tanıtıldı. Bu yüzden SQLMail'den Database Mail'e geçmelisiniz.

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

Ayrıca, herhangi bir çoğaltmanız varsa, sıfırlamanız gerekir. Herhangi bir DR, logshipping veya Mirroring gibi (2005 ve sonraki yıllarda yeni, ancak 2012 yılında amortismana tabi tutulmuşsa), o zaman da sıfırlamanız gerekir.

Eski DTS paketlerinin C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(komut satırı) veya Paket Taşıma Sihirbazı kullanılarak SSIS'e geçirilmesi gerekir .

Ayrıca, /dba//a/36701/8783 adresinde bulunan betiğimi kullanabilirsiniz . Ayır / attach yöntemini kullanmasına rağmen, BACKUP / RESTORE yöntemini kullanmanızı şiddetle tavsiye ediyorum . Komut dosyasını buna göre değiştirin.


Yan not olarak:

  • açmak Anında Dosya başlatma yeni sunucuda.
  • Var çoklu veri dosyaları, tempdb eşit boyutta.
  • Izleme Bayrağını Etkinleştir 1118
  • Maksimum ve minimum belleği doğru şekilde yapılandırın. Özellikle de varsayılan olarak azami bellek.
  • MAXDOP ayarlarını doğru şekilde yapın. Daha fazla ayrıntı için /dba//a/36578/8783 adresine bakın .
  • Brent Ozar'dan sp_Blitz'i kurmak en iyisidir . Çalıştırın ve bildirdiği kritik ve yüksek öncelikli sorunları ele alın.
  • Hatta SQL Power Doc'u kendalvandyke'den de kullanabilirsiniz - SQL Power Doc, SQL Server 2000'den 2012'ye kadar tüm SQL Server sürümleriyle ve Windows Server ve Windows 2000'den Windows XP ve Windows XP'den Windows Server ve tüketici Windows İşletim Sistemlerinin tüm sürümleriyle çalışır 8. Yükseltmeleri Planlama için de faydalıdır - bir örnekte hangi gizli özelliklerin kullanıldığını görün.
  • Geçici iş yükleri ve Varsayılan yedekleme sıkıştırma seçenekleri için En İyileştir'i etkinleştirin.

Sorularınızı ele alalım ...

Geçişi tamamlamak için başka ne yapmalıyım?

Cevabımı bakın. Düzgün bir göç planı ile gelip yardımcı olacaktır. Geçiş planınızı her zaman işletme kullanıcıları tarafından uygun uygulama testleriyle birlikte bir UAT'de (üretim dışı) test edin.

sağlama toplamı ve tam kurtarma modeli gibi yeni özellikler kullanın.

CHECKSUMSQL Server 2005 ve üzeri yeni. Yukarıda açıklanan göç adımlarının bir parçası olarak ele aldım.

full recovery modelyeni değil İş türünüze bağlıdır ve felaket durumunda ne kadar veri kaybedebileceğinizi belirler.

Sık İşlem günlüğü yedekleriyle birlikte tam kurtarma modu, zaman içinde geri yükleme yapmanıza olanak sağlar ve burada veri kaybı miktarını azaltır.

bu veritabanının tam olarak SQL Server 2008 R2'de oluşturulduğu gibi olmasını sağlayın.

bu veritabanının tam uyumlu, doğru ve yeni SQL 2008 R2 veritabanı motoru için uygun olmasını sağlayın.

Bunu tam olarak anlama! Ancak yukarıdaki göç adımları size yardımcı olacaktır. Yalnızca veritabanını geri yüklemeniz ve 100yukarıdaki adımlarla birlikte uyumluluk düzeyini 10 değiştirmeniz gerekir .

Eski SQL Server 2000 veritabanını nasıl doğru ve tam olarak yeni 2008 R2 veritabanına dönüştüreceğimi bilmek istiyorum, her şeyin doğru yapıldığından emin olun ve tüm yeni özelliklerden memnun olun.

Uygulama kodunuzda da değişiklik yapmanız gerekeceğinden, bu konuda dikkatli olmalısınız. Uygulama kodunuz, SQL Server 2008 R2'deki yeni özellikleri kullanacak şekilde değiştirildiyse, herhangi bir sorunla karşılaşmazsınız - PROVIDED, uygulamanızın bir UAT veya DEV ortamında tam bir regresyon testi yaptığınızı tam olarak bildirmediniz. PROD uygulamasındaki asıl geçişi yaptığınızda bu size en iyi güveni sağlayacaktır.


Not: Yukarıda hatırlayabildiğim adımlar var ve hiçbir şeyin dışarıda bırakılmadığından eminim. Bazı şeyleri kaçırdığımı görürsem, bu siteye ya da diğer uzmanlara ekleyeceğim - eklemek için çekinmeyin!

Yukarıda ana hatları çizilen her şeyin, asıl geçiş sırasında herhangi bir sürpriz yaşanmaması için önce NON ÜRETİM olmayan bir ortamda tekrar oynatılması gerekir.

----------

Birkaç soru daha var:

Yedekleme / geri yükleme yöntemini kullanmanızı öneririz, ancak yukarıda yazıldığı gibi yaptım, şimdi herhangi bir sorunla karşılaşabilir miyim? Her şey sorunsuz çalıştı.

Her şey yolunda giderse ve veritabanını ekleyebilseniz, HAYIR herhangi bir sorun yaşamayacaksınız. Çıkar / Bağla vs Yedekle / Geri Yükle, veri tabanınızı / veritabanlarınızı farklı bir yere nasıl taşıdığınızı gösteren bir yöntemdir. Sadece FYI .. Yedekleme / Geri Yükleme , herhangi bir şey ters giderse (en kötü durumlarda) sanki daha sonra güvenli bir şekilde daha güvenli ve güvenilirdir;

Sağlama toplamı ve tam kurtarma modeli hakkında: SQL Server 2000'de kullanılabilir / etkin değildi, bu yüzden şimdi kullanmak istiyorum. Yapmam gereken tek şeyin veritabanı özelliklerinde bu seçenekleri etkinleştirmek olduğunu söylediniz. Bir yerde okudum, bu yeterli değil ve aynı zamanda indeksleri veya başka bir şeyi yeniden oluşturmalıyım. Gerçekten bilmiyorum, sadece soruyorum.

Dediğim gibi, sağlama toplamı 2005 ve daha yeni sürümlerde yeni. SQL Server'ın özellikle G / Ç nedeniyle sayfa bozulmasını algıladığı bir mekanizmadır. Daha fazla ayrıntı için buradaki cevaba bakın .

CHECKSUM'u etkinleştirmek ve kurtarma modelini FULL olarak değiştirmek için, aşağıdaki T-SQL kodunu kullanarak yapabilirsiniz:

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

Not: Veritabanı seçeneklerini belirledikten sonra, 2008R2'den 2012'ye geçiş yaptığınızda kalıcı olur.

Bu veritabanını SQL Server 2012'ye taşımayı hazırlıyorum - bu yüzden ilk önce 2000'den 2008 R2'ye, şimdi de 2008'den R2'ye 2012 olacak (SQL'de 2000 veritabanını desteklemediği için bunu doğrudan yapmak imkansızdı. Sunucu 2012). Bu yüzden rehberinizi takip etmem gerektiğini anladım: 2008 R2’de yedekleyin ve 2012’de geri yükleyin, sonra diğer ipuçlarını yerine getirin, değil mi?

Evet lütfen. Söylediğim gibi, geri yüklemeyi yapmamak için iyi bir nedeniniz yoksa tercih edilen yöntemdir.

Lütfen bana yedekleme / geri yükleme yöntemini açıklayın: SQL sorgularına bir veritabanı dökümü gibi ve daha sonra bir sürü sorgu yürüterek geri yükler mi? Bu arada bu arada benim veritabanı "birleştirme"? Değilse, manuel olarak nasıl birleştirebilir / optimize edebilirsiniz?

Yedekleme / geri yükleme ... Sybase, Oracle veya muhtemelen MySQL'de kullanılan damping ve load'a benzer. Onun sadece SQL Server onu çağırır .. yedekleme / geri yükleme.

A okumak gerekir: Paul Randall tarafından SQL Server Yedekleri Anlamak .

Basit Sözdizimi (Tam sözdizimi için BOL bakın ):

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

Ardından, geri yükleme işlemi hedef sunucuda şu şekilde yapılabilir:

- hedefin disk düzeninin kaynak sunucununkiyle eşleşmediğini varsayarsak

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

- hedefin disk düzeninin kaynak sunucununki ile eşleştiğini varsayarsak

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

Bu arada bu arada benim veritabanı "birleştirme"? Değilse, manuel olarak nasıl birleştirebilir / optimize edebilirsiniz?

yedekleme / geri yükleme veritabanınızı birleştirmez. Parçalanma seviyenize bağlı olarak Alter Index Reorganize veya Rebuild kullanmak zorundasınız.

SQL Server’da yeni olduğunuzdan, Ola Hallengren’in:

Yıllardır SQL Server 2000 Express kullandığımızdan (yönetim arayüzü yok), sadece motoru ve RAR DATA dizinini durdurarak yedekleme yapıyorduk. Şimdilik, SQL Server 2008'de olduğumuz gibi, Management Studio'da yedekleme işlevini kullanmaktan daha iyi değil mi?

Motoru durdurmak, yedekleme yapmak için yapabileceğiniz en kötü şeydir !!

Paul'un bahsettiğim yedekler ve Ola'nın senaryosunu kullan ile ilgili bağlantısını oku. Microsoft, otomatik yedeklemeler yapacak bir komut dosyası içeren bir KB makalesine sahiptir - SQL Server Express'teki SQL Server veritabanlarının yedeklerini zamanlama ve otomatikleştirme

Sık İşlem günlüğü yedekleriyle birlikte tam kurtarma modu - İşlem günlüğü nerede depolanır - LDF dosyası mı? Nasıl düzgün yedeklerim?

Her SQL Server veritabanında, tüm işlemleri ve her işlem tarafından yapılan veritabanı değişikliklerini kaydeden bir günlük bulunur. İşlem günlüğü, herhangi bir veritabanının kritik bir bileşenidir.

İşlem günlüğü için normal adlandırma kuralı uzantısı '.LDF'dir, ancak herhangi biri olabilir.

Bunun üzerine daha fazla yazmayacağım çünkü bu, cevabı çok küçümseyecektir. İşlem Günlüğü Yönetimi'ne bakın ve buradaki cevabımın da mükemmel bağlantıları var.


EDIT: 24.07.2016 .. Bu gelecekteki okuyuculara yardımcı olacaktır:

Tüm örneğinizi bir sürümden başka bir sürüme geçiriyorsanız, PowerShell tabanlı çözümü kullanmanızı şiddetle tavsiye ederimStart-SqlMigration

görüntü tanımını buraya girin

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.