1. 程式人生 > 其它 >dba_free_space檢視訪問變慢、消耗變高解決辦法

dba_free_space檢視訪問變慢、消耗變高解決辦法

文章目錄

1 概述

2.2 會話級臨時表
1 概述
1. 作用:用來 '臨時' 儲存資料
(1) 當一個事務或會話結束的時候,這個臨時表中的 '資料' 會被資料庫自動清空
(2) 但 '表結構' 依舊保留

2. 分類: '生命週期的不同'
(1) 事務級臨時表: on commit delete rows; commit 時 '刪除' 記錄(預設)
(2) 會話級臨時表: on commit preserve rows; commit 時 '儲存' 記錄,結束會話時 '刪除' 記錄

3. 注意
(1) 臨時表處理的效率高於普通表
<1> 不記錄 '日誌'
<2> 只能當前使用者使用,不會產生 '鎖'
(2) 和普通表操作方式一樣

4. 以下測試中,建立臨時表後,資訊查詢
select t.owner,
t.table_name,
t.tablespace_name, -- 所屬表空間
t.logging, -- 是否記錄日誌
t.duration --生命週期
from dba_tables t
where t.owner = 'SCOTT'
and t.table_name in ('TRANSACTION_TEMP', 'SESSION_TEMP');

2 分類
2.1 事務級臨時表
create global temporary table transaction_temp (
tid number(3),
tname varchar2(30)
) on commit delete rows; -- on commit delete rows 可省略(預設)

驗證:事務中,資料可以查詢,事務結束後(commit、rollback)後,資料被清空

insert into transaction_temp(tid, tname) values(1, 'a');
insert into transaction_temp(tid, tname) values(2, 'b');
-- commit;

select * from transaction_temp;

查詢截圖:

2.2 會話級臨時表
create global temporary table session_temp (
tid number(3),
tname varchar2(30)
) on commit preserve rows;

驗證:commit 時,儲存資料至表中,會話結束後,資料被清空

insert into session_temp(tid, tname) values(1, 'a');
insert into session_temp(tid, tname) values(2, 'b');
commit;

select * from session_temp;

結束會話有以下辦法:(上述測試,立馬就結束了,執行很快哦)

1. 自然結束(執行完成) -- sql_text => begin :id := sys.dbms_transaction.local_transaction_id; end;
select t1.sid, t1.serial#, t2.sql_text, t2.action
from v$session t1, v$sql t2
where t2.sql_id = t1.prev_sql_id
and t1.username = 'SCOTT';

2. 手動刪除
(1) alter system kill session 'sid,serial#';

再新建一個會話,查詢:資料被清空了

————————————————
版權宣告:本文為CSDN博主「魚丸丶粗麵」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_34745941/article/details/109487071