oracle数据库锁表怎么解决

oracle数据库锁表怎么解决,第1张

首先你要知道表锁住了是不是正常锁?因为任何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数据库实例被锁如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9831231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存