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