Thứ Bảy, 3 tháng 12, 2022

Temporary Undo trong Cơ sở dữ liệu Oracle 12c

Một tính năng khá "thú vị" của các bảng global temporary (GTT) là các undo segment của chúng được lưu trữ trong undo tablespace thông thường, đồng thời nó lại được bảo vệ bằng redo entry Điều này gặp phải một số vấn đề.

  • Việc ghi vào undo tablespace yêu cầu cơ sở dữ liệu phải được mở ở chế độ đọc-ghi, vì vậy không thể sử dụng các bảng global temporary trong cơ sở dữ liệu read only và cơ sở dữ liệu physical standby.

  • Các bảng global temporary chứa dữ liệu tạm thời, dữ liệu này không cần thiết trong khi revoery, do đó, việc bảo vệ chúng bằng redo gây tăng cải không cần thiết trên hệ thống.

  • Việc undo được liên kết với các bảng global temporary bổ sung vào tổng dung lượng cần thiết để đáp ứng khoảng thời gian undo retention.

Từ Oracle 12c Release 1 (12.1) đã giới thiệu khái niệm Temporary Undo, cho phép các undo segment cho các bảng global temporary được lưu trữ trong temporary tablespace. Điều này cho phép các bảng global temporary được sử dụng trong cơ sở dữ liệu physical standby và cơ sở dữ liệu read-only, cũng như loại bỏ nhu cầu redo.

  • Bật/Tắt Temporary Undo

  • Theo dõi Temporary Undo

Bật/Tắt Temporary Undo

Trong Oracle 12c, các undo segment cho các bảng global temporary vẫn được quản lý bằng cách sử dụng undo tablespace thông thường theo mặc định. Temporary Undo được bật/tắt bằng cách sử dụng tham số TEMP_UNDO_ENABLED ở cấp độ phiên hoặc hệ thống.

-- Cấp phiên

ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE;

ALTER SESSION SET TEMP_UNDO_ENABLED = FALSE;


-- Cấp độ hệ thống

CONN sys@pdb1 NHƯ SYSDBA


ALTER SYSTEM SET TEMP_UNDO_ENABLED = TRUE;

ALTER SYSTEM SET TEMP_UNDO_ENABLED = FALSE;


Có một số cảnh báo liên quan đến điều này.

  • Chức năng Temporary Undo chỉ khả dụng nếu tham số COMPATIBLE được đặt thành 12.0.0 trở lên.

  • Sau khi một phiên đã tạo một số thao tác undo cho bảng global temporary, cho dù sử dụng thao tác undo thông thường hay tạm thời, mọi nỗ lực thay đổi cài đặt tham số TEMP_UNDO_ENABLED sẽ bị bỏ qua trong suốt thời gian tồn tại của phiên. Không có lỗi được tạo ra.

  • Temporary Undo là mặc định cho cơ sở dữ liệu dự phòng, vì vậy bất kỳ thay đổi nào đối với tham số TEMP_UNDO_ENABLED đều bị bỏ qua trên cơ sở dữ liệu dự phòng.

Theo dõi Temporary Undo

Hoạt động undo thông thường được theo dõi bằng cách sử dụng view V$UNDOSTAT. Trong cơ sở dữ liệu Oracle 12c, view V$TEMPUNDOSTAT đã được thêm vào để thực hiện một chức năng tương tự, nhưng để Temporary Undo.

Tạo một bảng global temporary để kiểm tra.

CONN test/test@pdb1


DROP TABLE my_temp_table PURGE;


CREATE GLOBAL TEMPORARY TABLE my_temp_table (

  id           NUMBER,

  description  VARCHAR2(20)

)

ON COMMIT DELETE ROWS;


Đảm bảo rằng người dùng thử nghiệm có thể truy cập view V$TEMPUNDOSTAT.

CONN sys@pdb1 AS SYSDBA


GRANT SELECT ON v_$tempundostat TO test;


Thử nghiệm sau đây tạo phiên mới, tải một số dữ liệu vào GTT, sau đó kiểm tra việc sử dụng redo và undo. Ví dụ này không sử dụng Temporary Undo.

CONN test/test@pdb1

SET AUTOTRACE ON STATISTICS;


-- Populate GTT.

INSERT INTO my_temp_table

WITH data AS (

  SELECT 1 AS id

  FROM   dual

  CONNECT BY level < 10000

)

