線上擴大資料庫UNDO資料表空間,擴大資料庫undo表

來源:互聯網
上載者:User

線上擴大資料庫UNDO資料表空間,擴大資料庫undo表

用oracle帳號登陸ORACLE資料庫伺服器


方法一:

  • 查看錶空間的名字及檔案所在位置:
select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_files order by tablespace_name;
  • 修改資料庫datafile檔案到新的大小
alter database datafile '\oracle\oradata\undotab1.dbf' resize 4000m;

方法二:

啟動SQL*Plus session並執行下面命令:
oracle% sqlplus /nologsql> connect / as sysdba;sql> spool $ORACLE_BASE/admin/oss/scripts/recreate_undo.log;sql> CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE '/db/data/undotbs02.dbf' SIZE 30M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 32767M;sql> ALTER SYSTEM SET UNDO_TABLESPACE="UNDOTBS2";sql> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;sql> CREATE BIGFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE '/db/data/undotbs01.dbf' SIZE 35M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 128G;sql> ALTER SYSTEM SET UNDO_TABLESPACE="UNDOTBS1";sql> DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;sql> exitoracle%

NOTE!
  • 如果看到這個錯誤:“ORA-30013: undo tablespace 'undotas1' is currently in use”需等待10-30秒,有時會更長些,再重新執行上面命令。也可以執行“UNDOTBS1 / UNDOTBS2”來檢查DROP命令是否可以執行    sql>SELECT SEGMENT_NAME, XACTS, V.STATUS FROM V$ROLLSTAT V, DBA_ROLLBACK_SEGS WHERE TABLESPACE_NAME = 'UNDOTBS1' AND SEGMENT_ID = USN;    返回結果:

“no rows selected”

  • 如果返回的結果是UNDOTBS1還在用的話,那麼可能要重啟ORACLE服務再執行上面的步驟。


oracle 怎擴充undo資料表空間

處理方法有兩種,
一是添加undo 資料表空間的資料檔案,
二是切換undo tablespace. 這種情況下多用在undo 資料表空間已經非常大的情況。
1 增加資料檔案
sql> alter tablespace undo add datafile 'D:\undo02.dbf' size 100m reuse;
資料表空間已更改。

2 切換undo 資料表空間

1、建立新的資料表空間undotbs2
sql> create undo tablespace undotbs2 datafile 'D:\undo03.dbf' size 100m reuse;
資料表空間已建立。

2、切換到建立的undo資料表空間上來,操作如下
sql> alter system set undo_tablespace=undotbs2 scope=both;
系統已更改。

3、將原來的undo資料表空間,置為離線:
sql> alter tablespace undo offline;
資料表空間已更改。

4、刪除原來的undo資料表空間:
sql> drop tablespace undo including contents and datafiles cascade constraints
資料表空間已刪除。

如果只是drop tablespace undo ,則只會在刪除控制檔案裡的記錄,並不會物理刪除檔案。
drop undo資料表空間的時候必須是在未使用的情況下才能進行。
如果undo資料表空間正在使用(例如事務失敗,但是還沒有恢複成功),那麼drop資料表空間命令將失敗。在drop資料表空間的時候可以使用including contents。
 
怎讓Oracle釋放undo資料表空間

  在日常的資料庫維護和資料庫編程中經常會遇到猶豫對大資料量做DML操作後是得ORACLE的undo資料表空間擴充到十幾個G或者幾十個G 但是這些資料表空間的所佔用磁碟的物理空間又不會被oracle所釋放,如果你用的是PC機很可能會遇到磁碟空間不足的問題,經過個人整理經過如下操作可以重構undo資料表空間,同樣temp資料表空間也可能在你查詢大資料或則建立索引的時候無限擴大導致磁碟空間不足,同樣可以用如下方式解決此問題:  --查看各資料表空間名稱  select name from v$tablespace  --查看某個資料表空間資訊  select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1';  --查看復原段的使用方式,哪個使用者正在使用復原段的資源,如果有使用者最好更換時間(特別是生產環境)。  select s.username, u.name from v$transaction t,v$rollstat r, v$rollname u,v$session s  where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username;  --檢查UNDO Segment狀態  select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;  --建立新的UNDO資料表空間,並設定自動擴充參數;  create undo tablespace undotbs2 datafile 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS02.DBF' size 10m reuse autoextend on next 100m maxsize unlimited;  -- 動態更改spfile設定檔;  alter system set undo_tablespace=undotbs2 scope=both;  --等待原UNDO資料表空間所有UNDO SEGMENT OFFLINE;  select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;  --再執行看UNDO資料表空間所有UNDO SEGMENT ONLINE;  select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;  -- 刪除原有的UNDO資料表空間;  drop tablespace undotbs1 including contents;  --確認刪除是否成功;
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.