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错误。这些现象将在面临严重风险的实际应用。由于长时间没有回应。大量的交易失败,等等。。
oracle当需要commit的更多相关文章
- Oracle中的commit详解
本文转自 : http://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉.commit在数据库编程的时候很常用,当你执行DM ...
- 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理
1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...
- Oracle临时表on commit preserver rows和on commit delete rows区别
Oracle 临时表:在 Oracle 中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了. Oracle 的临时表创建之后基本不占用 ...
- 【Oracle】-【COMMIT对索引的影响】-从trace看COMMIT对索引的影响
之前看过老杨http://yangtingkun.itpub.net/post/468/231000的一篇文章,讲述了INSERT操作对全文索引无操作,但DELETE时为了防止删除的数据仍能通过索引的 ...
- Oracle SQL*Loader commit point tips
http://www.dba-oracle.com/t_sql_loader_commit_frequency.htm - Question: Can I control the commit fr ...
- 转: Oracle Form 中commit 与do_key('commit_form')区别
1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交:如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准. ...
- oracle误操作commit之后,可以闪回数据
1. 授予行迁移权限 alter table table_name enable row movement; 2. 到15分钟前: flashback table order to timesta ...
- Oracle 的安全保障 commit &checkpoint
Oracle 的安全 commit &checkpoint commit ---lgwr 事务相关的操作,保证事务的安全. commit标志着事务的结束.意味着别人对你事务操作的结果可见. c ...
- Oracle core05_事务和一致性
事务和一致性 oracle的redo和undo机制保证了数据库的ACID特性,以及高性能和可恢复特性. redo的数据是记录着数据块变更的顺序的正向数据流, commit时,保证redo同步持久化,保 ...
随机推荐
- CenOS下安装jdk
1. 安装JDK1.7.0 下载完成后在取得root权限后执行: [root@sea sea]# sudo rpm -ivh /目录/jdk-7-linux-x64.rpm 执行结果: Prepari ...
- dm8148 jpeg编解码器测试
测试过程: 1)于A8将jpeg传送到videoM3解码,然后,videoM3编码.在编译jpeg图像传输到A8,主要是测试jpeg编码的图像需要多少时间: 1000w像素: 编码时间:43ms. ...
- or1200中IMMU分析(续)
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 2 IMMU中的特殊寄存器 OR1200处理器中的IMMU包括第2组特殊寄存器,如表10.1所看到的. ITLBW0MRx是指令TL ...
- iOS结合导航控制器和标签栏控制器
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name=& ...
- mybaits使用存储过程
如何使用Mybaits调用数据库存储过程,按以下顺序Oracle案例库: 1.在数据库中创建以下存储过程: create or replace procedure pro_hello(p_result ...
- android生成apk包出现Unable to add "XXX" Zip add failed问题
最近试图整合umeng至cocos2d-x围棋项目,一切好工作,准备生成apk当出现了大量的数据包 [2014-06-03 20:02:52 - MyApp] Unable to add 'G:\co ...
- [LeetCode179]Largest Number
题目: Given a list of non negative integers, arrange them such that they form the largest number. For ...
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
原文:ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了 ...
- 行政歌节 · 萧谱1
4之前听 陈越 的<绿野仙踪> 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- AutoMapper在ABP框架
AutoMapper在ABP框架中的使用说明 为了说明AutoMapper如何使用,我专门开设了一个专题来讲,如果您还没有查看该专题,请点击这里.既然系统地学习了AutoMapper,那么接下来就是该 ...