oracle listener

本文详细介绍了Oracle数据库中监听器的配置方法,包括静态注册与动态注册的区别及配置过程,并探讨了不同模式下的连接处理方式。

这一块知识,我相信搞oracle的兄弟都是比较精通的,我也是前段时间公司让做个培训的时候,又把这块又温习了一遍,还是有不少新的收获,今天就搬到这里记录一下

oracle listener - dazuiba_008 - 魂醉的数据库之路
大家可以看到这里的WEB应用充当中间件,既懂HTTP,又懂oracle net,厉害吧,其实就是个翻译官。
如果WEB应用服务器采用 JDBCOCIDRIVER,那么WEB服务必须的安装oracle net组件,才能和oracle数据库进行通讯,走的TCP/IP协议。
如果WEB应用服务是JDBCTHINDRIVER,也就是瘦客户端,那么不需要oracle net组件,只需要配置JAVA NET就可以和oracle进行通讯。
监听怎么响应连接呢?看下图:
oracle listener - dazuiba_008 - 魂醉的数据库之路
衍生继承模式:当有连接请求时,listener接待,触发一个服务器进程,红框内3直接继承了listener,只能用在专有模式,listener关闭了不影响

直接传送:使用OracleSharedServer时,监听程序将把连接传送给调度程序。专有模式不可用

重定向:listener和服务端不在同一台机器,比如RAC和共享服务

静态注册和动态注册:

1.动态注册:就是PMON主动把信息告诉监听,无需使用listener.ora将文件,lsnrclt status里面read的都是动态。

2.静态注册:监听主动去找服务和实例,需要配置listener.ora文件,指定SID列表,lsnrctl status里面是unknown

先看静态注册,很简单的,保证一看就懂

直接配置listener.ora文件即可

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = oradb)

(ORACLE_HOME = /app/oracle/product/10.2.0/db_1)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =)(PORT = 1521))

)

)

需要配置SID_NAME LISTENER需要指定相关参数块,这里如果host参数不指定,那么/etc/hosts需要指定,监听启动的时候回去读hosts文件匹配,如果设置为0.0.0.0,那么默认监听所有地址

动态注册以及配置:

1.动态注册不需要配置listener.ora文件,需要配置初始化参数文件,参数service_names,可是设置多个服务名,区分不同业务。

2.如果想配置非默认端口,非默认监听名称,非TCPIP协议,那么需要配置listener.ora 而且需要配置local_listener参数,tnsnames.ora也需要配置。

这里可以看到动态注册分为默认的和非默认的,默认的就是TCP/IP协议,端口是1521,监听名称LISTENER。非默认的大家自己能理解的哦。

默认动态注册实验:

1.Show parameter service_names;

2.Alter system set service_names=zhang,hai,hong;

3. Mv listener.ora listener.ora.bak Lsnrctl stop

4.Lsnrctl start

5.Alter system register;

6.Lsnrctl service;

看结果:

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.3.174)(PORT=1521)))
Services Summary...
Service "HAI" has 1 instance(s).
Instance "oradb", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "HONG" has 1 instance(s).
Instance "oradb", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "ZHANG" has 1 instance(s).
Instance "oradb", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "oradb" has 2 instance(s).
Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Instance "oradb", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "oradb_XPT" has 1 instance(s).
Instance "oradb", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully

相应的client端你如果是用oracle net组件的,那么肯定要配置tnsnames.ora文件

testdb =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.3.174)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = zhang)

)

)

注意:标红的可以写zhang,hai,hong 或者oradb,就算木有listener.ora 文件,照样可以监听。

下面介绍下非默认动态注册:

这里我们端口用1234,非默认必须需要listener.ora 文件,还有就是local_listener参数.

修改监听文件:

# listener.ora Network Configuration File: /app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = oradb)
(ORACLE_HOME = /app/oracle/product/10.2.0/db_1)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =172.16.3.174)(PORT = 1234))
)
)

修改local_listener参数:Alter system set local_listener=‘(ADDRESS = (PROTOCOL = TCP)(HOST =)(PORT = 1234))’;

注意这里,以上修改参数等同于以下配置:

配置服务端的tnsnames.ora文件

hankzhang =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =)(PORT = 1234))

)

)

然后再设置参数: Alter system set local_listener=hankzhang;

以上两种方法效果是一样滴。

lisnrctl status看一下:

