Nâng cấp cơ sở dữ liệu SQL Server 2000 lên 2008 R2 và kích hoạt các tính năng mới


23

Gần đây tôi đã nâng cấp cơ sở dữ liệu SQL Server 2000 lên 2008 R2.


Những gì tôi đã làm là:

  1. Tắt dịch vụ SQL Server 2000 (express) trên máy cũ,
  2. Di chuyển các tệp dữ liệu ( mydatabase.mdfmydatabase.ldf ) sang máy mới,
  3. Chạy SQL Server Management Studio 2008,
  4. Kết nối với công cụ cơ sở dữ liệu cục bộ,
  5. Đính kèm dữ liệu vào cơ sở dữ liệu.
  6. Thay đổi mức độ tương thích của cơ sở dữ liệu thành SQL 2008 (100).

Câu hỏi: Tôi nên làm gì khác để hoàn thành việc di chuyển?

Tôi muốn:

  1. sử dụng các tính năng mới như kiểm tra tổng thể và mô hình khôi phục đầy đủ,
  2. làm cho cơ sở dữ liệu này chính xác như được tạo trong SQL 2008 R2,
  3. làm cho cơ sở dữ liệu này hoàn toàn tương thích, chính xác và hoàn toàn phù hợp với công cụ cơ sở dữ liệu SQL 2008 R2 mới.

Nói cách khác: Tôi chỉ muốn biết cách chuyển đổi chính xác và đầy đủ cơ sở dữ liệu SQL 2000 cũ sang cơ sở dữ liệu 2008 R2 mới, hãy bình tĩnh rằng mọi thứ đều được thực hiện đúng và hài lòng với tất cả các tính năng mới.


Tôi đang hỏi câu hỏi này, vì tôi đã tìm thấy rất nhiều trang web trên Internet nói rằng có rất nhiều điều khác nhau khiến tôi bối rối: một số người nói rằng cần phải xây dựng lại các chỉ mục, một người khác nói phải làm những việc khác ... và Bây giờ tôi không biết gì vì vậy tôi muốn nghe ý kiến ​​của người có kinh nghiệm và hướng dẫn từng bước rõ ràng. Tôi làm việc cho một công ty rất nhỏ, tôi chỉ có một mình và tôi không muốn làm hỏng mọi thứ.


Thưa ông, tôi thực sự ấn tượng với câu trả lời của bạn, tôi đã không mong đợi quá nhiều.


Vì vậy, một số ý kiến:

  1. Cơ sở dữ liệu hiện đang được sản xuất. Như tôi đã nói, nó đã được nâng cấp bằng phương pháp đính kèm deattach như tôi đã mô tả trong bài đầu tiên và như được mô tả trên MSDN: http://msdn.microsoft.com/en-us/l Library / ms189625.aspx Nó phải được thực hiện nhanh chóng, Vì vậy, tôi đã buộc phải làm theo cách đó. Hãy quên đi làm thế nào nó không phù hợp và tập trung vào tình hình hiện tại.

  2. Người dùng / thông báo không phải là một vấn đề ở đây - chỉ có một vài và quyền là đơn giản.

  3. Ứng dụng sử dụng cơ sở dữ liệu tương thích với SQL 2000 đến 2012, vì vậy đây cũng không phải là vấn đề.

  4. Tệp cơ sở dữ liệu (MDF) không lớn - chỉ khoảng 1GB.


