我使用Oracle钱包连接Logstash有问题。我得到一个无效的登录名/密码,即使我试图通过钱包连接,没有使用该登录名/密码。
[ERROR][logstash.inputs.jdbc ] Unable to connect to database. Tried 2 times {:error_message=>"Java::JavaSql::SQLException: ORA-01017 Invalid Username/Password"}
我的Logstash jdbc输入文件:
input {
jdbc {
jdbc_driver_library => "${ORACLE_HOME}/dmu/jlib/ojdbc10.jar,${ORACLE_HOME}/ucp/lib/ucp.jar,${ORACLE_HOME}/jlib/oraclepki.jar,${ORACLE_HOME}/jlib/osdt_cert.jar,${ORACLE_HOME}/jlib/osdt_core.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_connection_string => "jdbc:oracle:thin:/@name_high?TNS_ADMIN=${ORACLE_HOME}/network/admin/wallet"
jdbc_user => ""
schedule => "* * * * * *"
statement => "SELECT * from table"
connection_retry_attempts => 2
connection_retry_attempts_wait_time => 5
jdbc_pool_timeout => 20
jdbc_validation_timeout => 600
}
}
所以我使用以下驱动程序:
ojdbc10.jar
ucp.jar
oraclepki.jar
osdt_cert.jar
osdt_core.jar
我确保每个环境变量路径都是正确的,每个访问权限都正确设置。
我相信连接字符串语法是正确的,因为它确实找到了tnsnames。Ora,并尝试连接到正确的主机、端口、sid。
我省略了jdbc输入中的字段jdbc_password,因为它不是必需的,我不希望jdbc认为我想使用它。我留下了jdbc_user字段,但空的,因为它显然是必需的,即使我试图不使用它。
我可以使用sqlplus连接到数据库,如下所示:
sqlplus /@name_high
所以我缺少的是java属性wallet_location,它在我的情况下附加到与TNS_ADMIN相同的路径。
当启动Logstash时,它需要由启动JRE的脚本加载:
-Doracle.net.wallet_location = $ {WALLET_PATH}
您可以参考博客了解不同版本驱动程序的步骤。此外,您可以参考博客了解设置连接属性的不同方法。