1. 程式人生 > >oracle 關於“ORA-30036”處理方法

oracle 關於“ORA-30036”處理方法

選項 新建 兩個 success 開始 解決辦法 exp part spa

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 關於“ORA-30036”處理方法