之前的一篇文章【1】讨论了Oracle数据库的体系结构,在“进程结构”一节讲到了客户端进程通过Oracle服务器进程连接到Oracle数据库实例。那么具体该如何配置和操作呢,本文围绕这一问题展开讨论。
环境变量的设置
- ORACLE_BASE
OFA的Oracle目录结构的基础。 - ORACLE_HOME
包含Oracle软件的目录。 - ORACLE_ID
初始实例名称(默认值为ORCL) - NLS_LANG
语言、地区和客户机字符集设置。
Oracle Net Services
Oracle Net Services为用户在分布式和混合式计算环境下提供了数据库连接解决方案【2】。
Oracle Net
Oracle Net 是Oracle Net Service的组件之一,用于在客户应用和Oracle数据库服务器之间建立网络会话【3】。一旦网络会话建立,Oracle Net就可以在客户应用和Oracle数据库服务器之间传递消息。
以传统的客户端/服务器模式的应用和Oracle数据库服务器之间的连接为例:
区别与其他数据库服务器,Oracle数据库服务器通过Oracle Net 监听器接受初始连接【4】。监听器通过HTTP协议接受客户端的请求,将其传递给服务器。监听器配置了协议地址,配置了相同协议地址的客户端才可以向其发送连接请求。连接建立后,客户端和服务器就将直接通讯,而监听器就退出了通讯。值得注意的是,数据库本地的进程可以不通过监听器直接连接到数据库,这时,使用基于进程间(IPC)的本地通信。
建立网络连接
要建立客户机或者中间层连接,Oracle Net 要求客户机了解下列事项:
- 运行监听程序的主机
- 监听程序监听的端口
- 监听程序使用的协议
- 监听程序处理的服务名
配置和管理Oracle Net的工具
- Enterprise Manager的“Net Services Administration(网络服务管理)”页
- Oracle Net Manager
- 由Oracle Universal Installer启动的Oracle Net Configure Assistant
- 命令行
可以使用命令行lsnrctl实用程序控制Oracle Net 监听程序。
lsnrctl
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2020 10:00:56
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stop status
services version reload
save_config trace spawn
change_password quit exit
set* show*
LSNRCTL>
命名方法
Oracle Net支持多种解析连接信息的方法:
- 简便连接命名:使用TCP/IP连接字符串。
- 本定命名:使用本地配置文件
- 目录命名:使用符合LDAP的集中式目录服务器
- 外部命名:使用支持的非Oracle命名服务
测试Oracle Net连接性
tnsping程序用于测试Oracle Net服务别名:
- 确保客户机与Oracle Net监听程序之间的连接性。
- 不验证所请求的服务是否可用。
- 支持简便连接名称解析。
$ tnsping ${HOST_NAME}:1521/helowin
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2020 11:22:14
Copyright (c) 1997, 2009, Oracle. All rights reserved.
Used parameter files:
/home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/sqlnet.ora
Used EZCONNECT adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=helowin))(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
OK (0 msec)
- 支持本地和目录名。
$ tnsping helowin
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2020 11:19:19
Copyright (c) 1997, 2009, Oracle. All rights reserved.
Used parameter files:
/home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = helowin)))
OK (10 msec)
目录命名是指将名字信息放入LDAP,多个客户端共享LDAP中的数据库信息。具体可以参考Lightweight Directory Access Protocol (LDAP)。
查看监听进程
$ ps -ef | grep tnslsnr
查看监听程序状态:
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2020 16:14:55
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 02-FEB-2020 10:00:14
Uptime 0 days 6 hr. 14 min. 41 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora
Listener Log File /home/oracle/app/oracle/diag/tnslsnr/0f5161c4d1d7/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0f5161c4d1d7)(PORT=1521)))
Services Summary...
Service "helowin" has 1 instance(s).
Instance "helowin", status READY, has 1 handler(s) for this service...
Service "helowinXDB" has 1 instance(s).
Instance "helowin", status READY, has 1 handler(s) for this service...
The command completed successfully
注意到监听器的默认监听端口为1521。
配置客户端
netmgr
初始化参数文件
spfileorcl.ora,这是一个二进制文件,存放于$ORACLE_HOME/dbs/
。可以用sqlplus将其转换为文本文件。
instance 的启停
其中,数据库进程在nomount阶段读取参数的信息。
监听器配置
可以通过动态或静态的方式配置监听器。这里仅介绍静态即通过配置文件的方式配置监听器。动态的方式可以参考Oracle文档 service registration。
- listener.ora
监听器的配置信息主要存放在文件 listener.ora内,路径为:$ORACLE_HOME/network/admin
。在这个文件中,可以定义:
变量含义 | 变量名 | 变量描述 |
---|---|---|
SID | SID_NAME | 用于标识运行中的数据库的一个实例。一个数据库至少有一个实例,也可以有多个。可以在描述连接的 tnsnames.ora 文件和定义监听器的listener.ora 文件中找到它。 |
Service Name | GLOBAL_DBNAME | 当处理一个客户端的连接请求的时候,监听器尝试将客户端连接描述中SERVICE_NAME 变量的值同其进行匹配。如果客户端连接用的是变量SID ,那么监听器将在匹配过程中忽略GLOBAL_DBNAME 。 这一变量主要用于Oracle 8【5】。这个变量的值一般取自初始化文件中变量DB_NAME 和DB_DOMAIN 值的组合,DB_NAME.DB_DOMAIN 。 |
Oracle Home Directory | ORACLE_HOME | 在UNIX上,这一设定是可选的,用于指定实例的Oracle home目录。如果没有该设置,监听器将默认使用自己的Oracle home。在Windows上,这个设置将被忽略,而直接从注册标中取得。 |
实例:
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
- tnsnames.ora
该配置文件用于“local naming method”,包含映射到连接描述中的Net Service名字。详细的内容可以参考Configuring Naming Methods和 tnsnames.ora file。该文件位于客户端机器,路径为:$ORACLE_HOME/network/admin
,定义了标识数据库连接的“网络服务名”,并提供连接请求所需的网络协议,主机名,端口号,service_name
,连接类型(defaults)等信息,如:
sqlplus scott/tiger@orcl
否则,sqlplus需要以所谓的“简单连接模式”,用SERVICE_NAME
建立连接:
sqlplus scott/tiger@${HOST_NAME}:1521/oral
实例
HELOWIN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = helowin)
)
)
使用SQL* PLUS和iSQL* PLUS访问数据库
SQL* PLUS和iSQL* PLUS提供到数据库的其他接口,这样可以:
- 执行数据库管理操作
- 通过执行SQL命令在数据库中查询、插入、更新或删除数据
例如:
使用SQL* PLUS启动和关闭实例:
$ sqlplus system/system as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sun Feb 2 11:33:06 2020
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 402655344 bytes
Database Buffers 1191182336 bytes
Redo Buffers 7360512 bytes
Database mounted.
Database opened.
SQL>
【1】Oracle 数据库概述
【2】Oracle Net Services
【3】Oracle Net
【4】Oracle Net Listener
【5】Configuring Static Service Information
网友评论