Oracle侦听的静态注册机制(oracle侦听静态注册)

Oracle侦听的静态注册机制

作为一种常用的数据库管理系统,Oracle 不仅功能强大,而且稳定性高。其中,Oracle Listener(侦听器)是实现数据库连接的一个重要组件。连接数据库时,客户端需要向 Listener 提交连接请求,然后 Listener 再转发给相应的目标实例。这个过程涉及到一个重要的机制,即静态注册机制。本文将介绍 Oracle Listener 中的静态注册机制以及相关代码实现。

一、静态注册机制简介

静态注册机制是 Oracle Listener 中的一种配置方式,用于向 Listener 提交连接请求时使用的固定连接字符串。这样,客户端就不用每次都输入完整的连接信息,减少了手动输入的错误风险,也加快了连接速度。

在静态注册的情况下,Oracle Listener 会先到静态注册表中查找客户端指定的连接字符串,如果找到了对应的静态注册,就会使用静态注册表中所存储的信息来完成连接。否则,Oracle Listener 会向客户端返回错误信息“ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA”,提示客户端需要提供 SERVICE_NAME 参数。

二、静态注册的实现步骤

下面,我们以一个实例来介绍静态注册机制的实现步骤。

1. 编辑目录文件(tnsnames.ora)

在 Oracle Listener 安装目录的 network/admin 目录下,有一个名为 tnsnames.ora 的文件。该文件用于保存 Listener 可以监听的数据库实例,以及每个实例对应的网络连接字符串信息。如果静态注册已经配置好了,那么该文件中应该包含对应数据库实例的一个连接字符串。

下面是一个典型的 tnsnames.ora 文件样例:

ORCL =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

其中,“ORCL” 是一个自定义的连接字符串名字,我们可以根据需要进行修改。下面是一个静态注册的连接字符串样例:

listener =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

该连接字符串使用了另一个自定义的名为“listener”的字符串名称,使用这个连接字符串时,我们可以不必再输入整个连接信息,而是可以直接使用“listener”字符串名进行连接。

2. 编辑 Listener 的配置文件(listener.ora)

在 Oracle Listener 安装目录的 network/admin 目录下,有一个名为 listener.ora 的文件,用于保存 Listener 的详细配置信息。在这个文件中,我们需要添加对静态注册的支持。

下面是一个典型的 listener.ora 文件样例:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = D:\app\Oracle\product\11.2.0\dbhome_2)

(PROGRAM = extproc)

)

(SID_DESC =

(SID_NAME = orcl)

(ORACLE_HOME = D:\app\Oracle\product\11.2.0\dbhome_2)

(GLOBAL_DBNAME = orcl)

)

)

# listener.ora Network Configuration File: D:\app\Oracle\product\11.2.0\dbhome_2\network\admin\listener.ora

# Generated by Oracle configuration tools.

在这个配置文件中,我们需要添加一个名为“STATIC_SERVER_LIST”(静态服务器列表)的参数,指定一个存储静态注册连接字符串的文件名,如下所示:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = D:\app\Oracle\product\11.2.0\dbhome_2)

(PROGRAM = extproc)

)

(SID_DESC =

(SID_NAME = orcl)

(ORACLE_HOME = D:\app\Oracle\product\11.2.0\dbhome_2)

(GLOBAL_DBNAME = orcl)

)

)

# 静态服务器列表

STATIC_SERVER_LIST = (ORA11G = D:\app\Oracle\db\static_server_list.ini)

# listener.ora Network Configuration File: D:\app\Oracle\product\11.2.0\dbhome_2\network\admin\listener.ora

# Generated by Oracle configuration tools.

3. 编辑存储静态注册连接字符串的文件

在上面的 listener.ora 文件中,我们指定了一个名为“static_server_list.ini”的文件用于存储静态注册信息。该文件应该放在 $ORACLE_HOME/db 目录下。

下面是一个典型的 static_server_list.ini 文件样例:

listener =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

其中,“listener” 是我们指定的连接字符串名字。该文件可以保存多个静态注册信息,每行一个连接字符串。

三、使用静态注册测试

完成上述步骤后,我们可以使用以下代码测试静态注册的连接效果:

import cx_Oracle

tns = cx_Oracle.makedsn(“192.168.0.11″, 1521, service_name=”listener”) # 使用静态注册连接字符串

conn = cx_Oracle.connect(user=”SYSTEM”, password=”123456″, dsn=tns)

cursor = conn.cursor()

cursor.execute(“select count(*) from emp”)

for res in cursor.fetchall():

print(res)

以上代码中,我们使用了 cx_Oracle 库(需要事先安装),通过多个参数构造出一个 DSN 连接,然后传递给 cx_Oracle.connect() 函数建立数据库连接。如果一切正常,我们可以查询到 EMP 表的记录数。

总结

静态注册机制是 Oracle Listener 中一个重要的配置参数,可以减少客户端需要输入的连接信息,提高了连接的速度和可靠性。本文介绍了静态注册机制的实现步骤,以及使用 Python 连接 Oracle 时如何使用静态注册连接字符串。读者可以根据需要对实现方法进行适当修改。


数据运维技术 » Oracle侦听的静态注册机制(oracle侦听静态注册)