ora01555解決方法 ora-01555快照過(guò)舊,怎么辦?
ora-01555快照過(guò)舊,怎么辦?用戶user1更新表,用戶user2在用戶1提交表之前讀取表中的數(shù)據(jù),并讀取大量數(shù)據(jù)(例如,需要3分鐘)。用戶1在3分鐘內(nèi)提交會(huì)有什么影響?如何保證此時(shí)讀寫(xiě)的一致性
ora-01555快照過(guò)舊,怎么辦?
用戶user1更新表,用戶user2在用戶1提交表之前讀取表中的數(shù)據(jù),并讀取大量數(shù)據(jù)(例如,需要3分鐘)。用戶1在3分鐘內(nèi)提交會(huì)有什么影響?如何保證此時(shí)讀寫(xiě)的一致性?這時(shí),DBMS應(yīng)該保證有足夠的undo表空間來(lái)存儲(chǔ)它,修改前的值用來(lái)保證user2讀取的數(shù)據(jù)是修改前的一致數(shù)據(jù)。下一次讀取的數(shù)據(jù)將是更新后的數(shù)據(jù)
ora-01555快照太舊,因?yàn)槌蜂N空間不夠大,部分撤銷數(shù)據(jù)被覆蓋,用戶無(wú)法在修改前獲取數(shù)據(jù)。
撤銷數(shù)據(jù)可分為三種類型:
主動(dòng)撤銷:未提交事務(wù)的撤銷數(shù)據(jù),不可覆蓋,用于回滾事務(wù)。
過(guò)期撤消:提交事務(wù)的撤消數(shù)據(jù),可以重寫(xiě)。
未過(guò)期撤消:事務(wù)已提交,但在提交事務(wù)之前,某些查詢正在進(jìn)行中。它要讀取的是事務(wù)提交前的數(shù)據(jù),即未過(guò)期的數(shù)據(jù)。如果這部分撤消數(shù)據(jù)被覆蓋,將發(fā)生ora-01555錯(cuò)誤。
一種解決方案是指定undo table space參數(shù)undoutable space,并且undo space management方法設(shè)置為自動(dòng)展開(kāi):undoumanagement=AUTO。
此方法的可能結(jié)果如下:
因?yàn)閡ndo table space中有太多未過(guò)期的undo數(shù)據(jù),新事務(wù)無(wú)法向其寫(xiě)入撤消數(shù)據(jù)。在這種情況下,事務(wù)中將發(fā)生ora-30036錯(cuò)誤。
ORA-o1422實(shí)際返回?cái)?shù)量超出請(qǐng)求的正行數(shù)?
1. 你說(shuō)的應(yīng)該是ora-01422的錯(cuò)誤。
2. 這種情況通常發(fā)生在select into隱式游標(biāo)或where約束中。當(dāng)單個(gè)字段與子查詢返回的記錄進(jìn)行比較時(shí),可能會(huì)發(fā)生這種情況。
3. 在這兩種情況下,rownum=1應(yīng)該受到限制,而在前一種情況下,當(dāng)返回0行記錄時(shí),不會(huì)報(bào)告記錄錯(cuò)誤。建議在使用前判斷行數(shù),或者使用exception No Data捕捉異常。
oracle提示ora-00955:名稱已由現(xiàn)有對(duì)象使用?
oracle建表,提示ora-00955:名稱已由現(xiàn)有對(duì)象使用?
ora-00955應(yīng)該是被占用的對(duì)象名。
估計(jì)ID是保留單詞的原因。
CREATESEQUENCEsequduUser
Oracle的ID自動(dòng)遞增方法:
例如,表名:tab,主鍵:ID
1。添加序列號(hào):createsequenceseq添加觸發(fā)器。如果是insert,則將序列號(hào)賦給主鍵列uTab
BEFOREINSERTONtabFOREACHROW
DECLARE
--LOCALVARIABLESHERE
BEGIN
如果:新的。那么
選擇Sequ下一頁(yè)標(biāo)簽: 新.idFROMDUAL
ENDIF
ENDTRIuuu選項(xiàng)卡