用客户端连接oracle数据库,需要插入数据到表中,如果表不存在,需要创建表和索引。由于是分布式的,可能会有多个线程和进程创建表和索引,插入数据。创建索引的时候 我的sql语句是 create index index_name on table(a) online nologging.但是还是有一定几率报ora00054错误,求大神指导下怎么修改?
------解决思路----------------------
ora00054不是锁吗? 看下有没有锁。
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
------解决思路----------------------
是因为创建冲突的话,存储过程中增加个异常处理就好,当出现该错误,认为是表/索引已经存在
创建表和索引都能出现高并发,有点不怎么靠谱啊
------解决思路----------------------
如果要是因为索引引起的busy,在创建索引之前应该先判断要创建的索引是否存在了。
如果非要创建对应的索引,那就需要把相关的session kill掉