Một số câu hỏi khác:

  1. Bạn khuyên bạn nên sử dụng phương pháp sao lưu / khôi phục, nhưng tôi đã làm như đã viết ở trên, vậy bây giờ tôi có thể gặp phải bất kỳ vấn đề nào không? Tất cả mọi thứ làm việc mà không có bất kỳ vấn đề.

  2. Về kiểm tra và mô hình khôi phục đầy đủ: nó không khả dụng / được bật trên SQL 2000, vì vậy tôi muốn sử dụng chúng ngay bây giờ. Bạn nói rằng điều duy nhất tôi cần làm là kích hoạt các tùy chọn đó trong các thuộc tính cơ sở dữ liệu? Tôi đã đọc ở đâu đó, rằng nó không đủ và tôi cũng nên xây dựng lại các chỉ mục hoặc một cái gì đó. Tôi thực sự không biết, tôi chỉ hỏi.

  3. Tôi đang chuẩn bị di chuyển cơ sở dữ liệu này sang SQL 2012 - vì vậy trước tiên là từ SQL 2000 đến 2008 R2, bây giờ sẽ là từ 2008 R2 đến 2012 (không thể thực hiện điều này trực tiếp vì thiếu sự hỗ trợ của cơ sở dữ liệu SQL 2000 trong SQL 2012). Vì vậy, tôi hiểu rằng tôi nên làm theo hướng dẫn của bạn: sao lưu nó vào năm 2008 R2 và khôi phục vào năm 2012, sau đó thực hiện các mẹo còn lại của bạn, phải không?

  4. Vui lòng giải thích cho tôi phương thức sao lưu / khôi phục: Nó giống như một bãi chứa cơ sở dữ liệu cho các truy vấn SQL và sau đó khôi phục nó bằng cách thực hiện một loạt các truy vấn? Liệu phương pháp này có bằng cách "chống phân mảnh" cơ sở dữ liệu của tôi không? Nếu không, làm thế nào để chống phân mảnh / tối ưu hóa nó bằng tay?

  5. Vì chúng tôi đã sử dụng SQL 2000 Express trong nhiều năm (không có giao diện quản lý), chúng tôi đã thực hiện sao lưu chỉ bằng cách dừng công cụ và RAR thư mục DATA. Hiện tại, như chúng ta đang sử dụng SQL 2008, điều này vẫn tốt hơn so với việc sử dụng chức năng sao lưu trong Management Studio?

  6. Chế độ khôi phục hoàn toàn với các bản sao lưu nhật ký giao dịch thường xuyên - Nhật ký giao dịch được lưu trữ ở đâu - đó có phải là tệp LDF không? Làm thế nào để tôi sao lưu nó đúng cách?


Tôi biết rằng các câu hỏi của tôi nghe có vẻ ngớ ngẩn, tôi không phải là quản trị viên cơ sở dữ liệu chuyên nghiệp, nhưng tôi là người duy nhất ở đây có thể thực hiện nhiệm vụ "lõi cứng" như nâng cấp công cụ cơ sở dữ liệu. Tôi cũng chắc chắn rằng kiến ​​thức của bạn sẽ giúp ích rất nhiều cho những người khác như tôi.

Cảm ơn bạn rất nhiều vì thời gian và sự hiểu biết của bạn, tôi thực sự đánh giá cao điều này.


2
Lần tới, tôi thực sự khuyên bạn nên sao lưu / khôi phục thay vì tắt SQL Server, di chuyển các tệp và đính kèm chúng. Chỉ cần như vậy, rất nhiều điều có thể đi sai. Về mặt tích cực, chúc mừng cuối cùng đã bỏ phần mềm cơ sở dữ liệu 14 tuổi!
Aaron Bertrand

Câu trả lời:


37

Bước đầu tiên cần làm là chạy Trình cố vấn nâng cấp trên cơ sở dữ liệu SQL Server 2000 và giải quyết tất cả các vấn đề được báo cáo.

Cách tốt nhất, sử dụng công cụ Trình cố vấn nâng cấp trên cơ sở dữ liệu kế thừa SQL Server 2000 của bạn và nhập tệp theo dõi vào công cụ Trình cố vấn nâng cấp để phân tích. Tệp theo dõi cho phép Trình cố vấn nâng cấp phát hiện các sự cố có thể không hiển thị trong quá trình quét cơ sở dữ liệu đơn giản, chẳng hạn như TSQL được nhúng trong các ứng dụng. Bạn có thể ghi lại dấu vết TSQL bằng SQL Profiler trên máy chủ SQL Server 2000 của mình trong những giờ thông thường và phân tích các dấu vết này bằng Trình cố vấn nâng cấp.

Vì vậy, các bước còn lại sẽ là:

