避免在每次迭代中覆盖 .bad 文件

时间:2021-07-22 15:05:18

标签: oracle oracle11g sql-loader

我正在使用 sqlldr 通过使用控制文件 .ctl 加载数据。在每次迭代中,.bad 文件都会被截断,但我也想在 .bad 文件中保留旧的被拒绝记录。有什么办法可以避免每次迭代都出现空的 .bad 文件并保留旧的被拒绝记录?

谢谢

1 个答案:

答案 0 :(得分:3)

您可以在文件名中添加时间戳。在 linux 中,它看起来像这样:

sqlldr bad=badfile_$(date +%Y%m%d-%H%M%S)

因此,如果您在 2021 年 7 月 22 日的 10:29:43 运行 sqlldr,它将产生一个错误的文件名 'badfile_20210722_102943' 使用此格式代码为 'date',小时组件是 24 小时制,所以如果您在下午 3:45:27 运行它,文件名将是“badfile_20210722_154527”

在 Windows 中执行要复杂得多。我讨厌在 Windblows 中编写脚本的另一个原因。

echo off
rem First, get the locality-invariant datetime
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
echo datetime is %datetime%
set badfile_name=badfile_%datetime:~0,8%_%datetime:~8,6%.bad
echo badfile_name is %badfile_name%