生产环境:AIX 5.3 + Oracle 10.2.0.5
任务要求:普通表改造分区表,历史数据不要
 
这个需求很简单:
pl/sql导出建表语句,依次修改成分区的建表语句,注意将索引修改成本地索引;
drop 原表;
create 新分区表.
 
1.重建过程中遇到问题:删除某表时报错ORA-00054,导致无法删除重建此表。
  1. SQL> drop table MOD_RESALT_PERF_CARR_1X_ZTE;
  2. create table MOD_RESALT_PERF_CARR_1X_ZTE(……)partition by ……(……);
  3. create unique index …… on MOD_RESALT_PERF_CARR_1X_ZTE(……) local tablespace …… compress;
  4.  
  5. ORA-00054: resource busy and acquire with NOWAIT specified
  6. ORA-00955: name is already used by an existing object
  7. ORA-14016: underlying table of a LOCAL partitioned index must be partitioned
 
2.查询造成此表锁定的会话。
  1. SQL>
  2. SQL> select t2.username , t2.sid, t2.serial#, t2.logon_time, t2.MACHINE, t2.PROGRAM
  3. from v$locked_object t1, v$session t2
  4. where t1.SESSION_ID=t2.SID and t1.object_id =
  5. (select object_id
  6. from user_objects
  7. where object_name = 'MOD_RESALT_PERF_CARR_1X_ZTE');
  8.  
  9. USERNAME SID SERIAL# LOGON_TIME MACHINE PROGRAM
  10. ------------------------------ ---------- ---------- ----------- ---------------------------------------------------------------- ------------------------------------------------
  11. FJCRNOP 596 39243 2014-5-27 1 fjcol8 JDBC Thin Client
3.查出的结果与现场开发维护人员确认,可以强制杀掉,但Oracle中kill session遭遇ORA-00031。
  1. SQL> alter system kill session '596,39243';
  2.  
  3. alter system kill session '596,39243'
  4.  
  5. ORA-00031: session marked for kill

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

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

  1. SQL> select a.spid,b.sid,b.serial#,b.username
  2. from v$process a,v$session b
  3. where a.addr=b.paddr and b.status='KILLED';
  4.  
  5. SPID SID SERIAL# USERNAME
  6. ------------ ---------- ---------- ------------------------------
  7. 282882 596 39243 FJCRNOP
  8.  
  9. SQL>
  10. SQL> select spid, osuser, s.program
  11. from v$session s,v$process p
  12. where s.paddr=p.addr and s.sid=596;
  13.  
  14. SPID OSUSER PROGRAM
  15. ------------ ------------------------------ ------------------------------------------------
  16. 282882 fjcrnop JDBC Thin Client
5.在数据库服务器上kill查出的系统进程:
  1. oracle@cwwydb2$uname -a
  2. AIX cwwydb2 00C445A54C00
  3. oracle@cwwydb2$id
  4. uid=(oracle) gid=(oinstall) groups=(dba)
  5. oracle@cwwydb2$ps -ef|grep
  6. oracle :: - : oraclecwwydb2 (LOCAL=NO)
  7. oracle :: pts/ : grep
  8. oracle@cwwydb2$kill
  9. oracle@cwwydb2$ps -ef|grep
  10. oracle :: - : oraclecwwydb2 (LOCAL=NO)
  11. oracle :: pts/ : grep
  12. oracle@cwwydb2$kill -
  13. oracle@cwwydb2$ps -ef|grep
  14. oracle :: pts/ : grep
这里可以看到,kill没有杀掉进程,kill -9成功杀掉进程。
此时在数据库中可以看到,v$session视图下状态为killed的进程已经没有了。
  1. 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';
  2.  
  3. SPID SID SERIAL# USERNAME
  4. ------------ ---------- ---------- ------------------------------
 
6.再次运行删除表的脚本,成功执行,没有再报错。
  1. SQL> @D:\jingyu\partitiontables\mod_resalt_perf_carr_1x_zte.tab
  2.  
  3. Table dropped
  4.  
  5. Table created
  6.  
  7. Index created
  8.  
  9. Index created
  10.  
  11. Index created
  12.  
  13. SQL>
 
