用戶需要3分鐘),但是user1卻在這3分鐘內提交了。那會有什么影響?這時候如何保證讀寫的一致性?此時DBMS要保證有足夠的撤銷表空間來存儲修改前的值,以保證user2讀取的數據與修改前一致,然后下次再讀取更新后的數據。
Ora-01555快照太舊,因為撤銷空間不夠大,一些撤銷數據被覆蓋,所以用戶可以修改前無法獲取數據。
撤消數據分為三種類型:
主動撤銷:未提交事務的撤銷數據永遠不會被覆蓋,用于回滾回滾事務。
過期撤消:撤消已提交事務的數據,該數據可以被覆蓋。
未到期撤銷:交易已經提交,但是在交易提交之前,有一些查詢正在進行,它想讀取提交之前的數據,也就是未到期的數據。如果這部分撤消數據被覆蓋,將出現ora-01555錯誤。
一種解決方案是指定還原表空間參數
不能刪除System/sysaux/undo表空間;
您應該確定哪些表格是有用的,例如table_namelikeW%等。
篩選出包含數據的表空間,例如selecttablespace_namefromDBA_tables,其中table_namelikew%groupbytablespace_nameorderby1。
記下不在步驟1和3中的表空間名稱;
識別無用的數據文件,比如selectfile_name,tablespace_namefromDBA_data_fileswheretablespace_namein()。
首先使數據文件脫機,然后刪除它。你我們結束了。