Vào ngày di cư:

  1. kịch bản đăng nhập của chúng tôi trên máy chủ 2000 bằng cách sử dụng sp_help_Vvlogin .
  2. Script ra các công việc và máy chủ được liên kết từ máy chủ sql 2000.
  3. dừng máy chủ web kết nối với 2000 máy chủ. Đảm bảo rằng không có ứng dụng nào đang kết nối với máy chủ 2000.
  4. sao lưu cơ sở dữ liệu của bạn và khôi phục trên máy chủ đích sql 2008 R2. (lưu ý: Không tách / đính kèm vì mọi thứ có thể sai và bạn sẽ kết thúc với cơ sở dữ liệu tách rời và không có bản sao lưu!)
  5. Khi các bản sao lưu của bạn được khôi phục trên máy chủ 2008 R2, hãy chạy đầu ra từ sp_help_Vvlogin trên máy chủ 2008 R2 để tạo lại thông tin đăng nhập.
  6. Đồng bộ hóa người dùng mồ côi (Nếu có) và tạo lại các công việc đại lý sql và các máy chủ được liên kết trên máy chủ mới.
  7. thay đổi mức độ tương thích trên cơ sở dữ liệu được khôi phục thành 100.
  8. Dbcc checkdb với tùy chọn all_errormss và data_purity được bật: DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. chạy DBCC UPDATEUSAGE trên cơ sở dữ liệu được khôi phục DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. Cập nhật số liệu thống kê trên tất cả các bảng với quét toàn bộ: Update Statistics table_name with FULLSCAN
  11. Tùy chọn: Kiểm tra các mức phân mảnh và tùy thuộc vào cấp độ phân mảnh, chạy reorg / xây dựng lại tất cả các Chỉ mục. Bạn có thể sử dụng tập lệnh của Ola .
  12. Biên dịch lại tất cả các SP đang sử dụng sp_recompile 'procedureName'
  13. Làm mới quan điểm của bạn SP_REFRESHVIEW view_name
  14. đảm bảo thay đổi tùy chọn cơ sở dữ liệu: trang xác minh thành CHECKSUM.
  15. Thay đổi mô hình khôi phục (nếu khác với sql 2000) thành FULL. Nếu bạn thay đổi thành mô hình phục hồi ĐẦY ĐỦ, thì HÃY ĐẢM BẢO bạn thường xuyên sao lưu Nhật ký giao dịch. Điều này sẽ giúp bạn khôi phục tại thời điểm cũng như không làm hỏng T-Log của bạn.
  16. Trong SQL Server 2005 trở lên, Database Mail đã được giới thiệu. Vì vậy, bạn phải di chuyển từ SQLMail sang 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

Ngoài ra, nếu bạn có bất kỳ bản sao nào, thì bạn phải thiết lập lại nó. Nếu bất kỳ DR nào như logshipping hoặc Mirroring (mới trong năm 2005 trở lên, nhưng đã khấu hao vào năm 2012) thì bạn cũng phải thiết lập lại nó.

Các gói DTS cũ cần được di chuyển sang SSIS bằng cách sử dụng C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(dòng lệnh) hoặc sử dụng Trình hướng dẫn di chuyển gói .

Ngoài ra, bạn có thể sử dụng tập lệnh của tôi được tìm thấy tại /dba//a/36701/8783 . Mặc dù, nó sử dụng phương pháp tách / đính kèm, tôi khuyên bạn nên sử dụng phương pháp BACKUP / RESTORE . Thay đổi kịch bản cho phù hợp.


Như một lưu ý phụ:

  • bật Khởi tạo tệp tức thì trên máy chủ mới.
  • nhiều tệp dữ liệu tempdb với kích thước bằng nhau.
  • Kích hoạt cờ Trace 1118
  • Cấu hình bộ nhớ tối đa và tối thiểu chính xác. Đặc biệt là bộ nhớ Max cách xa mặc định.
  • Điều chỉnh đúng các cài đặt MAXDOP. Tham khảo /dba//a/36578/8783 để biết thêm chi tiết.
  • Tốt nhất là cài đặt sp_Blitz từ Brent Ozar. Chạy nó và giải quyết các vấn đề quan trọng và ưu tiên cao được báo cáo bởi nó.
  • Bạn thậm chí có thể sử dụng SQL Power Doc từ kendalvandyke - SQL Power Doc hoạt động với tất cả các phiên bản SQL Server từ SQL Server 2000 đến 2012 và tất cả các phiên bản Windows Server và hệ điều hành Windows tiêu dùng từ Windows 2000 và Windows XP cho đến Windows Server 2012 và Windows 8. Cũng hữu ích cho việc lập kế hoạch nâng cấp - xem các tính năng ẩn nào được sử dụng trên một ví dụ.
  • Bật Tối ưu hóa cho khối lượng công việc đặc biệt và các tùy chọn nén sao lưu mặc định.

Hãy giải quyết câu hỏi của bạn ...

Tôi nên làm gì khác để hoàn thành việc di chuyển?

Tham khảo câu trả lời của tôi. Nó sẽ giúp bạn đưa ra một kế hoạch di chuyển đúng đắn. Luôn kiểm tra kế hoạch di chuyển của bạn trong UAT (không sản xuất) cùng với thử nghiệm ứng dụng phù hợp của người dùng doanh nghiệp.

sử dụng các tính năng mới như kiểm tra và mô hình phục hồi đầy đủ.

CHECKSUMlà phiên bản mới trong SQL Server 2005 trở lên. Tôi đã trình bày nó như là một phần của các bước di chuyển được mô tả ở trên.

full recovery modelkhông phải là mới Nó phụ thuộc vào loại hình kinh doanh của bạn và quyết định số lượng dữ liệu bạn có thể mất trong trường hợp thảm họa.

