Quản lý undo tự động

Một phần của tài liệu Mạng ORACLE kỹ thuật và quản trị (Trang 131)

Khả năng quản lý undo tự động (Automatic Undo Management - AUM) là một đặc điểm khá mới của Oracle 9i. Cung cấp cơ chế tin cậy hơn cho DBA khi tạo, thay đổi kích thước và điều chỉnh rollback segments trong database. Theo đó, Rollback segments có thể được tạo, xoá hay điều chỉnh kích thước một cách tự động bởi instance.

Dữ liệu rollback data được quản lý nhờ vào undo tablespace. Ví dụ: tạo undo tablespace

CREATE UNDO TABLESPACE “UNDO_TBS”

DATAFILE ‘/u01/oradata/freeney9/undo_tbs01.ora’ SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 700M

Một số tham số khởi tạo chính:

UNDO_MANAGEMENT (MANUAL / AUTO): Cho biết database có sử dụng cơ chế AUM hay không. Default = MANUAL

UNDO_TABLESPACE (valid tablespace): Chỉ rõ tên undo tablespace sử dụng. UNDO_RETENTION (in seconds default=30): Cho biết thời gian trễ để thực

hiện committed undo.

UNDO_SUPPRESS_ERRORS (TRUE / FALSE): Cho biết hệ thống có trả về exception hay không khi “SET TRANSACTION USE ROLLBACK SEGMENT” phát lỗi. Default = TRUE

11.4.THÔNG TIN V7 CÁC ROLLBACK SEGMENT Thông tin về các rollback segment được lưu giữ trong từ điển dữ liệu. 11.4.1. Xem thông tin chung về các rollback segment

Thông tin chung về rollback segment được lưu trong view DBA_ROLLBACK_SEGS.

Hình vẽ 54. Các thông tin chính về rollback segments Các thông tin bao gồm:

SEGMENT_ID: Mã hiệu của segment SEGMENT_NAME: Tên segment

TABLESPACE_NAME: Tên tablespace chứa segment OWNER (PUBLIC/SYS): Tên user sở hữu segment STATUS (ONLINE/OFFLINE): Trạng thái của segment

Ví dụ: Xem thông tin chung về segment

SVRMGR> SELECT segment_name, tablespace_name, owner, status 2> FROM dba_rollback_segs;

--- --- --- --- ---

SYSTEM SYSTEM SYS ONLINE

RBS1 RBS SYS ONLINE

RBS2 RBS SYS ONLINE

RBS3 RBS SYS OFFLINE

4 rows selected.

Dữ liệu trong cột OWNER nhận các giá trị: SYS: Rollback đó thuộc loại private PUBLIC: Rollback đó thuộc loại public

11.4.2. Xem thông tin thống kê về rollback segment

Ta lấy được các thông tin này từ các view V$ROLLSTAT và V$ROLLNAME.

Hình vẽ 55.Các thông tin thống kê về segments Ví dụ: Xem các thông tin thông kê về segments

SVRMGR> SELECT n.name, s.extents, s.rssize, s.optsize, 2> s.hwmsize, s.xacts, s.status

3> FROM v$rollname n, v$rollstat s 4> WHERE n.usn = s.usn;

NAME EXTENTS RSSIZE OPTSIZE HWMSIZE XACTS STATUS --- --- --- --- --- --- --- SYSTEM 43 2199552 2199552 0 ONLINE RBS1 20 202752 204800 417792 0 ONLINE RBS2 4 38912 38912 0 PENDING OFFLINE 3 rows selected.

Diễn giải một số cột dữ liệu trong view V$ROLLSTAT

Tên cột Diễn giải (adsbygoogle = window.adsbygoogle || []).push({});

USN Là số hiệu của rollback segment (Rollback segment number) EXTENTS Số lượng các extents có trong rollback segment

RSSIZE Kích thước của segment hiện thời tính theo đơn vị bytes XACTS Số lượng các transaction sử dụng rollback segment OTPSIZE Giá trị OPTIMAL của rollback segment

HWMSIZE Hight warter mark; kích thước tối đa tính theo bytes, khi rollback segment tăng

AVEACTIVE Kích thước của extent hiện thời, STATUS Trạng thái của rollback segment

11.4.3. Thông tin về rollback segment đang active

Ta có thể kết hợp thông tin trong hai bảng V$TRANSACTION và V$SESSION.

Hình vẽ 56.Thông tin về các thao tác trên các segments

