专题实验 常用网络配置

server 端设置是重点, client 端设置简单.

另外, 在 server 端, 看来动态和静态都要设置一下: 万一动态出了问题呢, 也可以使用静态作为一个连接方案

下边的重要文件位置:

listener.ora 与 tnsnames.ora 都是在  $ORACLE_HOME 下的 /network/admin/ 目录下

基础

Concept & Terminology

database services

service Name (一个抽象, 客户端只要知道这个名字就可以了, 知道这个名字就可以得到oracle数据库的服务, 而不用知道具体instance)

  • A logical representation of a database
  • The way a database is presented to clients

Connect Desciptor

  • Location of the database(ip+端口号)
  • Name of the database services

Listener

  • Receives client connection requests
  • Hands request to the database server

global_names = db_name.db_doman

通信: 是 client 端的一个进程和 server 端的一个进程来建立连接, 所以server端要先开启一个进程等待着客户端的请求连接.

Service Resgistration : (把service信息注册到listener, listener 只负责监听, 他不做处理, 所以当client请求来了以后, listener 监听到了, 并把该内容交给其他进程处理 service handlers)

  • Database registers information with the listener
  • Service handlers avaliable for each instance

Service Handlers :(client请求的处理者, listener只是先等着连接, 连上后, 它要把工作交给service handle)

  • Connection points
  • Dispatcher or dedicated server

service registration : During service registration, the PMON process provides the listener with information about the following (可见, 这个注册是 pmon 完成的, 并且 pmon 是在每次instance启动时注册的, 如果instance 启动时, 也就是 pmon 想要注册时, 如果listener没有启动, pmon会周期性 每60秒就尝试注册一次, 如果想要立刻注册(在listener启动以后), 可以使用命令 alter system register.)

注册的内容为:

  • Name of the database services provided by the database.(parameter: service_names)
  • Name of the instance associated with the services and its current and maximum load(parameter: instance_name)
  • Service handlers(dispatchers and dedicated servers) available for the instance, including their type, protocol addresses, and current and maximum load

流程

image

1. 先启动 listener.

2. 然后启动 instance (注册相关内容在listener中, service registration 就是看门老大爷, 政府已经上班了, 有人来请求事情, 可以告诉政府相关人员来处理了)

(注册的内容并不用过分担心, 到是启动listener 比较重要, 注册只要设置好参数就可以了)

(注意: 动态注册的内容因为只跟参数有关, 所有有没有listener.ora文件都无所谓)

配置网络的相关文件

image

三个重要文件:

  • tnsnames.ora : 小型系统的配置文件, 我们一般用这个, 文件用来解析连接的字符串. 客户端通过dbca配置网络时, 会自动创建这个文件, 比如当我们使用sqlplus leon@dbhz01 时, 如何解析这个dbhz01可能就需要通过tnsnames.ora文件中的具体配置了, 在server端这个文件不是必须的, 但是有这个文件是有很多好处的, 比如在有dblink时, 本地数据库对于远端数据库来说就是一个客户端, 所以自然需要这个tnsnames.ora中的内容提供具体的解析, 综上, 这个文件最好在client和server端都配置, 但是server端不是必须的, 另外server端的配置是和listener相关的.
  • listeners.ora : 故名思议, 用来设置 listener 的, 只在server端设置的文件.
  • sqlnet.ora : 控制和管理oracle连接的属性, 用来设置连接字符串解析的顺序 等配置信息, 在client端使用dbca配置网络时, 自动会创建这个文件, 在server端, 当然也是最好有这个文件为最好, 并且可以通过这个文件来限定时候可以通过操作系统权限来登陆数据库等, 综上, 这个文件最好在client和server端配置, 但是server端不是必须的.

这里说一下: sqlnet.ora 这个文件. 这个文件里有个参数 DIRECTORY_PATH 是用来 controls how Oracle Net Services resolves net service names into connect descriptors. Multiple methods can be represented as a comma-separated list enclosed by parenttheses. Net services attempts to resolve servcie names using each method listed working from left to right. (用来解析服务连接的查询文件的位置,从左到右)

