Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Microsoft SQL Server bị hỏng và khôi phục nâng cao

Blog mô tả các lỗi có thể xảy ra ở cấp cơ sở dữ liệu trong Microsoft® SQL Server®, cách phát hiện chúng và cách sửa chúng bằng cách sử dụng các kỹ thuật khôi phục và sửa chữa nâng cao.

Giới thiệu

Hiện tại, SQL Server là một trong những hệ thống quản lý cơ sở dữ liệu tương đối phổ biến và được sử dụng rộng rãi nhất vì cấu trúc nội bộ tiên tiến và độ tin cậy cao của nó. Nhiều tổ chức đã chọn cơ sở dữ liệu SQL Server để duy trì và lưu dữ liệu kinh doanh quan trọng.

Các công ty mong đợi các quản trị viên cơ sở dữ liệu (DBA) cải thiện hiệu suất, bảo trì và bảo mật cơ sở dữ liệu liên tục. Khi cơ sở dữ liệu bị hỏng và không thể truy cập được dữ liệu, bạn có thể nghi ngờ nhiều nguyên nhân như hỏng phần cứng, sự cố ổ đĩa, vi rút tấn công hoặc lỗi hệ điều hành (OS). Sửa chữa cơ sở dữ liệu bị hỏng không phải là một nhiệm vụ dễ dàng cho đến khi bạn biết kỹ thuật tốt nhất.

Bài đăng này thảo luận về một số nguyên nhân gây ra hỏng cơ sở dữ liệu, giúp bạn xác định lỗi trang, khám phá Lệnh kiểm tra tính nhất quán của cơ sở dữ liệu (DBCC) CHECKDBcommand và trình bày các kỹ thuật khôi phục và sửa chữa nâng cao.

Cơ sở dữ liệu bị hỏng

SQL Server lưu trữ dữ liệu người dùng dưới dạng các trang. Các trang đó nằm trong .MDF (Chính) các tệp dữ liệu. Tham nhũng của một .MDF tệp có thể dẫn đến hỏng toàn bộ cơ sở dữ liệu. Trang tệp dữ liệu tốt khi được ghi ra khỏi bộ nhớ của SQL Server (nghĩa là vào đĩa) nhưng xấu khi được đọc lại vào bộ nhớ, như thể hiện trong hình ảnh sau:

Microsoft SQL Server bị hỏng và khôi phục nâng cao

Nguyên nhân hỏng cơ sở dữ liệu:

Các kiểu hỏng cơ sở dữ liệu bao gồm các mục sau:

  • Hệ thống con I / O (Đây là một trong những lý do phổ biến nhất khiến cơ sở dữ liệu bị hỏng.)
  • Hệ điều hành Windows
  • Trình điều khiển hệ thống tệp, chẳng hạn như mã hoá hoặc chống vi-rút
  • Bộ điều khiển SAN hoặc RAID
  • Đĩa
  • Bộ nhớ
  • Tiêu đề Tệp
  • Lỗi máy chủ SQL
  • Lỗi do con người

Thông báo lỗi:

Khi bạn truy cập một cơ sở dữ liệu bị hỏng, bạn có thể thấy các thông báo lỗi sau:

  • Msg 823 trong SQL Server
  • Msg 824 trong SQL Server
  • Msg 825 (đọc lại) trong SQL Server
  • Lỗi 9004 SQL Server
  • Lỗi Tham nhũng Siêu dữ liệu
  • Lỗi Tham nhũng Cấp Trang

Truy tìm lỗi trang

SQL Server có một cơ chế tích hợp để tự động xác định và cảnh báo cho bạn khi có lỗi xảy ra trong các hoạt động I / 0 như đọc và ghi trang vào đĩa.

Các loại tùy chọn xác minh cấp độ trang khác nhau sau đây có sẵn trên Máy chủ onSQL và giúp bảo vệ các trang trên đĩa:

  • TORN_PAGE_DETECTION
  • Tổng kiểm tra

Khi TORN_PAGE_DETECTION được chỉ định, một bit được lật cho sector 16 x 512-bytedisk cho một trang tệp dữ liệu 8 KB bất cứ khi nào trang được ghi vào đĩa. Sau khi trang được đọc vào bộ nhớ, các giá trị này sẽ được so sánh. trạng thái sai, trang có thể được viết không chính xác. Trong trường hợp này, hệ thống tạo ra thông báo lỗi 824 (cho biết lỗi trang bị rách).

