filter>jdbc_streaming>[Oracle] Delete Query return “[Warn] ORA-01002”

Hi. Nice to meet you.

I try to make logstash-pipeline which works like below.
(1)Input: JDBC plugin-Select data on Oracle DBMS
(2)Filter: JDBC_STREAMING plugin- Delete Data slected by input plugin results
(3)Output: display and send to out

For this, I made below pipeline configuration. This works well(Select then Delete), but logstash console show waring message which "ORA-01002" like below.

    [Warn] [logstash.pluginmixins.jdbcstreaming.normalstatementhandler][{pipeline name}][{uuid?}] Exception when executing JDBC query {:statement=> "DELETE FROM TABLE_NAME WHERE column1 =: col1  AND column2= :col2"} , :exception=>#<Sequel::DatabaseError:: Java::JavaSql::SQLException: ORA-01002: Fetch Out of sequence

Please anyone give advices about them
(1) Why this warning message showed
(2) Could I ignore this warning message for using.
(3) What are meaning of tags "_jdbcstreaming_failure", "_jdbcstreaming defaultsused" on output results.

Thank you read my question, and please help me ;(

P.S) My configuration and output is like this.

1.Pipeline configuration

input {
   Jdbc {
      Jdbc_driver_library => #driver file location
      Jdbc_driver_class => “Java::oracle.jdbc.driver.OracleDriver”
      jdbc_connection_string => :jdbc:oracle:~~~~”
      jdbc_user => “${User}”
      jdbc_password => “${PWD}”
      use_column_value => true
      tracking_column => “unix_ts_in_secs”
      tracking_column_type => “timestamp”
      last_run_metadata_path => #my_metadata_path
      schedule => “*/1 * * * * *”
      statement =>
            “SELECT unix_ts_in_secs, A, B FROM Table_Name
            WHERE unix_ts_in_secs > :sql_last_value AND unix_ts_in_secs < SYSTIMESTAMP  
            ORDER BY unix_ts_in_secs ASC”
      }
}
firlter{
    jdbc_streaming{
      Jdbc_driver_library => #driver file location
      Jdbc_driver_class => “Java::oracle.jdbc.driver.OracleDriver”
      jdbc_connection_string => :jdbc:oracle:~~~~”
      jdbc_user => “${User}”
      jdbc_password => “${PWD}”
      target => “delete_result”
      use_column_value => true
      statement =>
            “DELETE FROM Table_Name WHERE column1= :col1 AND column2= :col2”
      parameters => {
                  “col1” => “[A]”
                  “col2” => ”[B]”
            }
      }
}
output{
      stdout{
            codec => rubydebug
      }
}
  1. Output display sample
{
      “delete_result” => [
            [0] {}
      ],
      “A” => “a1”,
      “B” => “b1”
      “unix_ts_in_secs” => “timestampvalue”
      “$timestamp” => timestamp result value
      “tags” => [
            [0] “_jdbcstreamingfailure”,
            [1] “_jdbcstreamingdefaultsused”
      ]
}
{
      “delete_result” => [
            [0] {}
      ],
      “A” => “a2”,
      “B” => “b2”
      “unix_ts_in_secs” => “timestampvalue”
      “$timestamp” => timestamp result value
      “tags” => [
            [0] “_jdbcstreamingfailure”,
            [1] “_jdbcstreamingdefaultsused”
      ]
}

Hi.
I’m not sure... But I think I found above my questions reason.

JDBC and JDBC Filter Plugin,I think, are try to access jdbc result set result set and return data to logstash from it. But Delete/Update don't have result set unlike select query.

So In my opinion, Oracle makes error "ORA-01002" cause JDBC/JDBC_Filter plugins are try to access JDBC Result which is not exist.

For solving it, I made ruby source for using ruby filter. It's simple source and works for JDBC Delete/Update query without "ORA-01002".
If you have interest about it, please check below source.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.