三个参数十分重要:

1. ip

2. port

3. service name (一个抽象, 客户端不用知道具体的instance等细节)


SERVER 端的具体配置

Listener 的特性:

  • A listener process can listen for more than one database
  • Multiple listeners can listen on behalf of a single database to perform load balancing
  • The listener can listen for multiple protocols
  • The default name of the listener in Oracle Net is LISTENER
  • The name of the listener must be unique per listener.ora file

listener 类似看门老大爷, 他只是传话的, 不是干活的, 所以当他得到消息后, 会传递出去.

listener 到底干什么活

当一个从client的请求到来时, listener 做如下:

  • Spawns a server process and passes the connection to it(dedicated server only)
  • Hands off the connection to a dispatcher or server process in an Oracle Shared Server configuration.(如果是shared 模式, 就不由listener来创建单独的进程, 因为shared模式的server process可以多个连接共享, shared 模式已经很少有人使用, 所以忽略之, 下同忽略)
  • Redircts the connection to a dispatcher or server process(也是 shared server 模式, 不用)

无论哪一种方式, the session is transparent to the user, it can be detected only by turning on tracing and analyzing the resulting trace file.

redirects connection 与 redirects session 不同. redirects session 不单单只是用在 shared server模式.

配置 listener

两种办法:

Static service configuration : 静态配置(oracle 8i或以前使用, 需要 listener.ora 文件来配置)

Dynamic service registration : 动态注册(不需要 listener.ora, 依靠pmon来注册, 9i以后可以使用)

动态注册

: 当 instance 启动时, pmon 会读取参数文件找到相关的注册内容, 然后pmon 会进行注册.(低效)

参数文件中要包括: service_names, instance_name 这两个参数, 本身动态注册, 不需要配置任何文件, 只需要设置好这两个参数就可以了, 当然, 如果你想下边一样配置一样listener.ora 也可以.

By default, PMON registers with a local listener on the server with the following settings:

  • Listener name : LISTENER
  • Port : 1521
  • Protocols : TCP/IP
  • SID name : Default instance
  • Host name : Default host name

PMON can register with a non default listener if :

  • LOCAL_LISTENER parameter is defined in INIT.ora
  • DISPATCHERS parameter ( For Shared Server ) is defined in INIT.ORA(shared server不常用)

LOCAL_LISTENER=listener_alias

所以可以通过修改, local_listener 参数来修改动态注册的内容

lstener_alias must be resolved to the listener protocol address through a naming method such as tnsnames.ora An examploe entry in the tnsnames.ora follows :

listener_name=

( DESCRIPTION =

( ADDRESS=(PROTOCOL=tcp) (HOST=sales-server)(PROT_1421))) -- 默认的是1521

oracle 总是先进行动态注册的尝试, 在使用静态注册之前

首先, oracle 需要将服务注册到 listener 中, 只有这样, 当listener监听到客户端的请求后, listener才知道将请求分配给谁.

注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。

在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。)
动态注册:

动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener

注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的 db_namedb_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如 orcl.oracle.com)或缩写的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼接.例如下面的设置将导致服务orcl.oracle.com被注册到监听器中:

db_domain=oracle.com
service_names=orcl ;

采取动态注册方法时,listener.ora中的内容如下:

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle)
(PROGRAM = extproc)
)
)

以上内容,除了 ORACLE_HOME = /u01/oracle 每个数据库设置的不一样之外, 其余的全部一样

动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP)因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数!

将监听的信息添加到tnsnames.ora 文件中。 注意,是tnsnames.ora 文件, 因为pmon在动态注册监听时要从tnsnames.ora中读取相关信息。

LISTENER =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = DaveDai)(PORT = 1522))

)

然后以sys用戶运行:

SQL> alter system set local_listener=listener;

SQL> alter system register;

或者:

SQL> alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = DaveDai)(PORT = 1522))';

SQL> alter system register;

系统已更改

静态注册

