posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          oracle10g中的事務

          Posted on 2008-02-24 17:20 semovy 閱讀(650) 評論(0)  編輯  收藏 所屬分類: Oracle數據庫方面

          ----------------------------------------------事務特性------------------------------------------------------------

          1.原子性(atomicity)  --事務處理要么全部進行,要么不進行。

          2.一致性(consistency) –事務處理要將數據庫從一種狀態轉變為另        一種狀態。

          3.隔離性(isolation) –在事務處理提交之前,事務處理的效果不能由系統中的其他事務看到。

          4.持久性(durability) –一旦提交了事務,他就永遠生效。

          5set autocommit on--設置數據庫系統環境為自動提交事務:

          SQL> set autocommit on;

          SQL> insert into t values(1,'2','2');

          已創建 1 行。

          提交完成。

          SQL> set autocommit off;

          SQL> insert into t values(1,'2','2');

          已創建 1 行。

          SQL> commit;

          提交完成。

          6.鎖:(防止進程之間因為搶占資源,產生死鎖而設定一種預防死鎖產生的機制)

          允許或者拒絕資源訪問的一種機制

          為了防止用戶在同一時間內并發的訪問和修改數據庫資源,orcale中使用不同類型的鎖控制對數據的并發訪問,以防止用戶之間出現破壞性的操作。

          鎖定的類型:

          1)行級鎖:行被排他鎖定

          2)表級鎖:共享鎖,共享更新鎖,排他鎖

          ---------------------------------------------------------

          行級鎖:

          行被排他鎖定,在某行的鎖被釋放之前,其他用戶不能修改此行,使用 commit rollback 命令釋放鎖

          Oracle 通過使用 INSERTUPDATE SELECTFOR UPDATE 語句自動獲取行級鎖

          SELECTFOR UPDATE 子句

          在表的一行或多行上放置排他鎖,用于防止其他用戶更新該行,可以執行除更新之外的其他操作,只有該用戶提交事務,其他用戶才能夠更新gname

          select * from goods where gid=1001

          for update of gname;

          server1                                            server2

          create table goods (gid int );               

          insert into goods values(1)  

          insert into goods values(2)  

          別的進程訪問該表時,可以執行除更新之外的其他操作    

          select * from goods where gid=1 for update of gid    訪問server1時,可以對goods表進行添加,刪除,查詢,但不能修改

          FOR UPDATE WAIT 子句是Oracle9i 中的新增功能:

          為了防止無限期地等待鎖定的行,等待間隔必須指定為數值文字,等待間隔不能是表達式、賦值變量或 PL/SQL
          變量

          select * from goods where gid=1001 for update of gname wait  3

          等待用戶釋放更新鎖的時間為3秒,否則超時。

          -------------------------------------------

          表級鎖:

          保護表的數據

          在多個用戶同時訪問數據時確保數據的完整性

          可以設置為三種模式:共享、共享更新和排他

          語法:

                  Lock table < table_name> in  <mode>;

          --------------------

          共享鎖:僅允許其他用戶執行查詢操作,不能插入、更新和刪除,多個用戶可以同時在同一表中放置此鎖

          Lock  table  table_name

          in share  mode   [nowait];

          rollback   commit命令釋放鎖

          Nowait  關鍵字告訴其他用戶不用等待

          lock table<tabale_name>[,<table_name>,....]

          in share mode[nowait]

          ---------------------

          共享更新鎖:

          鎖定要被更新的行

          允許其他用戶同時查詢、插入、更新未被鎖定的行

          SELECT 語句中使用“FOR UPDATE”子句,可以強制使用共享更新鎖

          允許多個用戶同時鎖定表的不同行

          加鎖的兩種方法

          (1)lock table tab_name in share update mode;

          (2)Select column1, column2 From  goods Where gid=1001  For update of column1, column2

          lock table<tabale_name>[,<table_name>,....] in share update mode [nowait]

          -------------------------

          排他鎖:

          與其他兩種鎖相比,排他鎖是限制性最強的表鎖,僅允許其他用戶查詢數據,不允許執行插入、刪除和更新操作,在同一時間僅允許一位用戶在表上放置排他鎖

          共享鎖與此相反

          lock table<tabale_name>[,<table_name>,....]

          in exclusive mode [nowait]

          主站蜘蛛池模板: 富裕县| 郸城县| 策勒县| 商都县| 卢湾区| 弋阳县| 丰台区| 扬州市| 西充县| 会昌县| 疏附县| 阿拉尔市| 井研县| 洛隆县| 黄陵县| 泸水县| 延安市| 新兴县| 壤塘县| 荣成市| 洛阳市| 定兴县| 泸州市| 昔阳县| 鄂州市| 桦南县| 桃源县| 高碑店市| 同仁县| 南京市| 万宁市| 红河县| 富裕县| 襄城县| 怀集县| 旬邑县| 宜州市| 理塘县| 宜城市| 上饶市| 云和县|