oracle listener - dazuiba_008 - 魂醉的数据库之路

至于RAC的listener配置,呵呵,大同小异,不过还是有区别的,这里先提以下,有时间再继续。

RAC在监听端也可以负载均衡的哦,呵呵,当然这是在RAC双主模式的情况下,而且需要配置REMOTE_LISTENER,配置tnsnames.ora文件,监听暂时先到这里。

<think>首先,用户的问题是:“我想查找让Oracle Listener服务开机启动的方法 请问如何设置Oracle Listener服务开机启动”。这涉及到Oracle数据库的配置。 从系统指令中,我需要使用中文回答,结构清晰,逐步解决问题。回答必须真实可靠。同时,我需要生成相关问题。 用户提到了站内引用,但这些引用似乎不完全相关。引用[1]是关于启动脚本的片段,包括echo语句和Listener启动。引用[2]是关于Oracle开机启动的脚本,包括su命令和数据库启动。但这些不是用户真正需求的完美匹配,用户只关心Oracle Listener服务的开机启动。 用户提到了“参考用户上一次的问题和你的回答”,但在这个对话中,这是我的第一个响应,所以没有“上一次的问题”。因此,我应该专注于当前问题。 关键点:设置Oracle Listener服务开机启动。在Linux系统中,这通常涉及到创建启动脚本或配置系统服务文件(如systemd)。 步骤分解: 1. **理解需求**:用户想让Oracle Listener在系统启动时自动启动。 2. **方法**: - 在Linux中,使用systemd(现代系统)或init.d(旧系统)来管理服务。 - 常见方法是创建一个服务文件或修改现有脚本。 3. **具体步骤**: - 对于systemd系统(如CentOS 7+、Ubuntu 16.04+): - 创建一个.service文件,例如/etc/systemd/system/oracle-listener.service。 - 内容应包括启动Listener的命令。 - 对于init.d系统: - 创建一个脚本在/etc/init.d/目录下。 - 使用chkconfig或update-rc.d来启用开机启动。 4. **参考用户提供的引用**: - 引用[2]有一个脚本:`su - oracle <<EON ... lsnrctl start ...`。这可以改编为启动脚本的核心部分。 - 但用户只关心Listener,不关心整个数据库启动。所以脚本应该只启动Listener。 5. **安全性和最佳实践**: - 确保脚本以oracle用户运行。 - 测试脚本手动启动Listener是否正常。 - 启用服务。 6. **回答结构**: - 清晰、逐步: - 步骤1:创建启动脚本。 - 步骤2:配置为开机启动(取决于系统)。 - 步骤3:测试。 7. **生成相关问题**: - 在末尾添加相关问题,如: - 如何检查Oracle Listener状态? - 如何手动启动/停止Listener? - 常见开机启动问题排查? 8. **格式要求**: - 所有行内数学用$...$(但这里可能不涉及数学)。 - 独立公式用$$...$$(不适用)。 - LaTeX语法正确(可能不需要)。 - 中文回答。 - 引用的段落末尾加引用标识。用户提供了引用,但我需要引用它们。引用[1]和[2]是用户给的,我应该基于它们回答。 - 引用[2]更相关,因为它直接提到开机启动脚本。 - 我可以引用它来构建回答。 9. **真实可靠**: - 基于Oracle文档或常见实践。 - 推荐标准方法。 完整回答结构: - 引言:解释方法。 - 步骤: 1. 创建启动脚本(基于引用[2]改编)。 2. 设置开机启动。 - 测试步骤。 - 相关问题。 最终,添加引用标识:[^1] 和 [^2] 在相关部分末尾。 </think>### 如何设置 Oracle Listener 服务开机启动 在 Linux 系统中,设置 Oracle Listener 服务开机启动通常涉及创建或修改启动脚本,并将其添加到系统服务管理中(例如通过 `systemd` 或 `init.d`,具体取决于您的 Linux 发行版)。以下是详细的逐步方法,基于您的引用[^2]提供的脚本(该脚本已包含启动 Listener 的部分),但需针对 Listener 服务精简和适配。确保您有管理员权限(`root` 用户)执行以下操作。 #### 步骤 1: 创建专用的 Listener 启动脚本 首先,创建一个脚本文件,用于启动 Oracle Listener。参考引用[^2]中的命令,我们提取并精简,专注于 Listener 启动(不涉及数据库实例)。脚本应以 `oracle` 用户身份运行。 1. 使用文本编辑器创建脚本文件(例如 `/etc/init.d/oracle-listener`): ```bash sudo nano /etc/init.d/oracle-listener ``` 2. 将以下内容粘贴到文件中。脚本使用 `lsnrctl start` 启动 Listener,并设置环境变量(如 `ORACLE_HOME` 和 `ORACLE_SID`)。请根据您的实际路径修改 `ORACLE_HOME` 和 `ORACLE_SID`: ```bash #!/bin/sh # Oracle Listener startup script # chkconfig: 345 90 10 # description: Auto-starts Oracle Listener ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 # 修改为您的Oracle安装路径 ORACLE_SID=ORCLCDB # 修改为您的数据库SID PATH=$PATH:$ORACLE_HOME/bin export ORACLE_HOME ORACLE_SID PATH case "$1" in start) echo "Starting Oracle Listener..." su - oracle -c "$ORACLE_HOME/bin/lsnrctl start" # 以oracle用户启动Listener ;; stop) echo "Stopping Oracle Listener..." su - oracle -c "$ORACLE_HOME/bin/lsnrctl stop" # 以oracle用户停止Listener ;; restart) echo "Restarting Oracle Listener..." su - oracle -c "$ORACLE_HOME/bin/lsnrctl stop" su - oracle -c "$ORACLE_HOME/bin/lsnrctl start" ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0 ``` - **关键解释**:该脚本定义了 `start`、`stop` 和 `restart` 操作,使用 `su - oracle -c` 确保以 `oracle` 用户执行命令(避免权限问题)。注意替换 `ORACLE_HOME` 和 `ORACLE_SID` 为您的实际值(参考您的引用[^2]中的环境变量设置)[^2]。 - 保存文件后,设置可执行权限: ```bash sudo chmod +x /etc/init.d/oracle-listener ``` #### 步骤 2: 配置开机启动服务 根据您的 Linux 系统类型(`systemd` 或 `SysVinit`),选择合适的方法启用开机启动。 - **对于使用 `systemd` 的系统(如 CentOS 7+, Ubuntu 16.04+)**: 1. 创建一个 systemd 服务文件: ```bash sudo nano /etc/systemd/system/oracle-listener.service ``` 2. 添加以下内容: ```ini [Unit] Description=Oracle Listener Service After=network.target [Service] Type=forking ExecStart=/etc/init.d/oracle-listener start ExecStop=/etc/init.d/oracle-listener stop User=oracle Group=oinstall [Install] WantedBy=multi-user.target ``` - **关键解释**:`ExecStart` 和 `ExecStop` 指向步骤 1 创建的脚本,确保开机时自动启动。 3. 重新加载 systemd 并启用服务: ```bash sudo systemctl daemon-reload sudo systemctl enable oracle-listener.service # 启用开机启动 sudo systemctl start oracle-listener # 立即启动服务测试 ``` - **对于使用 `init.d` 的系统(如 CentOS 6, Ubuntu 14.04)**: 1. 使用 `chkconfig` 或 `update-rc.d` 添加服务: ```bash sudo chkconfig --add oracle-listener # CentOS 风格 sudo chkconfig oracle-listener on # 启用开机启动 ``` 或 ```bash sudo update-rc.d oracle-listener defaults # Ubuntu/Debian 风格 ``` 2. 手动启动服务测试: ```bash sudo service oracle-listener start ``` #### 步骤 3: 测试和验证 - 重启系统,检查 Listener 是否自动启动: ```bash sudo reboot ``` - 验证 Listener 状态: ```bash su - oracle lsnrctl status # 检查Listener是否运行 ``` 如果状态显示 "STATUS" 为 "READY",表示开机启动成功。如果失败,检查日志:`$ORACLE_HOME/listener/log/*.log`。 #### 注意事项 - **环境变量**:确保 `ORACLE_HOME` 和 `ORACLE_SID` 在脚本中正确设置(引用[^2]强调了导出环境变量的重要性)[^2]。 - **权限问题**:脚本必须由 `root` 添加,但执行命令以 `oracle` 用户运行,避免安全风险。 - **兼容性**:如果您的系统有 SELinux 或防火墙,确保端口 1521 开放。 - 参考您的引用[^1],`echo "Starting Oracle Listeners ... "` 可用于脚本输出调试信息[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值