您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Oracle可恢復空間分配技術是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
許多操作因為空間不夠而失敗,如果啟用了可恢復空間分配,當操作遇到空間問題而不是因為錯誤而失敗時,操作將暫停,顯示為會話掛起。當錯誤得到解決時,它將繼續(xù)。所有掛起的會話(當前掛起的和之前掛起但現(xiàn)在再次運行的)列在視圖dba_resumable中。會話關閉后,視圖中的記錄將消除。
要在會話級別啟用可恢復空間分配,命令如下:
alter session enable resumable [timeout <seconds>] [name <opname>];
timeout選項指定語句將掛起多長時間。如果到達這個時間,但問題沒有解決,語句失敗,返回錯誤。如果沒有指定timeout,會話將無限期掛起。name選項指定在視圖dba_resumable中顯示的名稱,幫助確定在多語句進程的哪個點出現(xiàn)空間問題。
執(zhí)行該命令需要授予會話用戶相應的權限:
grant resumable to <username>;
也可以通過設置實例參數(shù)resumable_timeout為所有會話啟用可恢復空間。這是一個動態(tài)參數(shù),如要設置一分鐘的超時:
alter system set resumable_timeout=60;
這將導致所有會話在遇到空間問題時掛起一分鐘。
Data Pump實用程序expdp和impdp有一個命令行開關resumable=y(默認為n),允許Data Pump作業(yè)如果遇到空間問題就掛起。
當會話掛起時,它將保持對使用的所有資源的控制,包括撤銷空間、臨時空間、PGA內(nèi)存和記錄鎖定。
在遇到問題時,可以通過另一個會話交互式的進行修復。或者可以創(chuàng)建一個在會話掛起時將運行的after suspend on database觸發(fā)器。這個觸發(fā)器可以報告問題,如通過電子郵件,或包括檢查并自動修復問題的代碼,這就意味著可以在一些操作如插入數(shù)據(jù)導致表空間容量不夠時,通過觸發(fā)器程序確認后自動給表空間分配容量。
以下實驗測試可恢復空間分配功能的使用:
1、創(chuàng)建表空間和表
create tablespace test datafile 'd:\oradata\mes\test01.dbf' size 2m;
create table scott.t1(c1 char(1000)) tablespace test;
2、授予會話可恢復空間分配的權限
grant resumable to scott;
3、在會話級別設定可恢復空間分配
conn scott/tiger
alter session enable resumable name 't1_insert';
4、向表中插入數(shù)據(jù),因空間不足會話將被掛起
begin
for i in 1 .. 2000 loop
insert into scott.t1 values ('a row');
end loop;
commit;
end;
/
5、查看因空間分配問題掛起的會話
col name for a10
col sql_text for a30
col error_parameter1 for a10
col error_parameter2 for a10
col error_parameter3 for a10
col error_parameter4 for a10
col error_parameter5 for a10
col error_msg for a30
select user_id,
session_id,
instance_id,
status,
timeout,
start_time,
suspend_time,
resume_time,
name,
sql_text,
error_number,
error_parameter1,
error_parameter2,
error_parameter3,
error_parameter4,
error_parameter5,
error_msg
from dba_resumable;
USER_ID SESSION_ID INSTANCE_ID STATUS TIMEOUT START_TIME SUSPEND_TIME RESUME_TIME NAME SQL_TEXT ERROR_NUMBER ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_MSG
---------- ---------- ----------- --------- ---------- -------------------- -------------------- -------------------- ---------- ------------------------------ ------------ ---------- ---------- ---------- ---------- ---------- ------------------------------
84 74 1 SUSPENDED 7200 01/25/18 09:42:18 01/25/18 09:42:18 t1_insert INSERT INTO SCOTT.T1 VALUES (' 1653 SCOTT T1 128 TEST ORA-01653: 表 SCOTT.T1 無法通過 128
a row') (在表空間 TEST 中) 擴展
6、修復問題,會話將繼續(xù)執(zhí)行
alter database datafile 'd:\oradata\mes\test01.dbf' resize 4m;
7、再次查看因空間分配問題掛起的會話,顯示會話已經(jīng)恢復
select user_id,
session_id,
instance_id,
status,
timeout,
start_time,
suspend_time,
resume_time,
name,
sql_text,
error_number,
error_parameter1,
error_parameter2,
error_parameter3,
error_parameter4,
error_parameter5,
error_msg
from dba_resumable;
USER_ID SESSION_ID INSTANCE_ID STATUS TIMEOUT START_TIME SUSPEND_TIME RESUME_TIME NAME SQL_TEXT ERROR_NUMBER ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_PARA ERROR_MSG
---------- ---------- ----------- --------- ---------- -------------------- -------------------- -------------------- ---------- ------------------------------ ------------ ---------- ---------- ---------- ---------- ---------- ------------------------------
84 74 1 NORMAL 7200 01/25/18 10:00:39 t1_insert 0
8、刪除表并清理表空間
drop table scott.t1;
drop tablespace test including contents and datafiles;
看完上述內(nèi)容,你們對Oracle可恢復空間分配技術是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。