執行一對帳程序,老執行到一半的時候就出錯,作者還沒有把Oracle的error打印出來,只是打印了他自己能看得懂的錯誤提示,經過修改代碼,把oracle錯誤,put_line出來後,發現是 ORA-01562: failed to extend rollback segment number 12
ORA-01628: max # extents (505) reached for rollback segment RBS12
看來是回滾段的maxtxtents太小了,系統有20多個回滾段,為了減少類似錯誤的發生,設置一下:
給回滾段表空間增加數據文件,並設置大回滾段apprbs的maxextents值為無限大:
$ sqlplus '/as sysdba'
SQL> alter tablespace rbs add datafile '/opt/oracle/db02/oradata/ORCL/rbs02.dbf' size 8192m autoextend on next 10m maxsize unlimited;
SQL> alter rollback segment apprbs storage (maxextents unlimited);
單獨執行大sql前,先設置交易使用此大回滾段:
SQL> set transaction use rollback segment apprbs;
在存儲過程中執行大sql前,設置交易使用此大回滾段:
begin
dbms_transaction.use_rollback_segment('apprbs');
<big sql;>
commit;
end;
再執行對帳程序,成功結束,就是時間有點長。