1. DB2中如何使用sql语句进行表锁
写sql语句的时候 在后面加上一个 for update 你在去执行 增加 删除的操作 这样子表就会容易锁住啦。
2. db2 导入数据之后,有几张表被锁住,提示是表不活动,不能被访问,请问是什么原因
请问你是用LOAD还是IMPORT导入数据,如果用LOAD就可能存在这种情况。
LOAD锁表大概有两种情况,
一是你的数据库日志为归档日志,但是在使用LOAD的时候没有指定LOAD之后数据不可恢复,导致你的表空间被锁定,处于Backup pendding 状态,这种情况数据库会要求你做数据库备份或者表空间备份。
二是数据装载时有主外键的表违反了主外键约束,表被锁定,这种情况可以使用语句来解除表的锁定
SET INTEGRITY FOR <table_schema>.<table_name> IMMEDIATE CHECKED
3. db2数据库里面的一张表被锁定,怎么解锁
步骤一:使用命令get snapshot来查询哪些进程锁了哪些表。
步骤二:使用春渣命令force来断开这些进行了死锁的进程来。
步骤三: 使用命令list application查看是否已经断开了哪些进行了死锁的进程。
4. db2数据库里面的一张表被锁定,怎么解锁
请教各位:DB2数据库里如何判断一个表被锁
1、执行命令打开锁的监视开光
UPDATE
MONITOR
SWITCHES
USING
lock
on==>;>;
2、查看数据库的锁的情况
get
snapshot
for
locks
on
tberp
3、某一个用户的锁的情况
get
snapshot
for
application
applid
C0A8084A.040A.031015144751
4、如果表被锁可以关闭该应用连接
force
application
ID1
5、看正在运行的程序有没有处于锁等待状态的
list
applications
for
db
tberp
show
detail
5. DB2锁方面的SQL语句分析
锁表和mc_mer_trad_incom的更新频率有关系的
可以在mc_payment_flow,mc_payment_flow表上建索引减少mc_mer_trad_incom的锁表时间
如果有频繁的mc_payment_flow,mc_payment_flow表的更新操作可以直接使用X锁避免NS锁的升级
可以在select中加入with rs use and keep exclusive locks避免锁升级
数据库的参数可调整locktimeout,locklist,maxlocks
6. DB2数据库发生死锁了怎么办
db2 get snapshot for locks on sample
db2 get db cfg for sample
db2 update db cfg using dlchktime 10000
-查看数据库管理器级别快照信息
db2 get snapshot for dbm
-查看数据库级别快照信息
db2 get snapshot for database on dbname
-查看应用级别快照信息
db2 get snapshot for application agentid appl-handler
注:appl-handler可以从list applicaitions的输出中得到
-查看表级别快照信息
db2 get snapshot for tables on dbname
注:需要把tables快照开关设为ON才会有作用
-查看锁快照信息
db2 get snapshot for locks on dbname
或
db2 get snapshot for locks on for application agentid appl-handler
-查看动态sql语句快照信息
db2 get snapshot for dynamic sql on dbname
db2 get monitor switches
db2 update monitor switches using lock on statement on
create event monitor mymonitor for deadlocks,statements write to file 'c:/temp'
set event monitor mymonitor state 1
db2evmon - path 'c:/temp'
--转自:http://blog.csdn.NET/rodjohnsondoctor/article/details/4323514
---
第1页:上线前的准备
第2页:维护时的注意事项
第3页:发生死锁后的对策
【IT168 技术文档】在新的数据库应用系统上线初期,由于测试不完善或不熟悉DB2的机制,常会出现锁等待死锁等现象存在于我们的应用系统中,如何捕获锁等待或死锁信息并解决锁问题,是保证平稳上线必须面对的问题。目前应用系统最常使用的DB2数据库版本有多个,有8.1,8.2,9.1还有新推出的9.5,对于不同版本的DB2数据库提供的解决办法不尽相同,下面对于上述问题的解决作了一个简单说明,希望对大家有用。
首先在上线前有几件跟锁相关的事情需要开发设计人员一定要做好
1. 相关参数的更改
注册表变量参数:
DB2_EVALUNCOMMITTED=on 当启用此变量时,在可能的情况下,它将进行表或索引访问扫描以延迟或避免行锁定,直到知道数据记录满足谓词求值为止。
DB2_SKIPDELETED=on 当启用此变量时,在可能的情况下,它允许使用无条件地跳过已删除的键或跳过已删除的行。
DB2_SKIPINSERTED=on 当启用此变量时,在可能的情况下,它允许跳过未落实的已插入行,就好像从未插入这些行一样。
数据库参数:
LOCKLIST 锁定列表的内存量,当此参数设置为 AUTOMATIC 时,就启用了自调整功能。这允许内存调整器根据工作负载需求变化动态地调整此参数控制的内存区大小。如果不是自动,需要设置相对大一些;DB2默认是行锁,每个行锁大约占64或128个字节(64位数据库),计算锁定列表内存的大小公式是: ( 每个应用程序的平均锁定数目的估计值 * 每个锁定所需的字节数(128或64) * maxappls(或者max_coordagents) /4096 ) * 120%,这里只是建议公式,实际情况还要视操作系统实际的内存量来定。
MAXLOCKS 升级前锁定列表的最大百分比,默认是22%(windows)或10%(unix),可以根据要求自行改动,计算公式是 2 * 100 / maxappls
DLCHKTIME 死锁检测时间间隔,默认是10000毫秒(10秒),可以根据要求自行改动,也可不动。增大此参数以降低检查死锁的频率,因此增加应用程序必须等待消除死锁的时间。 减小此参数会增大检查死锁的频率,从而减少应用程序必须等待死锁解决的时间,但是会增加数据库管理器检查死锁所花的时间。
LOCKTIMEOUT 锁等待时间,默认是 -1,也就是永远等待,请改成固定的值,在事务处理(OLTP)环境中,可以使用 30 秒的初始启动值。在一个只查询的环境中,您可以从一个较高的值开始。
LOGFILSIZ 日志文件大小,此参数定义每个主日志文件和辅助日志文件的大小。如果数据库要运行大量更新、删除或插入事务,而这将导致日志文件很快变满,则应增大日志文件,了解您的并发应用程序的日志记录需求,来确定一个不会分配过量而浪费空间的日志文件大小。
LOGPRIMARY 主日志文件数,了解您的并发应用程序的日志记录需求,适当增大日志文件数。
注意: 在更新参数时,需要注意有些参数在更改后需要重新启动数据库DB2实例才可以生效;有些参数需要断开当前所有的应用程序,重新链接才能生效;有些参数可以立即生效,使用者请参考相关文档,注意参数生效特性。
2. 应用程序设计
-程序尽量短小精悍
-程序尽量晚地访问关键资源
-程序尽可能快地提交工作
-程序尽可能快地关闭游标
-建立合适索引
3. 性能测试
要根据将来实际的并发用户数和数据量进行测试
上线之后维护时我们要做的几件事情
1. 做好定期维护
通过使用如下命令进行维护:
-reorg表和索引定期重组
-runstats表和索引的统计信息定期更新
-rebind 程序包定期重新编译
7. DB2 死锁怎么测试 具体的测试方法是什么
你要模拟一个 DB2 的死锁?
那么首先, 先创建一个测试表
CREATE TABLE test_main (
id INT NOT NULL,
value VARCHAR(10),
PRIMARY KEY(id)
);
和测试数据...
开2个 DB2 的命令行窗口
会话1:
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
5 Five-5
3 THREE-5
4 条记录已选择。
db2 => UPDATE test_main SET value='Two-5' WHERE id=2@
DB20000I SQL 命令成功完成。
会话2:
db2 => UPDATE test_main SET value='THREE' WHERE id=3@
DB20000I SQL 命令成功完成。
会话1:
db2 => UPDATE test_main SET value='THREE-55' WHERE id=3@
由于 id=3 的行,已经被会话2修改,并锁定,因此会话1当前进入等待状态。
会话2:
db2 => UPDATE test_main SET value='Two-2' WHERE id=2@
由于 id=2 的行,已经被会话1修改,并锁定,因此会话2当前进入等待状态。
等待一段时间后
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0911N 因为死锁或超时,所以当前事务已回滚。原因码为 "2"。 SQLSTATE=40001
db2 =>
会话1
DB20000I SQL 命令成功完成。
db2 =>
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 Two-5
5 Five-5
3 THREE-55
4 条记录已选择。
会话2:
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
5 Five-5
3 THREE-5
4 条记录已选择。
显示会话二的更新已丢失。
8. 如何解锁DB2中被锁定的表
1 表处于“检查暂挂”状态。未强制表的完整性并且表的内容可能是无效的
。如果从属表处于检查暂挂状态,则对于未处于检查暂挂的父表或基础表的
操作也可能接收到此错误。
2 表处于“无数据移动”状态。当处于此状态时,禁止导致数据移动的操作
。数据移动操作包括 REDISTRIBUTE、
分区键的更新、多维群集键的更新和 REORG TABLE。
3 表处于“装入暂挂”状态。对此表的先前的 LOAD
尝试失败。在重新启动或终止 LOAD 操作之前不允许对表进行存取。
4 表处于“只读”状态。此状态可以在联机装入(LOAD)处理(带有 READ
ACCESS 选项的 LOAD
INSERT)期间发生,或在联机装入(LOAD)操作后发生,除了在使用 SET
INTEGRITY 语句在表的新追加的部分验证所有约束之前。不允许对此表的更
新活动。
5 表处于“正在装入”状态。LOAD 实用程序当前对此表进行操作,直到
LOAD 完成才允许存取。
6 不能在 ESE 中刷新引用昵称的具体查询表。
用户响应:
1 对表 "<表名>" 执行带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY
语句,以消除表的“检查暂挂”状态。对于用户维护的具体查询表,执行带
有 IMMEDIATE UNCHECKED 选项的语句,而不是带 IMMEDIATE CHECKED
选项。
2 对表 "<表名>" 的从属立即具体查询表和分级表执行 REFRESH TABLE
语句。可以通过先前 LOAD INSERT 操作根据 "<表名>"
的追加数据以增量方式维护这些从属立即具体化查询表和分级表的内容。
3 通过分别发出带有 RESTART 或 TERMINATER 选项的 LOAD
来重新启动或终止先前失败的对此表的 LOAD 操作。
4 发出 LOAD QUERY 命令以检查该表是否正在装入。如果是,则一直等到
LOAD 实用程序完成,或如有必要,重新启动或终止先前失败的“装入”操作
。如果“装入”当前未在进行,则发出带有 IMMEDIATE CHECKED 选项的
SET INTEGRITY 命令以验证表的新装入部分中的约束。
5 一直等到当前 LOAD 操作完成。可用使用 LOAD QUERY
命令来监视装入的进度。
6 使用 MAINTAIN BY USER
选项定义具体查询表。然后,使用带有子查询的 INSERT
语句填充具体查询表。
9. 如何查询db2数据库表是否被锁
1、首先点击桌面上的SQL server数据库。