Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các cách khắc phục lỗi máy chủ SQL phát hiện lỗi I / O dựa trên tính nhất quán logic

Tóm tắt: Vấn đề không thể truy cập cơ sở dữ liệu SQL là vấn đề phổ biến mà người dùng cơ sở dữ liệu phải đối mặt. Vì vậy, blog giải quyết vấn đề này sẽ thảo luận về lỗi I / O dựa trên sự nhất quán logic của máy chủ SQL. Chúng ta sẽ thảo luận về lý do đằng sau lỗi này và những cách tốt nhất có thể để biết cách giải quyết vấn đề này. Để truy cập và khôi phục cơ sở dữ liệu SQL không thể truy cập được thì người dùng có thể nhờ đến sự trợ giúp của Công cụ khôi phục cơ sở dữ liệu SQL Server.

Lý do đằng sau Lỗi I / O dựa trên tính nhất quán logic của cơ sở dữ liệu:

  • Hệ thống đột ngột tắt / gặp sự cố hoặc tắt có giới hạn
  • Quản trị viên SQL cố gắng truy vấn hoặc thay đổi dữ liệu SQL

Tại thời điểm cơ sở dữ liệu SQL Server gặp lỗi dựa trên tính nhất quán lôgic, bước đầu tiên là phát hiện lỗi.

Các chiến lược kèm theo có thể giúp phát hiện lỗi:

  • Sử dụng công cụ Best Practice Analyzer (BPA) - Công cụ BPA giúp xác định các lỗi cơ bản về tính nhất quán. Công cụ này rõ ràng đối với biến thể SQL, có nghĩa là có thể truy cập BPA 2008 với SQL 2008, v.v.
  • Kiểm tra Hệ thống Windows ở cấp khung Nhật ký Sự kiện, các lỗi liên quan đến trình điều khiển hoặc đĩa
  • Kiểm tra độ tin cậy của khung tệp bằng cách chạy lệnh chkdsk
  • Chạy chẩn đoán do nhà sản xuất phần cứng đề xuất cho khung hoặc đĩa
  • Đối với SQL Server 2008, hãy chạy tiện ích SQLIOSim trên ổ của cơ sở dữ liệu đã thông báo lỗi I / O.
  • Liên hệ với người bán phần cứng hoặc nhà sản xuất thiết bị để kiểm tra xem các điều kiện tiên quyết về phần cứng có xác nhận với nhu cầu I / O của máy chủ SQL hay không.

Các cách thủ công để xử lý máy chủ SQL đã phát hiện ra lỗi I / O dựa trên tính nhất quán logic

Kỹ thuật 1 - Kiểm tra phần cứng và mạng ứng dụng

Lỗi bất thường của cơ sở dữ liệu có thể được khắc phục bằng cách thiết lập một mạng thích hợp giữa cơ sở dữ liệu và ứng dụng SQL.

Kỹ thuật 2 - Khôi phục từ bản sao lưu SQL

Giải pháp khả thi nhất là sử dụng sao lưu để cải tạo cơ sở dữ liệu SQL. Trước khi khôi phục từ bản sao lưu, hãy đảm bảo rằng:

  • Bạn có một bản sao lưu đầy đủ đang diễn ra
  • Bản sao lưu được cập nhật, chỉ trước khi bị hỏng và không quá cũ để duy trì khoảng cách chiến lược khỏi mất dữ liệu cơ bản.
  • Tham nhũng ở cấp độ trang, vì các vấn đề tham nhũng ở cấp độ trang có thể được giải quyết với sự hỗ trợ của khôi phục ở cấp độ trang.

Bước 1: Sử dụng lệnh đi kèm để khôi phục cơ sở dữ liệu SQL từ bản sao lưu đầy đủ

Sao lưu nhật ký giao dịch

Trang Nhật ký sao lưu Cấp độ phục hồi ĐẾN

Plate =‘g:PageLevelRestores_LOG1.bak’

CÓ INIT

ĐI

