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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

UNDO空间满的处理方法(含UNDO的学习与相关解释)

發(fā)布時(shí)間:2023/12/19 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 UNDO空间满的处理方法(含UNDO的学习与相关解释) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、查看數(shù)據(jù)庫當(dāng)前實(shí)例使用的是哪個(gè)UNDO表空間:

showparameterundo_tablespace

2、查看UNDO表空間對(duì)應(yīng)的數(shù)據(jù)文件和大小

setlines200pages200colfile_namefora60
coltablespace_namefora20;selecttablespace_name,file_name,bytes/1024/1024MBfromdba_data_fileswheretablespace_namelike'%UNDOTBS%';

3、查看undo表空間屬性:

showparameterundo

selectretention,tablespace_namefromdba_tablespaceswheretablespace_namelike'%UNDOTBS%';

解釋:

undo段中區(qū)的狀態(tài):

free: 區(qū)未分配給任何一個(gè)段

active: 已經(jīng)被分配給段,并且這個(gè)段被事務(wù)所使用,且事務(wù)沒有提交,不能覆蓋。(區(qū)被未提交的事務(wù)使用)

unexpired:事務(wù)已經(jīng)提交,但是區(qū)還在段中,還沒有被覆蓋且未達(dá)到undo_retention設(shè)定的時(shí)間。

    (nogurantee的情況下,原則上oracle盡量的不覆蓋unexpired的區(qū),但是如果undo空間壓力及較大,oracle也會(huì)去覆蓋。如果是guarantee,oracle強(qiáng)制保留retention時(shí)間內(nèi)的內(nèi)容,這時(shí)候free和expired空間不足的話,新事物將失敗。)

expired:oracle希望已經(jīng)提交的事務(wù)對(duì)應(yīng)的undo表空間中的undo段中的區(qū)再保留一段時(shí)間。保留的時(shí)間就是undo_retention。

     unexpired的區(qū)存在時(shí)間超過undo_retention設(shè)定的時(shí)間,狀態(tài)就會(huì)變?yōu)閑xpired。過期后的區(qū)就可以被覆蓋了。原則上expired的區(qū)一般不會(huì)釋放成free

PS:生產(chǎn)中沒有人會(huì)將UNDOTBS的retention設(shè)置成GUARANTEE這是很危險(xiǎn)的。

4、查看undo表空間當(dāng)前的使用情況:

setlines200pages200
coltablespace_namefora30selecttablespace_name,
status,sum(bytes)/1024/1024MBfromdba_undo_extentsgroupbytablespace_name,status;

與一般的用戶表空間不同,undo表空間不能通過dba_free_spaces來確定實(shí)際的使用情況,undo表空間除了active狀態(tài)的extent不能被覆蓋外。其他狀態(tài)的extent都是可以空間復(fù)用的。

如果active的extent總大小很大,說明系統(tǒng)中存在大事務(wù)。如果undo資源耗盡(ACTIVE接近undotbs的總大小),可能導(dǎo)致事務(wù)失敗。

5、查看什么事務(wù)占用了過多的undo:

selectaddr,used_ublk,used_urec,inst_id
fromgv$transactionorderby2desc;

ADDR: 事務(wù)的內(nèi)存你地址。

USED_UBLK:事務(wù)使用的undo block數(shù)量。

USED_UREC:事務(wù)使用的undo record (undo前鏡像的條數(shù),例如:delete刪除的記錄數(shù))

6、查看占用undo的事務(wù)執(zhí)行了什么sql:

setlines200pages200colprogramfora30
colmachinefora30selectsql_id,last_call_et,program,machinefromgv$session
wheretaddr='0000000089A9E2F0';

LAST_CALL_ET: 上一次調(diào)用到現(xiàn)在為止過了多長時(shí)間,單位為秒,途中顯示過了304s (既可以理解為sql已經(jīng)運(yùn)行了304s)。

setlong99999setlines100setpages1000
select
sql_fulltextfromv$sqlwhereSQL_ID='8gvp49tr474f2';

7、找到了sql,下面就可以聯(lián)系應(yīng)用做處理了:

哪臺(tái)機(jī)器,通過什么程序,發(fā)起了什么sql,占用了多少undo,是否可以殺掉,sql是否可以改寫,是否可以分批提交。。。等

關(guān)于UNDO的其他知識(shí):

1、undo的讀取方式是單塊讀的,所以事務(wù)的回滾比較慢

2、顯示undo使用情況的統(tǒng)計(jì)信息:

SELECTTO_CHAR(BEGIN_TIME,'HH24:MI:SS')BEGIN_TIME,
TO_CHAR(END_TIME,'HH24:MI:SS')END_TIME,
UNDOBLKSFROMV$UNDOSTAT;

3、system表空間中有一個(gè)系統(tǒng)回滾段,只有在對(duì)數(shù)據(jù)字典進(jìn)行操作時(shí)(eg:修改表結(jié)構(gòu))才用到系統(tǒng)回滾段,另外一種情況,如果undo表空間出現(xiàn)問題,oracle也可能使用system段。

一個(gè)事務(wù)開始的時(shí)候,在shared pool中分一個(gè)IMU(in memory undo) buffer,將所有的回滾信息寫到IMU buffer中

一個(gè)事務(wù)開始后,需要回滾塊的時(shí)候不需要從從磁盤讀undo block,直接從shared pool 中分IMU BUFFER,之后回滾信息寫到imubuffer中,

回滾信息寫入的時(shí)候也要產(chǎn)生redo,但是imubuffer減少了物理io

針對(duì)IMUbuffer 在shared中會(huì)生成專門供其使用的redo日志區(qū),叫做private redo

4、undo segment的信息:

SELECT
a.name,
b.xacts,
b.writes,
b.extents
FROM
v$rollnamea,v$rollstatb
WHEREa.usn=b.usn;

USNRollbacksegmentnumber

XACTSNumberofactivetransactions

EXTENTSNumberofextentsintherollbacksegment

WRITESNumberofbyteswrittentotherollbacksegment

作者:Nathon-wang

原文鏈接:https://www.cnblogs.com/nathon-wang/p/10293919.html

總結(jié)

以上是生活随笔為你收集整理的UNDO空间满的处理方法(含UNDO的学习与相关解释)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。