oracle listener.ora与tsnames.ora配置

oracle listener.ora与tsnames.ora配置

oracle安装配置过程中出现ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务;ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误,都是因为这两个文件没有配置好。以配置本地oracle服务为例,修改这两个配置文件如下:

listener.ora如此配置

# listener.ora Network Configuration File: D:\app\luzhanhui\product\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
   (SID_DESC =
      (SID_NAME = XXXXX)
      (ORACLE_HOME = D:\app\wangxiaoming\product)

    )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

    )
  )

ADR_BASE_LISTENER = D:\app\wangxiaoming

tsnames.ora如此配置

配置完成后重启listener服务

lsnrctl stop,lsnrctl start

再然后创建数据库

需要注意的是,一定要将配置的监听实例对应到相应的数据库。否则就会出现数据库服务未注册到监听程序的错误。

这两个配置文件位置在oracle安装目录的\product\NETWORK\ADMIN下。修改这两个文件要在其它位置修改好后复制替换(权限问题)。

### ORACLE listener.ora 和 tnsnames.ora 文件的区别及作用 #### 1. **listener.ora 文件** `listener.ora` 是 Oracle 数据库监听器的配置文件,主要用于定义监听器的服务端信息。它控制着数据库如何接收客户端的连接请求,并将这些请求转发到相应的数据库实例。 - **位置**:通常位于 `$ORACLE_HOME/network/admin` 目录下[^2]。 - **主要功能**: - 定义监听器的名称、协议、主机地址和端口号等信息。 - 配置监听器的地址列表(`DESCRIPTION_LIST`),以便客户端能够通过指定的协议(如 TCP 或 IPC)连接到数据库。 - 指定监听器的日志记录路径和诊断信息存储位置(如 `ADR_BASE_LISTENER` 参数)[^3]。 示例配置: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.207.130)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /u01/app/oracle ``` #### 2. **tnsnames.ora 文件** `tnsnames.ora` 是客户端使用的配置文件,用于定义客户端如何连接到数据库实例。它保存了数据库服务的别名及其对应的网络连接描述符。 - **位置**:同样位于 `$ORACLE_HOME/network/admin` 目录下。 - **主要功能**: - 定义数据库服务的别名(如 `ORACLR_CONNECTION_DATA` 或 `CAD`),使得客户端可以通过这些别名连接到数据库。 - 包含每个别名的详细连接信息,包括协议、主机地址、端口号和服务名或 SID[^4]。 示例配置: ```plaintext ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) CAD = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.21.163)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = CAD) ) ) ``` #### 3. **两者的区别** | 属性 | `listener.ora` | `tnsnames.ora` | |--------------------|--------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| | **用途** | 配置监听器的服务端信息,用于接收客户端连接请求并转发到数据库实例。 | 配置客户端连接数据库的别名及其对应的网络连接描述符。 | | **位置** | `$ORACLE_HOME/network/admin` | `$ORACLE_HOME/network/admin` | | **主要参数** | `LISTENER`, `DESCRIPTION_LIST`, `ADDRESS`, `ADR_BASE_LISTENER` 等。 | `DESCRIPTION`, `ADDRESS`, `CONNECT_DATA`, `SERVICE_NAME`, `SID` 等。 | | **适用场景** | 数据库服务器端配置,确保监听器正常运行并接受客户端连接。 | 客户端配置,便于用户通过别名快速连接到数据库实例。 | #### 4. **两者的关系** - `listener.ora` 配置了监听器如何接收客户端请求。 - `tnsnames.ora` 配置了客户端如何通过监听器连接到数据库实例。 - 当客户端使用 `tnsnames.ora` 中定义的别名发起连接时,监听器会根据 `listener.ora` 的配置将请求转发到相应的数据库实例[^1]。 --- ### 示例代码 以下是一个简单的 Python 脚本,演示如何读取 `tnsnames.ora` 文件并解析其内容: ```python import re def parse_tnsnames(file_path): with open(file_path, 'r') as file: content = file.read() pattern = r'(\w+)\s*=\s*\((.*?)\)' matches = re.findall(pattern, content, re.DOTALL) entries = {} for match in matches: alias = match[0].strip() details = match[1].strip() entries[alias] = details return entries # 使用示例 file_path = '/path/to/tnsnames.ora' parsed_entries = parse_tnsnames(file_path) for alias, details in parsed_entries.items(): print(f"Alias: {alias}, Details: {details}") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值