三種方式調整表空間大小:維保數據庫時應該考慮。

//通過視頻學習的,表空間及數據文件的具體路徑請根據實際情況更改。

//普通表空間的數據文件最大可以擴展到32G。


如何調整表空間的尺寸


(表空間的大小等同它下的數據文件大小之和)

   表空間的操作在sys下

當發生表空間不足的問題時常用的3個解決辦法:

 

1)增加數據文件大小(resize)

 

alter database datafile '/u01/oradata/timran11g/timran01.dbf' resize10m;

 

2)增加數據文件(add datafile)

 

alter tablespace timran add datafile'/u01/oradata/timran11g/timran02.dbf' size 20m;

 

3)設置表空間自動增長(autoextend)

 

alter database datafile '/u01/oradata/timran11g/timran01.dbf' autoextendon next 10m maxsize 500m;

隨便拓展一個數據文件就可以。

 

例:

SQL>create tablespace timran datafile '/u01/oradata/timran11g/timran01.dbf' size5m;

05:46:08SQL> create table scott.test1 (id int) tablespace timran;

05:47:12SQL> insert into scott.test1 values(1);

05:47:15SQL> insert into scott.test1 select * from scott.test1;

05:47:23SQL> /

05:47:23SQL> /

32768rows created.

05:47:23SQL> /

insertinto scott.test1 select * from scott.test1

*

ERRORat line 1:

ORA-01653:unable to extend table SCOTT.TEST1 by 8 in tablespace TIMRAN

 

//用第一種方法擴充表空間

05:47:23SQL> alter database datafile '/u01/oradata/timran11g/timran01.dbf' resize10m;

 

05:48:18SQL> insert into scott.test1 select * from scott.test1;

 

05:48:25SQL> /

 

131072rows created.

 

05:48:26SQL> /

insertinto scott.test1 select * from scott.test1

*

ERRORat line 1:

ORA-01653:unable to extend table SCOTT.TEST1 by 128 in tablespace TIMRAN

 

//用第二種方法擴充表空間:

 

05:48:57SQL> alter tablespace timran add datafile'/u01/oradata/timran11g/timran02.dbf' size 20m;

 

05:49:04SQL> insert into scott.test1 select * from scott.test1;

 

05:49:13SQL> /

 

524288rows created.

 

05:49:14SQL> /

insertinto scott.test1 select * from scott.test1

*

ERRORat line 1:

ORA-01653:unable to extend table SCOTT.TEST1 by 128 in tablespace TIMRAN

 

//用第三種方法擴充表空間:

 

05:49:15SQL> alter database datafile '/u01/oradata/timran11g/timran01.dbf'autoextend on next 10m maxsize 500m;

 

05:49:33SQL> insert into scott.test1 select * from scott.test1;

 

05:49:37SQL> drop tablespace timran including contents and datafiles;

 

備註: 可恢復空間分配 Oracle的Resumable(可恢復)功能(PPT-II-502)

11g新功能

 

當我們往一個表裏面插入大量數據時,如果某條insert語句因表空間的空間不足(沒有開啓自動擴展),會報 ORA-01653:無法擴展空間的錯誤,該條SQL語句會中斷,白白浪費了時間及數據庫資源。爲防範這個問題,Oracle設計了一個功能:resumable。在resumable開啓的情況下,如果Oracle執行某條SQL申請不到空間了,比如數據表空間,undob表空間,temporary空間等,則會將該事務的語句掛起(suspended),等你把空間擴展後,Oracle又會使該insert語句繼續進行。

 

可以通過兩個級別設置resumable

 

system級別:初始化參數RESUMABLE_TIMEOUT非0,這將使數據庫中所有session使用可恢復的空間分配

session級別:alter session enable|disable resumable [TIMEOUT]; 這將爲當前session設置可恢復的空間分配

 

因爲resumable是有資源消耗代價的, 所以session級的resumable是比較實際的:

 

注意TIMEOUT的用法,單位爲秒, 進一步要理解初始化參數RESUMABLE_TIMEOUT的含義

 

RESUMABLE_TIMEOUT=0,  enablesession時應該指定TIMEOUT。否則使用缺省值7200秒。

RESUMABLE_TIMEOUT<>0, enable session時可以省略TIMEOUT,如果此時指定TIMEOUT會覆蓋掉參數RESUMABLE_TIMEOUT值。

 

舉例:

 

session 1:

 

1)建個小表空間,固定2m大小,然後建個表屬於這個表空間

 

SQL>create tablespace small datafile '/u01/oradata/timran11g/small01.dbf' size 2m;

SQL>create table scott.test(n1 char(1000)) tablespace small;

 

2)向這個表插入數據,表空間滿了,使for語句沒有完成循環,2000條語句整體失敗。

SQL>

begin

fori in 1..2000 loop

insertinto scott.test values('this is test');

endloop;

commit;

end;

/

 

begin

*

第 1 行出現錯誤:

ORA-01653:表 SCOTT.TEST 無法通過 128 (在表空間 SMALL 中) 擴展

ORA-06512:在 line 3

 

SQL>select count(*) from scott.test;

 

  COUNT(*)

----------

         0

 

3)使能 resumable功能

SQL>alter session enable resumable;

 

4)再重複第2)步,會話被掛起;

 

session 2:

 

5)查看視圖的有關信息

 

SQL> select session_id,sql_text,error_number from dba_resumable;

 

SESSION_ID SQL_TEXT                                          ERROR_NUMBER

------------------------------------------------------------ ------------

       136 INSERT INTO SCOTT.TEST VALUES('thisis test')              1653

 

SQL>select sid,event,seconds_in_wait from v$session_wait where sid=136;

 

       SID EVENT                                                           SECONDS_IN_WAIT

-----------------------------------------------------------------------------------------

       136 statement suspended, wait error tobe cleared                                 1

 

 

6)加擴表空間,看到session1裏掛起的會話成功完成了,不需要干預

 

 

SQL>alter tablespace small add datafile '/u01/oradata/timran11g/small02.dbf' size4m;

 

SQL>select count(*) from scott.test;

 

  COUNT(*)

----------

      2000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章