`

oracle什么时候需要commit

 
阅读更多

DML语言,比如update,delete,insert等修改表中数据的需要commit;
DDL语言,比如create,drop等改变表结构的,就不需要写commit(因为内部隐藏了commit);

 

 

DDL 数据定义语言:
create table 创建表  
alter table 修改表  
drop table 删除表  
truncate table 删除表中所有行  
create index 创建索引  
drop index 删除索引
当执行DDL语句时,在每一条语句前后,oracle都将提交当前的事务。如果用户使用insert命令将记录插入到数据库后,执行了一条DDL语句(如create
table),此时来自insert命令的数据将被提交到数据库。当DDL语句执行完成时,DDL语句会被自动提交,不能回滚。

DML 数据操作语言:
insert 将记录插入到数据库 
update 修改数据库的记录 
delete 删除数据库的记录
当执行DML命令如果没有提交,将不会被其他会话看到。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动
发出commit命令,使未提交的DML命令提交。


DDL  :
Data Definition Language (DDL) statements are used to define the database structure or schema. Some examples:

CREATE - to create objects in the database

ALTER - alters the structure of the database

DROP - delete objects from the database

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

COMMENT - add comments to the data dictionary

RENAME - rename an object

DML:

Data Manipulation Language (DML) statements are used for managing data within schema objects. Some examples:

SELECT - retrieve data from the a database

INSERT - insert data into a table

UPDATE - updates existing data within a table

DELETE - deletes all records from a table, the space for the records remain

MERGE - UPSERT operation (insert or update)

CALL - call a PL/SQL or Java subprogram

EXPLAIN PLAN - explain access path to data

LOCK TABLE - control concurrency

DCL

Data Control Language (DCL) statements. Some examples:

GRANT - gives user's access privileges to database

REVOKE - withdraw access privileges given with the GRANT command

TCL

Transaction Control (TCL) statements are used to manage the changes made by DML statements. It allows statements to be grouped together into logical transactions.

COMMIT - save work done

SAVEPOINT - identify a point in a transaction to which you can later roll back

ROLLBACK - restore database to original since the last COMMIT

SET TRANSACTION - Change transaction options like isolation level and what rollback segment to use

锁概念基础


数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两 种基本的锁类型来对数据库的事务进行并发控制。



Oracle数据库的锁类型

根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构。

DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

当Oracle 执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。 这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X 等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。

在数据行上只有X锁(排他锁)。在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。

当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。

分享到:
评论

相关推荐

    Oracle Form中COMMIT的概述及使用技巧

    在Oracle Forms中,COMMIT是用于将表单(Form)中的数据变化同步到后台数据库的关键操作。这确保了用户在表单上所做的任何修改能够被持久化存储,从而保持数据库的完整性。以下是对COMMIT及相关操作的详细说明: 1....

    Oracle物化视图应用详解

    Oracle物化视图是一种数据库对象,它存储了查询结果,以提供快速的数据访问,特别适合于需要频繁查询但计算过程复杂或涉及大量数据连接的场景。物化视图的使用可以显著提高查询性能,因为它避免了每次查询时的计算...

    oracle执行update语句时卡住问题分析及解决办法

    这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序...

    oracle Session与lock 解除

    ### Oracle Session与Lock解除 在Oracle数据库环境中,锁机制是一种重要的资源管理手段,它能够确保数据的一致性和并发性处理。锁(Lock)是数据库管理系统为了控制多个用户对同一数据资源的同时访问而采取的一种...

    java jdbc连接oracle所需要的jar包

    7. **事务管理**:根据应用需求,你可能需要使用`Connection`对象的`commit()`和`rollback()`方法来控制事务。 通过以上步骤,你就可以在Java应用程序中使用JDBC连接并操作Oracle数据库了。记住,为了确保程序的...

    C#操作Oracle帮助类已经封装 本地无需安装oracle 内有说明文档

    在C#编程中,为了与Oracle数据库进行交互,通常需要使用Oracle的数据提供者,如Oracle.ManagedDataAccess.dll,这是一个由Oracle官方提供的.NET Framework数据提供程序,用于访问Oracle数据库。然而,这通常需要在...

    python2.7_cx_oracle

    要使用这些安装文件,首先你需要确保你的Python环境是2.7版本,并且你的Oracle客户端或Instant Client已经正确安装。接下来,你可以按照以下步骤安装cx_Oracle: 1. 根据你的系统选择合适的安装文件,双击运行。 2....

    一段无需安装Oracle客户端即可访问Oracle数据库的delphi控件

    标题中的“一段无需安装Oracle客户端即可访问Oracle数据库的Delphi控件”指的是在Delphi编程环境中,使用特定的第三方控件或组件库,可以实现与Oracle数据库的...,而不需要在用户机器上安装完整的Oracle客户端软件...

    delphi连接oracle(免装oracle客户端)测试

    当开发Delphi应用程序时,有时需要与Oracle数据库进行交互,但传统的连接方式可能需要安装完整的Oracle客户端,这会占用大量系统资源且安装过程复杂。本篇文章将详细介绍如何在Delphi中实现连接Oracle数据库,无需...

    查看登录oracle数据库用户记录.docx

    为了管理和监控数据库的访问情况,需要对登录 Oracle 数据库的用户记录进行跟踪和查看。本文将介绍如何查看登录 Oracle 数据库的用户记录。 查看登录 Oracle 数据库用户记录的必要性 在实际应用中,数据库的安全性...

    Oracle 临时表用法

    ### Oracle 临时表用法详解 #### 一、背景与问题描述 在处理数据库操作时,经常遇到因数据量庞大而导致处理效率降低的问题。...同时,需要注意Oracle临时表的一些局限性,以便在实际应用中做出合理的决策。

    Oracle12C驱动包JDBC

    Oracle 12C JDBC驱动包是Oracle数据库与Java应用程序之间的桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。JDBC(Java Database Connectivity)是Java平台的标准API,用于连接各种数据库,包括...

    Sql语法转换为Oracle语法

    8. 事务处理:SQL Server使用 `BEGIN TRANSACTION`,`COMMIT` 和 `ROLLBACK`,Oracle也有对应的 `BEGIN`,`COMMIT` 和 `ROLLBACK`,但Oracle还提供了保存点(SAVEPOINT)功能。 9. 函数和内置操作:例如,SQL ...

    Oracle SQL高级编程

    3. 事务处理:深入理解如何使用Oracle的事务控制语句,如COMMIT、ROLLBACK以及SAVEPOINT,进行有效的事务管理。 4. 锁机制:了解和使用Oracle的锁定机制来处理并发事务,包括乐观锁定和悲观锁定。 5. 数据库触发器:...

    oracle5.jar 和oracle6.jar驱动jar包

    在使用这些驱动时,开发者首先需要在项目的类路径中包含对应的jar包,然后通过`Class.forName()`方法加载驱动,接着创建`Connection`对象来建立与Oracle数据库的连接。例如: ```java Class.forName("oracle.jdbc....

    oracle19c驱动包(ojdbc8,ojdbc10)

    - **事务管理**:Oracle支持事务控制,可以通过`Connection`对象的`setAutoCommit()`和`commit()`/`rollback()`方法来管理事务。 - **性能优化**:根据应用需求,可以配置连接池(如C3P0或HikariCP),以提高数据库...

    oracle 事务 回滚 存储过程

    在Oracle数据库中,事务的开始通常通过`BEGIN TRANSACTION`语句(或默认的隐式事务开始)启动,而结束则通过`COMMIT`或`ROLLBACK`语句完成。 ### Oracle存储过程 存储过程是在数据库中预编译的一组SQL语句,用于...

    oracle 的instantclient18.5

    这对于那些需要在远程服务器、开发环境或者轻量级应用中连接Oracle数据库的用户来说,是一个非常实用的解决方案。 使用Oracle Instant Client 18.5,你可以: 1. 连接Oracle数据库:通过oci.dll,应用程序可以使用...

Global site tag (gtag.js) - Google Analytics