Bước 2: Thực hiện thay đổi khôi phục để phản ánh các tiến trình trực tuyến.

Sao lưu phần đuôi của nhật ký…

Trang Nhật ký sao lưu Cấp độ phục hồi ĐẾN

Vòng kết nối =‘g:PageLevelRestores_LOG_TAIL.bak’

CÓ INIT

ĐI

Lưu ý:Không có lý do thuyết phục nào để khôi phục cơ sở dữ liệu máy chủ SQL đầy đủ nếu tham nhũng được liên kết với một trang duy nhất. Bạn có thể khôi phục cơ sở dữ liệu từ bản sao lưu có thể truy cập cho trang đó đã bị phá hủy. Thực hiện các lệnh kèm theo sẽ giúp khôi phục bản sao lưu cho một trang riêng lẻ:

Khôi phục tất cả các bản sao lưu nhật ký có thể truy cập được theo đúng yêu cầu

Khôi phục LOG PageLevelRestores TỪ

Vòng kết nối =‘g:PageLevelRestores_LOG1.bak’

VỚI NORECOVERY

ĐI

Cuối cùng, Khôi phục bản sao lưu nhật ký đuôi

Khôi phục LOG PageLevelRestores TỪ

Vòng kết nối =‘g:PageLevelRestores_LOG_TAIL.bak’

VỚI NORECOVERY

ĐI

Cuối cùng, hãy hoàn thành với trình tự Khôi phục

Khôi phục trang CƠ SỞ DỮ LIỆU Khôi phục trang CÓ PHỤC HỒI

ĐI

Khi sao lưu cơ sở dữ liệu đã khôi phục cơ sở dữ liệu SQL, hãy chạy lại truy vấn DBCC CHECKDB để xem rằng tuyên bố đã chọn chiếm ưu thế mà không có lỗi I / O dựa trên tính nhất quán lôgic của Cơ sở dữ liệu SQL. Đơn đặt hàng này cũng cho thấy rằng không có mất mát dữ liệu nào trong bảng này.

Hạn chế của sao lưu cơ sở dữ liệu SQL:

  1. Thật phi lý khi mong đợi Khôi phục từ bản sao lưu cơ sở dữ liệu SQL khi bản sao lưu có thể truy cập đã lỗi thời.
  2. Nếu lỗi I / O dựa trên tính nhất quán lôgic được lan truyền trên cơ sở dữ liệu máy chủ SQL, thì tại thời điểm đó, chiến lược này sẽ không hợp pháp.
  3. Đối với những trường hợp trang bị lỗi tồn tại trong một chỉ mục không được phân cụm, cơ sở dữ liệu SQL có thể được khắc phục bằng cách loại bỏ và tạo lại chỉ mục của cơ sở dữ liệu SQL.

Kỹ thuật 3:Sửa chữa cơ sở dữ liệu SQL bị hỏng bằng REPAIR_ALLOW_DATA_LOSS

REPAIR_ALLOW_DATA_LOSS là mức cố định cơ bản cho các lỗi đã phân tích.

Lưu ý:Trước khi sử dụng REPAIR_ALLOW_DATA_LOSS, hãy thực hiện các bước kèm theo:

Sao lưu cơ sở dữ liệu máy chủ SQL và lưu nó với tên khác

Đặt cơ sở dữ liệu SQL ở chế độ một người dùng

Nhận tổng số bản ghi của tất cả các Bảng bằng cách sử dụng các lệnh đi kèm

Tuyên bố @COUNT INT

Tuyên bố @SQL VARCHAR (2000)

Tạo BẢNG #T_Info (ID INT IDENTITY (1,1), T_Name VARCHAR (200), D_Count INT)

Tuyên bố TINFO_CUR CURSOR FOR

CHỌN TABLE_NAME TỪ INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE ='BẢNG CƠ SỞ'

MỞ TINFO_CUR

Nhận TIẾP THEO TỪ TINFO_CUR VÀO @T_Name

