复制表结构到临时表发生死锁

allanli 2011-10-17 03:48:12
存储过程中使用语句select * into #TempTable from TableSource where 1=0
复制表结构创建临时表,多用户并发时经常发生死锁
基本上如果两个用户同时执行该存储过程(程序中一个比较复杂的业务存储过程)
就会发生死锁.有没有什么办法解决啊?

预先创建表的方法就不用讲了,那样会很麻烦,表结构复杂,TableSource表又不确定
...全文
402 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
allanli 2011-10-20
  • 打赏
  • 举报
回复
看来也只能不用临时表或者不用Select into 创建临时表了
allanli 2011-10-20
  • 打赏
  • 举报
回复
看来也只能不用临时表或者直接用Create Table 创建临时表了
saizhang 2011-10-18
  • 打赏
  • 举报
回复
mark ~
allanli 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 joe_tj 的回复:]

既然是拼sql串,能不能把零时表的名字用guid()来产生,这样不同户访问就是不同的零时表,应该没有锁了吧。在SP里把表名OUTPUT出去。
不知道行不行啊。
[/Quote]
不行的,临时表已经能保证不同用户不同表的了,不是全局临时表,是局部临时表
死锁是因为SQL Server在产生临时表的时候锁住了系统表造成的
火才松 2011-10-17
  • 打赏
  • 举报
回复
既然是拼sql串,能不能把零时表的名字用guid()来产生,这样不同户访问就是不同的零时表,应该没有锁了吧。在SP里把表名OUTPUT出去。
不知道行不行啊。
allanli 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ap0405140 的回复:]

学习了...

刚测试是锁住tempdb下的这些表:
sysrowsets
sysallocunits
sysrscols
sysschobjs
syscolpars
sysidxstats
不是sysobjects,sysindexes
[/Quote]
我的sql server 2000 是有这两个表的
allanli 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ap0405140 的回复:]

因为访问顺序完全相同
例如
连线1锁了A申请B
连线2不可能锁了B申请A
所以没有死锁的条件.
[/Quote]
问题系我的select into 语句很多地方都有,多用户并发很难保证不会发生死锁的
唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
因为访问顺序完全相同
例如
连线1锁了A申请B
连线2不可能锁了B申请A
所以没有死锁的条件.
唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
不过,2个连线以相同的顺序去申请及锁表,

也不会产生死锁的吧.
唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
学习了...

刚测试是锁住tempdb下的这些表:
sysrowsets
sysallocunits
sysrscols
sysschobjs
syscolpars
sysidxstats
不是sysobjects,sysindexes
allanli 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 delphigbg 的回复:]

select * into #TempTable from TableSource(Nolock) where 1=0
你在表名后面加Nolock,允许脏读.
[/Quote]

我已经加Nolock了,死锁不是发生在TableSource上
而是发生在tempdb的sysobjects,sysindexes
allanli 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nbdba 的回复:]

引用 8 楼 ap0405140 的回复:
另想替"死锁"申冤,实在很冤.

典型的死锁情况是:
连线1锁住A,申请修改B,
连线1锁住B,申请修改A,

这样才是死锁,从楼主的代码看,何来2个资源A,B?
我只看到表TableSource,而且还是where 1=0的.

根据几年前的跟踪结果,大量的select into 临时表语句会引起tempdb的sysobjects……
[/Quote]

还是NB兄有经验,我的问题就是死锁在TempDB的系统表,这个我是用1204跟踪发现的
allanli 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]

其实完全可以预先建立表

你知道 TableSource 的表结构

然后建立个临时表又不是很困难


if object('#temp..tbname') is not null
drop table tbname
go
[/Quote]

问题是我的TableSource是不固定的,有时候是动态语句组装的
有时候我的确不知道TableSource的结构又怎么办呢?
如果写死了,一旦我修改TableSource结构,我又要修改该存储过程,很麻烦啊
蝈蝈(GuoGuo) 2011-10-17
  • 打赏
  • 举报
回复
select * into #TempTable from TableSource(Nolock) where 1=0
你在表名后面加Nolock,允许脏读.
NBDBA 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ap0405140 的回复:]
另想替"死锁"申冤,实在很冤.

典型的死锁情况是:
连线1锁住A,申请修改B,
连线1锁住B,申请修改A,

