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 时如何使用静态注册连接字符串。读者可以根据需要对实现方法进行适当修改。