专栏首页从ORACLE起航,领略精彩的IT技术。记录一则ORA-00054,ORA-00031解决过程

记录一则ORA-00054,ORA-00031解决过程

生产环境:AIX 5.3 + Oracle 10.2.0.5

任务要求:普通表改造分区表,历史数据不要

这个需求很简单:

pl/sql导出建表语句,依次修改成分区的建表语句,注意将索引修改成本地索引;

drop 原表;

create 新分区表.

1.重建过程中遇到问题:删除某表时报错ORA-00054,导致无法删除重建此表。

SQL> drop table MOD_RESALT_PERF_CARR_1X_ZTE;
create table MOD_RESALT_PERF_CARR_1X_ZTE(……)partition by ……(……);
create unique index …… on MOD_RESALT_PERF_CARR_1X_ZTE(……) local tablespace …… compress;

ORA-00054: resource busy and acquire with NOWAIT specified
ORA-00955: name is already used by an existing object
ORA-14016: underlying table of a LOCAL partitioned index must be partitioned

2.查询造成此表锁定的会话。

SQL>
SQL> select t2.username , t2.sid, t2.serial#, t2.logon_time, t2.MACHINE, t2.PROGRAM
  from v$locked_object t1, v$session t2
where t1.SESSION_ID=t2.SID and t1.object_id =
       (select object_id
          from user_objects
         where object_name = 'MOD_RESALT_PERF_CARR_1X_ZTE');

USERNAME                              SID    SERIAL# LOGON_TIME  MACHINE                                                          PROGRAM
------------------------------ ---------- ---------- ----------- ---------------------------------------------------------------- ------------------------------------------------
FJCRNOP                               596      39243 2014-5-27 1 fjcol8                                                           JDBC Thin Client

3.查出的结果与现场开发维护人员确认,可以强制杀掉,但Oracle中kill session遭遇ORA-00031。

SQL> alter system kill session '596,39243';

alter system kill session '596,39243'

ORA-00031: session marked for kill

此状态下,若drop 此表仍然会报错ORA-00054。

4.确定session对应的系统进程号SPID。

SQL> select a.spid,b.sid,b.serial#,b.username 
from v$process a,v$session b 
where a.addr=b.paddr and b.status='KILLED';

SPID                SID    SERIAL# USERNAME
------------ ---------- ---------- ------------------------------
282882              596      39243 FJCRNOP

SQL>
SQL> select spid, osuser, s.program 
from v$session s,v$process p 
where s.paddr=p.addr and s.sid=596;

SPID         OSUSER                         PROGRAM
------------ ------------------------------ ------------------------------------------------
282882       fjcrnop                        JDBC Thin Client

5.在数据库服务器上kill查出的系统进程:

oracle@cwwydb2$uname -a
AIX cwwydb2 3 5 00C445A54C00
oracle@cwwydb2$id
uid=500(oracle) gid=203(oinstall) groups=204(dba)
oracle@cwwydb2$ps -ef|grep 282882
  oracle  282882       1   2 13:08:01      -  4:12 oraclecwwydb2 (LOCAL=NO)
  oracle 1274428  705422   0 17:16:07  pts/1  0:00 grep 282882
oracle@cwwydb2$kill 282882
oracle@cwwydb2$ps -ef|grep 282882
  oracle  282882       1   2 13:08:01      -  4:12 oraclecwwydb2 (LOCAL=NO)
  oracle  790910  705422   0 17:17:00  pts/1  0:00 grep 282882
oracle@cwwydb2$kill -9 282882
oracle@cwwydb2$ps -ef|grep 282882
  oracle  282892  705422   0 17:17:17  pts/1  0:00 grep 282882 

这里可以看到,kill没有杀掉进程,kill -9成功杀掉进程。

此时在数据库中可以看到,v$session视图下状态为killed的进程已经没有了。

SQL> select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status='KILLED';

SPID                SID    SERIAL# USERNAME
------------ ---------- ---------- ------------------------------

6.再次运行删除表的脚本,成功执行,没有再报错。

SQL> @D:\jingyu\partitiontables\mod_resalt_perf_carr_1x_zte.tab

Table dropped

Table created

Index created

Index created

Index created

SQL>

7.总结:遭遇ORA-00054可以找到造成锁定的会话,确认会话可以终止后,先在Oracle中kill session,如果kill session遭遇ORA-00031,又需要立马清理,可以找到对应的系统进程在系统层面kill掉此进程。

------------------------------------------------------------------------------------

免责声明:为保证商业安全,本案例涉及的相关IP地址和名称已做特殊处理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • oracle的特殊权限s bit丢失

    在SUN Cluster搭建过程中,主机工程师在配置集群资源组时报一个oracle的文件权限错误; 协助排查,发现报错很明确,直接指出说oracle的s bi...

    Alfred Zhao
  • ORACLE 11gR2 DG(Physical Standby)日常维护

    1.3.2 备库切换到open状态,启用Real-time query A physical standby database instance cannot...

    Alfred Zhao
  • Oracle 11.2.0.4 RAC安装最新PSU补丁

    环境:两节点RAC(RHEL 6.4 + GI 11.2.0.4 + Oracle 11.2.0.4) 需求:安装最新PSU补丁11.2.0.4.7

    Alfred Zhao
  • activitemq整合spring

    Dream城堡
  • 还在用Executors创建线程池?小心内存溢出

    线程池不建议使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风...

    全菜工程师小辉
  • Linux 文本编辑器vi命令

    1、Vim   Vim  是一个功能强大的全屏幕文本编辑器,是 Linux/UNIX 上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。   Vim 没...

    IT可乐
  • 吴师兄导读:如何快速入门数据结构和算法

    吴师兄导读:有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法,给同学们带来一堂...

    五分钟学算法
  • 10分钟教你用Python玩转微信之好友性别比例统计分析

    想必,微信对于大家来说,是再熟悉不过的了。那么,大家想不想探索一下微信上的各种奥秘呢?今天,我们一起来简单分析一下微信上的好友性别比例吧~废话不多说,开始干活。

    用户1621951
  • python3类型转换集合

    支持转换为 int 类型的,仅有 float、str、bytes,其他类型均不支持。

    py3study
  • 深入内核:Oracle数据库里SELECT操作Hang解析

    崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 编辑手记:感谢崔华授权我们独家转载其精品文章,也欢迎大家向“Oracl...

    数据和云

扫码关注云+社区

领取腾讯云代金券