audit4j / audit4j-db

Audit4j Database Handler
http://audit4j.org/handler-db
Apache License 2.0
7 stars 15 forks source link

ORA-00942: table or view does not exist #18

Open johno1985 opened 6 years ago

johno1985 commented 6 years ago

Version 2.5.0 Oracle JDBC driver version 11.2.0.3.0 Database product version : Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

I am getting the following stack trace when trying to handle an audit event against an Oracle database

[7/25/18 12:13:18:079 PDT] 00000159 SystemErr     R Audit4j:WARN Handler Exception Occured in org.audit4j.handler.db.DatabaseAuditHandler:SQL Exception
[7/25/18 12:13:18:079 PDT] 00000159 SystemErr     R Audit4j:WARN Failed to submit audit event.
[7/25/18 12:13:18:080 PDT] 00000159 SystemErr     R org.audit4j.core.exception.HandlerException: SQL Exception
    at org.audit4j.handler.db.AuditLogDaoImpl.writeEvent(AuditLogDaoImpl.java:101)
    at org.audit4j.handler.db.DatabaseAuditHandler.handle(DatabaseAuditHandler.java:273)
    at org.audit4j.core.AuditEventProcessor.executeHandlers(AuditEventProcessor.java:73)
    at org.audit4j.core.AuditEventProcessor.process(AuditEventProcessor.java:57)
    at org.audit4j.core.io.AuditProcessOutputStream.write(AuditProcessOutputStream.java:57)
    at org.audit4j.core.io.AuditProcessOutputStream.write(AuditProcessOutputStream.java:32)
    at org.audit4j.core.io.AsyncAuditOutputStream$1.accept(AsyncAuditOutputStream.java:78)
    at org.audit4j.core.io.AsyncAuditOutputStream$1.accept(AsyncAuditOutputStream.java:75)
    at reactor.function.support.Boundary$1.accept(Boundary.java:67)
    at reactor.core.action.CallbackAction.doAccept(CallbackAction.java:36)
    at reactor.core.action.Action.accept(Action.java:52)
    at reactor.core.action.Action.accept(Action.java:32)
    at reactor.event.routing.ArgumentConvertingConsumerInvoker.invoke(ArgumentConvertingConsumerInvoker.java:73)
    at reactor.event.routing.ConsumerFilteringEventRouter.route(ConsumerFilteringEventRouter.java:78)
    at reactor.event.dispatch.AbstractLifecycleDispatcher.route(AbstractLifecycleDispatcher.java:64)
    at reactor.event.dispatch.AbstractSingleThreadDispatcher$SingleThreadTask.run(AbstractSingleThreadDispatcher.java:50)
    at reactor.event.dispatch.RingBufferDispatcher$3.onEvent(RingBufferDispatcher.java:115)
    at reactor.event.dispatch.RingBufferDispatcher$3.onEvent(RingBufferDispatcher.java:112)
    at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.lang.Thread.run(Thread.java:785)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376)
    at org.audit4j.handler.db.AuditLogDaoImpl.writeEvent(AuditLogDaoImpl.java:98)
    ... 21 more

When I checked the database, the table has not been created.

Audit4j config:

!Configuration
handlers:
- !org.audit4j.handler.db.DatabaseAuditHandler
    embedded: false
    separate: true
    default_table_name: activity_audit
    schema: affms_launch
    db_driver: oracle.jdbc.driver.OracleDriver
    db_url: jdbc:oracle:thin:@192.168.1.104:1521:orcl
    db_user: user1
    db_password: ***
layout:
  !org.audit4j.core.layout.SimpleLayout {}
metaData: !com.myorg.AuditData {}
johno1985 commented 6 years ago

I got around the above issue by creating the table manually, using the same DDL in AuditLogDaoImpl.class, but then got the following error:

Audit4j:WARN Handler Exception Occured in org.audit4j.handler.db.DatabaseAuditHandler:SQL Exception
Audit4j:WARN Failed to submit audit event.
org.audit4j.core.exception.HandlerException: SQL Exception
        at org.audit4j.handler.db.AuditLogDaoImpl.writeEvent(AuditLogDaoImpl.java:101)
        at org.audit4j.handler.db.DatabaseAuditHandler.handle(DatabaseAuditHandler.java:273)
        at org.audit4j.core.AuditEventProcessor.executeHandlers(AuditEventProcessor.java:73)
        at org.audit4j.core.AuditEventProcessor.process(AuditEventProcessor.java:57)
        at org.audit4j.core.io.AuditProcessOutputStream.write(AuditProcessOutputStream.java:57)
        at org.audit4j.core.io.AuditProcessOutputStream.write(AuditProcessOutputStream.java:32)
        at org.audit4j.core.io.AsyncAuditOutputStream$1.accept(AsyncAuditOutputStream.java:78)
        at org.audit4j.core.io.AsyncAuditOutputStream$1.accept(AsyncAuditOutputStream.java:75)
        at reactor.function.support.Boundary$1.accept(Boundary.java:67)
        at reactor.core.action.CallbackAction.doAccept(CallbackAction.java:36)
        at reactor.core.action.Action.accept(Action.java:52)
        at reactor.core.action.Action.accept(Action.java:32)
        at reactor.event.routing.ArgumentConvertingConsumerInvoker.invoke(ArgumentConvertingConsumerInvoker.java:73)
        at reactor.event.routing.ConsumerFilteringEventRouter.route(ConsumerFilteringEventRouter.java:78)
        at reactor.event.dispatch.AbstractLifecycleDispatcher.route(AbstractLifecycleDispatcher.java:64)
        at reactor.event.dispatch.AbstractSingleThreadDispatcher$SingleThreadTask.run(AbstractSingleThreadDispatcher.java:50)
        at reactor.event.dispatch.RingBufferDispatcher$3.onEvent(RingBufferDispatcher.java:115)
        at reactor.event.dispatch.RingBufferDispatcher$3.onEvent(RingBufferDispatcher.java:112)
        at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "ACTION": invalid identifier

        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
        at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376)
        at org.audit4j.handler.db.AuditLogDaoImpl.writeEvent(AuditLogDaoImpl.java:98)
        ... 21 more