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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)

發布時間:2024/1/17 数据库 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UNDO表空間用于存放UNDO數據,當執行DML操作時,oracle會將這些操作的舊數據寫入到UNDO段,以保證可以回滾或者一致讀等,而臨時表空間主要用來做查詢和存放一些緩沖區數據。你聽說UNDO也是臨時表可能是因為這兩個表空間都不會永久保存數據的原因。
-------------------------------------------------------------------------
oracle undo表空間

undo表空間用于存放undo數據,當執行DML操作(insert、update、delete)時,oracle會將這些操作的舊數據寫入到undo段。

undo數據的作用

1.回退事務

當執行DML操作修改數據后,舊數據被存放在undo段中。只要數據為提交、回滾段未寫滿或者回滾段為超時的情況下,舊數據都能被回滾回來。

2.讀一致性

通過DML操作后的數據沒有提交之前,其他用戶讀取的數據都是回滾段里面的舊數據。

使用undo參數

1.undo_management

該初始化參數用于指定undo數據的管理方式。如果要使用自動管理模式,必須設置為auto,如果使用手工管理模式必須設置該參數為manual,使用自動管理模式時,oracle會使用undo表空間管理,使用手工管理模式時,oracle會使用回滾段管理undo數據。需要注意,使用自動管理模式時,如果沒有配置初始化參數UNDO_TABLESPACE,oracle會自動選擇第一個可用的UNDO表空間存放UNDO數據,如果沒有可用的UNDO表空間,oracle會使用SYSTEM回滾段存放UNDO記錄,并在ALTER文件中記載警告。

2,UNDO_TABLESPACE

該初始化參數用于指定例程所要使用的UNDO表空間,使用自動UNDO管理模式時,通過配置該參數可以指定例程所要使用的UNDO表空間.

在RAC(Real Application Cluster)結構中,因為一個UNDO表空間不能由多個例程同時使用,所有必須為每個例程配置一個獨立的UNDO表空間.

3,UNDO_RETENTION

該初始化參數用于控制UNDO數據的最大保留時間,其默認值為900秒,從9i開始,通過配置該初始化參數,可以指定undo數據的保留時間,從而確定倒敘查詢特征(Flashback Query)可以查看到的最早時間點.

手工管理回滾段的規劃:

SQL> show parameter? undo;

NAME???????????????????????????????? TYPE??????? VALUE

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

undo_management??????????????? string????? AUTO

undo_retention?????????????????????? integer??? 900

undo_tablespace??????????????????? string????? UNDOTBS1

SQL> show parameter? transactions;

NAME???????????????????????????????? TYPE??????? VALUE

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

transactions???????????????????????? integer???? 187???????????? ----------系統準備支持的事務連接數量。

transactions_per_rollback_segment??? integer???? 5?????? --------------每個回滾段支持的事務連接數量。回滾段數=187/5

SQL> show? parameter rollback;

NAME???????????????????????????????? TYPE??????? VALUE

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

fast_start_parallel_rollback???????? string????? LOW

rollback_segments????????????????????? string ----------------------設置回滾段的數量

transactions_per_rollback_segment??? integer???? 5

SQL>

當數據庫啟動的時候會判斷私有回滾段是否滿足我們事務的要求,如果滿足則打開數據庫;否則數據庫會去找公有回滾段。

?

?

解決辦法:

?

用戶user1對表進行了更新操作,用戶user2在user1還沒有進行提交前讀表中數據,而且是大批量的讀取(打個比方:耗時3分鐘)而在這3分鐘內user1進行了提交操作,那又會產生什么影響呢?這個時候怎么保證讀寫一致性呢?這個時候DBMS就要保證有足夠大的undo表空間來存放修改前的數值,,以保證user2讀取的數據是修改前的一致數據.然后下次再讀取時候就是更新后的數據了.
ora-01555快照過舊就是因為undo空間不夠大,其中一部分undo數據被覆蓋了,用戶無法獲得修改前的數據。
undo數據分為三種:
活動的undo:未提交事務的undo數據,這些undo數據永遠不能覆蓋,用于回滾rollback事務。
過期的undo:已提交事務的undo數據,這些undo數據可以覆蓋。
未過期的undo:事務已提交,但事務提交前,有些查詢正在進行,它要讀取的是提交前的數據,這部分數據就是未過期數據。如果這部分undo數據被覆蓋了,就會發生ora-01555錯誤。

一個解決方法是,指定undo表空間參數UNDO_TABLESPACE,并將undo空間管理方法設置成自動擴展:UNDO_MANAGEMENT=AUTO。
這種方法可能產生的結果是:
因為undo表空間裝了太多未過期(unexpired)的undo數據,新的transaction無法向其中寫入undo數據,這時transaction就會發生ORA-30036錯誤。

?

?

?

轉載于:https://www.cnblogs.com/pangblog/p/3278473.html

總結

以上是生活随笔為你收集整理的Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)的全部內容,希望文章能夠幫你解決所遇到的問題。

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