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

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:48:54
字體:
來源:轉載
供稿:網友

   事務控制  事務控制包括協調對相同數據的多個同步的訪問。當一個用戶改變了另一個用戶正在使用的數據時,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以內。數據庫治理員可以睡到天亮。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤原县| 长岛县| 大兴区| 错那县| 冀州市| 苏尼特右旗| 乌拉特后旗| 天峨县| 南皮县| 辰溪县| 灵山县| 南昌县| 太仓市| 库车县| 元谋县| 明溪县| 和政县| 新巴尔虎右旗| 繁昌县| 凤城市| 昌江| 阿瓦提县| 准格尔旗| 吉首市| 兴安县| 井陉县| 定日县| 宝丰县| 吉林省| 安乡县| 客服| 榆社县| 论坛| 重庆市| 油尖旺区| 津南区| 义乌市| 景德镇市| 安义县| 新余市| 乌兰浩特市|