關於DELPHI使用ORACLE復原段的問題(急) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061220125734202.html
我寫了一個DELPHI程式,程式中沒有起事物,只是作了一個迴圈,大概25萬條.
每條取出一個NO.傳到一個ORACLE的PROCEDURE中.
這個過程包括三個表的插入,一個表的更新。
1、執行十幾萬的時候報錯 ORA-01555 快照過舊
問:我覺的它應該是一條一提交啊,不存在使用復原段問題。
2、我試著使用指定復原段。
問:應該在事物前還是在事物後?
3、在事務的TRY中:
if i = 10000 then
begin
database1.commit;
query1.ExecSQL;
end;
query,內容如下
“set transaction use rollback segment RBS2”
這麼轉復原段對嗎?
4、查詢開啟後滾動占復原段嗎?
5、我開啟的表,在過程中也更新它,有影響嗎?
6、執行這25萬條最好的辦法是什麼,有什麼注意事項嗎?
求助,各位大哥,幫幫我吧,本來程式是分段執行的,可使用者非要一個按鈕搞定.
我都快鬱悶死了
事務
資料量較大,第一考慮使用事務!如果事務過大,就需要調整復原段的大小,建議建立若干個小復原段和幾個大的復原段以應付較大事務。
關注!
oracle 的解決方案:
復原段太小,可以增加一個大的復原段試一試520745598
主要是由於復原段太小,可以為此事務指定一個大的復原段,利用Set Transaction use rollback segment seg_name 語句.如果資料庫中沒有較大的復原段,那麼應該新增一個,然後使它Online,再指定它.
減少一次commit的量,應該也有好處,如:
if i = 10000 then
begin
database1.commit;
10000 改為 5000