V. Lỗi và chịu lỗi trong hệ phân tán
1. Các khái niệm
Hệ thống: Là cơ chế bao gồm một tập hợp các phần tử và các tác động qua lại lẫn nhau với môi tr−ờng của chúng bởi sự đáp lại kích thích từ môi tr−ờng với một mô hình đối xử đ−ợc công nhận.
Thành phần 1 Thành phần 2 Thành phần 3 Hệ thống Môi tr−ờng Kích thích Trả lời
Hình 6.II: Giản đồ của một hệ thống
Mỗi thành phần của hệ thống tự nó cũng là một hệ thống và gọi là hệ thống con. Cách đặt các thành phần vào cùng một hệ thống đ−ợc gọi là thiết kế hệ thống.
H− hỏng (fault): Trạng thái h− hỏng phần cứng hoặc phần mềm, kết quả từ các h− hỏng của các thành phần.
Lỗi (error): Lỗi ch−ơng trình hoặc cấu trúc dữ liệu. Sự cố (failure): Các thay đổi vật lý trong phần cứng.
fault Dẫn đến error Dẫn đến failure
Hình 7.II: Dây chuyền dẫn đến lỗi hệ thống Trong hình 8.II d−ới đây mô tả các loại lỗi th−ờng gặp:
b. Tin cậy và sẵn sàng: Tính tin cậy:
Hệ thống không trải qua bất kỳ một lỗi nào trong một khoảng thời gian. Nó đ−ợc sử dụng đặc biệt để vạch ra các hệ thống không thể sửa chữa đ−ợc (nh− trong các máy tính space_based), hoặc nếu thao tác của hệ thống là nguy kịch không có thời gian chết cho sửa chữa.
Tính sẵn sàng của hệ thốngR(t):
R(t) = Pr{0 các lỗi trong thời gian [0, t] không các lỗi tại t=0}.
Minh hoạ công thức ở trên cho phần cứng, phần thông th−ờng gánh các lỗi sau sự phân tán tồi tệ. Trong tr−ờng hợp này
R(t) = Pr{0 các lỗi trong thời gian [0, t]}
Pr{k các lỗi trong thời gian [0, t] = e-m(t)[m(t)]k/k!}. Với m(t) = ∫t
0 z(x)dx. ở đây z(t) đ−ợc hiểu nh− hàm may rủi.
c. Thời gian trung bình giữa các lỗi, thời gian trung bình để sửa chữa:
MTBF: Thời gian trung bình giữa hai lỗi trong hệ thống. MTTR: Thời gian chờ đợi để sửa chữa lỗi hệ thống.
MTTF: Thời gian chờ đợi lỗi đầu tiên của hệ thống kể từ khi hệ thống khởi tạo thành công tại thời gian 0.
Công thức: MTBF = MTTF + MTTR A = MTTF / (MTBR + MTTR). 2. Các lỗi trong Hệ phân tán.
a. Lỗi giao tác.
b. Các lỗi vị trí (hệ thống):
- Dữ liệu trong bộ nhớ mất.
- Lỗi toàn bộ các vị trí trong hệ thống phân tán. - Lỗi một phần các vị trí trong hệ thống phân tán.
c. Các lỗi môi tr−ờng:
Các lỗi môi tr−ờng qui về các lỗi của các thiết bị l−u trữ: Lỗi hệ điều hành, lỗi phần cứng, lỗi các bộ điều khiển dẫn đến một phần hoặc toàn bộ CSDL có thể bị phá hủy hoặc không truy nhập đ−ợc. Khắc phục bằng sao bản và các chức năng khôi phục phân tán.
d. Các lỗi truyền thông:
Ba kiểu lỗi mô tả ở trên chung cho cả hai CSDL tập trung và CSDL phân tán. Các lỗi truyền thông chỉ cho duy nhất trong tr−ờng hợp phân tán. Kiểu
chung nhất là lỗi trong thông báo, các thông báo có thứ tự không thích hợp, mất thông báo, và lỗi đ−ờng truyền. Hai lỗi đầu thuộc về mạng máy tính (communication subnet bao gồm physical, data link, và network layers của kiến trúc ISO/OSI) chúng ta không quan tâm.
Các lỗi đ−ờng truyền là do sự phân đoạn mạng và việc không nhất quán trong CSDL và có thể giải quyết bằng cách đặt timeout.
3. Các cách chịu lỗi trong Hệ phân tán.
Có hai cách cơ bản để xây dựng hệ thống tin cậy là chịu lỗi và cấm lỗi. Chịu lỗi đ−a ra cách thiết kế hệ thống chấp nhận các lỗi sẽ xảy ra: Xây dựng hệ thống sao cho các lỗi có thể đ−ợc phát hiện và tháo bỏ hoặc đền bù tr−ớc khi chúng có thể dẫn đến kết quả là một hệ thống lỗi.
Các kỹ thuật cấm lỗi trợ giúp đảm bảo rằng hệ thống hoàn thành sẽ không chứa bất kỳ một lỗi nào.
Cấm lỗi có hai h−ớng:
+ Đầu tiên là tránh lỗi: Cách đ−a ra các kỹ thuật sử dụng để đảm bảo chắc chắn rằng các lỗi là không mở đầu trong hệ thống. Các kỹ thuật này bao gồm các ph−ơng pháp thiết kế chi tiết, và điều khiển chất l−ợng.
+ H−ớng thứ hai của cấm lỗi là tháo bỏ lỗi: Đ−a ra các kỹ thuật đ−ợc dùng để phát hiện bất kỳ lỗi nào có thể còn sót lại trong hệ thống. Chú ý rằng các kỹ thuật tháo bỏ lỗi áp dụng trong việc thực hiện hệ thống tr−ớc khi đ−a ra quyền sử dụng của hệ thống.
Các phạm trù cấm lỗi và tránh lỗi đ−ợc sử dụng xen kẽ nhau. Một tên chung khác cho cách này là không chấp nhận lỗi. Các kỹ thuật này tập trung vào việc thiết kế hệ thống sử dụng các thành phần tin cậy cao và ph−ơng pháp tinh vi của kỹ thuật gói bởi việc kiểm tra bao quát. Nh− vậy, hạn chế đ−ợc chờ đợi, giảm sự xuất hiện các lỗi hệ thống nhỏ nhất có thể. Tuy nhiên có một số môi tr−ờng bảo quản và sửa chữa thủ công là không thể, hoặc thời gian cần để sửa chữa là không chấp nhận đ−ợc trong các môi tr−ờng này. Thiết kế hệ thống chịu lỗi là cách chọn lựa phù hợp.
Cách thứ ba: Cấu trúc các hệ thống tin cậy là phát hiện lỗi. Đ−ợc dựa theo bất kỳ kỹ thuật chịu lỗi nào. Cách báo khi một lỗi xuất hiện nh−ng không
cung cấp bất kỳ biện pháp chịu lỗi nào. Vì vậy, nó có thể đ−ợc dành riêng cho việc phát hiện lỗi riêng lẻ.
Điều quan trọng cần chú ý là các lỗi hệ thống có thể tiềm tàng. Một lỗi tiềm tàng là một lỗi đ−ợc phát hiện sau thời gian nó xảy ra. Thời kỳ này đ−ợc gọi là ẩn lỗi, và thời gian ẩn lỗi trong hình trên một số các hệ thống chính đ−ợc gọi là thời gian trung bình để phát hiện lỗi (MTTD). Hình 9.II vẽ quan hệ của nhiều mức tin cậy với các xuất hiện thực sự các lỗi.
Phần III cơ sở dữ liệu phân tán trên oraclE
I. Các khái niệm cơ bản. 1. Snapshot. 1. Snapshot.
Định nghĩa: Snapshot là một yêu cầu phân tán tham chiếu tới một hay nhiều bảng chính, các View, hoặc các Snapshot khác. Mỗi sao bản của bảng chính đ−ợc gọi là một Snapshot vì thông tin có đ−ợc tại bất kỳ thời điểm nào có thể định kỳ đ−ợc "làm t−ơi ", nghĩa là làm cho các Snapshot có trạng thái t−ơng ứng với trạng thái mới nhất của bảng chính.
- Read-only Snapshot: Là một bản sao đầy đủ của một bảng hay một tập các bảng. Nó là sự phản ánh đầy đủ tình trạng mới nhất của bảng chính.
- Snapshot Updatable: Có thể sửa đổi bản sao của bảng chủ và đ−ợc định nghĩa bao hàm bản sao đầy đủ của bảng chủ hoặc tập các hàng trong bảng chủ.
Nh− vậy sự khác nhau cơ bản giữa hai loại Snapshot trên là: Snapshot Updatable cho các yêu cầu và cập nhật, các Read-only Snapshot chỉ cho các yêu cầu.
2. Sao bản cơ sở.
Sao bản cơ sở là sao bản sử dụng các Read-only Snapshot và tuân theo một dạng của vị trí sao bản đầu tiên. Dữ liệu ở các Read-only Snapshot sẽ đ−ợc làm t−ơi định kỳ, quá trình này đ−ợc so sánh t−ơng tự nh− việc cập nhật các thay đổi về dữ liệu từ bảng CSDL chính của các Read-only Snapshot.
3. Các nhóm sao bản ( Replication Groups).
Các nhóm sao bản: Kết hợp một đặc tính ứng dụng chung và đ−ợc sao bản tới một tập các vị trí.
Oracle cho phép sao bản: * Các bảng.
* Các đối t−ợng chứa các bảng: Views, Trigges, Packages, Indexes, Sequences, Synonyms.
4. Các vị trí sao bản (Replication Sites).
- Các vị trí chủ ( Master sites): Phải chứa một bản sao đầy đủ (A full copy) của tất cả các đối t−ợng trong sao bản nhóm. Mỗi vị trí chủ sẽ chuyển các thay đổi của nó tới vị trí chủ khác cho các nhóm sao bản.
- Các vị trí Snapshot (Snapshot sites): Là vị trí có thể chứa một hay một tập các đối t−ợng trong nhóm sao bản.
5. Danh mục sao bản.
Sao bản sử dụng một danh mục sao bản thông tin, giống nh− các đối t−ợng đ−ợc sao bản, nơi chúng đ−ợc sao bản và cập nhật nh− thế nào cần đ−ợc truyền tới danh mục sao bản , từ đó các bảng dữ liệu có thể quay trở lại và tìm đ−ợc.
6. Database link.
Là một đối t−ợng nằm trong CSDL địa ph−ơng cho phép truy nhập tới các đối t−ợng khác trên CSDL ở xa hoặc kết nối với CSDL ở xa trong chế độ Read-only. CSDL ở xa có thể là CSDL Oracle hoặc không phải là Oracle.
Cú pháp lệnh tạo Database link:
CREATE [PUBLIC] DATABASE LINK dblink [CONNECT TO user IDENTIFIED BY password]
[USING 'connect_string'];
Public: Các user dùng chung Database link. Dblink: Tên Database link.
User: Tên user mà ta muốn kết nối tới.
Password: Mật khẩu của user mà ta muốn kết nối tới.
Connect_string: Chuỗi mô tả địa chỉ IP của host và SID trên Server đó. SID: Định danh của Database.
II. Các thao tác chính với Read-Only Snapshot. 1. Quy tắc đặt tên cho Snapshot.
Các Snapshot đ−ợc l−u trữ trong luợc đồ về ng−ời sử dụng vì vậy tên của các Snapshot phải là duy nhất. Mặc dù tên của Snapshot có thể dài 30 bytes, nh−ng chỉ đặt tên cho Snapshot lớn nhất là 19 bytes, quá 19 bytes ORACLE sẽ tự động cắt bỏ và thêm tổ hợp của bốn con số sao cho đảm bảo cho tên Snapshot là duy nhất
2. Tạo Read-Only Snapshot.
Muốn tạo một Snapshot ta sử dụng câu lệnh CREAT SNAPSHOT. T−ơng tự nh− việc tạo các bảng, các SNAPSHOT tạo ra có thể đ−ợc định rõ sự l−u trữ các kí tự, kích th−ớc Extent và sự phân phối, Tablespace hoặc Cluster chứa Snapshot, Snapshot sẽ đ−ợc làm t−ơi và các yêu cầu phân tán nh− thế nào
Ví dụ 1: Định nghĩa một Snapshot địa ph−ơng đ−ợc sao từ bảng chính EMP định vị trên NY. EMP định vị trên NY. EMP định vị trên NY.
CREAT SNASPHOT emp_sf PCTFREE 5 PCTUSED 60 TABLESPACE users
STORAGE ( INITIAL 50K NEXT 50K PCTINCREASE 50 ) REFRESH FAST
START WITH sysdate NEXT sysdate + 7
AS SELECT * FROM scott . emp@sales . ny. com ;
Tổng quát hoá quá trình Oracle tạo và làm t−ơi các Snapshot:
Khi có yêu cầu tạo Snapshot, ORACLE tạo một số các đối t−ợng tại vị trí ảnh và vị trí chủ nh− sau:
Tại vị trí ảnh có các đối t−ợng (Objects):
+ Một bảng cơ sở có tên là Snap$_tên Snapshot. Bảng này chứa dữ liệu với cấu trúc nh− trong câu lệnh yêu cầu tạo Snapshot của ng−ời sử dụng.
+ Bảng index có tên là I-snap_tên Snapshot: Chính là việc index lại Rowid của bảng chủ.
+ Read_only View của Snapshot: Sử dụng khi có yêu cầu làm t−ơi Snapshot.
+ MView$_tên_Snapshot: Sử dụng trong quá trình làm t−ơi Snapshot. + Một Snapshot log có tên Mlog$_tên bảng chủ: L−u trữ Rowid và các hàng đ−ợc cập nhật trong bảng chủ ( Rowid và nhật ký các thay đổi ) các thông tin này cho phép làm t−ơi nhanh các Snapshot. Snapshot log sẽ đ−ợc trình bày rõ hơn trong phần sau.
+ Trigger có tên là Tlog_tên bảng chủ: Sử dụng trong việc thay đổi Log ( chèn Rowid và các thay đổi của các hàng vào trong Snapshot log ).
Mỗi khi có sự thay đổi trên bảng chủ (Chèn, sửa, xoá) các trigger đ−ợc kích hoạt để ghi các thay đổi vào bảng Mlog. Khi đến chu kỳ làm t−ơi Snapshot dựa vào bảng Mview ( có nhật kí các thay đổi của bảng chủ) để thay đổi Snapshot.
Về nguyên tắc Rowid của bảng chủ và của Snapshot không trùng nhau.Tuy nhiên trong bảng Mlog chỉ l−u trữ Rowid của các hàng trong bảng chủ bị thay đổi. Vì vậy trong bảng Snapshot Oracle sinh thêm một cột Mrow$ chứa Rowid t−ơng ứng với hàng trên bảng chủ. Nh− vậy trên bảng chủ có Rowid, trên Snapshot cũng có Rowid của bảng chủ cộng thêm index (i-snap$ ) trên cột Rowid của bảng chủ sẽ cho phép nhanh chóng tìm ra hàng cần thay đổi trong khi làm t−ơi.
Chú ý: Khi tạo một Snapshot phải tuân theo các yêu cầu sau:
- Để tạo Snapshot trong l−ợc đồ của riêng mình, phải có quyền hệ thống cho phép thực hiện các câu lệnh CREAT SNAPSHOT, CREAT TABLE, và CREAT VIEW, cũng nh− SELECT trên các bảng chủ.
- Để tạo Snapshot trong l−ợc đồ của User khác phải có quyền CREAT ANY SNAPSHOT, cũng nh− SELECT trên bảng chủ. Và chủ nhân của Snapshot phải có khả năng tạo Snapshot.
Ví dụ 2:
Giả sử có câu lệnh tạo Snapshot nh− sau:
CREAT SNAPSHOT emp_snap AS SELECT * FROM emp WHERE deptn0 = 20 ;
Toàn bộ quá trình đã miêu tả trên đây ORACLE đ−ợc minh hoạ qua hình vẽ 1.III:
3. Sửa đổi các Snapshot.
Nh− đối với các bảng, các Snapshot cũng có thể sửa đổi. Có thể đặt lại các biến l−u trữ bằng câu lệnh ALTER.
Ví dụ:
ALTER SNAPSHOT emp PCTFREE 10 ;
Tuy nhiên để sửa đổi các biến l−u trữ , Snapshot phải nằm trong l−ợc đồ riêng của ng−ời dùng hoặc phải có quyền ALTER ANY SNAPSHOT và ALTER ANY TABLE trong hệ thống.
4. Xoá Snapshot.
Chỉ có ng−ời là chủ hoặc các User có quyền DROP ANY SNASPHOT có thể xoá Snapshot. Ta có thể xoá Snapshot không phụ thuộc vào bảng chủ của nó hoặc Snapshot log. Câu lệnh xoá một Snapshot địa ph−ơng là DROP SNAPSHOT.
Ví dụ:
DROP SNAPSHOT emp ;
5. Index Snapshot.
Để tăng việc thực hiện yêu cầu khi sử dụng Snapshot, có thể tạo index cho Snapshot. Index một cột ( hoặc nhiều cột ) của Snapshot, ta phải index trên bảng "SNAP$" đ−ợc tạo để l−u giữ các hàng của Snapshot.
Ta không cần sử dụng các ràng buộc để tạo index; Ví dụ:
Sử dụng câu lệnh: CREATE index Không sử dụng câu lệnh : CREATE unique index
6. Sử dụng Snapshot.
Các yêu cầu gửi tới Snapshot giống nh− các yêu cầu đ−ợc gửi tới table hoặc View.
Ví dụ: SELECT * FROM emp ;
Tuy nhiên không có thao tác dữ liệu trong bảng cơ sở của Read-only Snapshot. Ta không thể đ−a câu lệnh INSERT, UPDATE, DELETE khi sử dụng Read-Only Snapshot, nếu sử dụng sẽ có thông báo lỗi, mặc dù các câu lệnh trên vẫn đ−ợc đ−a ra từ bảng cơ sở tới Snapshot, và làm thay đổi các Snapshot. Việc cập nhật chỉ cho phép trên bảng chủ, sau đó các Snapshot sẽ đ−ợc làm t−ơi. Nếu muốn thay đổi Snapshot phải tạo nó nh− một Updatable Snapshot sẽ đ−ợc bàn luận trong phần sau.
7. Tạo View và Synonyms dựa trên Snapshot.
View hoặc Synonyms có thể đ−ợc định nghĩa dựa trên Snapshot. D−ới đây là câu lệnh tạo một View dựa trên Snapshot EMP:
Ví dụ:
CREAT VIEW sales_dept AS SELECT ename, empno FROM emp
WHERE deptno = 10 ; III. Updatable Snapshot.
Oracle tạo Updatable Snapshot các b−ớc đầu t−ơng tự nh− khi tạo Read- Only Snapshot và thêm hai thay đổi sau:
- Oracle tạo một bảng đặt tên là USLOG$_tên của Snapshot chứa ROWID và nhãn tạm thời (timestamp) của các hàng đã cập nhật trong Snapshot. Nhãn tạm thời column không đ−ợc cập nhật cho đến khi có một log đ−ợc sử dụng trong quá trình làm t−ơi Snapshot.
- Oracle tạo một Trigger AFTER ROW trên Snapshot, dựa vào bảng chèn ROWID và nhãn tạm thời của các hàng đ−ợc cập nhật và xoá trong Updatable snapshot log. Trigger đ−ợc đặt tên là USTRG$_tên snapshot.
Sự khác nhau chính giữa Read-Only Snapshot và Updatable Snapshot là Oracle tạo Read-Only View cho Read-Only Snapshot còn Writable View cho Updatable Snapshot.
Ví dụ: Tạo Updatable Snapshot emp
CREATE SNAPSHOT emp FOR UPDATE8 AS SELECT * FROM scott. emp@sales. ny.com WHERE empno > 500;
IV. Các vấn đề cơ bản về Snapshot log. 1. Định nghĩa. 1. Định nghĩa.
Snapshot log là một bảng mà các hàng của nó ghi danh sách những thông tin đ−ợc thay đổi của bảng chủ, và những thông tin về các Snapshot đã cập nhật hoặc ch−a cập nhật những thay đổi trên. Việc tạo các Snapshot log làm giảm số l−ợng xử lí và thời gian cần thiết để làm t−ơi Snapshot.
Một Snapshot log đ−ợc kết hợp với một bảng chủ; Cũng nh− vậy một bảng chủ có thể chỉ có một Snapshot log.
Nếu nhiều Snapshot log dựa trên cùng một bảng chủ thì chúng đ−ợc sử dụng nh− là một Snapshot log.
Tiếp sau đây sẽ trình bày cách tạo, sửa đổi, quản lí và xoá các Snapshot log.
2. Tạo các Snapshot log.
Đặt tên Snapshot log: Oracle tự động tạo Snapshot log trong l−ợc đồ chứa bảng chủ nếu ta không chỉ rõ tên của Snapshot log.
Tạo một Snapshot log trong CSDL nh− các bảng chủ sử dụng câu lệnh CREATE SNAPSHOT LOG. ta có thể đặt các tuỳ chọn vùng l−u trữ cho các đoạn dữ liệu của Snapshot log, cỡ của Extent và địa ph−ơng, các Tablespace