SQL Server có đảm bảo lưu trữ dữ liệu chính xác không? Nếu vậy thì thế nào?


7

Câu hỏi này dành riêng cho SQL Server, nhưng các câu trả lời DB khác đều được chào đón.

Đọc dưới đây cho một số lịch sử. Câu hỏi ngắn của tôi là, làm thế nào để SQL Server đảm bảo rằng khi tôi yêu cầu "ABCDE" được ghi vào cơ sở dữ liệu, thì "ABCDE" được viết chứ không phải "ABECD"? Nó đã được đề xuất rằng dữ liệu được đọc lại và so sánh để đảm bảo kết quả tương tự, với hình phạt hiệu suất rõ ràng.

Công ty tôi làm việc đang giới thiệu một sản phẩm có khối lượng lớn cho chúng tôi (~ 35.000 chiếc mỗi ngày) mà chúng tôi sẽ thu thập dữ liệu, được lưu trữ trong SQL Server.

Trước đây, các sản phẩm có khối lượng thấp hơn có dữ liệu được lưu trữ tại dòng, cục bộ trong cơ sở dữ liệu SQL Server Express, sau đó được sao chép định kỳ vào máy chủ (Tiêu chuẩn máy chủ SQL) bằng các giao dịch giữa các máy chủ. Đôi khi, các cơ sở dữ liệu máy tính để bàn này đã bị hỏng, thường yêu cầu khôi phục.

Quá trình sản phẩm mới của chúng tôi sẽ ghi trực tiếp vào máy chủ, bỏ qua bộ nhớ cục bộ / máy tính để bàn.

Quản lý của chúng tôi đang chuyển trải nghiệm "tham nhũng máy tính để bàn" này vào sản phẩm mới.

Khác với kháng cáo lên chính quyền (Microsoft sẽ không kinh doanh cơ sở dữ liệu nếu không lưu trữ dữ liệu chính xác) hoặc bằng chứng kinh nghiệm làm bằng chứng (trong năm năm quản lý cơ sở dữ liệu SQL Server của tôi, chưa bao giờ thấy cơ sở dữ liệu [Standard / Enterprise] trở thành bị hỏng), có bất kỳ tài liệu nào của Microsoft tham khảo "bảo đảm" của SQL Server không?

Đây là một sự thật cơ bản hiếm khi được đặt câu hỏi, đặc biệt là với những người chơi tiêu chuẩn (DB2, Oracle, SQL Server).

Cảm ơn!


1
Bạn có thể sử dụng bảo vệ tổng kiểm tra để phát hiện các vấn đề có thể xảy ra. Tôi không chắc chắn rằng có thể đảm bảo 100% tránh lỗi hoặc phát hiện lỗi vì nó phụ thuộc vào phần cứng.
Martin Smith

Bản chất của tham nhũng bạn đã trải qua với phiên bản Express là gì?
Martin Smith

Xin lỗi, không biết về tham nhũng; nó luôn luôn là vấn đề để hoạt động nhanh chóng, vì vậy chúng tôi thường chỉ khôi phục cơ sở dữ liệu. Nhưng đây là những máy tính để bàn chạy một loạt các chương trình bao gồm SQL Server Express, các chương trình cho hoạt động trực tuyến, quét vi-rút, v.v. Điều đó mang đến một điểm giao thoa, Express có đảm bảo dữ liệu giống như Standard, Workgroup hoặc Enterprise không? Đó là một điều tốt, chúng tôi đang tránh xa lưu trữ dữ liệu địa phương.

1
@ logo1664 - Theo kinh nghiệm của riêng tôi với việc triển khai Express trên máy tính để bàn quy mô lớn (đây là báo cáo backoffice trong Hệ thống POS), các lỗi duy nhất xảy ra do sự cố phần cứng hoặc do vấn đề môi trường (mất điện trong khi DB được viết). Chúng tôi đã có hơn 1000 trang web được triển khai, mỗi trang web có cơ sở dữ liệu kích thước tối thiểu 1 GB, một số có tới 7 cơ sở dữ liệu và tôi chưa bao giờ gặp sự cố về tính toàn vẹn dữ liệu không liên quan.
JNK

1
Lưu trữ dữ liệu trên máy tính để bàn có nghĩa là nó phải chịu rủi ro thường không áp dụng cho máy chủ, chẳng hạn như cắt điện, tắt máy đột ngột và can thiệp từ phần mềm khác. Ngoài ra, bộ điều khiển ổ đĩa máy tính để bàn không hỗ trợ loại bảo đảm ghi là tiêu chuẩn cho lưu trữ trung tâm dữ liệu. Vì vậy, điều này không có vẻ như bạn có vấn đề với SQL Server. Nhiều khả năng là do những hạn chế của việc chạy dữ liệu trên máy tính để bàn. Hỏi quản trị viên máy chủ của bạn về các tính năng khả dụng cao của máy chủ, UPS và lưu trữ của bạn.
nvogel

Câu trả lời:


4

Tất cả các cơ sở dữ liệu SQL chính cung cấp điều này; nó được gọi là tuân thủ ACID . Đây có lẽ là cụm từ chính bạn cần tìm trong tài liệu (và / hoặc Google).

Về cách họ làm điều đó, MS SQL Server là nguồn đóng, cũng như Oracle, vì vậy không ai ngoài công ty thực sự có thể trả lời câu hỏi đó, nhưng như bạn nói, nếu họ không quản lý nó cho các hệ thống quy mô lớn, sản phẩm của họ sẽ ra khỏi thị trường rất nhanh.


3

Đáp án cho câu hỏi này là không".

Tôi vừa đọc xong SQL Server 2008 Internals và chương cuối cùng trong cuốn sách được viết bởi Paul Randal trên DBCC bao gồm rất nhiều lỗi hỏng có thể xảy ra với các trang cơ sở dữ liệu có thể được phát hiện DBCC CHECKDB.

Bạn có thể sử dụng bảo vệ tổng kiểm tra trên các trang dữ liệu, sao lưu và kiểm tra thường xuyên cho tham nhũng với DBCC CHECKDB

Kế hoạch viết và đọc lại dữ liệu của bạn có vẻ hơi vô nghĩa vì trừ khi bạn liên tục chạy checkpointđể đảm bảo tất cả các trang bẩn được ghi vào đĩa và sau đó dbcc dropcleanbuffersbạn có thể sẽ chỉ nhận được trang trực tiếp từ bộ nhớ.


2

Không thể giúp với SQL Server nhưng Oracle có một vài tham số có thể được đặt để xác thực chống lại hỏng bộ nhớ hoặc ổ đĩa, bao gồm DB_BLOCK_CHECKSUMDB_BLOCK_CHECKING . Ở đầu cuối, Oracle có thể tự động đi đến các bản sao lưu hoặc vị trí DR để lấy bản sao 'sạch' của khối bị hỏng.

Rõ ràng một cấu hình RAID cũng có thể giúp bảo vệ chống lại lỗi đĩa. Như đã chỉ ra trong các nhận xét, ở cấp độ phần cứng, máy tính để bàn không được chế tạo theo cùng tiêu chuẩn về khả năng phục hồi như máy chủ.

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.