记录一则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查出的系统进程:


[email protected]$uname -a
AIX cwwydb2 3 5 00C445A54C00
[email protected]$id
uid=500(oracle) gid=203(oinstall) groups=204(dba)
[email protected]$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
[email protected]$kill 282882
[email protected]$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
[email protected]$kill -9 282882
[email protected]$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掉此进程。

记录一则ORA-00054,ORA-00031解决过程,布布扣,bubuko.com

时间: 2024-10-11 18:15:29

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

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

1.事因: 执行shell测试时,shell中rm -rf $path/* 变量$path为空,结果执行的命令是rm -rf / 事发时及时ctrl+c中断,导致只有/bin /boot目录删除 2.造成后果 大部分/bin下的shell命令无法执行,例如ls mkdir chmod tar ssh login...也就是想ssh远程登录也不行了. 3.解决过程 1).好在我当前ssh会话没有关上,虽然新会话没有办法远程ssh,但只要现在这个会话不关闭那么就可以一直用着……………… 2).从集群

Oracle ORA 12541 报错解决过程

? ? ? ? Oracle 导入全库之后使用plsql登陆时报错 ? ? 版本12C版本2 ? ? ORA-12541:?TNS:?No?Listener ? ? ? ? ? ? 再oracle主机本地可以使用sqlplus 登陆,但是使用plsql无法登陆,报错如上. ? ? 首先考虑是防火墙问题,查看防火墙和selinux均为关闭状态 ? ? 然后查看监听状态 查看 监听状态的命令为首先使用oracle 用户登陆操作系统,命令lsnrctl 进入监听程序,关键status 查看监听状态 ?

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

排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http://my.oschina.net/feichexia/blog/196575 背景说明 发生问题的系统部署在Unix上,发生问题前已经跑了两周多了. 其中我用到了Hadoop源码中的CountingBloomFilter,并将其修改成了线程安全的实现(详情见:AdjustedCountingBloo

执行Hadoop job提示SequenceFile doesn't work with GzipCodec without native-hadoop code的解决过程记录

参照Hadoop.The.Definitive.Guide.4th的例子,执行SortDataPreprocessor作业时失败,输出的错误信息 SequenceFile doesn't work with GzipCodec without native-hadoop code! 根据提示初步猜测应该是没有加载到对应的库,怀疑是java的某个jar包没有加载到.根据提示搜索参考了一些解决方案,应该是hadoop native lib没有加载到,于是继续了解什么是hadoop native li

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

排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http://my.oschina.net/feichexia/blog/196575 背景说明 发生问题的系统部署在Unix上,发生问题前已经跑了两周多了. 其中我用到了Hadoop源码中的CountingBloomFilter,并将其修改成了线程安全的实现(详情见:AdjustedCountingBloo

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

起因 今天在本地提交了点代码,但到服务器上git pull的时候提示No space left on device,第一反应是猜想可能硬盘满了(很有可能是log导致的),不过想想又觉得不太可能,这台服务器上只部署了一个应用,查看项目占用空间也不大. 解决过程 1.作为一个linux菜鸟,第一时间百度查关于查看硬盘使用情况的命令 [[email protected] ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/hda1 20G   2.4G  18G 13%  /tmpf

(转)认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件

概述 在oracle安装目录$HOME/network/admin下,,经常看到sqlnet.ora tnsnames.ora listener.ora这三个文件,除了tnsnames.ora,其他两个文件详细的用途很多人都不太了解.sqlnet.ora 用在oracle client端,用于配置连接服务端oracle的相关参数. tnsnames.ora 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样.listener.ora 用在oracle

oracle11G 已开启监听,但远程连接依旧无监听解决过程

1.连接数据库显示无监听程序,首先查看服务器的oracle监听服务是否开启,服务名称:OracleOraDb11g_home1TNSListener(具体环境中可能不完全一样,但是认准TNSListener是没错的) 2.本地使用127.0.0.1可以连接,但使用本机IP则显示无监听,使用其他机器连接也是无监听,先排查一下防火墙问题 3.排查防火墙后依旧没有解决,那么问题根源所在:oracle的listener.ora文件 解决办法: listener.ora文件路径:F:\app\Admini

azure 云上 oracle11.2.0.4里dataguard归档日志传输 1034 问题详细解决过程

1,dataguard搭建好后,归档日志传输不过去 去查看master库上面的日志 tail –f /data/oracle/diag/rdbms/test_m1/powerdes/trace/alert_powerdes.log,显示信息如下: Sun May 08 00:34:17 2016 Error 1034 received logging on to the standby PING[ARC2]: Heartbeat failed to connect to standby 'tes