Ví dụ:

SVRMGR> SELECT s.username, t.xidusn, t.ubafil, 2> t.ubablk, t.used_ublk

3> FROM v$session s, v$transaction t 4> WHERE s.saddr = t.ses_addr;

USERNAME XIDUSN UBAFIL UBABLK USED_UBLK --- --- --- --- ---

SYSTEM 2 2 7 1

2 rows selected. Diễn giải một số cột dữ liệu

Tên cột Diễn giải

SES_ADDR Địa chỉ của session, lấy được từ V$SESION.SADDR

XIDUSN Số hiệu của Rollback segment được sử dụng bởi transaction UBAFIL,

UBABLK,

UBASQN,UBAREC

Vị trí hiện thời của rollback segment mà transaction sẽ ghi vào

USED_UBLK Số hiệu block undo được tạo ra bởi transaction START_UEXT,

START_UBAFIL, START_UBABLK

Số hiệu của extent (file, block) thuộc rollback segment mà transaction bắt đầu ghi dữ liệu

11.5.CÁC V;N Đ7 LIÊN QUAN TI ROLLBACK SEGMENT 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 (adsbygoogle = window.adsbygoogle || []).push({});

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 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à:

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

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.

Chương 12. QUẢN LÝ TEMPORARY SEGMENTS 12.1.TEMPORARY SEGMENTS

Temporary segments được sử dụng khi Oracle server thực các hiện câu lệnh sắp xếp mà không thể sử dụng vùng không gian trong bộ nhớ do không đủ, ví dụ như:

SELECT. . . ORDER BY CREATE INDEX

SELECT DISTINCT SELECT. . . GROUP BY SELECT. . . UNION

Dung lượng bộ nhớ cần thiết cho tiến trình sắp xếp được xác định dựa trên tham số khởi tạo SORT_AREA_SIZE. Trong một số trường hợp, nhiều thao tác sắp xếp cùng được sử dụng và cần nhiều bộ nhớ hơn. Khi này bộ nhớ trong của máy là không thể đáp ứng được và kết quả của việc sắp xếp đó cần phải được tạm thời lưu lên đĩa. Vùng đĩa lưu trữ các dữ liệu trung gian này chính là temporary segments.

Temporary segments trong tablespace được Oracle server tạo lập với mục đích sử dụng làm vùng nhớ trung gian hỗ trợ thao tác sắp xếp.

12.1.1. Phân loại temporary segments

Các temporary segments có thể được tạo trên một permanent tablespace hoặc trên một temporary tablespace. User có thể sử dụng một trong các kiểu tablespaces này để sắp xếp.

Hình vẽ 59.Phân loại temporary segment

Temporary Tablespace

Một temporary tablespace được sử cho các temporary segments tương ứng và không chứa bất kỳ segment nào có kiểu khác. Ta có thể tạo các temporary tablespace theo câu lệnh SQL sau:

CREATE TABLESPACE tablespace_name TEMPORARY DATAFILE filespec [autoextend_clause] [ , filespec [autoextend_clause]] ... (adsbygoogle = window.adsbygoogle || []).push({});

Một permanent tablespace có thể chuyển đổi thành dạng temporary tablespace bằng cách sử dụng câu lệnh:

ALTER TABLESPACE tablespace_name TEMPORARY

Lưu ý: với câu lênh trên, tablespace không được phép chứa bất kỳ một đối tượng thường trú nào (như: table, store procedure, ...). Một temporary tablespace có thể chuyển đổi lại thành permanent tablespace thông qua câu lệnh SQL dưới đây:

ALTER TABLESPACE tablespace_name PERMANENT

Oracle server có thể tạo một temporary segment trong một permanent tablespace với số điều kiện sau:

User thực hiện câu lệnh sắp xếp cần đến vùng không gian trên đĩa.

User chạy câu lệnh mà nó đã được gán cho một permanent tablespace để thực hiện sắp xếp.

Khi một permanent tablespace được sử dụng cho việc sắp xếp, một instance có thể có một hoặc nhiều temporary segment trong tablespace.

Một temporary segment sẽ được hủy bởi tiến trình nền SMON khi kết thúc câu lệnh sắp xếp và vùng không gian đã cấp phát sẽ được giải phóng để cho các đối tượng khác của database

