生产环境: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 00C445A54C00
oracle@cwwydb2$id
uid=(oracle) gid=(oinstall) groups=(dba)
oracle@cwwydb2$ps -ef|grep
oracle :: - : oraclecwwydb2 (LOCAL=NO)
oracle :: pts/ : grep
oracle@cwwydb2$kill
oracle@cwwydb2$ps -ef|grep
oracle :: - : oraclecwwydb2 (LOCAL=NO)
oracle :: pts/ : grep
oracle@cwwydb2$kill -
oracle@cwwydb2$ps -ef|grep
oracle :: pts/ : grep
这里可以看到,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地址和名称已做特殊处理。

记录一则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. c++ 宏定义声明类,并在类中实现回调

    #include <iostream> #include <windows.h> #include <string> using namespace std; ty ...

  2. 常用的一些复杂SQL语句

    1.根据表中的birthday统计年龄段人数: //以下代码表示查询出来后的结果集添加一列字段 cast('20以下' as char) as age SELECT COUNT((DATE_FORMA ...

  3. sql编写将时间转换年月日 时分格式

    SELECT SUBSTRING(CONVERT(varchar(100),时间字段, 22),0,15) AS aa  FROM  表名

  4. 【实战Java高并发程序设计 5】让普通变量也享受原子操作

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  5. 分布式数据库中的Paxos 算法

    分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...

  6. ASP.NET Core 文件上传

    前言 上篇博文介绍了怎么样在 asp.net core 使用 Redis 和 Protobuf 进行 Session缓存.本篇的是开发过程中使用的一个小功能,怎么做单文件和多文件上传. 如果你觉得对你 ...

  7. .NET WEB程序员需要掌握的技能

    本来这个是我给我们公司入职的新人做一个参考,由于 @张善友 老师在他的微信号转了我的这篇文章<<.Net WEB 程序员需要掌握的技能>>,很多人觉得比较有用,说是看了后知道一 ...

  8. 不要对外公开泛型List成员

    最近在阅读Framework Design Guidelines,本着现学现用的原则,于是就用FxCop工具对代码进行规范性检查时,发现了很多问题,其中包括命名以及一些设计上的规范. 其中,Do no ...

  9. PC使用网线上网的条件下,通过PC的Wifi共享提供手机上网教程

    场景和目标 你有一个笔记本(或装有无线网卡的PC),可以通过网线上网,但是没有无线路由器.现在想要通过笔记本的无线网,让手机也能共享wifi上网. 环境 Win7 操作系统.带有无线网卡的PC或笔记本 ...

  10. C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!

      序     在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...