Cơ sở dữ liệu chủ bị hỏng, ví dụ sẽ không bắt đầu - tùy chọn của tôi là gì?


11

Cứu giúp! Cơ sở dữ liệu chủ của tôi bị hỏng, tôi thậm chí không thể đưa phiên bản SQL trực tuyến! Lựa chọn của tôi để sao lưu máy chủ của tôi là gì?

Tôi có một bản sao lưu của master, nhưng trang MSDN "Khôi phục cơ sở dữ liệu chủ" yêu cầu tôi khởi động thể hiện ở chế độ một người dùng, điều mà tôi không thể làm được!

.


(Nhận xét hoặc câu trả lời khác chắc chắn được hoan nghênh, nhưng tôi đã hỏi điều này trong nỗ lực cung cấp câu trả lời toàn diện, bao gồm một số khía cạnh tôi không thể tìm thấy ở đâu trên web.)
BradC

Câu trả lời:


12

Dưới đây là một vài con đường tôi sẽ điều tra. Đừng làm tất cả những điều này (một số trong số chúng là các kỹ thuật khác nhau để thực hiện cùng một mục đích), nhưng đáng để xem xét:

1. Kiểm tra nhật ký lỗi SQL trực tiếp

Duyệt trực tiếp vào thư mục chứa các bản ghi lỗi SQL và tải gần đây nhất ERRORLOGvào notepad để biết thêm chi tiết về lý do tại sao phiên bản SQL sẽ không bắt đầu. Có lẽ bạn sẽ thấy vấn đề không phải là cơ sở dữ liệu chủ.

2. Thử khởi động phiên bản ở chế độ một người dùng

Dưới đây là danh sách đầy đủ các tùy chọn khởi động cho máy chủ SQL , bao gồm -m(chế độ người dùng đơn) và -f(chế độ cấu hình tối thiểu). Các tùy chọn khác cho phép bạn chỉ định đường dẫn cho cơ sở dữ liệu chủ, nếu đó là vấn đề.

Nếu bạn có thể bắt đầu cá thể, hãy làm theo các bước trong bài viết MSDN mà bạn đã liên kết để khôi phục cơ sở dữ liệu chính hoặc hướng dẫn chi tiết này của Thomas LaRock .

Nếu một ứng dụng khác luôn lấy kết nối người dùng trước khi bạn có thể, trước tiên hãy vô hiệu hóa Tác nhân SQL để nó không bắt đầu. Thứ hai, xem các ý tưởng về câu hỏi này để sử dụng -m"Application Name"tham số để chỉ định tên ứng dụng.

3. Khôi phục mastersang phiên bản khác và sao chép tệp của nó

Tôi chỉ tìm thấy một đề cập khác về kỹ thuật không có giấy tờ này, nhưng tôi đã sử dụng nó thành công vào cuối tuần vừa qua, vì vậy nó có thể đáng để thử.

Nếu bạn không thể khởi động phiên bản ở chế độ người dùng đơn, nhưng bạn có một phiên bản SQL khác đang chạy cùng bản phát hành và bản dựng chính xác , hãy thử khôi phục bản sao lưu cơ sở dữ liệu chính tốt được biết đến cuối cùng từ máy chủ đã chết của bạn sang phiên bản khác:

  • Tất nhiên, khôi phục lại dưới tên khác ( master_please_god_let_this_work), WITH MOVEvì vậy bạn không ghi đè lên mastermáy chủ tốt của mình
  • Khôi phục WITH NORECOVERY. Không chắc chắn điều này là cần thiết, nhưng làm tôi cảm thấy tốt hơn khi tôi biết rằng máy chủ khác sẽ không thay đổi bất cứ điều gì trong bản gốc được khôi phục
  • Đặt thành ngoại tuyến: ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
  • Sao chép các tập tin MDF và LDF được khôi phục từ máy chủ tốt vào máy chủ đã chết
  • Đổi tên master.mdfmastlog.ldfcác tệp khi cần thiết để thay thế các tệp chính xấu bằng các phiên bản được khôi phục của bạn
  • Bắt chéo ngón tay của bạn và bắt đầu ví dụ
  • Tùy chọn: thực hiện khôi phục mới chủ trên máy chủ được khôi phục. Không chắc chắn điều này là cần thiết, vì chúng tôi đã khá cẩn thận để không thay đổi master.

4. Xây dựng lại cơ sở dữ liệu hệ thống

Nếu bạn không có phiên bản khác chạy cùng phiên bản hoặc nếu bạn không thoải mái khi sử dụng quy trình không có giấy tờ được liệt kê trong # 3 hoặc nếu bạn không có bản sao lưu của master( tại sao bạn không có bản sao lưu ?? ), bạn có thể xây dựng lại cơ sở dữ liệu hệ thống SQL từ đĩa cài đặt gốc :