Khi Checksum được chỉ định, hệ thống sẽ tính toán giá trị tổng kiểm tra trên nội dung của trang và lưu trữ giá trị đó trong tiêu đề trang khi ghi trang vào đĩa. Sau khi trang được tải từ đĩa sau đó, tổng kiểm tra được tính toán và so sánh với giá trị được lưu trữ ở tiêu đề trang. Nếu giá trị không khớp, hệ thống sẽ tạo ra thông báo lỗi 824 (cho biết lỗi tổng kiểm tra).

Cả hai lỗi, 823 I / O cứng 824 I / O mềm , là 24 lỗi nghiêm trọng và đã đăng nhập vào msdb.dbo. nghi_em_dung.

Bảng msdb.dbo. nghi_em_dung được sử dụng để khôi phục một trang duy nhất và có thể được ghi vào nhật ký lỗi SQL Server và nhật ký sự kiện Windows®.

DBCC CHECKDB

DBCC CHECKDB kiểm tra tính toàn vẹn vật lý và logic của tất cả các đối tượng trong cơ sở dữ liệu quảng cáo.

Đây là một hoạt động sử dụng nhiều tài nguyên và sử dụng xử lý song song, nhưng bạn có thể chạy nó trong một luồng đơn bằng cách theo dõi cờ 2528.

Kiểm tra bảng hệ thống quan trọng ban đầu

Các kiểm tra ban đầu được thiết kế để thực hiện kiểm tra trên tab hệ thống quan trọng giữ siêu dữ liệu của công cụ lưu trữ và trên các đường dẫn phân bổ nơi dữ liệu được lưu trữ trong MDF tệp.

Các kiểm tra ban đầu được hiển thị trong danh sách sau:

  • DBCC CHECKALLOC :Kiểm tra tính nhất quán của cấu trúc phân bổ trong cơ sở dữ liệu adatabase. Nó kiểm tra xem cấu trúc phân bổ có hợp lệ không và không có trang tệp dữ liệu nào được phân bổ cho hai bảng.

  • DBCC CÓ THỂ KIỂM TRA :Kiểm tra tính nhất quán của bảng và chỉ mục. Xác thực cấu trúc của bảng và các chỉ mục liên quan của nó. Nó xác định xem dữ liệu chỉ mục có các hàng phù hợp trong bảng hay không và kiểm tra các khóa của thứ tự lập chỉ mục. Nếu có bất kỳ FILESTREAM nào được sử dụng trong bảng, nó sẽ xác thực sự tồn tại của liên kết.

  • DBCC CHECKCATALOG :Kiểm tra tính nhất quán giữa các danh mục hệ thống.

  • DBCC CHECKFILEGROUP :Tương tự như DBCC CHECKDB, kiểm tra này thực hiện kiểm tra tính nhất quán cho một nhóm tệp và kiểm tra phân bổ cho cơ sở dữ liệu.

Mã mẫu

DBCC CHECKDB
  [ ( database_name | database_id | 0
    [ , NOINDEX
    | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
  ) ]
  [ WITH
    {
        [ ALL_ERRORMSGS ]
        [ , EXTENDED_LOGICAL_CHECKS ]
        [ , NO_INFOMSGS ]
        [ , TABLOCK ]
        [ , ESTIMATEONLY ]
        [ , { PHYSICAL_ONLY | DATA_PURITY } ]
        [ , MAXDOP  = number_of_processors ]
    }
  ]
]

Ảnh chụp nhanh cơ sở dữ liệu nội bộ

Sử dụng ảnh chụp nhanh cơ sở dữ liệu nội bộ với CHECKDB để thực hiện kiểm tra và duy trì tính nhất quán trong giao dịch ngăn chặn các vấn đề về chặn và đồng thời. . CHECKDB không thành công trên trang cái nếu không có ảnh chụp nhanh nào được tạo.

