oracle set transaction read only與dbms_transaction實現事務transaction控制
SQL> show user
User is "SYS"
SQL> set transaction read only;
Transaction set
SQL> insert into t_table values(3);
1 row inserted
SQL> commit;
Commit complete
---sys使用者 set transaction read only不生效
SQL> select * from t_table;
A
---------------------------------------
1
2
3
SQL>
SQL>
SQL> ---換另一個普通使用者
SQL> conn
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as
SQL> create table t_transaction(a int);
Table created
SQL> set transaction read only;
Transaction set
SQL> insert into t_table values(3);
insert into t_table values(3)
ORA-00942: table or view does not exist
---僅在非sys使用者 set transaction read only才生效
SQL> insert into t_transaction values(3);
insert into t_transaction values(3)
ORA-01456: may not perform. insert/delete/update operation inside a READ ONLY transaction
SQL> delete from t_transaction;
delete from t_transaction
ORA-01456: may not perform. insert/delete/update operation inside a READ ONLY transaction
SQL> update t_transaction set a=3;
update t_transaction set a=3
ORA-01456: may not perform. insert/delete/update operation inside a READ ONLY transaction
--truncate為ddl語句不受set transaction read only影響
SQL> truncate table t_transaction;
Table truncated
SQL> show user
User is "tbl_bck"
---也可以用dbms_transaction包實現上述的只讀事務功能
SQL> exec dbms_transaction.read_only;
PL/SQL procedure successfully completed
SQL> insert into t_transaction values(8);
insert into t_transaction values(8)
ORA-01456: may not perform. insert/delete/update operation inside a READ ONLY transaction
--dbms_transaction.read_only|write只能用於事務開始而非結束
SQL> exec dbms_transaction.read_write;
begin dbms_transaction.read_write; end;
ORA-01453: SET TRANSACTION must be first statement of transaction
ORA-06512: at "SYS.DBMS_TRANSACTION", line 60
ORA-06512: at line 2
SQL>
SQL>
SQL> set transaction read write;
set transaction read write
ORA-01453: SET TRANSACTION must be first statement of transaction
---必須用dbms_transaction.commit或rollback方可結束一個只讀事務
SQL> exec dbms_transaction.commit;
PL/SQL procedure successfully completed
SQL> insert into t_transaction values(8);
1 row inserted
SQL> commit;
Commit complete
---dbms_transaction包另一個功能可以直接內嵌於儲存過程中,進行針對性的控制
SQL> create or replace procedure proc_transaction
2 as
3 v_a pls_integer;
4 begin
5 dbms_transaction.read_only;
6 select count(1) into v_a from dual;
7 dbms_transaction.commit;
8 insert into t_transaction values(9);
9 commit;
10 end;
11 /
Procedure created
SQL> exec proc_transaction;
PL/SQL procedure successfully completed
SQL> select * from t_transaction;
A
---------------------------------------
8
9
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-762136/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle系統包——dbms_transaction用法Oracle
- exp CONSISTENT=Y 原理:export前發出SET TRANSACTION READ ONLY命令Export
- indexedDB transaction 事務Index
- Oracle ITL (Interested Transaction List) - 事務槽OracleREST
- Why NHibernate updates DB on commit of read-only transactionMIT
- Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTEDDjangoMySqlSessionMIT
- 3分鐘搞懂MySQL事務隔離級別及SET TRANSACTION影響事務MySql
- 事務的read only mode
- oracle事務隔離級別transaction isolation level初識Oracle
- oracle undo segment header 事務表transaction table系列一OracleHeader
- SQL基礎-->資料庫事務(TRANSACTION)SQL資料庫
- oracle資料庫事務transaction 不同的鎖lock型別Oracle資料庫型別
- oracle資料庫事務transaction鎖lock模式思考之一Oracle資料庫模式
- oracle資料庫事務不同事務隔離級別與v$transaction flag列思考Oracle資料庫
- Spring宣告式事務報錯"Transaction rolled back because it has been marked as rollback-only"分析...Spring
- Oracle自治事務autonomous_transaction用法Oracle
- oracle自治事務(PRAGMA AUTONOMOUS_TRANSACTION)Oracle
- Oracle中的自治事務(Autonomous Transaction)Oracle
- 關於事務的英文說明 Transaction OverviewView
- MySQL案例04:Cause: java.sql.SQLException: Could not retrieve transaction read-only status from serverMySqlJavaExceptionServer
- 分散式事務 TCC-Transaction 原始碼分析 —— 事務恢復分散式原始碼
- oracle事務transaction鎖lock一點兒小思考或總結Oracle
- Transaction rolled back because it has been marked as rollback-only
- 分散式事務 TCC-Transaction 原始碼解析 —— 事務儲存器分散式原始碼
- Oracle 如何判斷一個死事務transaction的恢復進度Oracle
- mysql隱式提交事務transaction一點筆記MySql筆記
- Spring_11 Transaction(事務) 使用(XML 配置方式)SpringXML
- Spring Transaction詳解 – 手動回滾事務Spring
- Spring中事務管理org.springframework.transactionSpringFramework
- Django處理事務:transactionDjango
- tcc-transaction分散式TCC型事務框架搭建與使用記錄分散式框架
- Check the transaction running in oracleOracle
- 關於oracle autonomous transactionOracle
- 分散式事務 TCC-Transaction 原始碼分析 —— Dubbo 支援分散式原始碼
- SQLSERVER事務日誌已滿 the transaction log for database 'xx' is fullSQLServerDatabase
- skip a transaction in goldengate(跳過一個事務OGG)Go
- 使用FLASHBACK_TRANSACTION_QUERY查詢回滾事務SQLSQL
- oracle產生事務transaction幾種方式或方法Oracle