execute執行后 可以回滾
成都創新互聯長期為超過千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為淅川企業提供專業的成都網站設計、網站制作,淅川網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。
commit提交后 不可以回滾
其實Oracle提交數據是分兩步操作的,第一步execute執行,第二步commit提交。對應的PL\SQL也是要先點execute執行,執行后再點commit提交。
但是 commit提交后 可以用閃回查詢恢復原來的數據 因為oracle會將近期的數據保存到快照中 如:
SELECT * FROM TABLE_1 AS OF TIMESTAMP TO_TIMESTAMP('20080606 20:00:00','YYYYMMDD HH24:MI:SS');
這里'20080606 20:00:00'就是你想恢復數據到哪個時間狀態 TABLE_1是數據庫的表名 這樣查詢到的數據就是執行更新操作之前的數據
這個commit應該是本機的,和dblink沒什么關系,而且就算你找到的dblink的那個session那么也不行,以為這個session在dblink的操作完成后已經關閉了。
個人感覺不要這么遠程insert,最好是調用一個那個數據庫上的過程去insert這樣的話,在那個過程中commit肯定是沒有問題的。
如果必須要這么寫,那么可以加入一條insert和一條delete
就是上面是正常insert的語句。
下面有一條delete(這條刪除一個絕對不可能出現的一條試試)
按照你的說法,第二個事務提交時,第一個事務才能commit。可是這樣會出現問題,因為如果你大量提交,那么數據庫會因此夯住的,所以你看看第一個辦法行不行,我覺得第一個辦法還靠譜點。
你好!
一次折騰幾千萬的話,
那么設置一下,
有
20W了,
就自動提交一下。
set
autocommit
on;
set
autocommit
200000;
然后,假如你的目標數據庫,
是歸檔的話,
可以
INSERT
/*+
append
*/
INTO
目標表
nologging
SELECT
*
FROM
源表@DBLINK;
commit;
set
autocommit
off;
假如你的
目標表
上面,
有
索引的話,
建議先刪除
索引。
等
上面的
INSERT
語句執行完畢后,
再重建索引。
僅代表個人觀點,不喜勿噴,謝謝。
幾千行對 oracle 來說不是問題,可以一次提交
如果一定要這么做,有兩種方式:
一,用游標打開,一行拼一個insert 語句,并計數;滿100后提交
二,分頁查詢,每頁100行 ,然后提交
我覺得:能一次提交的盡量不要分開提交,如果提交到一部分時候,出現問題了,提交的不能回滾了。增加了業務邏輯的復雜性。
標題名稱:oracle如何提交數據 oracle數據庫提交
文章路徑:http://m.newbst.com/article8/hjppop.html
成都網站建設公司_創新互聯,為您提供全網營銷推廣、定制開發、企業網站制作、網站導航、響應式網站、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