导入数据时遇见ORA-00054

今天应开发人员要求对一个表进行导入。发现如下错误:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
ORA-00955: name is already used by an existing object
经过查看锁的使用情况,发现有开发人员对要导入的表进行dml操作。
下面模拟一下环境:、
session 1:
yang@rac1>update t set b=1 where a=4;
1 row updated.
导出数据:
oracle@rac1:rac1 /tmp/dump>impdp yang/yang directory=dumpdir  dumpfile=tm.dmp  tables=t  exclude=index
Import: Release 11.2.0.1.0 - Production on Fri Apr 1 23:41:48 2011
Data Mining and Real Application Testing options
Master table "YANG"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "YANG"."SYS_IMPORT_TABLE_01":  yang/******** directory=dumpdir dumpfile=tm.dmp tables=t exclude=index
Processing object type TABLE_EXPORT/TABLE/TABLE
ORA-39151: Table "YANG"."T" exists. All dependent metadata and data will be skipped due to table_exists_action of skip
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Job "YANG"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at 23:42:51
使用  table_exists_action=skip (默认值)时,没有报错。但是使用 table_exists_action=replace 是 要先对表进行drop,然后重建并导入。此时报错。
oracle@rac1:rac1 /tmp/dump>impdp yang/yang directory=dumpdir  dumpfile=tm.dmp table_exists_action=replace  tables=t  exclude=index
Import: Release 11.2.0.1.0 - Production on Fri Apr 1 23:45:00 2011
Master table "YANG"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "YANG"."SYS_IMPORT_TABLE_01":  yang/******** directory=dumpdir dumpfile=tm.dmp table_exists_action=replace tables=t exclude=index
Processing object type TABLE_EXPORT/TABLE/TABLE
ORA-39121: Table "YANG"."T" can't be replaced, data will be skipped. Failing error is:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
ORA-00955: name is already used by an existing object
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Job "YANG"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at 23:46:01

查看lock的使用情况:
yang@rac1>SELECT OBJECT_ID,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_NAME='T' AND WNER='YANG';
 OBJECT_ID OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
    130763 T
yang@rac1>@lock
lock                         lock                                                      blocked
address           session id type         id1       id2 lock mode  req mode      BLOCK   sessid
---------------- ----------- ------ --------- --------- --------- --------- ---------- --------
000000018B9B18E8         959 XR             4         0         1         0    2
000000018B9B22A8         385 RT             1         2         6         0    2
00002B79A83626F0           5 TM        130763         0         3         0    2  ====》该表上有tm锁
000000018B9B38C8        1344 AE           100         0         4         0    2
在对正在使用的数据库进行导入数据时(某个表)最后先确认是否正在使用。然后再导入。当然每个案例都有所不同,仁者见仁智者见智了。
好了,睡觉。。

时间: 2024-10-30 17:59:32

导入数据时遇见ORA-00054的相关文章

请问mysql导入数据时,文件名可以用正则表达吗?

问题描述 请问mysql导入数据时,文件名可以用正则表达吗? 我现在有很多iis产生的log文件,想要每天自动导入前一天的log日志到 mysql数据库,现在我只能通过load data local infile '/tmp/ex150801.log'手动导前一天的数据. 如果我要排job自动导出该怎么做? 解决方案 写一个程序定时去跑比较简单,而且灵活. 解决方案二: 用脚本等命令行去调用mysqlimport命令等去加载文件导入数据吧.LOAD DATA语法应该不支持正则

dmp-oracle往导入数据时需要的表空间变得很大导致导入中断

问题描述 oracle往导入数据时需要的表空间变得很大导致导入中断 50C 用的oracle11g,我用imp导入一个3g左右的dmp文件,导入用户和表空间都是新建的应该不存在大小不够的问题,我之前试着导入的时候需要的表空间一直增长到了80g左右把我的硬盘都装满了.不知道有没有什么解决方法望指点. 解决方案 http://www.2cto.com/database/201311/254231.html 解决方案二: http://blog.csdn.net/qq275394303/article

oracle 导入-oracle导入数据时遇到以下错误请大神们看看怎么回事

问题描述 oracle导入数据时遇到以下错误请大神们看看怎么回事 通过imp命令导入: . . importing partition "T_CMS_HB_PROCESS_LOG_3G":"PARTMAX" 1694 rows imported IMP-00017: following statement failed with ORACLE error 1917: "GRANT SELECT ON "T_CMS_HB_PROCESS_LOG_3

oracle 的 sqlldr 导入数据时

问题描述 oracle的sqlldr导入数据时,1.在java中调用Runtime.getRuntime().exec(sqlLoadSQL);时为什么不能立即入库.要停调tomcat服务后才能全部入库??并且日志文件中才生成数据??是不是sqlldr有什么参数控制啊??1.如果执行Runtime.getRuntime().exec(sqlLoadSQL)后:由于某些错误,不能全部入库只有几百条数据入库:这时我想回滚,该怎么做,,也就是事务处理....急丫..... 解决方案 解决方案二:2|你

:( 用多线程向Access中成批导入数据时,开始执行一段时间没问题,再后就保存失败了。

问题描述 用多线程向Access中成批导入数据时,开始执行一段时间没问题,再后就保存失败了.向Access中添加数据的语句没有错误,用SQL2K试过没有问题.得到在向获取Access添加数据时的错误为"未明确的错误".估计可能是添加数据时,Access成受不了了,所以才报错.但想想应该是有什么办法可以解决的.向Access添加数据的部分如下://保存数据到AccesspublicstringInfoSave(stringstrDBFile,string[]Info){try{strin

Mysql导入数据时-data truncated for column..

在导入Mysql数据库时,发现怎么也导入不进去数据,报错:查看表定义结构:可以看到comm 定义类型为double类型原来是因为数据库文件中: 7369    smith    clerk    7902    1981-03-12    800.00    NULL    20 7499    allen    salesman    7698    1982-03-12    1600.00    300.00    30 7521    ward    salesman    7698  

关于批量导入数据类SqlBulkCopy 导入数据时增加额外的列

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Data.SqlClient;usingSystem.Data;namespace样本采购订单{classProgram{staticvoidMain(string[]args){Stopwatchst=newStopwatch();st.Start();str

'BAPI_QUOTATION_CREATEFROMDATA2'导入数据时,订单数量为0

问题描述 *&---------------------------------------------------------------------**&ReportZSD_TEST*&*&---------------------------------------------------------------------**&*&*&------------------------------------------------------

asp.net线程批量导入数据时怎么通过ajax获取执行状态

前言 最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能. 通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用session里的执行状态,从而实现反馈导入状态的功能! 上代码: 前端页面    代码如下 复制代码 <!DOCTYPE html> <htmllang="en"> <head>  <metachars