我在加载大型数据文件(~ 10 gb)时得到 ORA-00054 当在前一个文件之后加载这个新文件时会发生错误。有什么想法可以解决这个问题吗?
4 回答
一种可能的情况。
这是直接路径负载吗?如果是这样,请检查 v$locked_object 视图,看看是否在加载过程中被某人锁定。
select dbao.object_name
from v$locked_object vlo,
dba_objects dbao
where vlo.object_id = dbao.object_id
and dbao.object_name = 'Table that you are trying to load...'
来自http://download.oracle.com/docs/cd/B10500_01/server.920/a96524/c21dlins.htm上的 Oracle 文档
使用 Direct-Path INSERT 的锁定注意事项
在直接路径插入期间,Oracle 获得表(或分区表的所有分区)上的排他锁。因此,用户无法对表执行任何并发插入、更新或删除操作,并且不允许并发索引创建和构建操作。但是,支持并发查询,但查询将仅返回插入操作之前的信息。
也许这与表空间数据文件大小、表大小有关,因为 ORA-00054 通常在运行 ALTER 语句时出现。
我不假装就在这里。
检查这些视图。
DBA_BLOCKERS – 显示持有锁的非等待会话正在等待
DBA_DDL_LOCKS – 显示所有持有或正在请求的 DDL 锁
DBA_DML_LOCKS - 显示所有持有或正在请求的 DML 锁
DBA_LOCK_INTERNAL – 为每个持有的锁或闩锁显示 1 行,或使用持有锁的用户名请求
DBA_LOCKS - 显示所有持有或被请求的锁或闩锁
DBA_WAITERS - 显示所有正在等待,但不持有等待锁的会话
您的表似乎被锁定:ORA-00054 这可能是因为 Oracle 驱动程序处理 BLOB 类型的方式(驱动程序锁定记录,打开流以写入二进制数据,并且需要“一些帮助”来释放记录)。我会尝试下一个序列:
- 加载第一个文件
- 犯罪;
- 加载第二个文件