Chế độ khôi phục hoàn toàn với sao lưu nhật ký giao dịch thường xuyên sẽ cho phép bạn khôi phục tại thời điểm và tại đó bằng cách giảm lượng mất dữ liệu.

làm cho cơ sở dữ liệu này chính xác như được tạo trong SQL Server 2008 R2.

làm cho cơ sở dữ liệu này hoàn toàn tương thích, chính xác và hoàn toàn phù hợp với công cụ cơ sở dữ liệu SQL 2008 R2 mới.

Đừng hiểu điều này! Nhưng các bước di chuyển trên sẽ giúp bạn. Bạn chỉ cần khôi phục cơ sở dữ liệu và thay đổi mức độ tương thích 10 100cùng với các bước trên.

Tôi chỉ muốn biết cách chuyển đổi chính xác và hoàn toàn cơ sở dữ liệu SQL Server 2000 cũ sang cơ sở dữ liệu 2008 R2 mới, hãy bình tĩnh rằng mọi thứ đều được thực hiện đúng và hài lòng với tất cả các tính năng mới.

Bạn phải cẩn thận với điều này, vì điều này cũng sẽ yêu cầu thay đổi mã ứng dụng của bạn. Nếu mã ứng dụng của bạn được thay đổi để sử dụng các tính năng mới trong SQL Server 2008 R2, thì bạn sẽ không gặp phải bất kỳ vấn đề nào - CUNG CẤP bạn đã hoàn thành kiểm tra hồi quy hoàn toàn cho ứng dụng của mình trong môi trường UAT hoặc DEV. Điều này sẽ mang lại cho bạn sự tự tin tốt nhất khi bạn thực hiện di chuyển thực tế trong SẢN PHẨM.


Lưu ý: Trên đây là các bước mà tôi có thể nhớ và tôi khá chắc chắn rằng không có gì bị bỏ sót. Nếu tôi thấy rằng tôi đã bỏ lỡ một số thứ, sau đó tôi sẽ thêm nó hoặc các chuyên gia khác trên trang web này - vui lòng thêm!

Tất cả mọi thứ được phác thảo ở trên trước tiên cần được phát lại trên môi trường KHÔNG SẢN XUẤT để tránh bất kỳ sự ngạc nhiên nào trong quá trình di chuyển thực tế.

----------

Một số câu hỏi khác:

Bạn khuyên bạn nên sử dụng phương pháp sao lưu / khôi phục, nhưng tôi đã làm như đã viết ở trên, vậy bây giờ tôi có thể gặp phải bất kỳ vấn đề nào không? Tất cả mọi thứ làm việc mà không có bất kỳ vấn đề.

Nếu mọi thứ đều hoạt động tốt và bạn có thể đính kèm cơ sở dữ liệu, thì KHÔNG bạn sẽ không gặp vấn đề gì. Detach / Đính kèm vs Sao lưu / Khôi phục chỉ là một phương pháp về cách bạn di chuyển cơ sở dữ liệu của bạn đến một nơi khác. Chỉ cần FYI .. Sao lưu / Khôi phục là an toàn và đáng tin cậy hơn nếu có bất cứ điều gì sai (trong trường hợp xấu nhất) thì ít nhất bạn cũng có một bản sao lưu để khôi phục và khôi phục cơ sở dữ liệu của mình.

Về kiểm tra và mô hình khôi phục đầy đủ: nó không khả dụng / được bật trên SQL Server 2000, vì vậy tôi muốn sử dụng chúng ngay bây giờ. Bạn nói rằng điều duy nhất tôi cần làm là kích hoạt các tùy chọn đó trong các thuộc tính cơ sở dữ liệu? Tôi đã đọc ở đâu đó, rằng nó không đủ và tôi cũng nên xây dựng lại các chỉ mục hoặc một cái gì đó. Tôi thực sự không biết, tôi chỉ hỏi.

Như tôi đã nói, tổng kiểm tra là phiên bản mới từ năm 2005 trở lên. Đây là một cơ chế mà SQL Server sẽ phát hiện tham nhũng trang đặc biệt là do I / O. Tham khảo câu trả lời của tôi ở đây để biết thêm chi tiết.

Để bật CHECKSUM cũng như thay đổi mô hình khôi phục thành FULL, bạn có thể thực hiện bằng cách sử dụng mã T-SQL bên dưới:

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

Lưu ý: Khi bạn đặt các tùy chọn cơ sở dữ liệu, nó sẽ được duy trì khi bạn thực hiện di chuyển từ 2008R2 sang 2012.

