楼主: jlandzpa

[精华] 请教:关于利用数据链路建表死锁的问题?

[复制链接]
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
11#
发表于 2002-7-9 08:08 | 只看该作者
我说的应该是对的。
create table aaa as select * from aaa@link;
在将整个数据都从远程站点拉过来之后,才释放DDL锁

本地如此建表一样的道理 :)

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
12#
发表于 2002-7-9 08:54 | 只看该作者
我曾经遇到过这种问题,在分布式数据库中使用
insert....select ... from ...
create ....select ... from .....
时有很多问题,分布式数据库加锁的方式与集中式的不同。后来改成游标的方式,所有的问题都解决。
我们当时的网络情况很复杂,有光纤、微波无线等,都有这个问题。

网络不稳定的时候,会出现会话中断引起的锁无法释放问题。因为UNIX缺省的TCP/IDLE参数是4个小时,由于网络问题引起的中断会话要4个小时后才会被PMON清理、释放锁。

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
13#
 楼主| 发表于 2002-7-9 09:07 | 只看该作者
没错,在执行DDL的时候,不能执行desc。
如果DDL锁不释放,我们以后所有的过程都会等待。

最初由 cgh_chen 发布
[B]有可能在执行DDL的时候,都不能执行desc。
因为此时应该有DDL锁存在,desc无法执行,这儿DML锁不同的地方。
(个人看法,没有验证过) [/B]

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
14#
 楼主| 发表于 2002-7-9 09:10 | 只看该作者
数据量不多。也就几千条,本来是应该几分钟就应该执行完的,
如果能够抱错,就不会影响下一次过程的执行了。
最初由 cgh_chen 发布
[B]我说的应该是对的。
create table aaa as select * from aaa@link;
在将整个数据都从远程站点拉过来之后,才释放DDL锁

本地如此建表一样的道理 :) [/B]

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
15#
发表于 2002-7-9 09:32 | 只看该作者
最初由 jlandzpa 发布
[B]数据量不多。也就几千条,本来是应该几分钟就应该执行完的,
如果能够抱错,就不会影响下一次过程的执行了。
[/B]


我认为在分布式数据库的情况下
create table ... select * from  ..@link
与在集中式数据库的情况下
create table .... select * from .....
的加锁方式应该是不一样的,分布式数据库是两阶段提交,需要在两端数据库都加锁,我个人认为,任何一端的锁不能释放都会引起下个SESSION HANG。 希望高手能详细说明一下分布式数据库的加锁原理与机制。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
16#
发表于 2002-7-9 10:40 | 只看该作者
最初由 feng_xin 发布
[B]网络不稳定的时候,会出现会话中断引起的锁无法释放问题。因为UNIX缺省的TCP/IDLE参数是4个小时,由于网络问题引起的中断会话要4个小时后才会被PMON清理、释放锁。 [/B]


Where do you get the information that the default TCP "idle" time is 4 hours? What parameter are you talking about? Not sure what OS you have access to. In Solaris, type ndd /dev/tcp \? to get a list of the parameters and ndd /dev/tcp [the_parameter] to get its value. If you're talking about tcp_close_wait_interval, the default is 240,000 ms or 4 minutes, not 4 hours.

PMON takes 4 hours to clean up dead sessions? How do you know it takes that long?

Yong Huang

使用道具 举报

回复
招聘 : HTML页面制作
论坛徽章:
74
喜羊羊
日期:2015-04-29 17:32:03夏利
日期:2013-11-30 17:08:44雪佛兰
日期:2013-09-02 10:24:402013年新春福章
日期:2013-02-25 14:51:24蜘蛛蛋
日期:2012-11-26 22:08:56ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32双黄蛋
日期:2012-05-17 22:25:44版主3段
日期:2012-05-15 15:24:11茶鸡蛋
日期:2012-04-06 17:43:25茶鸡蛋
日期:2012-03-26 21:29:09
17#
发表于 2002-7-9 11:38 | 只看该作者
在COMPAQ TRUE 64 环境下

TCP_KEEPIDLE 参数
缺省值是 TCP_KEEPIDLE=14400

我曾做过实验,在client端启动sql*plus,update一条记录,把网线拔掉,锁要等到TCP_KEEPIDLE设定的值才释放。

因为我们一个应用要用到车载终端,经常由于信号问题引起SESSION中断锁无法释放,从而导致应用无法使用。后来改过此参数后锁问题解决。

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
18#
发表于 2002-7-11 11:42 | 只看该作者
最初由 feng_xin 发布
[B]在COMPAQ TRUE 64 环境下

TCP_KEEPIDLE 参数
缺省值是 TCP_KEEPIDLE=14400

我曾做过实验,在client端启动sql*plus,update一条记录,把网线拔掉,锁要等到TCP_KEEPIDLE设定的值才释放。

因为我们一个应用要用到车载终端,经常由于信号问题引起SESSION中断锁无法释放,从而导致应用无法使用。后来改过此参数后锁问题解决。 [/B]


That sounds strange. Disconnecting the network is equivalent to killing your sqlplus process without normal exit. The transaction should be rolled back.

Can someone else do a test? Open a sqlplus session to a database on another host, update a table without commit, disconnect the network cable.

If your observation is indeed true, can you tell us more details possibly with some screen text copied and pasted here? I'm interested to know how tcp_keepalive (called tcp_keepalive_interval on Solaris) affects the disrupted SQL session.

Yong Huang

使用道具 举报

回复
论坛徽章:
0
19#
发表于 2002-7-11 11:46 | 只看该作者

你select的表大么?

这些数据是要通你的不稳定链路传回本地的

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2002-7-11 11:57 | 只看该作者

好像可以修改SQLNET.EXPIRE_TIME

在你客户端的sqlnet.ora里,单位是分钟,你试试吧,我也不知道行不行

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表