oracle什么时候须要commit

今天在oracle的SQL plus
中运行了删除和查询操作,然后在PL/SQL中也运行查询操作,语句一样,结果却不一样,让我大感郁闷,后来才突然想到可能是两边数据不一致造成的,可是为什么不一致呢,就是没用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的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。

时间: 2024-08-28 08:56:54

oracle什么时候须要commit的相关文章

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都将提交当前的

【Oracle123】Oracle什么时候需要commit

https://www.cnblogs.com/qingxinblog/articles/3373851.html DML语言,比如update,delete,insert等修改表中数据的需要commit;DDL语言,比如create,drop等改变表结构的,就不需要写commit(因为内部隐藏了commit); 原文地址:https://www.cnblogs.com/cathygx/p/11719448.html

How To Commit Just One Data Block Changes In Oracle Forms

You have an Oracle Form in which you have multiple data blocks and requirement is to commit just one data block changes and not to effect any other data blocks. But suppose you have a commit_form button also in form which will commit all the data blo

java怎样将一组对象传入Oracle存储过程

java怎样将一组对象传入Oracle存储过程.须要注意的是jar包是有要求的,假设使用不当会导致仅仅有数字能传过去,字符串传只是去.假设是Oracle11g则须要选用例如以下的jar包,F:\app\Administrator\product\11.2.0\dbhome_1\jlib\orai18n.jar. D:\program\weblogic\oracle_common\modules\oracle.jdbc_11.2.0\ojdbc6.jar 样例例如以下: CREATE OR REP

OcciWrapper使用指南(高性能Oracle访问组件)

occiwrapper使用指南 occiwrapper是一个开源的.跨平台的Oracle访问组件, 方便C++开发者们灵活地操作oracle数据库.为了方便使用,组件中的接口形式参考的POCO库的使用方式.occiwrapper采用如下的形式执行SQL语句: 1 occiwrapper::Session s = SessionInstance( connection ); 2 s << "truncate table TBL_TEST ", now; 通过session对象

【oracle ocp 知识点二】

1.数据库操作语言 DML在运行时下面的语句 添加一个新行到表 更新表现出一定的线 从表删除现有行 一个事务处理是由一系列的DML语句逻辑组成 A.insert 每次插入一行数据 字符和日期的须要单引號引起来,日期的插入须要to_date()处理 SQL> insert into dept values(54,'',null); //插入空值 1 row created. SQL> select * from dept; DEPTNO DNAME          LOC ----------

ORACLE安装之环境搭建

Oracle安装之环境搭建 一.系统外环境 1,准备好一个linux系统,ip地址为192.168.12.3, 2.系统在安装的时候要创建一个目录/u01,之前我们都是吧剩余所有空间给/根目录,这里我们指定空间给根目录10G20G就可以了,然后再手动输入/u01,把剩余的空间全部给它,如下图所示: 3,选择安装包,如下图: 查找并选择sysstat-7开头的包,然后确定, 其他的包自己不清楚的可以全部安装, 4.定义网络配置,自定义虚拟网络VMNET1,编辑 然后ip地址改一下改为192.168

使用instantclient_11_2 和PL/SQL Developer工具包连接oracle 11g远程数据库

本文转自CSDN博客,http://blog.csdn.net/helifengwell/archive/2010/08/18/5820434.aspx 1,先到Oracle站点下载Instant Client : http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html 依据你的操作系统选择不同的Instant Client版本号 下载回是一个压缩文件,解压之后的文件夹叫:D:/i

Oracle过程:%TYPE,%ROWTYPE,CURSOR,INTO,FOR...LOOP

/*创建一个过程,ORACLE PL/SQL语法*/ CREATE OR REPLACE PROCEDURE MYPROC AS    v_id     t_user.id%TYPE; /*声明变量,类型与指定表字段一致*/    v_user   t_user%ROWTYPE; /*声明变量,表示一行记录,结构与指定表一行记录一致*/    CURSOR c_user IS SELECT * FROM t_user; /*声明游标,表示多行记录,每一行结构与查询结果一致*/ BEGIN