Danh sách sau đây chứa các kiểm tra nội bộ do DBCC CHECKDB thực hiện:

  • Kiểm tra các bảng hệ thống quan trọng.
  • Kiểm tra logic các bảng hệ thống quan trọng.
  • Kiểm tra logic các bảng khác.
  • Kiểm tra phân bổ.
  • Kiểm tra siêu dữ liệu.
  • Kiểm tra xác thực người môi giới dịch vụ.
  • Chế độ xem được lập chỉ mục, kiểm tra chỉ mục không gian.

Lỗi CHECKDB

Bảng sau đây cho thấy một số lỗi DBCC CHECKDB:

Microsoft SQL Server bị hỏng và khôi phục nâng cao

Các phương pháp hay nhất

Nếu cơ sở dữ liệu VLDB có vấn đề về thời gian chạy cho CHECKDB, bạn nên sử dụng PHYSICAL_ONLY tùy chọn thường xuyên để giảm thời gian chạy cho VLDB cơ sở dữ liệu sản xuất. Tuy nhiên, bạn thường nên chạy DBCC CHECKDB mà không có tùy chọn nào được chỉ định. Lên lịch chạy CHECKDB của bạn tùy thuộc vào môi trường sản xuất cá nhân của bạn.

Tùy chọn khôi phục nâng cao

Mặc dù hầu hết mọi người sử dụng kỹ thuật khôi phục cơ sở dữ liệu đơn giản cho các lỗi, nhưng các kỹ thuật khôi phục nâng cao sau đây vẫn có sẵn:

Khôi phục trang

Bạn có thể khôi phục một hoặc nhiều trang bằng kỹ thuật này. Khôi phục cấp độ trang là hoạt động không trực tuyến cho phiên bản cơ sở dữ liệu dành cho doanh nghiệp và bạn có thể sử dụng hoạt động ngoại tuyến cho các phiên bản khác, điều này ngụ ý rằng cơ sở dữ liệu có thể ngoại tuyến trong quá trình khôi phục.

Tập lệnh T-SQL
RESTORE DATABASE <database_name>
PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
FROM <backup_device> [ ,... n ]
WITH NORECOVERY

Để có được Id trang, hãy sử dụng các nguồn khác nhau có sẵn như Nhật ký lỗi, Chuỗi sự kiện, DBCC và msdb..suspectpages bản ghi bảng liệt kê các trang bị hỏng và ID của chúng.

Lưu ý: Bạn không thể khôi phục các trang khởi động, trang tiêu đề tệp, một số trang trong bảng hệ thống quan trọng và bitmap cấp phát dưới dạng khôi phục trang.

Khôi phục từng phần và từng phần

Tương tự như khôi phục trang, bạn có thể thực hiện khôi phục từng phần và từng phần trực tuyến đối với phiên bản doanh nghiệp và ngoại tuyến đối với các phiên bản khác có chứa nhiều tệp hoặc nhóm tệp.

Mọi khôi phục từng phần bắt đầu với trình tự khôi phục một phần RESTORE DATABASE câu lệnh khôi phục bản sao lưu đầy đủ với PARTIAL quyền mua. Khi quá trình khôi phục này hoàn thành, cơ sở dữ liệu sẽ trực tuyến một phần, điều này ngụ ý rằng các tệp còn lại đang ở chế độ chờ khôi phục vì quá trình khôi phục đã bị hoãn.

Việc khôi phục từng phần phụ thuộc vào mô hình khôi phục của cơ sở dữ liệu và mức độ khôi phục.

Khôi phục trình tự

Để thực hiện khôi phục một phần nhóm tệp X và Z và nhóm tệp chính, hãy chạy mã sau:

RESTORE DATABASE DB_XYZ FILEGROUP='X',FILEGROUP='Z'
  FROM partial_backup
  WITH PARTIAL, RECOVERY;

Tại điểm X trước đó, điều sau là đúng:

  • Nhóm tệp Z và nhóm tệp chính đang trực tuyến.
  • Các tệp trong Nhóm tệp Y đang chờ khôi phục.
  • Nhóm tệp đang ngoại tuyến.

Chạy RESTORE DATABASE DB_XYZ FILEGROUP='Y' FROM backup WITH RECOVERY;

Giờ đây, tất cả các nhóm tệp đều trực tuyến.

Các kỹ thuật sửa chữa nâng cao khác

Việc sửa chữa có luôn đảm bảo khôi phục dữ liệu không? Câu trả lời là “KHÔNG.”