这样才是死锁,从楼主的代码看,何来2个资源A,B?
我只看到表TableSource,而且还是where 1=0的.
[/Quote]
根据几年前的跟踪结果,大量的select into 临时表语句会引起tempdb的sysobjects,syscolumns等表的死锁现象,因为select into创建临时表过程会频繁使用这两个对象。
唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
sorry,修正楼上的

典型的死锁情况是:
连线1锁住A,申请修改B,
连线2锁住B,申请修改A.

唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
另想替"死锁"申冤,实在很冤.

典型的死锁情况是:
连线1锁住A,申请修改B,
连线1锁住B,申请修改A,

这样才是死锁,从楼主的代码看,何来2个资源A,B?
我只看到表TableSource,而且还是where 1=0的.
q465897859 2011-10-17
  • 打赏
  • 举报
回复
不会 帮顶 并学习
唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
退一步讲,假设真的是这一句,完全可以加nolock的,毕竟表结构没有时时在变吧.

select * into #TempTable from TableSource(nolock) where 1=0
唐诗三百首 2011-10-17
  • 打赏
  • 举报
回复
都是查询TableSource,而且还是where 1=0的,

都申请加共享锁(S锁),而且结果还是空的,何来死锁呢?

这不是问题的主要原因吧,LZ怎么肯定是这一句的.
加载更多回复(4)
PART I – 概览.........................................................................................................................11 第 1章 – DB2 Express-C是什么?..........................................................................................13 1.1免费开发、部署和分发… 无限制!...............................................................................13 1.2用户帮助和技术支持.....................................................................................................14 1.3 DB2服务器..................................................................................................................14 1.4 DB2客户端和驱动........................................................................................................14 1.5 应用程序开发的自由性.................................................................................................15 1.6 DB2 版本号与 DB2 版本分类........................................................................................16 1.7升级到其它的 DB2版本................................................................................................16 1.8 DB2 Express-C的维护.................................................................................................16 1.9相关免费软件................................................................................................................17 1.9.1 IBM数据工作室(Data Studio)...........................................................................17 1.9.2 DB2 Net Search Extender .....................................................................................17 1.9.3 Starter Toolkit for DB2 on Rails.............................................................................17 1.9.4 Web 2.0 Starter Toolkit for DB2 ............................................................................17 1.9.5 WebSphere Application Server – Community Edition............................................18 第 2章 – DB2相关特性和产品................................................................................................19 2.1 DB2 Express-C订购中包含的功能...............................................................................22 2.1.1 Fix packs补丁包...................................................................................................22 2.1.2高可用性灾难恢复(HADR) ................................................................................22 2.1.3数据复制(Data Replication)...............................................................................22 2.2 DB2 Express-C所不具备的功能...................................................................................23 2.2.1数据库分区............................................................................................................23 2.2.2连接集中器(Connection Concentrator ).............................................................23 2.2.3 Geodetic Extender ................................................................................................23 2.2.4工作负载管理(Workload Management, WLM) .......................................................24 2.3 DB2相关收费产品........................................................................................................24 2.3.1 DB2连接(DB2 Connect)...................................................................................24 2.3.2 WebSphere Federation Server..............................................................................24 2.3.3 WebSphere Replication Server .............................................................................25 第 3章 – 安装 DB2..................................................................................................................27 3.1安装前提条件................................................................................................................27 3.2操作系统中的安装权限.................................................................................................27 3.3安装向导.......................................................................................................................27 3.4自动安装.......................................................................................................................31 实验 #1 安装DB2 Express-C,创建 SAMPLE数据库........................................................32 第 4章 – DB2的应用环境.......................................................................................................35 实验 #2 - 创建一个新的数据库............................................................................................43 4.1 DB2配置......................................................................................................................44 4.1.1 环境变量................................................................................................................44 4.1.2 数据库管理器配置文件(dbm cfg) ...........................................................................44 4.1.3 数据库配置文件(db cfg)....................................................................................46 4.1.4 DB2 概要文件注册.............................................................................................47 4.2 DB2管理服务器...........................................................................................................48 实验 #3 – 实例、数据库和配置管理....................................................................................49 第 5章 – DB2工具..................................................................................................................51 5.1控制中心(Control Center).........................................................................................52 5.2命令编辑器(Command Editor) .................................................................................55 5.3 SQL帮助向导(SQL Assist Wizard ).........................................................................57 5.4 显示SQL按钮..............................................................................................................58 实验 #4 使用脚本填充EXPRESS数据库...........................................................................59 5.5 脚本..............................................................................................................................60 5.5.1 SQL脚本...............................................................................................................60 5.5.2操作系统(shell)脚本..........................................................................................61 实验 #5 为EXPRESS数据库创建一个安装脚本.................................................................62 5.6任务中心(Task Center )...........................................................................................65 5.6.1工具目录(Tools Catalog)数据库........................................................................65 5.7 日志(Journal)...........................................................................................................66 5.8运行状况监视器(Health Monitor ).............................................................................67 5.8.1运行状况中心(Health Center )...........................................................................68 PART II – DB2 Express-C 数据库管......................................................................................71 第 6章 – DB2体系结构...........................................................................................................73 6.1 DB2进程模型...............................................................................................................73 6.2 DB2内存模型...............................................................................................................74 6.3 DB2存储模型...............................................................................................................75 6.3.1数据页和扩展数据块..............................................................................................75 6.3.2缓冲池...................................................................................................................76 6.3.3空间...................................................................................................................77 第 7章 – DB2 客户端的连接....................................................................................................81 7.1 DB2 目录......................................................................................................................81 7.2 配置助手(Configuration Assistant )..........................................................................82 7.2.1服务器端的安装要求..............................................................................................82 7.2.2 Setup required at the client 客户端的安装要求......................................................84 7.2.3建立客户端与服务器端概要文件............................................................................87 实验 #6 使用配置助手........................................................................................................90 第 8章 – 数据库对象...............................................................................................................93 8.1 模式..............................................................................................................................93 8.2.................................................................................................................................93 8.2.1数据类型................................................................................................................93 8.2.2标识列...................................................................................................................96 8.2.3序列对象................................................................................................................96 8.2.4系统目录............................................................................................................97 8.2.5已声明临时.........................................................................................................97 实验 #7 创建一个数据.....................................................................................................99 8.3视图............................................................................................................................101 8.4索引............................................................................................................................101 8.4.1 Design Advisor ....................................................................................................101 8.5参照完整性.................................................................................................................102 第 9章 – 数据迁移工具..........................................................................................................105 9.1 导出(EXPORT)工具...............................................................................................106 9.2 导入(IMPORT)工具................................................................................................106 9.3 使用 LOAD来导入......................................................................................................107 9.4 db2move 工具...........................................................................................................108 9.5 db2look 工具..............................................................................................................109 实验 #8 导出EXPRESS数据库的DDL............................................................................111 第 10章 – 数据库安全...........................................................................................................115 10.1 认证..........................................................................................................................116 10.2 授权..........................................................................................................................116 10.3 DBADM权限............................................................................................................118 10.4 PUBLIC 组...............................................................................................................119 10.5 GRANT和REVOKE语句 ........................................................................................119 10.6 查看授权和特权........................................................................................................119 10.7 关于组特权...............................................................................................................121 实验 #9 授予和撤销用户的权限........................................................................................122 第 11章 – 备份和恢复...........................................................................................................125 11.1 数据库的日志记录....................................................................................................125 11.2 日志的类型...............................................................................................................126 11.3 日志记录的类型.......................................................................................................126 11.3.1 循环日志记录 ....................................................................................................126 11.3.2 档案日志记录和日志保留...................................................................................127 11.4 从控制中心进行数据库日志记录...............................................................................127 11.5 日志记录的参数........................................................................................................129 11.6 数据库备份...............................................................................................................129 实验 #10 – 安排一个备份计划..........................................................................................131 11.7 数据库恢复...............................................................................................................133 11.7.1 恢复类型............................................................................................................133 11.7.2 数据库恢复........................................................................................................133 11.8 其他关于备份和恢复的操作......................................................................................134 第 12章 – 维护任务...............................................................................................................135 12.1 重组(REORG)、运行统计(RUNSTATS)、重绑定(REBIND).......................135 12.1.1重组(REORG)命令........................................................................................135 12.1.2运行统计(RUNSTATS)命令 ..........................................................................136 12.1.3 绑定/重新绑定.................................................................................................136 12.1.4 在控制中心执行维护工作...................................................................................137 12.2 维护方式...................................................................................................................139 实验#11 – 配置自动维护.................................................................................................141 第 13章 – 并行与锁定...........................................................................................................143 13.1 事务(Transactions)..............................................................................................143 13.2 并行(Concurrency) ..............................................................................................143 13.3无并行控制导致的问题 .............................................................................................144 13.3.1丢失更新(Lost update)..................................................................................145 13.3.2未落实的读(Uncommitted read)....................................................................145 13.3.3不可重复读(Non-repeatable read).................................................................146 13.3.4幻象(Phantom read)......................................................................................146 13.4隔离级别(Isolation Levels)...................................................................................147 13.4.1未落实的读........................................................................................................147 13.4.2游标稳定性........................................................................................................147 13.4.3读稳定性............................................................................................................148 13.4.4可重复读............................................................................................................148 13.4.5隔离级别对比.....................................................................................................148 13.4.6设定隔离级别.....................................................................................................149 13.5锁定升级...................................................................................................................150 13.6锁定监视...................................................................................................................151 13.7锁定等待...................................................................................................................151 13.8死锁的引发与侦测.....................................................................................................152 13.9并行与锁定的最佳实践:..........................................................................................153 PART III – DB2 Express-C应用程序开发............................................................................155 第 14章 –SQL PL 存储过程..................................................................................................157 14.1 IBM数据工作室(Data Studio)..............................................................................158 14.1.2在Data Studio中创建一个存储过程..................................................................159 14.2 SQL PL 存储过程基础..............................................................................................161 14.2.1存储过程的结构.................................................................................................161 14.2.2 可选的存储过程属性..........................................................................................162 14.2.3参数...................................................................................................................162 14.2.4 SQL PL存储过程中的注释................................................................................163 14.2.5 复合语句............................................................................................................163 14.2.6 变量声明............................................................................................................163 14.2.7 赋值语句............................................................................................................164 14.3 游标..........................................................................................................................164 14.4 流控制......................................................................................................................164 14.5 调用存储过程 ...........................................................................................................165 14.6 错误和情况处理器....................................................................................................166 14.7 动态SQL..................................................................................................................168 第 15章 – 直接插入 SQL 过程语言、触发器、用户定义函数(UDF)..................................169 15.1直接插入SQL PL .....................................................................................................169 15.2 触发器(Trigger)....................................................................................................170 15.2.1 触发器的类型 ....................................................................................................170 实验 #12 从控制中心创建一个触发器...............................................................................174 15.3 用户定义函数 (UDF).................................................................................................177 15.3.1 标量函数(Scalar function).............................................................................177 15.3.2 函数(Table function)..................................................................................178 实验 #13 使用IBM Data Studio创建用户定义函数(UDF)............................................179 第 16章 – DB2 pureXML......................................................................................................181 16.1 在数据库中使用XML................................................................................................181 16.2 XML数据库..............................................................................................................182 16.2.1 启用 XML的数据库............................................................................................182 16.2.2 原生 XML数据库...............................................................................................182 16.3 DB2中的XML..........................................................................................................183 16.3.1 pureXML 技术优势............................................................................................184 16.3.2 XPath基础........................................................................................................185 16.3.3 XQuery的定义..................................................................................................188 16.3.4 插入 XML文档...................................................................................................189 16.3.5 查询 XML数据...................................................................................................191 16.3.6 使用 SQL/XML执行联合操作............................................................................196 16.3.7 使用 XQuery执行联合操作................................................................................196 16.3.8 更新与删除操作.................................................................................................197 16.3.9 XML 索引.........................................................................................................198 实验 #14 - SQL/XML 和 XQuery.......................................................................................200 第 17章 – 使用 Java、PHP和 Ruby进行数据库应用开发...................................................201 17.1 Java应用程序开发...................................................................................................201 17.1.1 JDBC类型 2驱动程序.......................................................................................201 17.1.2 JDBC类型 4驱动程序.......................................................................................202 17.2 PHP应用程序开发...................................................................................................203 17.2.1 DB2为PHP提供的连接选项.............................................................................203 17.2.2 Zend Core for IBM.............................................................................................204 17.3 Ruby on Rails应用程序开发.....................................................................................206 17.3.1 Startup Toolkit for DB2 on Rails ........................................................................206 附录 A — 排除故障...............................................................................................................207 A.1 查找错误代码的更多信息...........................................................................................207 A.2 SQLCODE与SQLSTATE .........................................................................................208 A.3 DB2 管理通知日志.....................................................................................................208 A.4 db2diag.log................................................................................................................209 A.5 CLI追踪.....................................................................................................................209 A.6 DB2缺陷与补丁.........................................................................................................209 参考资源 ...............................................................................................................................210 网站..................................................................................................................................210 书籍..................................................................................................................................211

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