sử dụng. Permanent tablespaces được sử dụng cho việc sắp xếp, có ba vùng không gian trong tablespace có thể được phân vùng khác nhau. Thông thường, mỗi tablespace nên được sử dụng cho từng tiến trình sắp xếp khác nhau.

Khi một temporary tablespaces được sử dụng cho các temporary segments, Instance chỉ tạo một segment dùng để sắp xếp cho tablespace. Một vài transactions cần đến sắp xếp trên ổ đĩa có thể sử dụng cùng segment. Tuy nhiên, một extent thì không thể cùng chia sẻ đồng thời cho nhiều transactions khác nhau.

12.1.2. Sử dụng các Sort Segments

Sort segment được tạo bởi câu lệnh sắp xếp đầu tiên sử dụng tới temporary tablespace cho việc sắp xếp. Và sort segment chỉ bị hủy khi tắt (shutdown) database. Việc này làm giảm bớt số lần cấp phát và thu hồi các sort segments phục vụ cho công việc sắp xếp, làm tăng năng suất hệ thống. Oracle không hạn chế số lượng các extents cấp phát cho mỗi sort segment thuộc một temporary tablespace.

12.1.3. Sort Extent Pool

Oracle server lưu lại chi tiết sort segment trong vùng Sort Extent Pool của vùng nhớ SGA, mỗi câu lệnh cần tới các vùng trống để thực hiện sắp xếp có thể tìm các extent rỗi trong vùng nhớ này.

12.2.C;P PHÁT KHÔNG GIAN CHO TEMPORARY SEGMENT

Temporary tablespaces được sử dụng để tăng hiệu quả sắp xếp dữ liệu. Kích thước của các extents trong temporary segment được xác định bởi DEFAULT STORAGE clause của tablespace tương ứng.

Do lượng dữ liệu ghi lên temporary segment bằng phần nguyên lần giá trị SORT_AREA_SIZE. Do vậy, ta nên đặt INITIAL = NEXT = (n*SORT_AREA_SIZE)+ DB_BLOCK_SIZE

12.3.THÔNG TIN V7 CÁC TEMPORARY SEGMENT

Hình vẽ 60.Thu nhận thông tin về database instance

Ta có thể lấy được các thông tin về temporary segment trong một số bảng từ điển dữ liệu: DBA_SEGMENTS: chứa thông tin về tất cả các loại segments trong database.

V$SORT_SEGMENT: cho biết trạng thái của các sort extent pool (vùng không gian sắp xếp). Với từ điển dữ liệu này, ta có thể biết được những thông tin sau:

Tên cột Diễn giải

TABLESPACE_NAME Tên temporary tablespace EXTENT_SIZE Kích thước của extent TOTAL_EXTENTS Tổng số các extents TOTAL_BLOCKS Tổng số các blocks

USED_EXTENTS Số lượng extents đã sử dụng USED_BLOCKS Số lượng blocks đã sử dụng FREE_EXTENTS Số lượng extents còn trống FREE_BLOCKS Số lượng blocks còn trống

MAX_SORT_SIZE Kích thước tối đa của vùng dữ liệu sắp xếp MAX_SORT_BLOCKS Số lượng blocks tối đa dùng để sắp xếp dữ liệu Ví dụ:

SVRMGR> SELECT tablespace_name, extent_size, 2> total_extents, max_sort_blocks

3> FROM v$sort_segment;

TABLESPACE_NAME EXTENT_SIZ TOTAL_EXTE MAX_SORT_B --- --- --- ---

TEMP 128 1 128 (adsbygoogle = window.adsbygoogle || []).push({});

MAX_SORT_SIZE và MAX_SORT_BLOCKS là số lượng các extents và các blocks sử dụng bởi phép sắp xếp lớn nhất. Thông tin này là hữu ích trong việc điều chỉnh kích thước của temporary tablespace

V$SORT_USAGE: cho biết thông tin về các sắp xếp hiện có của instance, ta kết hợp với V$SESSION để biết thêm các thông tin:

Ví dụ:

SVRMGR> SELECT s.username, u."USER", u.tablespace, 2> u.contents, u.extents, u.blocks

3> FROM v$session s,v$sort_usage u 4> WHERE s.saddr=u.session_addr;

USERNAME USER TABLESPACE CONTENTS EXTENTS BLOCKS --- --- --- --- --- ---

SYSTEM SYS TEMP TEMPORARY 1 128

Một phần của tài liệu Mạng ORACLE kỹ thuật và quản trị (Trang 131)