7.总结:遭遇ORA-00054可以找到造成锁定的会话,确认会话可以终止后,先在Oracle中kill session,如果kill session遭遇ORA-00031,又需要立马清理,可以找到对应的系统进程在系统层面kill掉此进程。
 
------------------------------------------------------------------------------------
免责声明:为保证商业安全,本案例涉及的相关IP地址和名称已做特殊处理。

记录一则ORA-00054,ORA-00031解决过程的更多相关文章

  1. 记录linux /bin被误删除的解决过程

    1.事因: 执行shell测试时,shell中rm -rf $path/* 变量$path为空,结果执行的命令是rm -rf / 事发时及时ctrl+c中断,导致只有/bin /boot目录删除 2. ...

  2. Oracle ORA 12541 报错解决过程

    Oracle 导入全库之后使用plsql登陆时报错 版本12C版本2 ORA-12541: TNS: No Listener 再oracle主机本地可以使用sqlplus 登陆,但是使用plsql无法 ...

  3. IIS发布网站 报错500.19 错误解决过程记录

    首先先报上我的环境 WindowsServer 2012 IIS 8.5 网站是FrameWork 4.0 发布网站后浏览,报错信息如下: 解决过程记录如下: 1.看到这个问题首先想到的是权限问题,设 ...

  4. 记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26

    记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26 今天一大早上班就接到客户的电话,说:SQLSERVER启动不起来,业务系统使用不了 于是我就使用QQ远程,帮 ...

  5. [转]线上GC故障解决过程记录

    排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http: ...

  6. 一次线上GC故障解决过程记录

    排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http: ...

  7. linux服务器报No space left on device错误的解决过程记录

    起因 今天在本地提交了点代码,但到服务器上git pull的时候提示No space left on device,第一反应是猜想可能硬盘满了(很有可能是log导致的),不过想想又觉得不太可能,这台服 ...

  8. 【故障处理】ORA-30012的解决过程

    [故障处理]ORA-30012的解决过程 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O ...

  9. listener.ora/sqlnet.ora/tnsnames.ora配置文件详解

    oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下. 英文说明: The ...

  10. oracle的listener.ora sqlnet.ora tnsnames.ora三个文件的关联性

    学习:http://www.cnblogs.com/william-lee/archive/2010/10/20/1856261.html 之前因为安装的是windows server 2008 r2 ...

随机推荐

  1. java-通过JDBC操作数据库

    一.加载驱动 这里我们用Class.forname();来加载驱动,用此语句会提示排除异常. Class.forName("com.mysql.jdbc.Driver"); 括号中 ...

  2. 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference AtomicReference无法解决上述问题的根 ...

  3. wampserver解决“不能切换在线”及运行“404问题”

    初次安装使用wampserver2.2,由于各个电脑安装的应用或是电脑型号不一样会出现以下问题: 1.安装后,不能出切换“服务器在线”或是“服务器离线” 2.设置站点后,运行编写好的代码出现404错误 ...

  4. Android中SQLite数据库小计

    2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...

  5. CYQ.Data V5 MDataTable 专属篇介绍

    前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分离和分布式 ...

  6. Nova PhoneGap框架 第五章 文件结构

    一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题. 合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加 ...

  7. 你所不知道的JavaScript数组

    相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们 ...

  8. ASP.NET MVC 从零开始 - Web.config

    这篇文章是从我的 github 博客 http://lxconan.github.io 导入的. 在上一篇中,我们从零开始创建了一个非常简单的 ASP.NET MVC 应用程序.接下来,你是不是期望我 ...

  9. JS实战 · 零碎笔记

    onclick:单击时触发事件 onmouseover:鼠标进入时触发事件 onmouseout:鼠标离开时触发事件   事件三要素:最基础的内容 事件源:有监听的HTML 标签,能响应事件的HTML ...

  10. C#设计模式-代理模式

    在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替 ...