2011-08-24 198 views
0

我想知道我的文件是否在数据库中加载完成。sqlldr返回码 - ex_warn

如果您检查返回码here,您可以看到1和3是失败的。

EX_SUCC 0 
EX_FAIL 1 
EX_WARN 2 
EX_FTL 3 

EX_WARN(返回代码2)包括此情况下:

All or some rows rejected EX_WARN 

All or some rows discarded EX_WARN 

Discontinued load EX_WARN 

现在,在第一和第二是可管理的。

对于第三我必须在文档中搜索。 如果您阅读this,您可以看到“停产的负载”包括“致命错误”,“CTRL-C”和“空间错误”。 在这种情况下,我可能会得到没有记录或某些记录被拒绝,EX_WARN返回代码以及数据库中未完成加载的文件。

如果没有记录被拒绝很简单:这是一个不连续的负载。我必须以错误退出。 但是当我有一些记录被拒绝时,我不确定我的文件是否完全加载到数据库中。 (有些行被拒绝是我可以接受的。) 对不对?

如果是的话,有什么解决办法? 如何知道整个表是否已加载到数据库中?

+1

这里有问题吗?似乎更像是一场咆哮。 – tvanfosson

+0

我发布这个,因为我错了一个很好的机会。可能我误解了一些东西。 –

+0

“如果SQL * Loader返回零以外的任何退出代码,则应该查阅系统日志文件和SQL * Loader日志文件以获取更详细的诊断信息。” – tvanfosson

回答

2

您可能会遇到这样的情况:SQL Loader插入(并提交)了某些数据文件的行但未能到达该文件的末尾(即在失败点之后可能有更多的记录会以其他方式成功)。

我想通过SQL Loader选择外部表,使用INSERT INTO dest_table ... SELECT * FROM external_table。这将是一个原子操作,如果回滚没有足够的撤销(因为您没有使用中间提交),它会失败(通常很小)。

我还会尽量减少外部表/ SQL Loader层中拒绝的可能性,方法是将所有内容视为通用文本,直到将其加载到数据库中。然后我会应用该结构并使用DML错误日志记录来处理任何不规则的事情。这样,您可以清楚地访问被拒绝的数据以及数据库中拒绝的原因。

0

看起来我是对的。 我算不算很好地解决了亚历克斯·普尔评论,加里的解决方案(也recomended由汤姆·凯特),我发现在ecuation另一个伎俩我coleagues:

要看跌期权(行= 100000000) - 超过输入数据可以有 - 和常规负载。 (我们将只有一个提交或没有) 有了这个,我们知道,如果是加载的东西,加载的一切。