国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle數據操作和控制語言詳解(二)

2024-08-29 13:30:19
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 事務控制  事務控制包括協調對相同數據的多個同步的訪問。當一個用戶改變了另一個用戶正在使用的數據時,oracle使用事務控制誰可以操作數據。  事務  事務表示工作的一個基本單元,是一系列作為一個單元被成功或不成功操作的sql語句。在sql和pl/sql中有很多語句讓程序員控制事務。程序員可以:   1、顯式開始一個事物,選擇語句級一致性或事務級一致性   2、設置撤銷回滾點,并回滾到回滾點    3、完成事務永遠改變數據或者放棄修改。    事務控制語句 語句 用途 commit 完成事務,數據修改成功并對其他用戶開放 rollback 撤銷事務,撤銷所有操作 rollback to savepoint 撤銷在設置的回滾點以后的操作 set transaction 響應事務或語句的一致性;特別對于事務使用回滾段  例: beginupdate checkingset balance=balance-5000where account='kieesha';insert into checking_log(action_date,action,amount)values (sysdate,'transfer to brokerage',-5000);update brokerageset cash_balance=cash_balance+5000where account='kiesha';insert into brokerage_log(action_date,action,amount)values (sysdate,'tracfer from checking',5000)commitexceptionwhen othersrollbackend  savepoint 和 部分回滾(partial rollback)  在sql和pl/sql中savepoint是在一事務范圍內的中間標志。經常用于將一個長的事務劃分為小的部分。保留點savepoint可標志長事務中的任何點,允許可回滾該點之后的操作。在應用程序中經常使用savepoint;例如一過程包含幾個函數,在每個函數前可建立一個保留點,如果函數失敗,很容易返回到每一個函數開始的情況。在回滾到一個savepoint之后,該savepoint之后所獲得的數據封鎖被釋放。為了實現部分回滾可以用帶to savepoint子句的rollback語句將事務回滾到指定的位置。  例 begin insert into atm_log(who,when,what,where)values ('kiesha',sysdate,'withdrawal of $100','atm54')savepoint atm_logged;update checkingset balance=balance-100return balance into new_balance;if new_balance<0thenrollback to atm_logged;commitraise insufficient_funda;end ifend   關鍵字savepoint是可選的,所以下面兩個語句是等價的: rollback to atm_logged;rollback to savepoint atm_logged;  一致性和事務  一致性是事物控制的關鍵慨念。掌握了oracle 的一致性模型,能使您更好的,更恰當的使用事務控制。oracle通過一致性保證數據只有在事務全部完成后才能被用戶看見和使用。這項技術對多用戶數據庫有巨大的作用。  oracle常常使用語句級(state-level)一致性,保證數據在語句的生命期之間是可見的但不能被改變。事務由多個語句組成,當使用事務時,事物級(transaction-level)一致性在整個事務生命期中保證數據對所有語句都是可見的。  oracle通過scn(syatem change number)實施一致性。一個scn是一個面向時間的數據庫內部鍵。scn只會增加不會減少,scn表示了時間上的一個點,每個數據塊都有一個scn,通過比較這個點實施操作。  事務級一致性  set transaction 的一個作用是確保事務級一致或語句級一致中有一個實施。oracle使用這些術語:   isolation level read commit 表示語句級一致   isolation level serializable 表示事務級一致。  例: set transaction isolation level read commit;set transaction isolation level read commit  下面的語句也能確保事務級一致: set transcation read only  任何企圖在只讀(read only)事務中修改數據的操作都會拋出一個異常。但是,read only事務只能在下列語句中使用: select(沒有for update子句)lock tableset rolealter systemalter alarm  即使沒有改變任何數據,read only事務依然必須使用一個commit或rollback以結束整個事務。  set transction的另外一個應用是在回滾時直接使用回滾段(rollback segment)。回滾段是oracle的一個特殊的數據對象,回滾段的頭部包含正在使用該回滾段事務的信息。當用戶回滾事務(rollback)時,oracle將會利用回滾段中的數據前影像來將修改的數據恢復到原來的值。oracle用round-robin給事務隨機分配回滾段。一個大的事務可以分配任何回滾段,這也許會導致回滾段的大小變得很大。因此要避免讓大的事務隨機分配回滾段。  事務以set transaction開始,象下面這樣: set transaction use rollback segment rb_large;  rb_large是一個大的回滾段的名稱,現在就給一個大的事務分配了一個大的回滾段,其他的小的回滾段將不由動態空間管理,這樣就更有效率。  下面我們看一個例子.我們有一個回滾段表空間大小是2g,在高峰時期需要10個回滾段以滿足用戶的需要,這些高峰在線用戶只有小的事務。一周我們連續運行了4個大的事務,這些事務需要刪除和加載數據,每一個撤銷需要1g,回滾段的大小如下: rb_large(initial 100m minextenta 2)rb1 (initial 1m next minextents 5) rb2 (initial 1m next minextents 5)rb3 (initial 1m next minextents 5)rb4 (initial 1m next minextents 5)rb5 (initial 1m next minextents 5)rb6 (initial 1m next minextents 5)rb7 (initial 1m next minextents 5)rb8 (initial 1m next minextents 5)rb9 (initial 1m next minextents 5)rb10 (initial 1m next minextents 5)   所有的都非常恰當的安排在2g的表空間中,如果我們缺省的round-robin給事務分配回滾段,4個大事務將有4個獨立的回滾段,每個回滾段的大小將是1g,如果這樣我們的2g表空間就不夠,而數據庫管理員就不得不在夜晚2點起來工作,每個事務都由以下面的語句開始: set transaction use rollback segment rb_large   現在 4個事務重用相同的表空間,保正4個回滾段的表空間在2g以內。數據庫管理員可以睡到天亮。
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 洛扎县| 三门峡市| 十堰市| 疏附县| 巴楚县| 蓬溪县| 桦南县| 吐鲁番市| 泸定县| 丹凤县| 永福县| 囊谦县| 米泉市| 辛集市| 喀喇| 桦川县| 类乌齐县| 酒泉市| 渑池县| 四子王旗| 自贡市| 湘潭市| 出国| 卫辉市| 勐海县| 井陉县| 黄山市| 二连浩特市| 绥德县| 淮北市| 东明县| 信宜市| 扶风县| 许昌市| 新疆| 巫溪县| 达尔| 屏边| 营山县| 琼海市| 琼海市|