Tôi đang chuẩn bị di chuyển cơ sở dữ liệu này sang SQL Server 2012 - vì vậy trước tiên là từ 2000 đến 2008 R2, bây giờ sẽ là từ 2008 R2 đến 2012 (không thể thực hiện điều này trực tiếp vì thiếu sự hỗ trợ của 2000 cơ sở dữ liệu trong SQL Máy chủ 2012). Vì vậy, tôi hiểu rằng tôi nên làm theo hướng dẫn của bạn: sao lưu nó vào năm 2008 R2 và khôi phục vào năm 2012, sau đó thực hiện các mẹo còn lại của bạn, phải không?

Vâng làm ơn. Như tôi đã nói, khôi phục sao lưu là phương pháp ưa thích , trừ khi bạn có lý do chính đáng để không làm điều đó.

Vui lòng giải thích cho tôi phương thức sao lưu / khôi phục: Nó giống như một bãi chứa cơ sở dữ liệu cho các truy vấn SQL và sau đó khôi phục nó bằng cách thực hiện một loạt các truy vấn? Liệu phương pháp này có bằng cách "chống phân mảnh" cơ sở dữ liệu của tôi không? Nếu không, làm thế nào để chống phân mảnh / tối ưu hóa nó bằng tay?

Sao lưu / khôi phục là ... tương tự như kết xuất và tải được sử dụng trong Sybase, Oracle hoặc có lẽ là MySQL. SQL Server chỉ gọi nó là .. sao lưu / khôi phục.

Phải đọc: Tìm hiểu về sao lưu máy chủ SQL của Paul Randall.

Cú pháp đơn giản (đối với cú pháp đầy đủ tham khảo BOL ):

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

Sau đó khôi phục có thể được thực hiện trên máy chủ đích như:

- giả sử bố trí đĩa của đích không khớp với máy chủ nguồn

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

- giả sử bố trí đĩa của đích phù hợp với máy chủ nguồn

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

Liệu phương pháp này có bằng cách "chống phân mảnh" cơ sở dữ liệu của tôi không? Nếu không, làm thế nào để chống phân mảnh / tối ưu hóa nó bằng tay?

sao lưu / khôi phục sẽ không chống phân mảnh cơ sở dữ liệu của bạn. Bạn phải sử dụng Alter Index Sắp xếp lại hoặc Tái tạo tùy thuộc vào mức độ phân mảnh của bạn.

Vì bạn chưa quen với SQL Server, tôi rất khuyên bạn nên sử dụng Ola Hallengren's:

Vì chúng tôi đã sử dụng SQL Server 2000 Express trong nhiều năm (không có giao diện quản lý), chúng tôi đã thực hiện sao lưu chỉ bằng cách dừng công cụ và RAR thư mục DATA. Hiện tại, như chúng ta đang ở trên SQL Server 2008, điều này vẫn tốt hơn so với việc sử dụng chức năng sao lưu trong Management Studio?

Dừng động cơ là điều tồi tệ hơn mà bạn có thể làm để sao lưu !!

Đọc liên kết của Paul về các bản sao lưu mà tôi đã đề cập và sử dụng tập lệnh của Ola. Microsoft có một bài viết KB với tập lệnh để thực hiện sao lưu tự động - Cách lên lịch và tự động sao lưu cơ sở dữ liệu SQL Server trong SQL Server Express

Chế độ khôi phục hoàn toàn với các bản sao lưu nhật ký giao dịch thường xuyên - Nhật ký giao dịch được lưu trữ ở đâu - đó có phải là tệp LDF không? Làm thế nào để tôi sao lưu nó đúng cách?

Mỗi cơ sở dữ liệu SQL Server đều có nhật ký ghi lại tất cả các giao dịch và sửa đổi cơ sở dữ liệu được thực hiện bởi mỗi giao dịch. Nhật ký giao dịch là một thành phần quan trọng của bất kỳ cơ sở dữ liệu nào.

Phần mở rộng quy ước đặt tên thông thường cho Nhật ký giao dịch là '.LDF', nhưng nó có thể là bất kỳ.

Tôi sẽ không viết thêm về điều này vì điều này sẽ làm cho câu trả lời rất hay. Tham khảo Quản lý nhật ký giao dịch và câu trả lời của tôi ở đây cũng có liên kết tuyệt vời.


EDIT: 24/8/2016 .. Điều này sẽ giúp độc giả tương lai:

Nếu bạn đang di chuyển toàn bộ phiên bản của mình từ phiên bản này sang phiên bản khác, tôi khuyên bạn nên sử dụng giải pháp dựa trên PowerShellStart-SqlMigration

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.