WHILE @@ FETCH_STATUS =0

Bắt đầu

SET @ SQL =’INSERT INTO #T_Info (T_Name, D_Count) SELECT” ’[email protected]_Name +” ’, COUNT (*) FROM‘ [email protected]_Name+ ”

THỰC HIỆN (@SQL)

Nhận TIẾP THEO TỪ TINFO_CUR VÀO @T_Name

HẾT

ĐÓNG TINFO_CUR

DEALLOCATE TINFO_CUR

CHỌN * TỪ #T_Info ĐẶT HÀNG CỦA T_NAME

Các tiến bộ đi kèm giúp khắc phục cơ sở dữ liệu SQL và giải quyết lỗi I / O dựa trên tính nhất quán nhất quán:

Chạy lệnh:

DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)

Sau khi cơ sở dữ liệu SQL được sửa, hãy xử lý lại quy trình 'Đếm bản ghi bảng' và đối chiếu với số bản ghi cũ.

Không được có bất kỳ sự phân biệt nào giữa số lượng bản ghi đầu tiên và cuối cùng của Bảng.

Ràng buộc :

REPAIR_ALLOW_DATA_LOSS có thể sửa lỗi IO dựa trên tính nhất quán lôgic của Cơ sở dữ liệu nhưng có một vấn đề nghiêm trọng về mất dữ liệu, trong đó kết nối có thể bị mất dữ liệu cơ bản.

Giải pháp Tự chọn

Nếu các kỹ thuật trên không hoạt động, tại thời điểm đó, hãy sử dụng công cụ sửa tệp SQL của SysTools. Công cụ này sửa các tệp MDF và NDF bị hỏng và Khôi phục tất cả các đối tượng cơ sở dữ liệu. Hơn nữa, công cụ này giúp khôi phục tất cả các đối tượng cơ sở dữ liệu như Bảng, Trình kích hoạt, Chỉ mục, Khóa, Quy tắc, tệp đã xóa và Thủ tục đã lưu trữ. Đây là sự trợ giúp đáng kinh ngạc trong trường hợp khẩn cấp, vì sản phẩm cung cấp giải pháp sửa chữa không thể nhầm lẫn và hỗ trợ tất cả các phiên bản cơ sở dữ liệu SQL.

Kết luận

Cũng đọc: Cách kiểm tra xem cơ sở dữ liệu SQL có bị hỏng không

Trong bài đăng này, chúng tôi đã nêu ra lý do máy chủ SQL phát hiện ra lỗi I / O dựa trên tính nhất quán logic và các kỹ thuật để giải quyết vấn đề này.

Do lỗi, chúng tôi đã cố gắng xác định đúng kỹ thuật. Nếu phần cứng hoặc khuôn khổ phải chịu trách nhiệm về lỗi, nó được quy định để xác định các vấn đề liên quan đến phần cứng và trong trường hợp DBCC CHECKDB báo cáo lỗi nhất quán, tại thời điểm đó, hãy cố gắng Khôi phục cơ sở dữ liệu SQL bằng cách sử dụng một bản sao lưu được làm mới.

Nếu sự cố không được khắc phục với phần cứng và bản sao lưu, tại thời điểm đó, hãy cố gắng khắc phục cơ sở dữ liệu với sự hỗ trợ của REPAIR_ALLOW_DATA_LOSS. Đây là mức độ sửa chữa cơ bản để xác định tất cả các lỗi từ CHECKDB, nhưng điều này không có nghĩa là nó sẽ thực sự sửa được lỗi. Ngoài ra, nó có thể làm mất dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để bỏ một bảng nếu nó tồn tại?

  2. Phát triển máy ảo Azure để sử dụng máy chủ SQL

  3. Có bất kỳ nhược điểm nào khi luôn sử dụng nvarchar (MAX) không?

  4. Trình tự thực thi của mệnh đề Group By, Have và Where trong SQL Server?

  5. CEILING () Ví dụ trong SQL Server