11.5.1. Thiếu không gian cho các transactions
Nguyên nhân
Do một transaction không được sử dụng nhiều rollback segments nên có thể xảy ra tình trạng thiếu vùng khơng gian cho các rollback segment và gây ra lỗi (ORA-01562). Nguyên nhân có thể là một trong các trường hợp sau:
Khơng có đủ khơng gian trong tablespace (ORA-01560)
Số lương các extents trong rollback segment đã đạt tới giá trị MAXEXTENTS và không thể bổ sung thêm các extent vào rollback segment (ORA-01628)
Giải pháp
Với lỗi ORA-01560:
Mở rộng thêm các data files trong tablespace
Đặt chế độ cho các data files là AUTOEXTEND Bổ sung mới data file vào tablespace
Với lỗi ORA-01628:
Tăng tham số MAXEXTENTS của rollback segment
Huỷ và tạo lại rollback segment với kích thước của extent lớn hơn
11.5.2. Lỗi đọc dữ liệu không đồng nhất Nguyên nhân
Oracle server cố gắng đảm bảo các câu lệnh sẽ chỉ xử lý trên các dữ liệu đã được commit. Vì thế, các dữ liệu chưa commit sẽ không được sử dụng. Trong trường hợp Oracle server không tạo được các bản lưu giá trị cũ các dữ liệu (read-consistent image of data), user sẽ nhận được lỗi ORA-01555 snapshot too old. Lỗi này xảy ra khi transaction thay đổi các dữ liệu đã được commit và:
Transaction slot có trong phần rollback header đang được sử dụng Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Giá trị ban đầu (before-image) trong rollback segment được ghi đè lên bởi một transaction khác
Giải pháp
Tăng chỉ số MINEXTENTS
Mở rộng kích thước extent Tăng giá trị OPTIMAL
11.5.3. Chặn session
Hình vẽ 57. Chặn session Vấn đề
Khi một extent trong rollback segment được ghi đầy, Oracle server sẽ tiếp tục sử dụng extent kế tiếp theo cơ chế xoay vòng. Trong trường hợp extent kế tiếp vẫn đang trong tình trạng active, transaction sẽ khơng sử dụng được nó. Mặt khác, nó cũng khơng thể bỏ qua extent kế tiếp để chuyển tới extent sau nữa nếu nó rỗi. Khi đó, rollback segment sẽ được bổ sung thêm các extent. Việc làm này làm cho rollback segment ngày một mở rộng và quản trị viên cần phải can thiệp để hạn chế việc mở rộng này.
Giải pháp
Quản trị viên database cần thực hiện kiểm tra thông tin của các transaction đang được thực hiện thông qua việc lấy thông tin từ các view V$ROLLSTAT, V$TRANSACTION, V$SESSION để phát hiện các transaction đang bị cản trở, từ đó thực hiện việc điều chỉnh cho phù hợp. Cơng việc kiểm tra và giám sát này được thực hiện bằng tay bởi người quản trị database.
Ví dụ: Xem thơng tin về các transactions đang được thực hiện
SVRMGR> SELECT s.sid, s.serial#, t.start_time, t.xidusn, s.username
2> FROM v$session s, v$transaction t, v$rollstat r 3> WHERE s.saddr = t.ses_addr
4> AND t.xidusn = r.usn
5> AND ((r.curext = t.start_uext-1) OR
6> ((r.curext = r.extents-1) AND t.start_uext=0));
SID SERIAL# START_TIME XIDUSN USERNAME
--- ------- ------------- ------ --------
9 27 10/30/97 21:10:41 2 SYSTEM
1 row selected.