如何在ORACLE SQL上查看来自.GZ文件格式的数据? 解释我的状况和我正在思考的问题

如何在ORACLE SQL上查看来自.GZ文件格式的数据? 解释我的状况和我正在思考的问题,sql,linux,oracle,unix,Sql,Linux,Oracle,Unix,我觉得这有点太复杂了,可能是因为我对这次活动和LINUX世界还不熟悉 所以我现在在我的PC(Windows7)上,然后我需要创建一个基于sql的报告站点,但我需要的数据还不在oracle中 我需要在oracle sql中查看来自另一个控制器->另一台PC(UNIX)的许多文件的数据 该文件的格式最初是.gz,但实际上它的文件格式类似于machinedump.log.gz0505012(它的still.gz->inside是一个.log,但仍然是一个.txt内容) 注意:我连接的控制器/个人计算机

我觉得这有点太复杂了,可能是因为我对这次活动和LINUX世界还不熟悉

  • 所以我现在在我的PC(Windows7)上,然后我需要创建一个基于sql的报告站点,但我需要的数据还不在oracle中
  • 我需要在oracle sql中查看来自另一个控制器->另一台PC(UNIX)的许多文件的数据
  • 该文件的格式最初是.gz,但实际上它的文件格式类似于machinedump.log.gz0505012(它的still.gz->inside是一个.log,但仍然是一个.txt内容)
  • 注意:我连接的控制器/个人计算机有用户名、密码和端口号

    在每个.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.
    
    下面是我的问题需要的问题和帮助:
  • 我想问你们,将这些文件内容存储到单个表中的最佳方式是什么? 从那些.LOG.GZ文件到单个表

  • 关于第一个问题,基于“日期”自动获取数据是否太可能? 也就是说,如果有一个文件与当前日期匹配,它将执行这些数据并将其保存到所需的表中

  • 你们有没有办法教我怎么做

  • 另外,伙计们,这里有什么我必须深入研究的吗

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

    主持人
    是否可以删除我以前失败的问题?谢谢…

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

    但首先:

    你需要把这些信息放在表格里吗?读一次就够了吗?因为像Oracle这样的关系数据库并不最适合存储机器日志。有很多免费的(或免费的)文档数据库可能更适合MongoDB、Cassandra等,也有Splunk专门用于此目的

    无论如何,读取数据库中文件的第一种方法是在文件上构建一个外部表。这与常规表类似,只是数据位于操作系统文件而不是表空间中。在11gR2中,Oracle引入了
    预处理器
    子句,它允许我们将shell脚本与表相关联,该表在SELECT语句执行之前运行。这在您的情况下尤其重要,因为您可以使用预处理器脚本解压缩文件

    因此,基本工作流程是:

  • 在一个目录中定位GZ文件的脚本,将其解压为具有标准名称的文件
  • 一个外部表,它从标准名称文件中读取,并将该脚本作为其预处理脚本
  • INSERT语句,从外部表中选择并写入目标表
  • 更精确的版本需要比您提供的更多关于业务规则的详细信息,但您应该能够自己解决它

    了解有关外部表的更多信息


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

    为什么要重复这个已经结束的问题?我修好了。这是一个混乱的问题,最后被关闭。好吧,这个问题有着完全相同的无意义的内容。我还是不明白你的问题是什么。我甚至修正了上一个问题。它是经过编辑的。但是关闭了,所以我做了一个新的。通常,日志以压缩的形式存档以节省空间,并使用正则表达式模式或其他文本匹配条件的工具进行扫描。然后,可以将此类扫描的汇总结果存储在数据库中。