空間RESUMABLE操作(一)
Oracle從9i開始引入這個功能,當出現空間不足等相關的錯誤時,Oracle可以不是馬上返回錯誤資訊,並回滾當前的操作,而是將操作掛起,直到掛起時間超過RESUMABLE TIMEOUT,或者空間不足的錯誤被解決。
這一篇簡單介紹空間RESUMABLE的例子。
第一次碰到這個特性是在一次安裝9i資料庫的過程中,在利用DBCA工具建立資料庫的時候,由於一個輔助表空間設定的資料檔案比較小,導致表空間不足的問題產生,由於DBCA啟用了這個特性,使得DBCA的建庫程式在一個地方停留了很久(大概半個小時以上),這時才意識到安裝過程碰到了以前沒有遇到的問題。
由於此時資料庫的資料字典已經完全生成,因此透過sqlplus登陸到資料庫,進行系統狀態,以及安裝程式的等待資訊,才發現資料庫建庫操作進入SUSPEND狀態,找到問題後,將目標表空間的資料檔案加大,於是DBCA得以進行執行,並最終完成了建庫操作。
由於9i啟用了這個特性,使得當時的建庫操作沒有因為空間不足而中途中止,因此當時對這個特性印象比較深。使用這個特性,可以使得一個長時間執行的資料庫操作,不至於因為空間相關的錯誤而回滾,給了使用者解決問題,並繼續處理的能力。
在9i中,RESUMABLE只能在會話級設定,而在10g中,Oracle新增了RESUMABLE_TIMEOUT初始化引數,使得RESUMABLE特性可以在資料庫的例項級上進行設定。
SQL> SELECT * FROM V$VERSION;
BANNER
------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for 32-bit Windows: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> CREATE USER U_RESUMABLE IDENTIFIED BY U_RESUMABLE;
使用者已建立。
SQL> GRANT CONNECT TO U_RESUMABLE;
授權成功。
SQL> ALTER USER U_RESUMABLE QUOTA 1M ON USERS;
使用者已更改。
SQL> CONN U_RESUMABLE/U_RESUMABLE@YTK92
已連線。
SQL> SET TIMING ON
SQL> CREATE TABLE T (ID NUMBER)
2 STORAGE (INITIAL 1M)
3 TABLESPACE USERS;
表已建立。
已用時間: 00: 00: 00.12
SQL> DROP TABLE T;
表已刪除。
已用時間: 00: 00: 01.12
SQL> CREATE TABLE T (ID NUMBER)
2 STORAGE (INITIAL 2M)
3 TABLESPACE USERS;
CREATE TABLE T (ID NUMBER)
*
第 1 行出現錯誤:
ORA-01536: 超出表空間'USERS'的空間限量
已用時間: 00: 00: 00.10
正常情況下,如果使用者建立物件超過使用者的QUOTA,則馬上會返回錯誤資訊,如果使用了RESUMABLE:
SQL> CONN YANGTK/YANGTK@YTK92
已連線。
SQL> GRANT ALTER SESSION TO U_RESUMABLE;
授權成功。
已用時間: 00: 00: 00.01
SQL> GRANT RESUMABLE TO U_RESUMABLE;
授權成功。
已用時間: 00: 00: 00.03
SQL> CONN U_RESUMABLE/U_RESUMABLE@YTK92
已連線。
SQL> ALTER SESSION ENABLE RESUMABLE TIMEOUT 60;
會話已更改。
已用時間: 00: 00: 00.01
SQL> CREATE TABLE T (ID NUMBER)
2 STORAGE (INITIAL 2M)
3 TABLESPACE USERS;
CREATE TABLE T (ID NUMBER)
*
第 1 行出現錯誤:
ORA-30032: 掛起的 (可恢復) 語句已超時
ORA-01536: 超出表空間'USERS'的空間限量
已用時間: 00: 01: 01.81
可以看到,由於設定了會話的掛起超時為60秒,剛才執行0.1秒就會報錯的建表語句,這次掛起了1分鐘後在報錯。
再次執行這個操作:
SQL> CREATE TABLE T (ID NUMBER)
2 STORAGE (INITIAL 2M)
3 TABLESPACE USERS;
會話被掛起,並在1分鐘內在另外的會話中,加大當前使用者的QUOTA:
SQL> CONN YANGTK/YANGTK@YTK92
已連線。
SQL> ALTER USER U_RESUMABLE QUOTA 5M ON USERS;
使用者已更改。
這時掛起的會話會自動繼續執行:
表已建立。
已用時間: 00: 00: 26.81
SQL>
合理的利用這個特性,可以避免很多由於空間不足引發的重複性工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-606446/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 空間RESUMABLE操作(三)
- 空間RESUMABLE操作(二)
- oracle表空間操作Oracle
- 表空間基本操作
- Oracle 表空間 的操作Oracle
- 傳輸表空間操作-OracleOracle
- 表空間常見的操作
- oracle表空間日常操作管理Oracle
- Oracle表空間操作詳解Oracle
- Oracle表空間相關操作Oracle
- 關於undo表空間的一些常用操作
- Oracle SQL 基本操作之 表空間OracleSQL
- 臨時表空間操作總結
- 表空間的建立修改等操作
- 【原創】表空間相關操作
- oracle 10g表空間操作Oracle 10g
- undo表空間中常用的操作
- oracle spatial之空間操作符Oracle
- informix資料空間映象操作步驟ORM
- imp之選項resumable匯入及insert插入資料因空間tablespace不足暫時掛起
- 資料庫維護常用操作4--表空間操作資料庫
- 將表從一個表空間遷移到另外一個表空間
- Oracle切換undo表空間操作步驟Oracle
- Oracle - 表空間相關常用操作語句Oracle
- 臨時表空間temporary tablespace相關操作
- 《英雄聯盟》手遊試玩:具備操作空間
- Redis實踐操作之——keyspacenotification(鍵空間通知)Redis
- Oracle表空間操作詳解-入門基礎Oracle
- oracle 臨時表空間基本常識和操作Oracle
- 第2步: 購買一個空間/主機空間 (Web Host)Web
- IMPDP 多個表空間物件匯入到一個表空間中物件
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- Oracle 10g的可傳輸表空間操作Oracle 10g
- 查詢表空間已使用空間和空閒空間的簡單檢視
- MySQL空間最佳化(空間清理)MySql
- 機器學習-學習筆記(一) --> (假設空間 & 版本空間)及 歸納偏好機器學習筆記
- 遷移使用者物件從一個表空間到另外表空間物件
- 分析表空間空閒率並收縮表空間