gpt4 book ai didi

java - 如何用java做oracle TNSPING?

转载 作者:行者123 更新时间:2023-11-30 08:51:13 28 4
gpt4 key购买 nike

我有数据库 TNSEntries 的详细信息。我需要用 Java 编写代码来检查 TNSPING。有办法吗?

示例 TNSENtry:

orcldb=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = myservice)
(INSTANCE_NAME = myinstance)
)
)

我已经使用 jdbc oracle 驱动程序完成了带有用户名和密码的 oracle 连接。这个 TNSPING 对我来说是新的,它没有用户名和密码。你能请任何人帮忙用 java 编写 TNSPING 代码吗?

最佳答案

TNSPING 仅验证到监听器进程的网络连接,您不需要传递用户名和密码。

正如@KonstantinV.Salikhov 所说,您可以编写如下工具,它将验证:

.- 到监听器进程的网络连接(如果监听器是 UP 或不像 TNSPING 那样)
.- 数据库服务是否启动(因为 TNSPING 将识别数据库服务名称)。

该工具不会使用用户名/密码,因为我们只需要登录失败事件来验证数据库已启动并正在运行。

Java 代码:

import java.sql.*;
import oracle.jdbc.pool.*;

public class ThinTnsnames {

static String sql = null;

public static void main(String[] args) {
String entry_name = args[0];
test(entry_name);
}

public static void test(String entry_name) {
Connection pconnection = null;
try {
String l_url = "jdbc:oracle:thin:@" + entry_name;
System.out.println( "Connection string = " + l_url );

OracleDataSource ods = new OracleDataSource();
ods.setURL(l_url);
pconnection = ods.getConnection ();
}
catch(SQLException e) {
int errorCode = e.getErrorCode() ;
System.err.println("Error Code: " + errorCode) ;
if ( errorCode == 12514 ) {
System.err.println("Listener is UP but database is DOWN");
}
if ( errorCode == 17002 ) {
System.err.println("Listener is DOWN");
}
if ( errorCode == 1017 ) {
System.err.println("Listener is UP and database is UP");
}
}
finally {
try {
if ( pconnection != null ) {
pconnection .close();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}

你可以在另一个目录下使用你自己的tnsnames.ora文件来测试它,例如在“/home/oracle/2”目录下:

[oracle@ora12c 2]$ cat /home/oracle/2/tnsnames.ora

orcldb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.node.com)(PORT = 15300))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db02.node.com)
(INSTANCE_NAME = db02)
)
)

然后你这样调用它:

export JAVA_HOME=/opt/java/jdk1.7.0_71
export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=/home/oracle/2/ojdbc7.jar:.

java -Doracle.net.tns_admin=/home/oracle/2 ThinTnsnames orcldb

可能的输出是:

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 1017
Listener is UP and database is UP

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 12514
Listener is UP but database is DOWN

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 17002
Listener is DOWN

您可以通过查询 dba_audit_trail View 来验证在连接期间没有使用用户名,如下所示:

select username,action_name,returncode from dba_audit_trail
where action_name like 'LOG%' ;

USERNAME ACTION_NAME RETURNCODE
-------------------- ---------------------------- ----------
LOGON 1017

关于java - 如何用java做oracle TNSPING?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30658542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com