日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ...

發布時間:2025/3/8 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、一次更新或者刪除大量數據,這些數據需要保存在undo表空間中(直到提交或回滾后這些undo表空間中的數據才允許被覆蓋),如果undo表空間不足,就會報ORA-30036錯誤。

下面是兩種解決辦法:

1、增加undo表空間大小,或將undo表空間數據文件設置為自動擴展(如果磁盤空間不足也會導致該問題)

2、批量更新或刪除數據

二、數據庫中存在大量未提交的事物(更新或刪除操作)

解決辦法:

1、找出這些占用undo回滾段的操作(使用下面語句)

SELECT s.username,

s.sid,

pr.PID,

s.OSUSER,

s.MACHINE,

s.PROGRAM,

rs.segment_id,

r.usn,

rs.segment_name,

r.rssize/1024/1024,

sq.sql_text

FROM v$transaction t, v$session s, v$rollstat r, dba_rollback_segs rs ,v$sql? sq,v$process pr

WHERE s.saddr = t.ses_addr

AND t.xidusn = r.usn

AND rs.segment_id = t.xidusn

AND s.sql_address=sq.address

AND s.sql_hash_value = sq.hash_value

AND s.PADDR=pr.ADDR

ORDER BY t.used_ublk DESC;

USERNAME?? SID?? ? PID OSUSER? MACHINE? PROGRAM?? ??? ??? ?? SEGMENT_ID? USN? SEGMENT_NAME????????? R.RSSIZE/1024/1024? SQL_TEXT

--------?? ---?? --- ------? -------? -------???????????????????? ----------? ---? ------------????????? ------------------? ------------------------

SCOTT?? ??? 36?? ? 25 oracle?? rhel5??? sqlplus@rhel5 (TNS V1-V3)?? ????? 14?? ?????? 14?? _SYSSMU14_55430887$??? 5.3671875????? update t set object_name='aaaa' where rownum<10000

SCOTT????? 30?? ? 23 oracle?? rhel5??? sqlplus@rhel5 (TNS V1-V3)?? ????? 12?? ??????? 12? _SYSSMU12_2606085817$?? 2.6171875???? update b set object_name='aaaa'

找出導致這些語句未提交的原因(如調用存儲過程邏輯問題),進行處理

三、在使用數據泵導入數據時,如果數據中存在大量約束和索引,導入數據時維護索引會產生大量undo數據

Import datapump will perform index maintenance and this can increase undo usage especially if there is other DML occurring on the database。

解決辦法:導入數據時使用下面兩個參數排除約束和索引,導入數據成功后再創建相應的約束和索引:

EXCLUDE=CONSTRAINT

EXCLUDE=INDEX

備注:

關于undo表空間的大小,可以根據下面的計算做一個預算

1.計算業務高峰期每秒產生undo數據塊的個數:

select max(undoblks / ((end_time - begin_time)*24*3600)) from v$undostat;

2.得到undo數據塊在undo表空間中可以保留的最長時間

show parameter undo_retention

3.得到數據塊大小

show parameter db_block;

4.將以上三者的數據相乘就是所需undo表空間的大小數。

查看undo數據塊的歷史使用情況(每10分鐘使用的數據塊數量)

SQL> select begin_time,end_time,undoblks from v$undostat;

16-MAY-16?? ??? 16-MAY-16?? ??? ????? 827

16-MAY-16?? ??? 16-MAY-16?? ??? ???? 1065

16-MAY-16?? ??? 16-MAY-16?? ??? ?????? 23

16-MAY-16?? ??? 16-MAY-16?? ??? ???? 2279

16-MAY-16?? ??? 16-MAY-16?? ??? ???? 8665

16-MAY-16?? ??? 16-MAY-16?? ??? ???? 3245

16-MAY-16?? ??? 16-MAY-16?? ??? ???? 1011

......

......

......

查看正在運行的事物所需要的undo數據塊

SQL> select addr,used_ublk from v$transaction;

ADDR?? ??? ?? USED_UBLK

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

000000007DC55940?? ?296

000000007DC5F108?? ?580

查看UNDO表空間占用情況

SQL> select tablespace_name,status,round(sum(bytes)/1024/1024,2) MB,count(*) extent_count from dba_undo_extents group by tablespace_name,status order by tablespace_name,status;

TABLESPACE_NAME ?? ??????? STATUS?? ??? ? MB EXTENT_COUNT

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

UNDOTBS1?? ??? ??????? ACTIVE?? ?????? 10.69?? ?????? 36

UNDOTBS1?? ??? ??????? EXPIRED?? ??? ? .5?? ??????? 8

UNDOTBS1?? ??? ??????? UNEXPIRED????? 72.81?? ????? 112

UNDOTBS2?? ??? ??????? EXPIRED?? ??????? 2.94?? ?????? 32

UNDOTBS2?? ??? ??????? UNEXPIRED?????? 3.44?? ?????? 10

來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/30373263/viewspace-2100947/,如需轉載,請注明出處,否則將追究法律責任。

總結

以上是生活随笔為你收集整理的oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。