共計 3129 個字符,預計需要花費 8 分鐘才能閱讀完成。
今天就跟大家聊聊有關 Oracle 可恢復空間分配技術是怎樣的,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據(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 內存和記錄鎖定。
在遇到問題時,可以通過另一個會話交互式的進行修復。或者可以創(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
error_parameter1 for a10
error_parameter2 for a10
error_parameter3 for a10
error_parameter4 for a10
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、再次查看因空間分配問題掛起的會話,顯示會話已經恢復
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;
看完上述內容,你們對 Oracle 可恢復空間分配技術是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。