Oracle資料庫ORA-30036解決辦法
ORA-30036:unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
出現問題原因:
大批量匯入某表時imp報錯如下:
Export file created by EXPORT:V11.02.00 via conventional path
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
import server uses WE8MSWIN1252 character set (possible charset conversion)
.....
IMP-00058:Oracle error 30036 encountered
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
IMP-00028: partial import of previous table rolled back: 814416 rows rolled back
IMP-00057: Warning: Dump file may not contain data of all partitions of this table
Import terminated successfully with warnings.
字面意思翻譯就是:無法按8擴充套件欄位
首先了解了一下UNDO的作用:
1.什麼是還原表空間?
還原表空間即Undo表空間,是Oracle特有的概念,Undo表空間會自動分配Undo段,用來儲存事務中DML( Insert、Update或Delete)語句的Undo資料。在Oracle9i前,管理Undo資料只能使用Rollback Segment。從Oracle9i開始,管理Undo資料不僅可以使用回滾段,還可以使用Undo表空間。而由於管理裡規劃回滾段太過複雜,Oracle10g已經棄用回滾段,僅使用Undo表空間來管理Undo資料。
2.什麼是Undo資料?
Undo資料也稱回滾資料,當執行DML語句時,事務操作過程中的資料被稱為Undo資料,主要有兩個作用:
1、確保事務一致性:如果事務發生錯誤或者使用者想要取消資料庫操作,則可以通過Rollback回到修改前的值。
2、提供一致性讀:如表T有100條記錄,使用者A在表T執行了語句刪除掉10條記錄,尚未提交,此時使用者B執行查詢語句,將返回100條記錄而不是90條。
再來談一下解決辦法:
1、在原有資料檔案中增加擴充套件容量:
alter database datafile '/opt/oracle/oradata/orcl/undotbs01.dbf' resize 30G;
(注意:如果原有資料檔案大小是30G的話,這個方法就不能用了,因為oralce最大檔案只讓配置成30G一個數據檔案)
2.新增資料檔案(通用):
alter tablespace UNDOTBS1 add datafile '/opt/oracle/oradata/orcl/undotbs01_01.dbf' size 30G;
--autoextend on next 1M maxsize 5000M; //可選項;目的是設定檔案的自動擴充套件屬性,從最小1M到最大5000M
3.如果有需求要建立有多個undotbs表空間,可以定時檢查undo表空間,並進行切換:
alter system set undo_tablespace = undotbs02;
(注意undotbs02需要提前新建,並設定相應的資料檔案大小即可)
更多Oracle相關資訊見 Linux/2018-09/../../topicnews.aspx?tid=12" target="_blank" rel="nofollow,noindex"> Oracle 專題頁面 https://www.linuxidc.com/topicnews.aspx?tid=12
Linux公社的RSS地址 :https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-09/154489.htm