Logstash jdbc_streaming插件>删除查询返回"[警告] ORA-01002"



很高兴见到你。

我尝试制作logstash管道,其工作原理如下。(1( 输入:使用JDBC插件从Oracle DBMS中选择数据(2( 过滤器:使用JDBC_STREAMING插件删除由输入插件结果选择的数据(3( 输出:显示并发送至

为此,我进行了管道配置。这很好(选择然后删除(,但logstash控制台显示警告消息";ORA-01002";如下所示。

[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

请任何人对他们提出建议(1( 为什么显示此警告信息?(2( 我可以忽略这个警告信息吗。(3( 标签的含义是什么_jdbcstreaming_failure"&quot_jdbcstreaming defaultsused";关于输出结果。

谢谢你阅读我的问题,请帮帮我;(

p.S(我的配置和输出是这样的。

1.管道配置

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
}
}

2.输出显示样本

{
“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”
]
}

我不确定。。。但我想我发现了上述问题的原因。

JDBC和JDBC过滤器插件,我认为,是试图访问JDBC结果集结果集,并从中返回数据到logstash。但是删除/更新不像选择查询那样有结果集。

所以在我看来,甲骨文犯了一个错误"ORA-01002";导致JDBC/JDBC_Filter插件试图访问不存在的JDBC Result。

为了解决这个问题,我制作了使用ruby过滤器的ruby源代码。它是一个简单的源代码,适用于JDBC删除/更新查询;ORA-01002";。如果您对此感兴趣,请查看以下来源。

https://github.com/zeraf29/JRuby_For_Logstash_Ruby_Filter/blob/main/sources/JdbcExecuteUpdate.rb

最新更新