Oracle数据库—— 事务处理与并发控制
一、涉及内容
1.理解事务的概念和几个特性。
2.熟练掌握事务管理命令的使用。
3.理解并发操作的概念和数据库锁的类型。
二、具体操作
(12.5 实验)
1. 分析以下代码,说出代码中的哪些部分体现了事务的语句级原子性、过程级原子性和事务级原子性。
create table book
(bid number(4) CONSTRAINT pk_bid PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE,
bname varchar2(30),
bprice number(4,1)); insert into book values(1001,'Oracle 10g 数据库开发',35.4);
insert into book values(1001,'Java 程序设计',40); begin
insert into book values(1002,'Java 程序设计',40);
insert into book values(1002,'计算机英语',28);
end; insert into book values(1003,'计算机英语',28);
commit;
答:
(1)体现语句级原子性:上述代码中的每一条语句均能体现语句级原子性。每条语句本身也是最小级别的事务,该语句要么完全执行成功,要么完全失败,并且它不会影响其他语句的执行。
(2)体现过程级原子性:
以下这个匿名块:
begin
insert into book values(1002,'Java 程序设计',40);
insert into book values(1002,'计算机英语',28);
end;
这里PL/SQL匿名过程块也当作是语句,当作一个整体,过程中的所有代码要么都执行成功,要么都执行失败,并且不影响过程外的其他语句。
(3)体现事务级原子性:
上述代码中的所有语句及匿名块,即整个事务中的所有语句和匿名块都当作一个整体,一个事务。用户在提交或回滚事务时,要么所有语句都执行,要么都失败。
事务级原子性中包含了语句级原子性和过程级原子性,整个事务中的语句或匿名块首先受语句级原子性和过程级原子性的影响。
2. 数据库的DDL命令作为一个独立的事务执行,若以下代码在Sql*Plus的窗口1执行,那么在Sqlplus的窗口2中能够看到哪些新数据?
insert into scott.emp(empno,sal) values(1001,3000);
insert into scott.emp(empno,sal) values(1002,3000);
create table t1(id number);
insert into scott.emp(empno,sal) values(1003,3000);
在Sql*Plus的窗口1执行上述代码:
在Sqlplus的窗口2中查看scott.emp(empno,sal):
如上图所示,在Sqlplus的窗口2只能查看到在Sqlplus的窗口1中执行代码的create 之前的插入的数据。
3. 使用ROLLBACK可以将事务回滚到某个保存点,分析以下代码执行的结果。
insert into scott.emp(empno) values(1011);
SAVEPOINT aa;
insert into scott.emp(empno) values(1012);
ROLLBACK to aa;
insert into scott.emp(empno) values(1013);
commit;
答:执行结果截图如下:
因为使用了ROLLBACK,可将事务回滚到某个保存点。故上述代码执行完后只能看到插入的1011和1013两条记录的数据。
4. 利用第一题中创建的book表,分析以下两段代码的执行结果有何不同?
代码段一:
insert into book values(1011,null,null);
insert into book values(1011,null,null);
commit;
执行结果截图:
代码段二:
set CONSTRAINT pk_bid deferred;
insert into book values(1011,null,null);
insert into book values(1011,null,null);
commit;
执行结果截图:
答:代码段一中插入两条一样的记录,违反主键约束,插入重复的记录失败。代码段二中,设置了约束延迟生效,插入重复的记录暂时成功,但是当提交事务时检查约束,违反了主键约束,整个事务被回滚,两条看似成功的insert命令都失败了。
5.按照以下要求书写代码并执行,根据实验结果说明事务在不同隔离级别下的特点。
打开3个Sqlplus窗口,在窗口1中向scott.emp表中插入一行新数据,在窗口2中设置事务的隔离属性是READ ONLY,在窗口3中设置事务的隔离属性是READ WRITE。在窗口1提交插入命令的前后,观察窗口2和窗口3 中能否看到这条新数据。尝试在窗口2和窗口3中分别向scott.emp表中插入新数据,看看能否成功。
(1)在窗口1中向scott.emp表中插入一行新数据:
(2)在窗口2中设置事务的隔离属性是READ ONLY;
(3)在窗口3中设置事务的隔离属性是READ WRITE;
(4)窗口1提交前,观察窗口2和窗口3 中均不能看到这条新数据;
(5)窗口1提交后,观察窗口2还是不能看到;而窗口3 中可以看到这条新数据;
(6)在窗口2向scott.emp表中插入新数据,不能成功。
(7)在窗口3中向scott.emp表中插入新数据,可以插入成功。
(12.6 习题)
(一)填空题
1.事务的ACID特性包括(原子性)、(一致性)、(隔离性)、(持久性)。
2.在设置事务隔离层时,需要使用关键字(SET TRANSACTION)。
3.在众多的事务控制语句中,用来撤销事务操作的语句是(ROLLBACK),用来持久化事务对数据库操作的语句是(COMMIT)。
4.对表执行INSERT命令时系统自动加(RX)锁,执行CREATE命令时系统自动加(S)锁,执行ALTER命令时系统自动加(X)锁。
(二)简答题
1.哪些情况发生后事务将终止?
答:Oracle中的事务终止会发生在:
(1)用户使用COMMIT命令显示提交事务。
(2)用户使用ROLLBACK命令回滚整个事务。
(3)用户执行了一条DDL语句。(如create\drop\alter)
(4) 用户正常断开了与Oracle的连接,这时用户当前的事务将被自动提交。
(5)用户进程意外被终止,这时用户当前的事务被回滚。
(6)用户关闭SQL*PLUS会话时,默认使用ROLLBACK回滚事务。
2.数据库的并发操作会带来哪些问题?
答:数据库的并发操作会带来以下问题:
(1)丢失更新。
(2)错读(脏读)。
(3)不一致的分析(不可重复读)。
(4)幻读。
3.要建立一个名为savepint1的保存点,应使用哪个语句?
答:应使用语句:SAVEPOINT savepint1;
Oracle数据库—— 事务处理与并发控制的更多相关文章
- Oracle数据库11g各版本介绍及功能比较
.标准版和企 业版.所有这些版本都使用相同的通用代码库构建,这意味着企业的数据库管理软件可以轻松地从规模较小的单一处理器服务器扩展到多处理器服务器集 群,而无需更改一行代码.Oracle数据库11g企 ...
- 电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具
Oracle的安装包通常都比较大,安装又比较费时,而且如果安装过程中不幸出错,各种蛋疼,即便是安装过N遍的老手,有时候安装起来也觉得挺烦.而工作中,通常服务器上面安装oracle就可以了,我们本地电脑 ...
- 数据导入导出Oracle数据库
临近春节,接到了一个导入数据的任务,在Linux客户端中的数据有50G,大约3亿3千万行: 刚开始很天真,把原始的txt/csv文件用sh脚本转化成了oralce 的insert into 语句,然后 ...
- oracle数据库从入门到精通
oracle产品线围绕企业开发平台的企业开发平台四大组件:unix,weblogic中间件,java编程语言,oracle数据库oracle 开发主要分两类数据库管理:dba数据库编程:分两部分 ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- 十三、EnterpriseFrameWork框架核心类库之数据库操作(多数据库事务处理)
本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer.Oracle.DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时 ...
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...
- window下安装oracle数据库
Oracle 11g安装 1.解压下载的包,然后进入包内,点击setup.exe开始安装 . 2.出现如下:一般把那个小对勾取消,点击下一步进行, 弹出下图这个后点‘是’ 3.下图后,选择创建和配置数 ...
随机推荐
- 2016-1-7第一个完整APP 私人通讯录的实现 6:在联系人界面增加删除联系人的功能
一:在viewDidLoad方法中代码添加一个UIBarButtonItem,并将其的类型设置成垃圾桶,代码如下: - (void)viewDidLoad { [super viewDidLoad]; ...
- python中的namespace
python中的名称空间是名称(标识符)到对象的映射. 具体来说,python为模块.函数.类.对象保存一个字典(__dict__),里面就是重名称到对象的映射. 可以参看下面python程序的输出: ...
- 搭建linux系统环境
1.安装centos6.4 x86,选择的是Desktop模式2.配置centos a关闭NetwrokManager(chkconfig NetworkManager off) b开机启动netwo ...
- ubuntu 新系统需要做的事
1 : 打开语言支持 开始补齐并且选择自己需要的语言包 . 2 : 搜索计算机 输入 update 找到软件更新器 更新软件库 . 然后打开ubuntu自带软件安装工具下载自己想要的软件(没有更新之前 ...
- 【Zhejiang University PATest】02-3. 求前缀表达式的值
算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4.请设计程序计算 ...
- Swift编程规范
文档编号: 应用开发Swift编码规范 (版本v1.0.0) 成文信息 主题词: Swift开发编码规范 作 者: 周少停 文档类别: 开发规范 审 核: 批 准: 文档性质: 初稿 ...
- Oracle查看表结构的几种方法(转后加工)
1. DESCRIBE 命令使用方法如下:SQL> describe WX_ADVANCEUP (WX_ADVANCEUP为表名)显示的结果如下: 名称 ...
- PHP 调用oracle存储过程
$orderdate = strtotime($this->input->get('orderdate')); $today = strtotime(date('Y-m-d',time() ...
- ld链接问题解决
http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-sha ...
- yii 隐藏index.php
首先,开启apache的rewrite模块 去掉rewrite前的#,如下所示 LoadModule rewrite_module modules/mod_rewrite.so 接着,在yii的ind ...