Những bước cần thiết để khởi động lại một cách an toàn máy lưu trữ Microsoft SQL Server?


23

Có bất kỳ bước đặc biệt nào cần thiết để ngăn ngừa hỏng dữ liệu khi khởi động lại máy chủ lưu trữ phiên bản MS SQL Server không?

Ví dụ, gần đây tôi gặp phải khuyến nghị dừng dịch vụ SQL theo cách thủ công. Tôi hiểu rằng điều này được xử lý bởi shutdownquá trình Windows .

Tôi chắc chắn có hàng trăm bước mà mỗi người có thể đề xuất, như tôi vừa đề cập, nhưng tôi muốn tránh lặp lại các thực hành lỗi thời hoặc mê tín . Có bất kỳ khuyến nghị từ Microsoft, hoặc các tiêu chuẩn công nghiệp rộng rãi?


Câu hỏi này liên quan đến thủ tục ngắn hạn để khởi động lại máy. Có một câu hỏi khác liên quan đến quy trình dài hạn để đảm bảo rằng máy không được sử dụng, trước khi gỡ xuống vĩnh viễn.


Tôi không thể hiểu được việc yêu cầu "các tiêu chuẩn công nghiệp rộng rãi" và không muốn có "một trăm bước mà mỗi người có thể đề xuất". Đó có lẽ là tài khoản của họ về tiêu chuẩn ngành. Cả hai câu hỏi này có vẻ như là những câu hỏi hợp lệ, nhưng nguồn có thẩm quyền sẽ là một liên kết đến bài viết của Microsoft.
Evan Carroll

Câu trả lời:


14

Bạn không cần phải thích / lo lắng hay sợ hãi khi bạn khởi động lại máy chủ sql.

Chỉ cần đảm bảo rằng bạn không có bất kỳ giao dịch chạy dài nào. Tốt nhất là khởi động lại máy chủ sql bằng bàn điều khiển hoặc lệnh tắt trong thời gian hoạt động thấp / tối thiểu còn được gọi là cửa sổ bảo trì để giảm thiểu tác động đến doanh nghiệp của bạn.

Nếu bạn có bất kỳ thiết lập DR nào và bạn không muốn ngừng hoạt động, thì tốt nhất là chuyển đổi dự phòng và sau đó khởi động lại nút thụ động hoặc nút phụ.

Tắt máy chủ SQL Server xảy ra trong các tình huống dưới đây:

  • Dừng máy chủ sql bằng bảng điều khiển Dịch vụ.
  • Tắt máy chủ của bạn
  • chạy lệnh SHUTDOWN trong SSMS

Trong tất cả các tình huống, máy chủ sql tắt sạch tất cả các cơ sở dữ liệu của nó và sau đó chấm dứt dịch vụ liên quan đến việc cam kết hoặc khôi phục tất cả các giao dịch, ghi tất cả các trang bẩn vào đĩa và sau đó ghi một mục vào nhật ký giao dịch.

Tắt máy chủ sql không đúng cách:

  • tắt máy ngay bây giờ
  • kéo cáp nguồn từ máy chủ của bạn (nếu bạn có quyền truy cập).
  • giết sqlserver.exe từ trình quản lý tác vụ
  • Lỗi thất bại trong đó các nhị phân máy chủ sql, exe, cơ sở dữ liệu hệ thống cư trú hoặc lỗi ổ đĩa hệ thống windows .. thường là ổ C: \.
  • máy chủ quá nóng khiến máy bị tắt (hiếm khi xảy ra !!)

SQL Server sẽ luôn cố gắng thực hiện tắt máy sạch sẽ trừ khi bạn làm điều gì đó không đúng như đã nêu ở trên.

Một số liên kết đọc thực sự tốt về những gì xảy ra đằng sau hậu trường trong giai đoạn phục hồi:


Chi tiết tuyệt vời, cảm ơn bạn. "Thiết lập DR" nghĩa là gì?
Jon của tất cả các giao dịch

@Jonof ALLTrades Khôi phục thảm họa .. ví dụ: Vận chuyển nhật ký, Phản chiếu cơ sở dữ liệu hoặc thậm chí bạn có thể nghĩ đến tính sẵn sàng cao như Phân cụm
Kin Shah

1
Mặc dù tôi hoàn toàn đồng ý với danh sách các kịch bản tắt máy 'không phù hợp' này, tham nhũng dữ liệu thậm chí không xảy ra ngay cả sau đó, nhờ Ghi nhật ký ghi trước.
John Alan

5

Đây là tất cả chi tiết đầy đủ trên trang này.

Là câu hỏi của bạn đặc biệt hỏi "có bất kỳ đề xuất nào của Microsoft không " Tôi có xu hướng nghĩ rằng điều này là phản tác dụng khi có cuộc thảo luận này ở đây. Bài viết của họ chi tiết quá trình thông qua

  • Sử dụng một trong hai
    • dòng lệnh
    • Quyền hạn,
    • Studio quản lý máy chủ SQL (GUI)
  • Cho năm 2008, 2012, 2014, 2016.
  • Cho một trong hai
    • Cơ sở dữ liệu
    • hoặc, Đại lý

Liệu những bước đó có thỏa đáng hay không sẽ là ý kiến ​​của tôi, điều mà bạn không muốn. Vì vậy, câu trả lời đúng sẽ luôn được cập nhật nhất ở đó.

Dừng dịch vụ, trước khi tắt nguồn

là cần thiết hoặc nên làm như vậy trước khi tắt máy chủ đang chạy các dịch vụ SQL.

