sqlldr 在第一次提交后损坏了我的主键

发布于 2024-07-18 04:06:01 字数 514 浏览 6 评论 0原文

在我的 ctl 文件中第一次提交后,Sqlldr 正在损坏我的主键索引。 第一个之后,无论我在控制文件中将行值设置为什么,我都会得到:

ORA-39776: fatal Direct Path API error loading table PE_OWNER.CLINICAL_CODE
ORA-01502: index 'PE_OWNER.CODE_PK' or partition of such index is in unusable state
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.

我正在使用 Oracle 数据库和客户端 11.1.0.6.0。

我知道问题不是由于重复的行造成的,因为如果我将 rows 指令设置为一个很大的值,则在 sqlldr 对整个文件进行一次提交后索引不会损坏。 这为我提供了一种解决方法,但仍然有点令人担忧......

感谢任何人都可以提供的任何指导。

Sqlldr is corrupting my primary key index after the first commit in my ctl file. After the first, no matter what I set the rows value to in my control file, I get:

ORA-39776: fatal Direct Path API error loading table PE_OWNER.CLINICAL_CODE
ORA-01502: index 'PE_OWNER.CODE_PK' or partition of such index is in unusable state
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.

I'm using Oracle database and client 11.1.0.6.0.

I know the issue is not due to duplicate rows because if I set the rows directive to a huge value, the index is not corrupt after sqlldr does a single commit for the entire file. This provides me with a workaround, but it's still a little alarming...

Thanks for any guidance anyone can give.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我偏爱纯白色 2024-07-25 04:06:01

我在生产表上很少使用 SQL*Loader,但根据我的阅读,您需要使用常规加载。

来自 SQL*Loader 文档

何时使用传统路径加载

如果加载速度最重要
你,你应该使用直接路径加载
因为它比传统的更快
路径负载。 然而,某些
对直接路径加载的限制可能
要求您使用常规路径
加载。 你应该使用传统的
以下情况下的路径加载:

* 当与加载同时访问索引表时,或者当 
    对非索引表同时应用插入或更新 
    加载 
  

要使用直接路径加载(并行加载除外),
SQL*Loader 必须具有独占写入
访问表和独占
对任何索引的读/写访问权限。

I don't use SQL*Loader much on production tables, but from what I've read, you need to use conventional load.

from the SQL*Loader documentation

When to Use a Conventional Path Load

If load speed is most important to
you, you should use direct path load
because it is faster than conventional
path load. However, certain
restrictions on direct path loads may
require you to use a conventional path
load. You should use a conventional
path load in the following situations:

* When accessing an indexed table concurrently with the load, or when
  applying inserts or updates to a nonindexed table concurrently with the
  load

To use a direct path load (with the exception of parallel loads),
SQL*Loader must have exclusive write
access to the table and exclusive
read/write access to any indexes.

策马西风 2024-07-25 04:06:01

我认为问题在于 Oracle 没有时间重建相关表上的索引,因此我将批量提交大小增加到大于我导入的记录数。

这解决了问题。

I believe the issue was that Oracle did not have time to rebuild the indices on the table in question, so I increased the batch commit size to a number larger than the number of records I was importing.

That fixed the issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文