Setup.exe /ACTION=REBUILDDATABASE /...

Khi hoàn thành, bạn có thể làm theo các bước được liên kết trước đó để khôi phục mastertừ bản sao lưu tốt cuối cùng của mình. Bạn cũng sẽ cần khôi phục bản sao lưu gần đây msdbđể giữ tất cả các công việc, lịch trình công việc và lịch sử công việc.

5. Khôi phục tất cả các cơ sở dữ liệu USER về một phiên bản SQL mới (hoặc hiện có)

Nếu bạn đã có một phiên bản hiện có khác đang chạy (phiên bản SQL phù hợp, đủ dung lượng đĩa), tôi có thể sẽ bắt đầu khôi phục cơ sở dữ liệu từ các bản sao lưu gần đây nhất trong khi tôi đang làm việc với các bước khắc phục sự cố khác ở trên, chỉ trong trường hợp tôi cần chúng.

Nếu phiên bản mới (hoặc được cài đặt lại) của bạn có quyền truy cập vào cùng một đĩa, thì việc gắn chúng dưới dạng cơ sở dữ liệu mới sẽ nhanh hơn nhiều.

CREATE DATABASE foo 
ON (FILENAME = 'D:\data\foo.mdf'),
   (FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;

6. Làm lại bất kỳ thay đổi nào đối với master

Khi bạn khôi phục thành công master(thông qua bất kỳ kỹ thuật nào ở trên), bạn cần điều tra mọi thay đổi có thể đã bị mất, nếu chúng được thực hiện sau khi sao lưu bạn vừa khôi phục:

  • Thay đổi bảo mật
  • Cơ sở dữ liệu mới (các tệp sẽ vẫn còn trên đĩa, chỉ cần đính kèm chúng)
  • Cài đặt toàn máy chủ

Không có cách kỳ diệu nào để tìm thấy những điều này, bạn sẽ phải quay lại đường dẫn tài liệu của công ty bạn để biết những thay đổi này, nếu bạn có.


1
Bài đăng hay. +1. Tôi đã thực hiện một thử nghiệm làm hỏng chủ của mình, khôi phục bản sao lưu trên máy chủ khác và sau đó sao chép các tệp vào máy chủ cũ. Nó làm việc không có vấn đề. Nhân tiện, tôi đã nhận được lỗi 3411 trong khi chủ bị hỏng.
Racer SQL

Tuyệt vời, cảm ơn vì đã xác minh kỹ thuật đó. Trong trường hợp của tôi, tôi không bao giờ gặp lỗi thực sự, nhưng db chính của tôi đã mất hàng giờ để khôi phục, vượt xa mọi cài đặt thời gian chờ dịch vụ cụm có thể.
BradC

1
@RafaelPiccinelli Bậc thầy giữ "siêu dữ liệu" về mọi thứ trên máy chủ (bảo mật, cơ sở dữ liệu khác, v.v.), vì vậy điều đó có ý nghĩa. Xem điểm của tôi # 5 và # 6. Bạn sẽ phải đính kèm lại các dbs đó và thiết lập lại bất kỳ bảo mật nào bạn có tại chỗ. BTW, tôi hy vọng bạn đang làm tất cả điều này trong môi trường phòng thí nghiệm !!
BradC

Vâng, đó là lý do tại sao thử nghiệm. Tôi đang gặp lỗi nhưng có lẽ là với sự cho phép trong bộ lưu trữ của tôi. một lần nữa, bài viết tốt đẹp. Tôi sẽ chỉ xóa bình luận cuối cùng này haha.
Racer SQL

2

Tôi chỉ muốn thêm một vấn đề & giải pháp có thể xảy ra mà tôi vừa gặp phải - Tôi đã gặp tình huống tương tự trong Cập nhật tích lũy không thành công (SQL2016 CU12) và các thông báo trong trình xem sự kiện và lỗi khi nói "Không thể khôi phục cơ sở dữ liệu chính. SQL Server là không thể chạy. Khôi phục bản gốc từ bản sao lưu đầy đủ, sửa chữa hoặc xây dựng lại nó. ", tuy nhiên cuối cùng tôi thấy rằng nếu tôi chỉ chạy lại CU thực thi, nó đã phát hiện trạng thái nâng cấp là" Đã cài đặt không hoàn chỉnh "và cho phép tôi chỉ cần chạy cập nhật lại, sau đó nó hoàn thành thành công và cơ sở dữ liệu chủ và tất cả những thứ khác được mở mà không gặp vấn đề gì.


Bổ sung tốt vào danh sách; cảm ơn vì đã bao gồm nó
BradC
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.