本文目录一览:
查看oracle是否锁表
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容。 (1)锁表查询的代码有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪个表被锁
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪个session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
(4)杀掉对应进程 执行命令:
alter system kill session '1025,41';
其中1025为sid,41为serial#。
oracle 怎么查看数据被锁
- 创建测试表,如下图。
create table test_lock(id number,value varchar2(200));
- 执行append语句;并且不做提交,
insert /*+append*/ into test_lock values(1,1)
- 再次执行清表语句,
truncate table test_lock;
报锁表错误。 4. 查看锁表语句,发现被锁表
select b.object_name,t.*
from v$locked_object t,user_objects b
where t.object_id = b.object_id
注意事项:
- 简化数据: 可以将复杂的查询创建为其他人可以使用的视图,而不必了解复杂的业务或逻辑关系。这简化并掩盖了视图用户数据的复杂性。
- 表结构设计的补充: 在设计的系统才刚刚开始,大部分的程序直接访问数据表结构,但是随着业务的变化,系统更新,等等,引起了一些表结构不适用,这次修改系统的表结构太大,开发成本较高的影响。这个时候可以创建一个视图来补充表结构设计,降低开发成本。程序可以通过查询视图直接获得它想要的数据。
- 添加安全性: 视图可以向用户显示表中的指定字段,而不是向用户显示表中的所有字段。在实际开发中,视图通常作为提供数据的一种方式提供,并将只读权限提供给第三方以供查询使用。
怎么知道数据库表已经锁表了
可直接在mysql命令行执行:
show engine innodb status\G;
查看造成死锁的sql语句,分析索引情况,然后优化sql然后
show processlist;
show status like '%lock%';
show OPEN TABLES where In_use = 0; -- 这个语句记录当前锁表状态
另外可以打开慢查询日志,linux下打开需在my.cnf的[mysqld]里面加上以下内容:
slow_query_log=TRUE
slow_query_log_file=/usr/local/mysql/slow_query_log.txt
long_query_time=3
select * from v$locked_object;
可以获得被锁的对象的object_id及产生锁的会话sid。通过查询结果中的object_id,可以查询到具体被锁的对象。
扩展资料:
注意事项
也可以直接把这几个视图和表关联起来,在查询结果中直接得到alter system kill session 'sid, serial#'
这样的方便的kill sessoin命令。
如果执行kill session命令后,锁并没有除掉,session依然存在。这种情况,通过
select spid from v$process where addr in(select paddr from v$session where sid = sid)
查询到oracle会话在服务器上的pid,然后登陆到服务器上,执行
kill -9 pid
这样就能杀掉进程解锁了。
如何查询db2数据库表是否被锁
- 首先点击桌面上的SQL server数据库。
- 然后打开SQL server数据库,输入登录名,密码,点击连接。
- 接着点击左上角新建查询,选择master数据库。
- 先查看数据库被锁的表。
- 接着输入解锁进程,然后执行就可以进行数据库解锁了。