When the Oracle software is installed, the listener.ora file is created for the starter dtabase with the default setting:

  • Listener name : LISTENER
  • Port : 1521
  • Protocols : TCP/IP and IPC
  • SID name : Default instance
  • Host name : Default host name

The listener.ora file is used to configure the listener for static service registration. The listener.ora must reside on the machine or node on whice the listener is to reside. 例如:

image

利用 net manager 这个工具可以配置 listener.ora 这个文件

静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序。无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。

静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名。
采取静态注册方法时,listener.ora中的内容如下:

静态监听:

oracle实例运行后,监听程序启动时,根据listener.ora的配置注册相应的服务。

其中global_dbname对应的是oracle对外的服务名,即初始化参数里的service_names

而sid_name对应的是oralce实例的名称,即初始化参数里的instance_name

既然有动态监听为什么还要静态监听呢?原因如下:

1.监听器不是最早启动,oracle实例先启动

2.监听器重启

3.oracle实例没有open

Listener Control Utility(LSNRCTL)

命令行工具, 用来管理 Listener Control.

Unix & Linux: 如果是windows, 使用 lsnrctl command

lsnrctl <command name>

When the lsnrctl command is issued, the command will work against the default listener “listener”unless the SET LISTENER command is executed. Another way to control different listeners is to use the listener name as a command modifier:

比较有用的命令

lsnrctl start listener02

lsnrctl stop listener02

services : 提供有关 services the listener 的信息.

set :例如: lsnrctl set listener listener02, set trc_level admin

show : 用来显示目前listener parameter. show connect_timeout

Any manual changes to the listener.ora file must be made when the listener is shutdown. 如果没有提供listener 的名字, 那么就是默认的 LISTENER .

查询某服务是静态注册还是动态注册

lsnrclt status 中的service内容, 如果显示 unknown 并且同时 client端可以连接到数据库, 则表明, 这个listener是静态注册的.

实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。

动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从 监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退(fallback)和负载平衡。

Client 端配置 (简单)

使用dbca配置后会有两个文件,tnsnames.ora, sqlnet.ora 都是自动生成的.

有很多配置方式, 这里指确认 local naming method, 其他的都过时了, 或者用不上

要连接服务器,要提供一些信息,例如你去一个单位,看到看门老大爷,老大爷问你,你找谁,至少你要知道你找哪个部门的谁?

另外, 这种方式主要依靠 tnsnames.ora 这个文件, 不推荐手动修改这个文件, 使用 Oracle Net Configuration Assistant. 这个工具比较好

这个工具的用法 命令 netca

image

选择如图: naming Methods configuration

image

这一步, 左边选 oracle Names, 右边选 local, 另外, 你选择以后, 相关的内容会写入 sqlnet.ora 这个文件.

image

image

image

image

这个 service name 不是随便输入的, 这是 database service name.

image

image

Host name : Enter the fully qualified name of the machine on which the database you want to connect to the communicate with resides. (也可以输入ip地址)

Port Number : Enter the number of the port on which the Oracle Net listener monitors connection requests to the server(host). default is 1521.

image

Testing the connection

另外, 使用 tnsping 也可以进行测试. (当然要在先设置好 tnsnames.ora 文件以后)

image

Enter a name for the net service name next.(个人感觉这个好像就是tnsnames.ora文件中那个title的名字), 默认的会使用 database service name, 你也可以起一个更有意义的名字.

image

保存, 这部完成以后, 内容会保存在 $ORACLE_HOME/network/admin 这个文件夹内, 当然是tnsnames.ora

image

Trobleshooting the Client Side

1. 首先检查是否网络故障, 利用 ping 等, 确认tcp/ip连接情况

2. 在client 通过tnsping server 名, 如果能ping通, 证明client端设置没有问题, 毕竟client端设置网络简单, 所以一般不是client端问题.

3. 确认服务器端, 根据错误提示, 或者直接去确认listener, 因为一般很可能是listener 问题.

原文地址:https://www.cnblogs.com/moveofgod/p/3564628.html