SELECT rownum, TO_CHAR(rownum)

FROM   data a, data b

WHERE  rownum <= 1000000;


1000000 rows created.


Statistics

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

         46  recursive calls

      15346  db block gets

       2379  consistent gets

         16  physical reads

    2944564  redo size

        855  bytes sent via SQL*Net to client

        986  bytes received via SQL*Net from client

          3  SQL*Net roundtrips to/from client

          5  sorts (memory)

          0  sorts (disk)

    1000000  rows processed


SQL>


SET AUTOTRACE OFF


-- Check undo used by transaction.

SELECT t.used_ublk,

       t.used_urec

FROM   v$transaction t,

       v$session s

WHERE  s.saddr = t.ses_addr

AND    s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');


 USED_UBLK  USED_UREC

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

       302       6238


SQL>


Chúng ta có thể thấy phần insert tạo ra 302 block undo, đó là lý do tại sao số liệu thống kê cho thấy kích thước redo là 2,9 triệu byte redo, được tạo để bảo vệ việc undo.

Thử nghiệm sau đây tạo một phiên mới, cho phép Temporary Undo, tải một số dữ liệu vào GTT, kiểm tra việc sử dụng redo và undo, sau đó kiểm tra việc sử dụng Temporary Undo bằng view V$TEMPUNDOSTAT

CONN test/test@pdb1


-- Enable temporary undo.

ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE;


SET AUTOTRACE ON STATISTICS;


-- Populate GTT.

INSERT INTO my_temp_table

WITH data AS (

  SELECT 1 AS id

  FROM   dual

  CONNECT BY level < 10000

)

SELECT rownum, TO_CHAR(rownum)

FROM   data a, data b

WHERE  rownum <= 1000000;


1000000 rows created.


Statistics

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

         25  recursive calls

      15369  db block gets

       2348  consistent gets

         16  physical reads

       1004  redo size

        853  bytes sent via SQL*Net to client

        986  bytes received via SQL*Net from client

          3  SQL*Net roundtrips to/from client

          3  sorts (memory)

          0  sorts (disk)

    1000000  rows processed


SQL>


SET AUTOTRACE OFF


-- Check undo của giao dich.

SELECT t.used_ublk,

       t.used_urec

FROM   v$transaction t,

       v$session s

WHERE  s.saddr = t.ses_addr

AND    s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');


 USED_UBLK  USED_UREC

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

         1          1


SQL>


-- Check temporary undo usage.

SET LINESIZE 200

ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';


SELECT *

FROM   v$tempundostat

WHERE  end_time >= SYSDATE - INTERVAL '1' MINUTE;


BEGIN_TIME           END_TIME                UNDOTSN   TXNCOUNT MAXCONCURRENCY MAXQUERYLEN MAXQUERYID    UNDOBLKCNT     EXTCNT    USCOUNT SSOLDERRCNT NOSPACEERRCNT    CON_ID

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

24-NOV-2014 15:11:09 23-NOV-2014 15:17:30          3          2              0           0                      321          4          1           0           0           0


SQL>



Ở đây, chúng ta có thể thấy chỉ một byte undo thông thường được tạo ra, dẫn đến khoảng 1004 byte redo. UNDOBLKCNT của view V$TEMPUNDOSTAT hiển thị cho 321 block Temporary Undo đã được sử dụng.

Để biết thêm thông tin xem:

Hi vọng hữu ích cho bạn.

=============================

* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.

* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888

* Chi tiết tham khảo:

https://bit.ly/oaz_w

=============================

KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:

📧 Mail: binhoracle@gmail.com

☎️ Mobile/Zalo: 0902912888

👨 Facebook: https://www.facebook.com/BinhOracleMaster

👨 Inbox Messenger: https://m.me/101036604657441 (profile)

👨 Fanpage: https://www.facebook.com/tranvanbinh.vn

👨 Inbox Fanpage: https://m.me/tranvanbinh.vn

👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam

👨 Website: https://www.tranvanbinh.vn

👨 Blogger: https://tranvanbinhmaster.blogspot.com

🎬 Youtube: http://bit.ly/ytb_binhoraclemaster

👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi

👨 Linkin: https://www.linkedin.com/in/binhoracle

👨 Twitter: https://twitter.com/binhoracle

👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội


=============================

Temporary Undo trong Cơ sở dữ liệu Oracle 12c, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty


ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master