donnie's life
Oracle...Java...Math...
BlogJava
首页
新随笔
联系
聚合
管理
随笔 - 79 文章 - 11 trackbacks - 0
<
2009年5月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
不再堕落。
Oracle documents:
http://tahiti.oracle.com/
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
(66)
da(4)
database(26)
java(6)
math(3)
os(11)
电力(13)
系统分析(3)
随笔档案
(79)
2009年7月 (1)
2009年6月 (5)
2009年5月 (14)
2009年4月 (23)
2009年3月 (26)
2009年2月 (10)
相册
abc
收藏夹
(11)
database(2)
java(3)
x'(6)
搜索
积分与排名
积分 - 52632
排名 - 949
最新随笔
1. 【转】科学工作者的祖国——潘维博士在中国科学院研究生院工程硕士开学典礼上的演讲
2. Oracle 内存数据库 TimesTen
3. 中国梦——唐骏正传
4. UML中各种图形的建立步骤
5. 浅析软件项目需求开发
6. 再谈软件需求分析和开发
7. 遥测
8. 变电站综合自动化
9. SOE和遥信的区别
10. 微机保护
最新评论
1. re: flash player 9 安装错误:正在尝试安装的ADOBE FLASH PLAYER版本不是最新的。。。。[未登录]
10.1也这样 愁死我了!
--大海
2. re: flash player 9 安装错误:正在尝试安装的ADOBE FLASH PLAYER版本不是最新的。。。。
谢谢了,帮我解决大问题了,呵呵
--第三只眼
3. re: 使用ORA_ROWSCN的乐观锁定
抄书 %……&*(
--ddd
4. re: T400 ubuntu 下,ati显卡驱动安装后 花屏,无法进入图形之解决方法[未登录]
呵呵。,谢谢啊,谢谢啊。O了
--三十
5. re: T400 ubuntu 下,ati显卡驱动安装后 花屏,无法进入图形之解决方法[未登录]
ubuntu 9.04显卡安装,系统设置》设备驱动 自动识别安装。
--me
阅读排行榜
1. 方差(Variance) (10853)
2. 开启windows xp 4G内存限制 Memory Limits for Windows Releases (7811)
3. SOE和遥信的区别(4585)
4. T400 ubuntu 下,ati显卡驱动安装后 花屏,无法进入图形之解决方法(3783)
5. flash player 9 安装错误:正在尝试安装的ADOBE FLASH PLAYER版本不是最新的。。。。(2918)
阻塞 之Insert 现象与解决方案
insert阻塞不常见,对于带主键的表,如果表上有唯一约束,有两个会话试图插入相同主键值的一条记录,则其中一个会话会发生阻塞,直到另一个会话提交或回滚。
mld
@ORCL
>
create
table
demo ( x
int
primary
key
);
表已创建。
mld
@ORCL
>
insert
into
demo
values
(
1
);
已创建
1
行。
----- session2
mld
@ORCL
>
insert
into
demo
values
(
1
);
--waiting。。。。。。。。
解决:
a,使主键保证唯一,可采用UUID,SEQUENCE等方式;
b,使用DBMS_LOCK.REQUEST根据主键ID的hash值分配一个排它锁,一次只有一个会话能请求成功,见代码:
mld
@ORCL
>
conn sys
/
mld
as
sysdba
已连接。
sys
@ORCL
>
grant
execute
on
dbms_lock
to
mld;
授权成功。
mld
@ORCL
>
create
or
replace
trigger
demo_bifer
2
before
insert
on
demo
3
for
each row
4
declare
5
l_lock_id
number
;
6
resource_busy exception;
7
pragma exception_init( resource_busy,
-
54
);
8
begin
9
l_lock_id :
=
10
dbms_utility.get_hash_value( to_char( :new.x ),
0
,
1024
);
11
if
( dbms_lock.request
12
( id
=>
l_lock_id,
13
lockmode
=>
dbms_lock.x_mode,
14
timeout
=>
0
,
15
release_on_commit
=>
TRUE )
<>
0
)
16
then
17
raise resource_busy;
18
end
if
;
19
end
;
20
/
触发器已创建
mld
@ORCL
>
show error;
没有错误。
mld
@ORCL
>
insert
into
demo
values
(
1
);
已创建
1
行。
--session
2
mld
@ORCL
>
insert
into
demo
values
(
1
);
insert
into
demo
values
(
1
)
*
第
1
行出现错误:
ORA
-
00054
: 资源正忙, 但指定以 NOWAIT 方式获取资源
ORA
-
06512
: 在 "MLD.DEMO_BIFER", line
14
ORA
-
04088
: 触发器
'
MLD.DEMO_BIFER
'
执行过程中出错
mld
@ORCL
>
posted on 2009-05-06 22:45
donnie
阅读(608)
评论(0)
编辑
收藏
所属分类:
database
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Oracle 内存数据库 TimesTen
阻塞 之Insert 现象与解决方案
查看行的ORA_ROWSCN, 修改时间 TIMESTAMP (oracle10以后的版本才有)
使用ORA_ROWSCN的乐观锁定
使用校验和的乐观锁定
悲观锁定(试图更新前就锁定)
使用版本列的乐观锁定(乐观锁定:即将执行更新前才锁定)
oracle row length
oracle 压缩表测试
A SQL Joke