我觉得这有点太复杂了,也许是因为我对这个事件和LINUX世界都不熟悉。
注意:我连接的控制器/个人计算机有用户名,密码和端口号。
在每个.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来完成剩下的工作(我知道)。
是否可以让我之前失败的问题删除?感谢...
答案 0 :(得分:1)
您没有说明您使用的是哪个版本的Oracle。这很重要,因为Oracle在每次发布时都会为其库增加新的功能。以下解决方案适用于11.0.1.7(即11gR1的最后一个补丁版本)或更高版本;早期版本需要更多争论。
但首先:
你需要在表格中加入这些信息吗?只读一次就足够了吗?因为像Oracle这样的关系数据库不是最适合存储机器日志的。有很多免费(或免费)的文档DB可能更适合--MongoDB,Cassandra等。或者有Splunk就是为了那个。
无论如何,在数据库中读取文件的第一种方法是在文件上构建外部表。这就像一个规则表,除了数据在OS文件而不是表空间。在11gR2中,Oracle引入了preprocessor
子句,它允许我们将shell脚本与在SELECT语句执行之前运行的表相关联。这在您的情况下特别相关,因为您可以使用预处理器脚本来解压缩文件。
所以基本的工作流程是:
更精确的版本需要比您的业务规则更多的细节,但您应该能够自己解决。
详细了解外部表in the documentation。