Có thể có một số kết hợp có thể làm hỏng dữ liệu và không thể kiểm tra tất cả các kết hợp. Ví dụ:bảng hệ thống bị hỏng và việc sửa chữa sẽ không hoạt động trên các trang như Khởi động PFS .

Sau đây là một số tùy chọn sửa chữa:

REPAIR_REBUILD

Tùy chọn này thực hiện sửa chữa, nhưng nó có thể gây mất dữ liệu khi xây dựng lại các NCindex bị hỏng.

REPAIR_ALLOW_DATA_LOSS

Tùy chọn này thực hiện sửa chữa, nhưng nó có thể gây mất dữ liệu.

Xây dựng lại chỉ mục bảng hệ thống

Bạn không thể sửa chữa các chỉ mục bảng hệ thống được phân nhóm, nhưng bạn có thể sửa chữa các chỉ mục không được phân nhóm trong một số trường hợp bằng cách chọn tùy chọn DBCC CHECKTABLE.

Lưu ý: Luôn thực hiện bất kỳ loại kỹ thuật sửa chữa nâng cao nào trên bản sao của cơ sở dữ liệu chứ không phải trên cơ sở dữ liệu gốc để tránh các tình huống nghiêm trọng.

Ngày tạo lại từ chỉ mục không được phân cụm:

Nếu một chỉ mục hoặc đống được phân nhóm bị hỏng, sửa chữa là lựa chọn duy nhất để khôi phục dữ liệu từ chỉ mục không được phân nhóm (NC). Tuy nhiên, trong một số trường hợp, việc sửa chữa sẽ không hoạt động nếu siêu dữ liệu bị hỏng.

Bạn có thể sử dụng câu lệnh select để buộc chọn các chỉ mục NC không bị hỏng, nhưng điều đó có thể phụ thuộc vào mức độ bao phủ cấp cột của chỉ số NC.

Trang DBCC

Sử dụng DBCC PAGE … WITH TABLERESULTS có thể xác định các phạm vi chính. Bạn có thể cấu trúc nó từ một chỉ mục không phân cụm và kiểm tra các trang bị hỏng để cố gắng lấy dữ liệu từ các trang.

Kết luận

Sau khi đọc bài đăng này, bạn sẽ hiểu rõ hơn về lỗi cơ sở dữ liệu và cách khôi phục cơ sở dữ liệu của mình bằng cách sử dụng cả công nghệ đơn giản và nâng cao. Ngoài ra, các kỹ thuật này giúp mang lại đường truyền cơ sở dữ liệu sau khi bị hỏng. Bạn phải luôn có một kế hoạch dự phòng mạnh mẽ để tránh trường hợp bị hỏng.

Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.

Tối ưu hóa môi trường của bạn với quản trị, quản lý và cấu hình chuyên gia

Dịch vụ ứng dụng của Rackspace (RAS) các chuyên gia cung cấp các dịch vụ chuyên nghiệp và được quản lý sau trên nhiều danh mục ứng dụng:

  • nền tảng Thương mại điện tử và Trải nghiệm Kỹ thuật số
  • Hoạch định Nguồn lực Doanh nghiệp (ERP)
  • Kinh doanh Thông minh
  • Quản lý quan hệ khách hàng của Salesforce (CRM)
  • Cơ sở dữ liệu
  • Lưu trữ Email và Năng suất

Chúng tôi cung cấp:

  • Chuyên môn không thiên vị :Chúng tôi đơn giản hóa và hướng dẫn hành trình hiện đại hóa của bạn, tập trung vào các khả năng mang lại giá trị tức thì.
  • Trải nghiệm cuồng tín ™:Chúng tôi kết hợp một Quy trình trước. Công nghệ thứ hai. Tiếp cận với hỗ trợ kỹ thuật chuyên dụng để cung cấp các giải pháp toàn diện.
  • Danh mục đầu tư vô song :Chúng tôi áp dụng nhiều kinh nghiệm về đám mây để giúp bạn lựa chọn và triển khai công nghệ phù hợp trên đám mây phù hợp.
  • Phân phối nhanh :Chúng tôi đáp ứng bạn ở nơi bạn đang ở trong hành trình và thành công vượt bậc với bạn.

Trò chuyện ngay bây giờ để bắt đầu.