dml影响最小化 oracle高并发_oracle 获取dml语句 影响记录数 - CSDN
精华内容
参与话题
  • DDL、DML和DCL的区别与理解

    千次阅读 2018-05-31 11:39:58
    DML、DDL、DCL区别 .总体解释:DML(data manipulation language):它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言DDL(data definition language):DDL比...

    DML、DDL、DCL区别 .

    总体解释:

    DML(data manipulation language):

    它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

    DDL(data definition language):

    DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用

    DCL(Data Control Language):

    是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

    详细解释:

    一、DDL is Data Definition Language statements. Some examples:数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言

    1.CREATE - to create objects in the database 创建

    2.ALTER - alters the structure of the database 修改

    3.DROP - delete objects from the database 删除

    4.TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed

    TRUNCATE TABLE [Table Name]。

    下面是对Truncate语句在MSSQLServer2000中用法和原理的说明:

    Truncate table 表名 速度快,而且效率高,因为:

    TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

    DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

    TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

    对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

    TRUNCATE TABLE 不能用于参与了索引视图的表。

    5.COMMENT - add comments to the data dictionary 注释

    6.GRANT - gives user's access privileges to database 授权

    7.REVOKE - withdraw access privileges given with the GRANT command 收回已经授予的权限

    二、DML is Data Manipulation Language statements. Some examples:数据操作语言,SQL中处理数据等操作统称为数据操纵语言

    1.SELECT - retrieve data from the a database 查询

    2.INSERT - insert data into a table 添加

    3.UPDATE - updates existing data within a table 更新

    4.DELETE - deletes all records from a table, the space for the records remain 删除

    5.CALL - call a PL/SQL or Java subprogram

    6.EXPLAIN PLAN - explain access path to data

    Oracle RDBMS执行每一条SQL语句,都必须经过Oracle优化器的评估。所以,了解优化器是如何选择(搜索)路径以及索引是如何被使用的,对优化SQL语句有很大的帮助。Explain可以用来迅速方便地查出对于给定SQL语句中的查询数据是如何得到的即搜索路径(我们通常称为Access Path)。从而使我们选择最优的查询方式达到最大的优化效果。

    7.LOCK TABLE - control concurrency 锁,用于控制并发

    三、DCL is Data Control Language statements. Some examples:数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等

    1.COMMIT - save work done 提交

    2.SAVEPOINT - identify a point in a transaction to which you can later roll back 保存点

    3.ROLLBACK - restore database to original since the last COMMIT 回滚

    4.SET TRANSACTION - Change transaction options like what rollback segment to use 设置当前事务的特性,它对后面的事务没有影响.

    DDL、DML和DCL的理解 (张青山)

    先给出一个图:

     

    \

     

    1、DDL

    1-1、DDL的概述

    DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:Create创建数据表,Alter可以更改该表的字段,Drop可以删除这个表,从这里我们可以看到,DDL所站的高度,他不会对具体的数据进行操作。

    1-2、DDL的主要语句(操作)

    Create语句:可以创建数据库和数据库的一些对象。

    Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。

    Alter语句:修改数据表定义及属性。

    1-3、DDL的操作对象(表)

    1-3-1、表的概念

    表的创建就是用来存放数据用的,由于我们存放的数据的不通,所以我们需要定义些数据类型,以方便管理。

    1-3-2、表的属性

    主键属性:主键就是主键约束,只不过起的名字不同了,主键的起名偏向于虚的(就是描述描述这件事),主键约束起名偏向于实得(就是描述操作的实施),描述的都是同一件事,主键约束就是表中的一个属性;在一个表中最多可以有一个主键;一个主键可以定义在一个或多个字段;主键使一个或多个字段的值必须唯一且不为空,这样做可以通过该字段或该组字段中的值唯一的代表一条记录。

    唯一属性:一个表中只能有一个主键属性,为了方表用户,提出唯一约束;唯一约束可以定义在一个或多个字段上;唯一约束使该字段或该组字段中的值唯一,可以为空,但是,不能重复。

    外键属性:又叫外键,又叫外键约束,跟主键和主键约束的关系是一样的;外键约束针对的两个表,如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表,但要注意,必须要计算机要知道你是这种关系。

    核查、Null和缺省属性:核查属性又叫核查约束,Null属性又叫Null约束,缺省属性又叫缺省约束;这些名称是描述一件事,描述一种情况,这件事或这张情况我们当然可以人为的那样特意做(输入数据是注意就行),但是,他们的本意是实现自动化,也就是让计算机做这件事。

    (你知道为什么建立主键和唯一约束的时候,会自动的创建索引吗?而且是唯一索引,想一想索引大多在那些字段上用,以及索引的作用就会知道了。像主键约束、唯一约束、非空约束、外键约束、核查约束和缺省约束这些操作都是使表具有某些特性,所以在这里我认为他们都是表的属性。)

    2、DML

    2-1、DML的概述

    DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。

    2-2、DML的主要语句(操作)

    Insert语句:向数据表张插入一条记录。

    Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。

    Update语句:用于修改已存在表中的记录的内容。

    2-3、DML的操作对象——记录

    2-3-1、注意

    当我们对记录进行Insert、Delete和Update操作的时候,一定要注意,一定要清楚DDL对其的一些操作。

    3、DCL

    3-1、DCL的概述

    DCL(Data Control Language 数据控制语句)的操作是数据库对象的权限,这些操作的确定使数据更加的安全。

    3-2、DCL的主要语句(操作)

    Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。

    Revoke语句:可以废除某用户或某组或所有用户访问权限

    3-3、DCL的操作对象(用户)

    此时的用户指的是数据库用户。

    展开全文
  • 以下内容太整理自网络,完全处于学习目的,如有侵权请及时联系我,我会立即删除。   非空闲等待之:buffer busy waits 事件参数说明: 事件号 事件名 ...bl

     

    以下内容太整理自网络,完全处于学习目的,如有侵权请及时联系我,我会立即删除。

     

    非空闲等待之:buffer busy waits

    1. 事件参数说明:

    事件号

    事件名

    参数一

    参数二

    参数三

    145

    buffer busy waits

    file#

    block#

    9i - 原因码

    10g - block class#

    1. ORACLE会话正在等待PIN住一个缓冲区,会话必须在读取或修改缓冲区之前将该缓冲区PIN住。
    2. 在任何时侯只有一个进程可以PIN住一个缓冲区。
    3. buffer busy waits表明读/读、读/写、写/写争用。
    4. 根据P3中指明的原因码有不同的处理方式。
    5. 现象描述:会话在SGA中读取或修改缓冲区之前,必须要先获取cahce buffers chains锁存器(latch),获取后然后遍历这个缓冲区链,直到发现它需要的缓冲区头。然后以共享方式或独占方式获取该缓冲区锁或缓冲区头部的PIN,一旦缓冲区被PIN住,会话即释放cache buffers chains锁存器。如果无法获得PIN,会话就在buffer busy waits等待事件上等待。
    6. 该事件只与SGA中缓冲区相关,与会话私有的PGA中执行的读/写操作无关。



    处理该等待事件时主要注意以下四方面:

    1) 该等待事件主要的原因码是什么?(参数P3)

    2) buffer busy waits事件需要的块类?(由P1即可找出等待块的类列)

    3) 缓冲区所属的段(由P1和P2参数配合视图v$extents即可找出等待块的所属段)

    select s.segment_name, s.partition_name 
      from dba_extents s 
    where <P2的值> between s.block_id and (s.block_id + s.blocks -1) and s.file_id = <P1的值>

    4) 和buffer busy waits事件相关的SQL语句



    虽然buffer busy waits事件的发生可能至少有十个不同的原因,但是代码130220是最常见的原因。基本上,小于200的代码号意味着这种等待是和I/O有关的。


    带有原因码130的数据块(类#1)争用

    1) 等待集中在数据块上,并且原因码是130,则意味着多个会话并发请求相同的数据块,但该数据块并不在缓冲存储器中,并且必须从磁盘读取。

    2) 当多个会话请求不在缓冲存储器中的相同数据块时,ORACLE可以聪明地防止每个会话进行相同的操作系统I/O调用。否则,这可能严重地增加系统I/O的数量,所以,ORACLE只允许一个会话执行实际的I/O,而其他的会话在buffer busy waits上等待块,执行I/O的会话在db file sequential read或db file scattered read等待事件上等待。

    3) 可在v$session视图中检查SESSION的注册时间,并且等待事件db file sequential(scattered) read和buffer busy waits等待相同的文件号和块号。

    4) 解决方法:优化SQL语句,尽可能地减少逻辑读和物理读;



    带有原因码220的数据块(类#1)争用

    1) 等待集中在数据块上,并且原因码是220,则意味着多个会话同时在相同的对象上执行DML(相同块中的不同行)。

    2) 如果数据块的尺寸较大(>=16K),则可能强化这种现象,因为较大的块一般在每个块中包含更多的行。

    3) 减少这种情况的等待的方法:减少并发;减少块中行的数量;在另一个具有较小块尺寸的表空间中重新构建对象。

    4) 具体方法说明:

    使用较大的PCTFREE重新构建表或索引;

    使用alter table <table_name> minimize records_pre_block命令改变表以最小化每个块的最小行数

    从ORACLE9i开始,可以在另一个具有较小块尺寸的表空间中移动或重新构建对象。

    注:虽然这些方法可以最小化buffer busy waits问题,但它们无疑会增加全表扫描时间和磁盘空间利用率。



    数据段头(类#4)的争用

    1) 如果buffer busy waits的等待事件主要集中在数据段头(即表或索引段头,并且不是UNDO段头)上,这意味着数据库中一些表或索引有高段头活动。

    注:进程出于两个主要原因访问段头,一是,获得或修改FREELISTS信息;二是,为了扩展高水位标记(HWM)。

    2) 减少这种情况的等待的方法:

    >> 对使用自由表进行段管理的表,增加确认对象的FREELISTS和FREELIST GROUPS(注:FREELIST GROUPS的增加也是必须的);

    >> 确保FCTFREE和PCTUSED之间的间隙不是太小,从而可以最小化FREELIST的块循环。

    >> 下一区的尺寸不能太小,当区高速扩张时,建立的新区需要修改在段头中区映射表。可以考虑将对象移动到合理的、统一尺寸的本地管理的表空间中。



    撤销段头(类#17)的争用

    1) 如果buffer busy waits等待事件主要集中在撤销段头,这表明数据库中的回滚段过少或者是它们的区尺寸太小,从而造成对段头的频繁更新。如果使用ORACLE9I的由数据库系统管理UNDO段,就不需要处理这种问题,因为ORACLE会根据需要增加额外的的UNDO段。

    2) 可以创建并启用私有回滚段,以减少每个回滚段的事务数量。需要修改init.ora文件中的ROLLBACK_SEGMENTS参数。

    3) 如果使用公用回滚段可以减少初始化参数transactions_per_rollback_segment的值,ORACLE通过transactions/transactions_per_rollback_segment来获取公有回滚段的最小数量。



    撤销块的争用(类#18)

    1) 如果buffer busy waits等待事件主要集中在撤销块上,这表明有多个并发会话为保证一致性读同时查询更新的数据。

    2) 这是应用程序存在问题,当应用程序在不同时间内运行查询和DML时,这种问题不会存在。


    附注:

    一、查看系统所有段的有关buffer busy waits事件的统计:

    SELECT * 
      FROM v$segment_statistics s 
    WHERE s.statistic_name = 'buffer busy waits' 
    AND s.owner <> 'SYS'

    展开全文
  • Oracle锁1:DML

    千次阅读 2015-01-08 10:32:56
    DML锁,也叫做数据锁(data lock),用于保证在多用户操作数据时数据的完整。DML锁防止相互冲突的DML和DDL操作同时发生。 DML锁有行锁(Row Locks,TX)和表锁(Table Locks,TM),不同的DML操作会自动请求对应的...
    DML锁,也叫做数据锁(data lock),用于保证在多用户操作数据时数据的完整。DML锁防止相互冲突的DML和DDL操作同时发生。

    DML锁有行锁(Row Locks,TX)和表锁(Table Locks,TM),不同的DML操作会自动请求对应的锁。

    行锁(Row Locks,TX)

    行锁也叫TX锁,用于锁表的一行数据。当一个事务对一行数据做INSERT、UPDATE、DELETE、MERGE或SELECT ... FOR UPDATE操作时,数据将为行添加行锁,直到事务执行了commit或roll back操作后,行锁才释放。
    行锁防止两个事务修改同一行数据,当一个事务修改一行数据时,数据库总是为修改的行加一个排它锁以至于其它事务无法修改该行,只有当事务执行了commit或者roll back操作后,数据库才会释放对应的锁。行锁是小粒度的锁,为应用提供了最大限度的并行修改数据的能力。
    当一个事务获取了一个行锁,那么这个事务也需要获取这行数据所在表的表锁,表锁阻止有冲突的DDL操作,即数据库会自动的为更新的行添加一个排它锁,并为行所在的表添加一个子排它锁。

    行锁和并发

    下面通过一个例子来理解行锁和并发的关系。
    首先创建下面的表格,并初始化数据:
    create table employees(employee_id number(10),salary number(10));
    insert into employees(employee_id,salary) values(100,512);
    insert into employees(employee_id,salary) values(101,600);
    ......
    步骤一:三个Session同时查询ID为100和101的雇员,查询结果一致
    Session 1:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    
    Session 2:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    
    Session 3:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    步骤二:Session 1执行更新操作,更新id为100的雇员,在这个更新中,写者将请求一个行锁,阻止其它写者更新这行数据,如果其它写者更新该行数据将被阻塞,直到Session 1提交或者回滚数据
    Session 1:
    update employees set salary = 612 where employee_id = 100
    步骤三:再次执行步骤一的操作
    Session 1:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				612
    101				600
    
    Session 2:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    
    Session 3:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600
    Session 1的结果是它更新后的数据,而其他两个session任然是旧数据。
    步骤四:Session 2更新101雇员的薪水,并且不提交数据,这样Session 2获取了对雇员101的行锁
    UPDATE hr.employees SET salary = salary + 100 WHERE employee_id = 101;
    步骤五:再次执行步骤1的查询
    Session 1:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				612
    101				600
    
    Session 2:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				700
    
    Session 3:
    SELECT employee_id, salary FROM employees WHERE employee_id IN (100, 101);
    EMPLOYEE_ID		SALARY
    -------------------------
    100				512
    101				600

    行锁的存储

    Oracle将锁信息存储在data block中。数据库用一个队列机制处理行锁请求,如果一个事务请求一个未锁定的行,那么事务将放一个锁到data block,被事务修改的每一行都指向存储在block header中的事务ID的一个拷贝。
    当一个事务结束时,事务ID保留在block header中,如果另一个事务想修改一行数据,那么它用这个事务ID判定这个锁是否是激活的。如果锁是激活的,那么当锁被释放时,该事务的session将被通知,否则,事务获取这个锁。

    表锁(Table Locks,TM)

    表锁,也叫TM锁,当对表执行以下操作时将被请求:INSERT、UPDATE、DELETE、MERGE、SELECT ... FOR UPDATE和LOCK TABLE。请求表锁的DML操作将阻止其它冲突的DDL操作。
    表锁有以下的模式:

    Row Share(RS)

    该锁也叫subshare table lock(SS),表示事务持有表上的锁已锁定表中的行,并打算对其进行更新。Row share锁是最小限制的表锁,为表的行数据的高并发修改提供了支持。

    Row Exclusive Table Lock(RX)

    该所也叫subexclusive table lock(SX),通常表示持有锁的事务更新了表的行或者执行了SELECT ... FOR UPDATE。SX锁允许其它事务查询、插入、更新、删除或者在同一个表上锁定多行数据,因此,SX锁允许多个事务在同一个表上同时获取SX和RS锁。

    Share Table Lock(S)

    一个事务持有了表的S锁,任然允许其他事务查询该表格(除了用SELECT ... FOR UPDATE),但只有持有了S锁的事务被允许更新表格。由于多个事务可以同时持有S锁,获取S锁并不能保证事务能够修改表格。

    Share Row Exclusive Table Lock(SRX)

    该锁也叫share-subexclusive table lock(SSX),比S锁限制更强。在一个表上一个时间点只能有一个事务能获取SSX锁。SSX锁允许其它事务查询表(除了用SELECT ... FOR UPDATE),但是不能更新表。

    Exclusive Table Lock(X)

    这个锁限制最强,禁止其它事务执行任何类型的DML操作或对表防止任何锁。
    展开全文
  • ORA-08177: 无法连续访问此事务处理(Cannot serialize access),该问题是由ORACLE事务隔离级别引起的。 问题重现: 1、在事务1中执行:  update employee set sal = 2000 where ename = 'SCOTT'  但不提交该事务...

    ORA-08177: 无法连续访问此事务处理(Cannot serialize access),该问题是由ORACLE事务隔离级别引起的。


    问题重现:

    1、在事务1中执行:

          update employee set sal = 2000 where ename = 'SCOTT'

          但不提交该事务。

    2、在事务2中执行:

          set transaction isolation level serializable;

          update employee set sal = 2000 where ename = 'SCOTT';

          此时事务2会等待事务1执行完成。

    3、提交事务1,在事务2中就会出现ORA-08177: 无法连续访问此事务处理。


    问题解析:

    隔离级别(isolation level)

    隔离级别定义了事务与事务之间的隔离程度。

    隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。

    ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别:

        a. 未提交读(read uncommitted)

        b. 提交读(read committed)

        c. 重复读(repeatable read)

        d. 序列化(serializable)

    通过一些现象,可以反映出隔离级别的效果。这些现象有:

        a. 更新丢失(lost update):当系统允许两个事务同时更新同一数据时,产生更新丢失。

        b. 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

        c. 非重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时产生非重复读。

        d. 幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。

    下面是隔离级别及其对应的可能出现或不可能出现的现象:

                               脏读               非重复读          幻像

    未提交读           可能               可能                  可能

    提交读               不可能           可能                  可能

    重复读               不可能           不可能              可能

    序列化               不可能           不可能              不可能


    ORACLE的隔离级别

    ORACLE提供了SQL92标准中的read committed 和 serializable,同时提供了非SQL92标准的read-only。

    read committed:

        a. 这是ORACLE缺省的事务隔离级别。

        b. 事务中的每一条语句都遵从语句级的读一致性。

        c. 保证不会脏读,但可能出现非重复读和幻像。

    serializable:(串行执行事务,并发性最小)

        a. 简单地说,serializable就是使事务看起来像是一个接着一个地顺序地执行。

        b. 仅仅能看见在本事务开始前由其他事务提交的更改和在本事务中所做的更改。

        c. 保证不会出现非重复读和幻像。

        d. serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作。


    如果有在serializable事务开始时存在未提交的事务,在serializable事务结束之前修改了serializable事务将要修改的行并进行了提交,则serializable事务不会读到这些变更,因此发生无法序列化访问的错误。(换一种解释方法:只要在serializable事务开始到结束之间有其他事务对serializable事务要修改的东西进行了修改并提交了修改,则发生无法序列化访问的错误。


    ORACLE在数据块中记录最近对数据行执行修改操作的N个事务的信息,目的是确定本事务开始时,是否存在未提交的事务修改了本事务将要修改的行。


    read-only:

        a. 遵从事务级的读一致性,仅仅能看见在本事务开始前由其它事务提交的更改。

        b. 不允许在本事务中进行DML操作。

        c. read-only是serializable的子集。它们都避免了非重复读和幻像。区别是在read-only中是只读,而在serializable中可以进行DML操作。

        d. Export with CONSISTENT = Y sets the transaction to read-only.


    read committed和serializable的区别和联系:

    事务1先于事务2开始,并保持未提交状态。事务2想要修改正被事务1修改的行。事务2等待。如果事务1回滚,则事务2(不论是read committed还是serializable方式)进行它想要做的修改。如果事务1提交,则当事务2是read committed方式时,进行它想要做的修改;当事务2是serializable方式时,失败并报错“Cannot serialize access",因为事务2看不见事务1提交的修改,且事务2想在事务1修改的基础上再做修改。即serializable不允许存在事务嵌套。


    read committed和serializable可以在oracle并行服务器中使用。

    关于set transaction read write:read write和read committed应该是一样的。在读方面,它们都避免了脏读,但都无法实现重复读。虽然没有文档说明read write在写方面与read committed一致,但显然它在写的时候会加排他锁以避免更新丢失。在加锁的过程中,如果遇到待锁定资源无法锁定,应该是等待而不是放弃。这与read committed一致。


    语句级的读一致性:

        a. ORACLE保证语句级的读一致性,即一个语句所处理的数据集是在单一时间点上的数据集,这个时间点是这个语句开始的时间。

        b. 一个语句看不见在它开始执行后提交的修改。

        c. 对于DML语句,它看不见由自己所做的修改,即DML语句看见的是它本身开始执行以前存在的数据。

    事务级的读一致性:

        a. 事务级的读一致性保证了可重复读,并保证不会出现幻像。


    设置隔离级别

    设置一个事务的隔离级别

        a. set transaction isolation level read committed;

        b. set transaction isolation level serializable;

        c. set transaction read only;

    设置更改会话的隔离级别

        a. alter session set isolation level serializable;

        b. alter session set isolation level serializable;


    选择隔离级别

    Read Committed Isolation

    (1)在事务量大、高性能的计算环境,需要更高的吞吐量和响应时间;

    (2)事务数少,并且发生幻影和不可重复读的几率的比较低。

    Serializable Isolation

    (1)适用于很少存在两个事务同时修改同一条记录的情况;

    (2)长事务以只读为主;

    (3)大型数据库并且每个短事务只修改很少的记录。


    展开全文
  • Oracle-锁解读

    千次阅读 2016-12-26 20:56:16
    如果是单用户的系统,那完全没有必要这个锁,就是因为有多用户并发操作,我们为了确保资源的安全性(也就是oracle的数据完整性和一致性)才引申出这个锁出来。Oracle 利用其锁机制来实现事务间的数据并发访问及数据...
  • Oracle pctfree和pctused详解

    千次阅读 2015-09-07 10:21:58
    pctfree这个参数定义了一个块保留空间的百分比,保留空间是...换句话说,就是当一个块的利用率达到1-pctfree的时候,oracle就将该块从freelist中移除,不再向该块插入数据。所以说pctfree是控制什么时候将块从freelist
  • Oracle期末保命宝典

    千次阅读 2020-07-02 18:10:13
    Oracle 12c对系统硬件配置要求中,物理内存建议( )以上。 2gb Oracle 12c数据库服务的启动需要启动( )、( )两种 OracleServiceORCL:数据库主服务、OracleOraDB12Home1TNSListener:数据库监听服务 ...
  • Oracle和MySql面试题

    千次阅读 2016-07-21 09:56:55
    1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高Oracle。 2. Oracle支持大并发,大访问量,是OLTP最好的工具。(OLTP[联机事务处理])...
  • 数据库锁细分及详解

    千次阅读 2018-08-16 15:37:31
    引言: 简单的数据库锁的大致类型有三种:  共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。  排它(X)锁:仅允许一个事务封锁此页;...
  • 前言这次,我们将在Linux下来动手完成Oracle数据库的安装与使用。Oracle本身是可以免费下载的包括 它的企业版以及被它收购的Weblogic和Sun中的几乎任何东西你都可以拿来下载和使用,不像IBM和Tibco一些其它厂商,...
  • 转载自:... 最大的区别在于平台,oracle可以运行在不同的平台上,sqlserver只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性2. oracle...
  • TIMESTEN安装配置指南-中文版

    万次阅读 2010-11-18 09:39:00
    数据交换技术也使得能够方便的捕获和处理进入到TimesTen数据管理器的大流量事件流,并且能进行并发传送数据到Oracle数据库。 TimesTen允许通过创建cache group来高速缓存Oracle数据,以在TimesTen中映射一个或多个...
  • DSG RealSync数据复制应用技术白 皮 书 目 录 1 为什么需要数据复制 31.1 信息系统存在的问题及需求 31.1.1 数据流通效率低下,企业信息孤岛现象严重 31.1.2 数据报表、查询和数据共享效率低下 31.2 ...
  • 关于DDL、DML和DCL的区别与理解

    千次阅读 2018-06-13 20:05:47
    DML、DDL、DCL区别 . 总体解释: DML(data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL(data definition ...
  • 数据交换技术也使得能够方便的捕获和处理进入到TimesTen数据管理器的大流量事件流,并且能进行并发传送数据到Oracle数据库。 TimesTen允许通过创建cache group来高速缓存Oracle数据,以在TimesTen中映射一个或多个...
  • 第1章 简介随着长时间的累积,一些关键的业务系统,例如CRM,ERP,SCM,Billing,Account等关键的系统,积累了大量的历史交易数据,这些大量的历史数据使得这些系统变得越来越庞大,并且在维护上也越来越复杂。...
  • UNDO

    千次阅读 2010-10-27 21:47:00
    Oracle绝对禁止一个用户查看另一个用户未提交的事务数据。 启动一个DML事务时,已修改数据的象前版本被缓存在database buffer cache,再有一个缓冲副本被写入一个回退段(undo segment)上。 <br />...
  • 本地管理表空间(LMT)与自动段空间管理(ASSM)概念 创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM)。 extent management ...
  • OracleRAC基本概念及入门

    万次阅读 2018-09-07 16:07:14
    一些Clusters仅仅为了提供可用性的,在当前活动的node发生故障时转移到次节点node。另一些是为了提供分布式的连接、工作的可扩展性。另一个Cluster的共同特点是,对于一个应用程序,它可以看做是一个单独的server...
1 2 3 4 5 ... 20
收藏数 4,647
精华内容 1,858
关键字:

dml影响最小化 oracle高并发