oracle 事務控制
會隱式的執行commit動作:1、資料定義語句(ddl)被執行的時候,比如新建一張表: create table 2、資料控制語句(dml)被執行的時候,比如賦權 或者 deny) 3、正常退出 isql*plus 或者plsql developer, 而沒有顯式的執行 commit 或者 rollback 語句 。
會隱式執行rollback 動作:1、非正常退出 sql*plus , plsql developer, 或者發生系統錯誤。 在資料已經被更改,但沒有commit前 ,被更改記錄處於被鎖定狀態,其他使用者無法進行更改;
當有使用者修改資料時,oracle先把那部分原始資料備份到回滾段,在commit之前,其他session使用者讀到的這部分資料是回滾段上的; 在提交之後,回滾段被釋放。
鎖的概念: oracle中的鎖的主要作用就是:防止併發事務對相同的資源(所謂資源是指 表、行、共享的資料結構、 資料字典行等)進行更改的時候,相互破壞。 鎖有既有隱式的,也有顯式的; 但某使用者對某一批資料進行更改,而未提交之前 oracle會隱式的進行加鎖;
當然使用者也可以顯式的加鎖,比如:select * from tablea for update nowait
oracle的「讀一致性」概念是指:1、在任何時候,確保提供資料的一致性檢視。 2、乙個使用者對資料的更改不會影響另乙個使用者對資料的更改。 3、「讀一致性」 確保在同一時刻: 3.1 讀資料的人不需要等待寫資料的人 3.2 寫資料的人不需要等待讀資料的人 實現方法:當有使用者修改資料時,oracle先把那部分原始資料備份到回滾段,在commit之前,其他session使用者讀到的這 部分資料是回滾段上的; 在提交之後,回滾段被釋放。
事務引數:oracle事務可以顯示的開始,開始乙個事務的時候可以設定不同的引數,oracle提 了兩種通常的事務:唯讀事務和讀寫事務。唯讀事務規定,查詢到資料以及該事務中 的查詢將不受發生在資料庫中其他任何事務的影響,從而保證事務級別資料讀取的一 致性。而讀寫事務只是提供語句級別讀取一致性. 在顯示執行乙個事務的時候,就是在事務開始之前使用 set transaction來設定 具體的事務引數,set transaction使用的語法如下所示。
set transaction | isolation level | use rollback segment rollback_segment} [name 'test']| name 'test'}
具體可以設定的引數如下所示: read only:提供事務級別資料讀取的一 ,設定唯讀事務; read write:提供語句級別資料讀取的一致性,設定讀寫事務; use rollback segment:針對當前事務指定合適的回滾段; isolation level:設定事務的隔離級別;
1.唯讀事務是所有事務的預設模式,對於這樣的事務不需要指定回滾段,因為在唯讀 事務中不允許進行 dml操作,只有 select into,open,fetch,close, lock table,commit和 rollback這樣的子句可以在唯讀事務中使用。唯讀事務保證在事務級別的資料讀取一致性,除了可以讀取在當前唯讀事務中對數 據的更新之外,唯讀事務中的查詢資料不會受到任何其他事務的影響。
示例: 1、首先開啟乙個 sql視窗,開始乙個 session,在當前的 session中我們首 先顯示的開始乙個唯讀事務 begin commit; --確保開始乙個新的事務 set transaction read only; --設定唯讀事務 end;
2、我們再開啟另乙個 sql視窗,開啟另乙個 session,在這個事務中我們對錶 **入一條資料 begin insert into cux_cursor_test (person_id, person_name, age) values (103, 'test', 40); commit; end;
3、我們再次在唯讀事務中執行一次查詢,唯讀事務依然是存在的,因為我們還 沒有 commit或者 rollback來終止事務,查詢的結果如下,可見對新插入的數 據沒有查詢出來,保證在當前事務中資料讀取的一致性。 4、在唯讀事務中執行了 dml操作,執行語句如下所示,會報錯資訊。 begin commit; --確保開始乙個新的事務 set transaction read only; --設定唯讀事務 delete from cux_cursor_test; end;
2.讀寫事務提供語句級別資料的讀寫一致 在讀寫事務中可以使用 dml語句處理 資料,可以讀取到其他事務已經提交的資料更。同時也可以指定當前事務所要使 用的回滾段,因為 oracle是通過回滾段來撤銷資料的,有時候資料量太大,回滾 段很小的話就會導致撤銷操作出現異常。 示例: begin commit; --確保開始乙個新的事務 set transaction read write; --設定讀寫事務 end; 和上面相同的操作,這時候如果執行插入操作,在當前事務的session是可以查詢到另外的乙個事務對資料進行的修改。
顯示指定事務的隔離級別,通過 set transaction isolation level 可以 實現,隔離級別設定了事務與事務時間的隔離程式。其實事務的隔離程式和資料庫 併發性是矛盾的,事務的隔離程式越高,資料庫的併發性就越差。
oracle ddl語句
ddl:資料定義語句,包括建立表,修改表,刪除表,刪除表中所有行(turncate),建立和刪除索引
新增列的語法: alter table table1 add(column datatype [default expr]); --預設加在最後乙個字段,沒辦法指定加在哪一行之後 更改列語法: alter table table1 modify (column datatype [default expr]); 刪除列語法: alter table table1 drop (column); 更改表名稱: rename ldtablename to newtablename; 表被刪除後,任何依賴於這張表的檢視、package等資料庫物件都自動變為無效:
刪除表中的約束語法: alter table employees drop constraint emp_manager_fk;
使表中對列的約束生效或者失效的語法alter table employees disable constraint emp_emp_id_pk cascade;alter table employees enable constraint emp_emp_id_pk;
刪除表中的列時候,如果該列有約束條件,則無法正常刪除。還要現刪除它上面的約束條件,可以使用cascading constraints語法: alter table test1 drop (column1) cascade constraints;
檢視表中有哪些約束條件: select constraint_name, constraint_type, search_condition from user_constraints where table_name = 'employees';
事務和併發控制
事務就是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位。事物的acid特性 事務具有原子性,一致性,隔離性和永續性 原子性 表示事務中的操作是乙個原子操作,要麼全做,要麼全不做 一致性 表示資料庫必須從乙個一致狀態轉移到另乙個一致狀態,一致性是與原子性密切相關...
通過複製oracle軟體方式安裝oracle資料庫
通過複製oracle軟體方式安裝oracle資料庫情況只在以下幾種情況下出現。1.在目標伺服器沒有安裝形圖介面的。2.兩作業系統版本一致,本示例同為oel5.8x64。3.oracle安裝使用者uid,gid屬性一致。本文出自 打包過程略。目錄環境與原資料庫環境一致,將資料庫打包複製到 u01目錄下...
oracle修改欄位的sql語句 Oracle
1 新增字段 create table ord table name type username varchar2 30 cust id number 4 2 刪除字段 alter table table name drop column column name 3 修改字段 alter table...