You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux服务器上通过Java程序及手动方式检查Oracle监听器状态

嘿,我来帮你理清在Linux服务器上检查Oracle监听器状态的两种实用方法——手动操作和Java程序实现,一起来看看吧~

手动检查Oracle监听器状态的步骤

这是最直接的日常运维排查方式:

  • 首先切换到Oracle专用用户(通常是oracle),如果当前是其他用户,执行命令:su - oracle
  • 加载Oracle环境配置脚本:. oraenv(注意前面的点和空格,这是在当前Shell会话中加载环境变量)
    • 执行后会提示你输入Oracle SID(数据库实例名称),输入对应的SID回车即可,脚本会自动配置好ORACLE_BASE、ORACLE_HOME等关键环境变量
  • 最后执行监听器状态查询命令:lsnrctl status,就能看到监听器的运行状态、监听地址、已注册的数据库服务等详细信息了

操作示例

[oracle@xx ~]$ . oraenv
ORACLE_SID = [daltaasm] ? deltaasm
The Oracle base has been set to /u01/app/oracle

oracle@XX ~$ clear

oracle@xx ~$ . oraenv
ORACLE_SID = [deltaasm] ? deltaasm
The Oracle base remains unchanged with value /u01/app/oracle

oracle@xx ~$ lsnrctl status
通过Java程序检查Oracle监听器状态

如果需要自动化检查,Java可以通过两种思路实现:

思路1:执行系统命令(模拟手动操作)

通过Java调用Linux命令,切换到oracle用户并执行监听器状态查询。注意要确保Java程序的运行用户有足够权限切换到oracle用户,或者直接以oracle用户运行Java程序。

示例代码

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class OracleListenerChecker {
    public static void main(String[] args) {
        try {
            // 构建命令:切换到oracle用户,自动输入SID并执行lsnrctl status
            String[] command = {
                "/bin/bash",
                "-c",
                "su - oracle -c '. oraenv <<< \"deltaasm\"; lsnrctl status'"
            };
            
            Process process = new ProcessBuilder(command).start();
            
            // 读取命令输出
            BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            System.out.println("=== 监听器状态输出 ===");
            while ((line = outputReader.readLine()) != null) {
                System.out.println(line);
            }
            
            // 读取错误信息(如果有)
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            System.out.println("\n=== 错误输出(若有) ===");
            while ((line = errorReader.readLine()) != null) {
                System.out.println(line);
            }
            
            int exitCode = process.waitFor();
            System.out.println("\n命令执行退出码:" + exitCode);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

代码说明

  • 用su - oracle -c切换到oracle用户并执行后续命令
  • . oraenv <<< \"deltaasm\"通过here字符串自动输入Oracle SID,避免交互式输入
  • 最后执行lsnrctl status并读取输出结果

思路2:JDBC连接测试(间接判断)

如果Oracle监听器正常运行且数据库服务已注册,JDBC就能成功连接;反之则会抛出网络相关异常,以此间接判断监听器状态。

示例代码

import java.sql.Connection;
import java.sql.DriverManager;

public class JDBCListenerTest {
    public static void main(String[] args) {
        // 替换为你的数据库连接信息
        String jdbcUrl = "jdbc:oracle:thin:@//192.168.1.100:1521/deltaasm";
        String dbUser = "your_username";
        String dbPassword = "your_password";
        
        try (Connection connection = DriverManager.getConnection(jdbcUrl, dbUser, dbPassword)) {
            System.out.println("数据库连接成功!说明Oracle监听器状态正常。");
        } catch (Exception e) {
            System.err.println("连接失败,大概率是监听器异常或配置问题:");
            e.printStackTrace();
        }
    }
}

代码说明

  • JDBC URL格式:如果用服务名,用jdbc:oracle:thin:@//IP:端口/服务名;如果用SID,用jdbc:oracle:thin:@IP:端口:SID
  • 若抛出IO Exception: The Network Adapter could not establish the connection,基本可以判定监听器未启动或端口不通

内容的提问来源于stack exchange,提问作者Kailas Kakade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:05:42