首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁。
你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把session kill掉了会影响业务的。
建议先查原因再做决定。
(1)锁表查询的代码有以下的形式:
select count() from v$locked_object;
select from v$locked_object;
(2)查看哪个表被锁
select bowner,bobject_name,asession_id,alocked_mode from v$locked_object a,dba_objects b where bobject_id = aobject_id;
(3)查看是哪个session引起的
select busername,bsid,bserial#,logon_time from v$locked_object a,v$session b where asession_id = bsid order by blogon_time;
(4)查看是哪个sql引起的
select busername,bsid,bserial#,c from v$locked_object a,v$session b,v$sql c where asession_id = bsid
and bSQL_ID = csql_id and csql_id = ''
order by blogon_time;
(5)杀掉对应进程
执行命令:alter system kill session'1025,41';
其中1025为sid,41为serial#
oracle没有锁不能建立索引,oracle中添加索引的时候加入online
在线方式创建索引,即使用online创建索引:CREATE INDEX 索引名 ON 表名(列名) online;
在线方式创建索引,锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML *** 作,创建索引的速度慢一些
非在线方式创建索引,锁表,优先创建索引,此时DML都被阻塞,所以速度快。
MySQL56版本开始支持在线创建--Online DDL
ALTER TABLE table_name ADD INDEX , indea_name ,ALGORITHM=INPLACE,LOCK=NONE
ALGORITHM指定创建或删除索引得算法,有以下几类
在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就更难了,下面这叫查询语句可以查询出所以被锁的会话。如下:
SELECT snusername, mSID,snSERIAL#, mTYPE,
DECODE (mlmode,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl',
4, 'Share',
5, 'S/Row Excl',
6, 'Exclusive',
lmode, LTRIM (TO_CHAR (lmode, '990'))
) lmode,
DECODE (mrequest,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl',
4, 'Share',
5, 'S/Row Excl',
6, 'Exclusive',
request, LTRIM (TO_CHAR (mrequest, '990'))
) request,
mid1, mid2
FROM v$session sn, v$lock m
WHERE (snSID = mSID AND mrequest != 0) --存在锁请求,即被阻塞
OR ( snSID = mSID --不存在锁请求,但是锁定的对象被其他会话请求锁定
AND mrequest = 0
AND lmode != 4
AND (id1, id2) IN (
SELECT sid1, sid2
FROM v$lock s
WHERE request != 0 AND sid1 = mid1
AND sid2 = mid2)
)
ORDER BY id1, id2, mrequest;
通过以上查询知道了sid和 SERIAL#就可以开杀了
alter system kill session 'sid,SERIAL#';
希望对你有所帮助。我也是不太懂,是在网上了解的。努力学习ing~~~
sys 口令是在存放在口令文件中的,一般在数据库服务器上采用 *** 作系统验证。sys口令遗忘可以采用 手工重建口令文件方式。
重建命令:
orapwd file=$ORACLE_HOME/dbs/orapw{ORACLE_SID}ora passwd=
比如ORACLE_SID 是orcl,想设置sys口令 oracle
$ orapwd file=$ORACLE_HOME/dbs/orapworclora passwd=oracle
system用户口令修改可以通过sys( *** 作系统验证,不需要sys用户密码)进入到SQLPLUS修改。
$ sqlplus / as sysdba
SQL> alter user system identified by ;
以上就是关于oracle数据库锁表怎么解决全部的内容,包括:oracle数据库锁表怎么解决、oracle没有锁不能建立索引、oracle数据库实例被锁如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)