Oracle可恢復空間分配技術

llnnmc發表於2018-01-22

許多操作因為空間不夠而失敗,如果啟用了可恢復空間分配,當操作遇到空間問題而不是因為錯誤而失敗時,操作將暫停,顯示為會話掛起。當錯誤得到解決時,它將繼續。所有掛起的會話(當前掛起的和之前掛起但現在再次執行的)列在檢視dba_resumable中。會話關閉後,檢視中的記錄將消除。

 

要在會話級別啟用可恢復空間分配,命令如下:

alter session enable resumable [timeout <seconds>] [name <opname>];

timeout選項指定語句將掛起多長時間。如果到達這個時間,但問題沒有解決,語句失敗,返回錯誤。如果沒有指定timeout,會話將無限期掛起。name選項指定在檢視dba_resumable中顯示的名稱,幫助確定在多語句程式的哪個點出現空間問題。

 

執行該命令需要授予會話使用者相應的許可權:

grant resumable to <username>;

 

也可以透過設定例項引數resumable_timeout為所有會話啟用可恢復空間。這是一個動態引數,如要設定一分鐘的超時:

alter system set resumable_timeout=60;

這將導致所有會話在遇到空間問題時掛起一分鐘。

 

Data Pump實用程式expdpimpdp有一個命令列開關resumable=y(預設為n),允許Data Pump作業如果遇到空間問題就掛起。

 

當會話掛起時,它將保持對使用的所有資源的控制,包括撤銷空間、臨時空間、PGA記憶體和記錄鎖定。

 

在遇到問題時,可以透過另一個會話互動式的進行修復。或者可以建立一個在會話掛起時將執行的after suspend on database觸發器。這個觸發器可以報告問題,如透過電子郵件,或包括檢查並自動修復問題的程式碼,這就意味著可以在一些操作如插入資料導致表空間容量不夠時,透過觸發器程式確認後自動給表空間分配容量。

 

以下實驗測試可恢復空間分配功能的使用:

 

1、建立表空間和表

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、向表中插入資料,因空間不足會話將被掛起

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、修復問題,會話將繼續執行

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;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2150412/,如需轉載,請註明出處,否則將追究法律責任。

相關文章