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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTEDDjangoMySqlSessionMIT
- DAPPER 事務 TRANSACTIONAPP
- indexedDB transaction 事務Index
- 資料庫事務耗時過長導致Could not retrieve transaction read-only status from server異常資料庫Server
- 3分鐘搞懂MySQL事務隔離級別及SET TRANSACTION影響事務MySql
- oracle事務隔離級別transaction isolation level初識Oracle
- oracle資料庫事務transaction鎖lock模式思考之一Oracle資料庫模式
- oracle資料庫事務transaction 不同的鎖lock型別Oracle資料庫型別
- MySQL案例04:Cause: java.sql.SQLException: Could not retrieve transaction read-only status from serverMySqlJavaExceptionServer
- oracle資料庫事務不同事務隔離級別與v$transaction flag列思考Oracle資料庫
- oracle事務transaction鎖lock一點兒小思考或總結Oracle
- Spring中事務管理org.springframework.transactionSpringFramework
- Transaction rolled back because it has been marked as rollback-only
- oracle產生事務transaction幾種方式或方法Oracle
- Django處理事務:transactionDjango
- mysql隱式提交事務transaction一點筆記MySql筆記
- 分散式事務 TCC-Transaction 原始碼解析 —— 事務儲存器分散式原始碼
- oracle不同的事務transaction隔離級別isolation level進一步理解Oracle
- SQLSERVER事務日誌已滿 the transaction log for database 'xx' is fullSQLServerDatabase
- 分散式事務 TCC-Transaction 原始碼分析 —— Dubbo 支援分散式原始碼
- PostgreSQL 原始碼解讀(225)- Transaction(子事務處理)SQL原始碼
- oracle資料庫事務transaction隔離級別isolation level的選擇依據Oracle資料庫
- [資料庫]--Transaction那點事兒資料庫
- PostgreSQL 原始碼解讀(228)- Transaction(事務系統簡介)SQL原始碼
- 17_深入解析Oracle undo原理(1)_transactionOracle
- IDBObjectStore.transactionObject
- IDBDatabase.transaction()Database
- BTC的Transaction
- 分散式事務 TCC-Transaction 原始碼分析 —— 運維平臺分散式原始碼運維
- redis原始碼分析之事務Transaction(下)Redis原始碼
- Lock wait timeout exceeded; try restarting transaction引數控制AIREST
- oracle中的processes,session,transaction引數詳解OracleSession
- 分散式事務 TCC-Transaction 原始碼分析 —— 除錯環境搭建分散式原始碼除錯
- SAP Retail Transaction ListAI
- Boost UDP Transaction PerformanceUDPORM
- Transaction註解原理
- AUTONOMOUS TRANSACTION(自治事務)的介紹(轉)
- SpringBoot事物Transaction實戰講解教程Spring Boot
- [20200309]expdp 與read only.txt