Oracle外部表 - 指定动态文件名

时间:2012-01-31 13:11:32

标签: database oracle logging plsql oracle10g

CREATE TABLE LOG_FILES (
        LOG_DTM VARCHAR(18),
    LOG_TXT VARCHAR(300)
   )
 ORGANIZATION EXTERNAL(
   TYPE ORACLE_LOADER
   DEFAULT DIRECTORY LOG_DIR
   ACCESS PARAMETERS(
      RECORDS  DELIMITED BY NEWLINE
      FIELDS(
        LOG_DTM position(1:18),
        LOG_TXT position(19:300)
      )
   )
   LOCATION('logadm'))
)
REJECT LIMIT UNLIMITED
/

LOG_DIR是一个指向/u/logs/

的oracle目录

但问题是/u/logs/的内容看起来像这样

logadm_12012012.log
logadm_13012012.log
logadm_14012012.log
logadm_15012012.log

有没有办法可以动态指定文件的位置?即每次运行Select * from LOG_FILES时,它都应该使用当天的日志文件。 (例如log_adm_DDMMYYYYY)。

我知道我可以使用alter table log_files location ('logadm_15012012.log')但我不想发出alter命令。

还有其他可能性吗?

由于

1 个答案:

答案 0 :(得分:6)

你跑10g真是太遗憾了。在11g上,我们可以将预处理器脚本(shell脚本)与外部表相关联。在您的情况下,您可以运行一个脚本,该脚本将找出最新文件,然后发出复制命令。类似的东西:

 cp logadm_15012012.log logadm

Adrian Billington在博客上发表了关于this feature here的文章。坦率地说,他的写作比the official docs更有帮助。

但是,当您使用10g时,您可以执行的是运行ALTER TABLE语句,或使用预定作业(cron或其他)来同步新文件与通用名称。