`
hubin4
  • 浏览: 96273 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ORACLE Isolation Level

 
阅读更多

ORACLE Isolation Level

 

4个级别,3种读取情况

 

 

Isolation Level Dirty Read Nonrepeatable Read Phantom Read
Read uncommitted Possible Possible Possible
Read committed Not possible Possible Possible
Repeatable read Not possible Not possible Possible
Serializable Not possible Not possible Not possible

 

Dirty reads[脏读]:

A transaction reads data that has been written by another transaction that has not been committed yet.

读人家还没有提交的数据。人家有可能是瞎插几条数据,马上就会回滚的,但是这种“脏读”会把这些数据搜出来,让我们看见根本不会进数据库的数据,所以叫“脏读”。数据库不要设置这种隔离级别。

 

Nonrepeatable (fuzzy) reads[不可重复读,模糊读]:

A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. For example, a user queries a row and then later queries the same row, only to discover that the data has changed.

同一条SQL,不同时间读出不一样的数据。

就是说,在这个隔离级别上,一条SQL查出数据后,就不管那些数据了,别人可以对这些数据修改。

所以读出来的数据是模糊的,今天这些,明天就不知道了。

通常数据库的隔离级别都是这个级别【read committed】。

 

Phantom reads[幻读]:

A transaction reruns a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition.

For example, a transaction queries the number of employees. Five minutes later it performs the same query, but now the number has increased by one because another user inserted a record for a new hire. More data satisfies the query criteria than before, but unlike in a fuzzy read the previously read data is unchanged.

幻读是非常正常的事情,你提交的东西我当然要读啦,注意是新提交的。

 

 

 

再说说级别:

1. Serializable

这就是锁,数据库全锁死,一个人或者一个线程操作数据库,上面的情况都不会发生。数据库是不会设置这个级别的。

 

2. Repeatable read

设置这个级别就是可以重复读的,每条SQL执行后,被这条SQL搜出的数据会锁上,不让改,不让删,所以每次读出来肯定是一样的数据,但是幻读还是会的,符合条件的新数据插进来了,也会被查出来。

这种级别也会把数据库的性能降得很低,数据查上来看看就行了,怎么可以阻止人家去修改这些数据呢?

 

3.Read committed

通常都是用这个的,脏读不发生,其他发生好了。

 

下面是三种常用数据库查看和设置的一些信息:

 

 

mysql查看与设置事务隔离级别

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

1.查看当前会话隔离级别

select @@tx_isolation;

 

2.查看系统当前隔离级别

select @@global.tx_isolation;

 

3.设置当前会话隔离级别

set session transaction isolatin level repeatable read;

 

4.设置系统当前隔离级别

set global transaction isolation level repeatable read;

 

5.命令行,开始事务时

set autocommit=off 或者 start transaction

 

 

sqlserver查看事务隔离级别[没有测试]

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

SELECT CASE transaction_isolation_level 

WHEN 0 THEN 'Unspecified' 

WHEN 1 THEN 'ReadUncomitted' 

WHEN 2 THEN 'Readcomitted' 

WHEN 3 THEN 'Repeatable' 

WHEN 4 THEN 'Serializable' 

WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL 

FROM sys.dm_exec_sessions 

where session_id = @@SPID

 

 

oracle11g查看与设置事务隔离级别

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

查看:

网上也有人问这问题,但是都没有回答,去了权威的论坛

发现有人被骂了,说ORACLE的隔离级别不可以单独拿出来说

不要去知道oracle的隔离级别,要了解其机制,乱七八糟一大堆

我估计oracle的每个session,都有自己的隔离级别,如果你非要看,

如果用toad客户端可以按照以下步骤:

 

0.

保证自动提交是关闭的.

 

1.拿到自己的 sid serial#, like后面的参数是自己的电脑名字,用的是toad客户端 

SELECT   t.sid, t.serial#, t.*   FROM   v$session t WHERE   t.terminal  LIKE '%HUBIN-XP%'

 

2.

--try

delete from schema.table where obj_id='10001';

--then 

select * from v$transaction ;

--you can see a  row in this view

 

3.跑这SQL,参数是1拿到的,可以看见你要的级别了

SELECT s.sid, s.serial#,

  CASE BITAND(t.flag, POWER(2, 28))

    WHEN 0 THEN 'READ COMMITTED'

    ELSE 'SERIALIZABLE'

  END AS isolation_level

FROM v$transaction t, v$session s

WHERE t.addr = s.taddr

  AND s.sid = :sid

  AND s.serial# = :serial;

 

设置:

你确定你真理解真的要设置oracle的级别?

分享到:
评论

相关推荐

    TRANSACTION ISOLATION LEVEL

    RANSACTION ISOLATION LEVEL

    oracle lock and isolation at

    在Oracle中,锁(Lock)和隔离级别(Isolation Level)是确保多用户环境下数据一致性和完整性的关键组成部分。本篇文章将深入探讨这两个概念及其在实际应用中的重要性。 一、Oracle锁机制 1. **锁定类型**: - **...

    asp.net 中使用oracle数据库事务

    OracleTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted); try { // 这里执行你的 SQL 命令 // ... // 提交事务 trans.Commit(); } catch (Exception ex) { // 如果出错则...

    Oracle中使用锁进行并发控制

    在Oracle中,可以使用`SET TRANSACTION ISOLATION LEVEL`语句来显式地设置事务的隔离级别。例如: ```sql SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ``` 或者在会话级别设置: ```sql ALTER SESSION SET ...

    历史上最强的sql FAQ for Oracle

    第一部分、SQL&PL/SQL [Q]怎么样查询特殊字符,如通配符%与_ ...[A]set transaction [isolation level] read committed; 默认语句级一致性 set transaction [isolation level] serializable; read only; 事务级一致性

    oracle 事务实验

    SET TRANSACTION [ISOLATION LEVEL level] [READ ONLY | READ WRITE]; ``` - **示例**: - 设置事务为只读: ```sql SQL> set transaction readonly; ``` - 设置事务为读写,默认情况: ```sql SQL> set ...

    维护项目oracle常用语句

    例如,设置事务为读已提交(read committed)模式:`set transaction isolation level read committed;` 这是默认级别,而`set transaction isolation level serializable;` 设置为串行化级别,提供了最高级别的隔离...

    running rac on oracle vm server for sparc 2.0

    In addition to LDoms, Oracle Solaris Containers provide another level of virtualization within each domain. These containers allow for the isolation of applications and services within a single ...

    oracle死锁故障分析和诊断解决

    - 合理设置`ISOLATION LEVEL`,以减少并发冲突。 4. **使用Oracle提供的死锁检测机制**: - Oracle自身具备一定的死锁自动检测和恢复功能,可以在一定条件下自动解除死锁。 #### 五、案例分析 假设在一个多用户...

    ORACLE数据库插入、修改、删除操作提交

    transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted); cmd.Transaction = transaction; try { cmd.CommandText = sql; i = cmd.ExecuteNonQuery(); transaction.Commit(); // 提交事务 ...

    oracle学习及使用笔记

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ``` #### 七、Oracle安全审计 Oracle的安全审计主要包括以下几个方面: 1. **用户管理**:包括密码安全、用户账号管理、强认证机制等。 2. **访问控制**:包括...

    Oracle sql 语句集锦

    例如:`SET TRANSACTION ISOLATION LEVEL READ COMMITTED;` #### 流程控制 - **变量声明(Declare)**: 在PL/SQL块中,使用`DECLARE`关键字声明变量和游标。例如:`DECLARE v_name VARCHAR2(50);` - **流程控制语句...

    ORACLE锁定机制

    2. 在事务开始时设置适当的隔离级别,如`SET TRANSACTION ISOLATION LEVEL READ COMMITTED`。 3. 避免长时间持有锁,尤其是在高并发环境中,尽快完成事务操作以释放锁资源。 总结,Oracle锁定机制是保证数据库稳定...

    ORACLE之常用问题解答

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ``` 或 ```sql SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ``` 此外,可使用`READONLY`关键字确保事务只读,进一步增强数据一致性。 ##### 利用游标更新...

    07.Oracle事务1

    set transaction isolation level serialize; set transaction name 'my_transaction'; ``` 4. **事务的隔离性** 事务的隔离级别决定了并发事务如何处理可能的数据冲突。Oracle提供了四种隔离级别: - **Read ...

    Oracle学习笔记——day04

    事务的隔离级别有四种,包括脏读、提交读、可重复读和串行化,可以使用`SET TRANSACTION ISOLATION LEVEL`来更改。`COMMIT`和`ROLLBACK`命令分别用于提交和回滚事务,而`SAVEPOINT`允许在事务中设置保存点,以便在...

    oracle命令中英文对照.doc

    SET TRANSACTION ISOLATION_LEVEL READ COMMITTED; ``` **游标和动态SQL** 22. **DECLARE**: 用于声明游标和变量。 ```sql DECLARE cursor_name CURSOR FOR SELECT ...; ``` 23. **EXPLAIN**: 描述查询的...

    【ASP.NET编程知识】.net core 基于Hangfire+Mysql持久化实现定时任务配置方法.docx

    TransactionIsolationLevel = (IsolationLevel?)System.Data.IsolationLevel.ReadCommitted, QueuePollInterval = TimeSpan.FromSeconds(15), JobExpirationCheckInterval = TimeSpan.FromHours(1), ...

    oracle语法详解

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ``` #### 九、总结 通过本文档的学习,读者可以深入理解Oracle中的数据操作和控制语言。这些知识对于有效地管理和维护Oracle数据库至关重要。理解INSERT语句的...

    ORACLE数据库事务隔离级别介绍

    设置Oracle的事务隔离级别可以使用`SET TRANSACTION ISOLATION LEVEL`命令,例如: ```sql SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ``` 然而,值得注意的是,虽然SERIALIZABLE级别提供了最高的数据一致性,...

Global site tag (gtag.js) - Google Analytics