如何在ORACLE SQL上查看来自.GZ文件格式的数据?

时间:2013-05-15 06:56:37

标签: sql linux oracle unix

我的条件和问题的解释

我觉得这有点太复杂了,也许是因为我对这个事件和LINUX世界都不熟悉。

  1. 所以我在我的电脑上(WINDOWS 7)然后我需要建立一个基于sql的报告站点,但我需要的数据还没有在oracle中。
  2. 我需要查看来自另一个控制器的许多文件的oracle sql中的数据 - >另一台PC(UNIX)。
  3. 文件的格式最初是.gz,但物理上它的FILE FORMAT就像这个machinedump.log.gz05052012(它仍然是.gz - >里面是.log但仍然是.txt内容)
  4. 注意:我连接的控制器/个人计算机有用户名,密码和端口号。

    在每个.log.gz数据中,它都有如下数据:

    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    0 
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    1
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    2
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    3
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    4 
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    5
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    6
    20120806_161944: 08.06 16:17:29.574 t_cm_03 C3011099140000 at_sts       =    7
    

    但是我看到了一个更大的问题: MACHINEDUMP.LOG.GZ文件很多像:

    machinedump.log.gz05052012
    machinedump.log.gz05062012
    machinedump.log.gz05072012
    machinedump.log.gz05082012
    etc.
    

    所以这里是问题和帮助我的问题:

    1. 我想问你们,将这些文件内容存储到单个表中的最佳方法是什么? 从那些.LOG.GZ文件到单个表?

    2. 关于第一个问题,是否有可能根据“日期”自动获取数据? 意思是如果有一个与当前日期匹配的文件,它会执行并将这些数据保存到所需的表中吗?

    3. 有没有办法让你们告诉我该怎么做?

    4. 另外,伙计们,我有什么必须深入学习的吗?

    5. 我需要使这些数据成为一个有用且可读的报告,使用至少SQL(oracle或有更好的方法)和NETBEANS来完成剩下的工作(我知道)。

      MODERATORS

      是否可以让我之前失败的问题删除?感谢...

1 个答案:

答案 0 :(得分:1)

您没有说明您使用的是哪个版本的Oracle。这很重要,因为Oracle在每次发布时都会为其库增加新的功能。以下解决方案适用于11.0.1.7(即11gR1的最后一个补丁版本)或更高版本;早期版本需要更多争论。

但首先:

你需要在表格中加入这些信息吗?只读一次就足够了吗?因为像Oracle这样的关系数据库不是最适合存储机器日志的。有很多免费(或免费)的文档DB可能更适合--MongoDB,Cassandra等。或者有Splunk就是为了那个。

无论如何,在数据库中读取文件的第一种方法是在文件上构建外部表。这就像一个规则表,除了数据在OS文件而不是表空间。在11gR2中,Oracle引入了preprocessor子句,它允许我们将shell脚本与在SELECT语句执行之前运行的表相关联。这在您的情况下特别相关,因为您可以使用预处理器脚本来解压缩文件。

所以基本的工作流程是:

  1. 将GZ文件定位在一个目录中的脚本,将其解压缩到具有标准名称的文件。
  2. 外部表格,它从标准名称文件中读取,并将该脚本作为其预处理脚本
  3. 从外部表中选择并写入目标表的INSERT语句
  4. 更精确的版本需要比您的业务规则更多的细节,但您应该能够自己解决。

    详细了解外部表in the documentation

    阅读Adrian Billington关于预处理脚本herehere的优秀文章。