Không, nó không cần thiết. Khi Windows Kernel gửi tín hiệu tắt đến SQL Server, nó sẽ thực hiện theo cách an toàn và hệ thống sẽ chờ nó hoàn thành. Nói chung, mọi thứ được xây dựng với khả năng tắt an toàn không cần phải tắt thủ công và lý do là tất cả các ứng dụng của Microsoft đều tuân theo API của riêng chúng và các thủ tục nhập vào PRESHUTDOWNhoặc SHUTDOWNtheo các giai đoạn. Từ các tài liệu trên PRESHUTDOWN, mà tôi cho rằng họ đang sử dụng,

Thông báo một dịch vụ mà hệ thống sẽ ngừng hoạt động. Các dịch vụ cần thêm thời gian để thực hiện các nhiệm vụ dọn dẹp ngoài giới hạn thời gian chặt chẽ khi tắt hệ thống có thể sử dụng thông báo này. Người quản lý kiểm soát dịch vụ gửi thông báo này đến các ứng dụng đã đăng ký trước khi gửi SERVICE_CONTROL_SHUTDOWNthông báo đến các ứng dụng đã đăng ký thông báo đó.

Một dịch vụ xử lý thông báo này chặn hệ thống tắt cho đến khi dịch vụ dừng hoặc khoảng thời gian chờ SERVICE_PRESHUTDOWN_INFOhết hạn được chỉ định thông qua hết hạn. Vì điều này ảnh hưởng đến trải nghiệm người dùng, các dịch vụ chỉ nên sử dụng tính năng này nếu thực sự cần thiết để tránh mất dữ liệu hoặc thời gian phục hồi đáng kể khi khởi động hệ thống tiếp theo.

Vì nó có thể cần thiết, tôi giả sử đó là cách SQL Server hoạt động.


Đó gần như là những gì tôi đã hỏi. Tài liệu đó mô tả cách tắt công cụ SQL Server, nhưng không trả lời liệu có cần thiết hay không nên làm như vậy trước khi tắt máy chủ đang chạy các dịch vụ SQL.
Jon của tất cả các giao dịch

@Jonof ALLTrades cập nhật lại.
Evan Carroll

3

Không chính xác khi nói đến việc đóng cửa và ngăn chặn tham nhũng DB. MS SQL Server là một sản phẩm rất trưởng thành và tỷ lệ gây ra vấn đề tham nhũng bằng cách 'tắt máy' đơn giản sẽ là một kịch bản cạnh tranh. Bạn có nhiều khả năng gây ra tham nhũng bằng cách không chạy CHECK DB hoặc cài đặt xác thực tổng kiểm tra trên DB của bạn.

Có lẽ việc các công cụ bên ngoài chạm trực tiếp vào các tệp MDF / NDF / LDF có thể gây ra sự cố, chẳng hạn như cố gắng 'di chuyển' các tệp trong khi tắt máy hoặc có một số phần mềm cố gắng khóa các tệp trong khi tắt. Tôi đã thấy Windows Clustering vặn lên khi đĩa lưu trữ các tệp DB đầy, nhưng không đặc biệt gây ra 'tham nhũng db'.

Nếu bạn muốn giúp đảm bảo tắt máy hoặc chuyển đổi dự phòng một cách trơn tru, bạn có thể chạy một điểm kiểm tra, đảm bảo rằng bạn đang chạy DBCC CHECKDB thường xuyên (ít nhất là đủ thời gian để có thể khôi phục dữ liệu bị hỏng từ bản sao lưu) và kiểm tra xem có phụ thuộc bên ngoài nào không chăm sóc như phản chiếu.

Tuy nhiên, nếu bất kỳ chuyên gia nào có 'thực tiễn tốt nhất' khác, tôi rất muốn nghe họ, nhưng tìm kiếm các blog và tài nguyên trực tuyến trong nhiều năm qua, tôi đã không thấy nhiều về tham nhũng dữ liệu và 'tắt / khởi động lại' đơn giản.


-1

Cách tôi làm: 1) Vô hiệu hóa tất cả các Công việc. 2) Hãy chắc chắn rằng không có công việc hiện đang thực hiện. 3) Chạy SP_Who3 thường xuyên để kiểm tra hoạt động, cũng chạy sp_whoisactive để biết thêm thông tin. 4) Nếu không có hoạt động và điều duy nhất bạn thấy là truy vấn sp_who3 hiện tại của bạn 5) Đưa DB ngoại tuyến 6) Nhấp chuột phải vào đầu cơ sở dữ liệu và nhấp Dừng 7) Xác minh xem các dịch vụ có ở trạng thái dừng trong services.msc 8 ) Làm xong

Tái bút Nếu bạn có PAGEIOLATCH / IOCOMPLETION hoặc bất kỳ hoạt động nào khác trong SP_Who3, đừng làm như trên vì nó có thể đưa cơ sở dữ liệu của bạn vào chế độ khôi phục.


Rất hiếm khi nó khả thi hoặc đáng để dừng tất cả lưu lượng truy cập vào cơ sở dữ liệu cho hầu hết mọi người. Tôi cũng lưu ý rằng có lợi ích gì khi lấy tất cả các cơ sở dữ liệu ngoại tuyến - điều đó sẽ chỉ thêm nhiều thời gian hơn cho quy trình.
LowlyDBA

Đây không phải là một lời khuyên tốt ở tất cả. tại sao bạn lại đề nghị lấy dbs ngoại tuyến - nếu dbs ở trong HADR, ví dụ như phản chiếu hoặc AG, bạn sẽ không thể làm điều đó.
Kin Shah
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.