我学oracle不久,领导让我试试水平,把不停产生的日志文件导入到数据库中在进行分析,输出分析结果,那日志文件时如下这样的:2009-11-17 8:47:35 192.168.1.94 No
2009-11-17 8:47:36 192.168.1.142 No
2009-11-17 8:47:42 192.168.1.142 Ok
2009-11-17 8:47:50 192.168.1.94 Ok
2009-11-17 8:48:11 192.168.1.94 No
2009-11-17 8:48:17 192.168.1.94 Ok
2009-11-17 8:48:32 192.168.1.94 No
2009-11-17 8:48:38 192.168.1.94 Ok
2009-11-17 8:50:09 192.168.1.142 No
2009-11-17 8:50:15 192.168.1.142 Ok    数据量还是比较大的,总共好几万条吧,我是这样设计的:造一个外部表跟这个日志文件关联上,然后每次将新添加进的数据insert进另一个表中(例如logtable),前面两项可以合并为一个date数据类型。
    想问下每次insert是日志文件中新近进入的数据,那么就要每次得到logtable表中时间的max值了,看下数据就知道是按时间顺序排的,那么在logtable建一个索引是不是有助于得到这个max值呢,有没有更好的办法,其实max值就是logtable最后一条记录的时间值。
    另外,要分析每个ip地址的中断时间,就是从状态no到ok的时间间隔,然后输出每个ip在一条内的中断时间间隔,可以根据设定,例如选择中断了10秒以上的输出。logtable跟另外一个记录ip地址信息的表外键相连,我有个笨办法一条条的分析每个ip地址在一天时间内的中断时间,但不知道有没有更好的办法,我想这么笨办法会不会数据量大了很慢。
    一个题外的,我尽量的在oracle中把该做的部分做了,建立触发器,存储过程,索引等,vc直接调用就好,但我想用一个初始化过程将例如建立用户,建表,建触发器、存储过程、索引等全解决了,不用手动去oracle里用pl/sql写了,这也是想做的更好些,这块以前没涉及过不知道可不可行。
  

解决方案 »

  1.   

    sqlload比外部表好用么,需要随时得到日志文件里更新的数据的,就是软件有个按钮有个“读取”按钮就把日志文件中新的内容读到oracle中,我 觉得用外部表实时是跟日志文件保持一致的
      

  2.   

    我建了一个外部表
    create table logtable_ext(
    logdate    varchar2(20),
    logtime    varchar2(20),
    ip         varchar2(20),
    status     varchar2(5)
    )
    organization external(
    type oracle_loader
    default directory loganalyse_dir
    access parameters(fields terminated by ' ')
    location('log.txt')
    )
    reject limit unlimited怎么总是第一条记录第一列第一个字符乱码呢,上面的数据显示如下:LOGDATE              LOGTIME              IP                   STATUS
    -------------------- -------------------- -------------------- ------
    锘?009-11-17         8:47:35              192.168.1.94         No
    2009-11-17           8:47:36              192.168.1.142        No
    2009-11-17           8:47:42              192.168.1.142        Ok
    2009-11-17           8:47:50              192.168.1.94         Ok
    2009-11-17           8:48:11              192.168.1.94         No
    2009-11-17           8:48:17              192.168.1.94         Ok
    2009-11-17           8:48:32              192.168.1.94         No
    2009-11-17           8:48:38              192.168.1.94         Ok
    2009-11-17           8:50:09              192.168.1.142        No
    2009-11-17           8:50:15              192.168.1.142        Ok总是那个乱码,怎么回事呢
      

  3.   

    我新建了一个txt文件,把上述内容拷进去,再查询发现乱码没有了,怎么回事啊