第三四章 oracle文档格式.docx
《第三四章 oracle文档格式.docx》由会员分享,可在线阅读,更多相关《第三四章 oracle文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
二、客户端与ORACLE的连接步骤(专用服务器模式)
第一步:
如上图,客户端通过网络向监听程序发送了一个“CONN用户名/密码@服务名”。
第二步,监听器启动一个专门的服务器进程。
并将客户端的连接转给专用服务器进程。
第三步,现在客户端直接的和专用服务器进程连接交互。
监听器的任务已经结束了。
服务器进程第一步要根据用户提供的用户名、密码,和存放在数据字典中的密码进行核对。
如果密码正确,此时就算客户端和ORACLE真正的建立了连接,这也被称作ORACLE为用户创建了会话。
创建会话并没有什么新的动作,只是在服务器进程核对密码后,就算创建了会话。
以前,我们都把建立连接和创建会话当作一个概念,比如说“连接到ORACLE”,“创建到ORACLE的会话”,通常我们把这两句话当作一个意思。
其实连接和会话意义并不相同。
连接很好理解,指的是客户端和服务器进程间的连接途径。
会话指的是一种状态,就是当用户名、密码经核对正确后,服务器进程随时等待客户端向它发送请求、命令。
也就是在密码正确后,服务器进程随时候命,这就是创建了会话。
监听器在这整个过程中,发挥了桥粱的作用。
它在主机上随时等待着客户端的连接请求。
一旦发现网络上有客户端传来了连接请求,它马上开启一个服务器进程,并让客户端和服务器进程建立连接。
监听器一头连接客户端,一头连接服务器。
分了使用客户端、服务器那够和监听器建立联系,我们需要在客户端、服务器端分别进行设置。
在服务器端的设置,叫做在监听器上注册服务器。
另外,监听器自身也需要配置。
通常注册服务器的配置和监听器自身的配置都放在一个文件中,就是LISTENER.ORA。
而客户端,也要知道自己该把连接信息发送到哪里,客户端的配置信息记录在tnsnames.ora文件中。
下面我先来看看这两个配置文件。
第二节监听器的启用与配置
在讨论listener.ora和tnsnames.ora之前,我们先说一下如何启动监听器和监听器的配置。
先从监听器的启动开始:
一、启动监听器
无论是在WINDOWS下还是LINUX、UNIX,我们可以使用监听器控制程序:
LSNRCTL,来启动监听器。
命令如下,输入LSNRCTL,就可以进入到LSNRCTL中:
D:
\>
lsnrctl
LSNRCTLfor32-bitWindows:
Version10.2.0.1.0-Productionon20-5月-200815:
47:
55
Copyright(c)1991,2005,Oracle.Allrightsreserved.
欢迎来到LSNRCTL,请键入"
help"
以获得信息。
LSNRCTL>
在提示符后使用START[监听器名],就可以启动监听器。
如果机器上只配置了一个监听器,我们可以直接START,就可以启动监听器。
如下:
start
启动tnslsnr:
请稍候...
(…………省略部分内容…………)
停止监听器是stop[监听器名]。
监听器名同样可以根据需要省略。
在WINDOWS中,我们还可以在服务中,找到“OracleOraDb10g_home1TNSListener”,启动它也是启动监听器。
监听器启动完毕后,有两种方法在其上注册服务器信息:
静态注册和动态注册。
这两种方式中,ORACLE推荐使用动态注册,因为它使用更简单、功能也更强。
但是静态注册在有些时候(比如排查网络故障时)也是必不可少的。
我们先来了解一下什么是静态注册。
二、监听器的配置
监听器的配置信息被记录在LISTENER.ORA文件中。
此文件处于服务端,它应该和你的监听器在同一台机器或同一节点中。
默认方式下,它的位置在ORACLE_HOME\network\admin中。
下面,我们去打开一个Listener.ora看看。
#listener.oraNetworkConfigurationFile:
F:
\oracle\product\10.2.0\db_1\network\admin\listener.ora
#GeneratedbyOracleconfigurationtools.
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
(ADDRESS=(PROTOCOL=TCP)(HOST=jb)(PORT=1521))
)
前几行以#号开头的是注释行,可以不用管它。
文件中其余的内容主要分两大部分,监听器自身的信息和数据库信息。
下面我们先说一下监听器自身的配置信息。
在“LISTENER=”等号后的内容就是监听器自身的信息:
其中最前面的LISTENER,就是监听器的名字。
如果你有多个监听器,下一个监听器的名字可以是LISTENER1,或者是其他的。
第一个监听器ORACLE默认的名字就是LISTENER。
ADDRESS后的内容代表着监听器在什么地方监听客户端连接。
如(ADDRESS=(PROTOCOL=TCP)(HOST=jb)(PORT=1521),说明了监听器要在JB主机的1521端口,用TCP协议来建立监听。
此处的连接协义是TCP,这一点我们不需要更改。
主机名JB,我们要根据实际情况,换为你的主机名。
在这里使用主机的IP地址也可以。
ORACLE的默认端口号是1521,这也可以根据实际需要更改。
端口号我们可以把它想像成大门,在JB主机上的1521端口建立监听,相当于在JB主机上开了一扇编号为1521的大门。
而监听器就是守在门口的接待人员,它一直在门口守着,它负责接待走进1521号大门的人。
通常它的任务就是为走进大门的人按排一个服务生,就是服务器进程。
还有另外一个监听地址:
(PROTOCOL=IPC)(KEY=EXTPROC1),这个其实我们不用管它。
它是ORACLE中调用外部C函数时使用的协议。
此项目不需更改。
一个监听器中通常只需要这两个地址信息就行。
我们可以配置多个监听器,比如:
LISTENER1=
(ADDRESS=(PROTOCOL=TCP)(HOST=主机B)(PORT=1521))
我将LISTENER监听器的配置信息复制了一份,将名字改为了LISTENER1,它将在主机B的1521号大门外守候。
我们在进入监听器控制程序lsnrctl后,可以输入“STARTLISTENER1”,这样就可以启动LISTENER1监听器了。
我们也可以同时启动多个监听器。
但要注意,同一主机的同一数据库,只能有一个监听器,我所配置的LISTENER1,是监听另一台主机上的另一数据库。
监听器和数据库可以不在同一主机上,但这样有时会对性能有一定的影响,通常应该将监听器和数据库存在同一主机中。
这就是监听器的配置,非常简单。
其实监听器的配置并不神秘,监听器是一个程序,要启动它必须有相应的配置信息,你每增加一个“LISTENER1=…………”,就是又增加了一个监听器的配置信息,这样你就又可以启动一个监听器了。
第三节配置文件
上面就已经配置好了监听器,它监听传送到JB主机上的1521端口的信息。
LISTENER.ORA剩下的部分是配置数据库信息的。
下面我们看一下LISTENER.ORA和TNSNAMES.ORA的配置:
客户端配置文件是TNSNAMES.ORA,它通常在客户端的ORACLE_HOME\NETWORK\ADMIN中。
我们也可以使用环境变量tns_admin,自己设置TNSNAMES.ORA的位置。
在它里面,以红字显示的TEST被称为“连接标识符”,ConnectDescriptor,也可以叫连接描述符,其意义就是它里的内容告诉了客户端如何连接,它是描述连接的,因此,它就叫连接描述符。
这个描述符是随便起的,它的名字是什么,如上图所示,在客户端连接数据库时,@符号后的字符就是什么,CONNU1/ABCDE@TEST,这条命令的意义就是,以U1用户连接ORACLE,至于如何连接,方法在TEST中。
客户程序会到TNSNAMES.ORA中,找到TEST连接描述符,在这个描述符中的信息,指示了客户程序将如何进一步的连接服务器。
下面,我们来看看TEST是如何为客户端指明连接方向的。
TEST连接描述符中的内容分为两大块,一块是ADDRESS,即地址信息。
另一块是CONNECT_DATA,也就是连接信息。
在地址部分中,ADDRESS=(PROTOCOL=TCP)(HOST=jb)(PORT=1521),PROTOCOL指明了连接所用的协议,TCP协议,这个通常不需要改变。
HOST是主机名,也可以是IP地址,在这里是主机JB,这正是监听器所在的主机。
PORT是端口号,1521。
已经有一个24小时监守岗位的接待员――监听程序,正在JB主机的1521号大门外守候着客户端的连接。
客户端的连接描述符,也指示客户程序要到JB主机的1521号大门处接头。
客户端程序可以根据这部分信息到网络上寻找JB主机。
只要客户机和服务器的基本网络连接没有问题,客户端程序就可以根据连接描述符中所记载的信息,找到指定的服务器。
当找到指定的服务器后,走进1521号大门,剩下的工作就由监听程序安排了。
客户端连接描述符中地址信息任务到此结束,它可以指引客户程序找到指定的主机,走进指定的大门。
走进大门后,大门内可能不只有一个数据库。
在一台主机上,是可以有多个数据库的。
连接描述符中的CONNECT_DATA部分,就是进一步指定要连接的数据库信息。
它里面的SERVER=DEDICATED,是连接模式,此处是专用。
还可以取值:
SHARED,就是共享服务器连接。
这个我们到下一节再讲。
SERVICE_NAME=UPLOOKING,SERVICE_NAME被称为服务名。
此处服务名定为了UPLOOKING。
服务名要和服务器端的LISTENER.ORA中的GLOBAL_DBNAME一致。
只要它们两个一致就行,至于它们两个的名字,可以随便定。
比如TNSNAMES.ORA中的SERVICE_NAME定为AA,只要LISTENER.ORA中的GLOBAL_DBNAME也定为AA,客户机就可以正常连接。
我们可以把这个看作进入大门后的又一道小门。
监听器配置文件中可以有多个数据库的信息,找到GLOBAL_DBNAME和SERVICE_NAME一致的数据库项,它里面的SID_NAME,就是客户连接的最终目的了。
SID_NAME是数据库的SID。
我们前面说过,知道数据库的SID,是连接的前提条件。
本地连接中就要提前设置环境变量ORACLE_SID。
在我们的客户程序碾转终于在监听器配置文件中找到要连接的数据库的SID后,我们的连接过程,终于快要接近尾声了。
客户程序取出数据库的SID,告诉监听程序,我要连接THREE10G数据库。
监听程序的下一步,就是查看本主机上是否有正在打开的SID为THREE10G数据库,如果有的话,启动一个它的服务器进程,让客户机连接和此服务器进程接上头,监听程序的任务就算完成了。
下面有服务器进程进一步核对密码、打开会话。
连接终于完成。
这个过程有点乱,我们再总结一下整个的连接过程:
步1:
用户发出“CONN用户名/密码@连接描述符”
步2:
客户程序根据连接描述符,在本地主机中的TNSNAMES.ORA中,寻找相应的连接描述符。
步3:
根据TEST连接描述符ADDRESS中的主机名、端口号,开始在网络上连接远端主机。
步4:
客户程序将TNSNAMES.ORA中SERVICE_NAME的值取出,进一步告诉监听器,“我要连接哪个数据库”。
步5:
监听器根据传递过来的“UPLOOKING”,在LISTENER.ORA中寻找GLOBAL_DBNAME等于“UPLOOKING”的项目。
步6:
找到之后,取出SID_NAME的值,THREE10G,这就是客户想要连接的数据库了。
步7:
如果THREE10G数据库正在正常运行中,监听器启动一个服务器进程,将连接转交给此服务器进程。
监听器的任务结束。
明白了这个过程,如果你想让客户机和服务器连接,需要怎样的配置呢?
1.在客户端有一个TNSNAMES.ORA文件。
在它里面:
(1)、连接描述符随便起
(2)、ADDRESS中的HOST和PORT是监听器所监听主机名和端口号,对应LISTENER.ORA中监听器配置部分的ADDRESS。
(3)、SERVICE_NAME对应LISTENER.ORA中的GLOBAL_DBNAME的值。
2.在服务端有一个LISTENER.ORA文件
(1)、监听器配置部分中的ADDRESS指定了在哪台主机的哪个端口处监听。
(2)、数据库配置部分的GLOBAL_DBNAME和客户端的SERVICE_NAME对应
(3)、SID_NAME必须是数据库SID。
第四节SERVICE_NAME初始化参数与动态注册
一、动态注册与静态注册
监听器配置文件Listener.ora中的如下部分:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=UPLOOKING)
(ORACLE_HOME=F:
\oracle\product\10.2.0\db_1)
(SID_NAME=three10g)
目的是让监听器知道可以通过监听器连接的数据库有哪些。
这就叫在监听器上注册数据库。
这种注册方法,也叫静态注册。
除了静态注册外,我们还可以动态注册数据库。
动态注册数据库,不需要在Listener.ora中添加任何有关数据库的信息,只需要设置一个初始化参数SERVICE_NAMES即可。
客户端连接描述符中的SERVICE_NAME,只要等于初始化参数SERVICE_NAMES的值,客户端即可连接到指定的数据库。
下面我们试一下动态注册。
设置初始化参数SERVICE_NAMES的值:
sid=49pid=17>
altersystemsetservice_names=up,looking;
系统已更改。
注意,此处我将SERVICE_NAMES的值设成了两个,因为本身SERVICE_NAMES就是复数,它可以用逗号隔开,指定多个名字。
这里服务名有两个,一个是UP,别一个是LOOKING。
服务器端就做这么多设置就行了。
在客户端TNSNAMES.ORA文件中新增一项:
test2=
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=up)
除了最后的服务名和TEST不一样外,其他都一样。
试验连接:
sid=36pid=18>
connu1/abcde@test2
已连接。
以TEST2为连接描述符,连接正常。
这就是动态注册,数据库中的PMON进程,将把初始化参数的值,传送给监听器。
这样,当客户程序要求连接UP数据库或LOOKING数据库时,监听器根据PMON传送过来的信息,就可以知道UP或LOOKING数据库指的究竞是谁。
如果将上面的过程改为静态注册,需要在LISTENER.ORA中写明UP、LOOKING的信息。
在原来的SID_LIST_LISTENER中,再增加UP、LOOKING的信息。
这是原来的SID_LIST_LISTENER:
(GLOBAL_DBNAME=uplooking)
这是增加UP、LOOKING后的SID_LIST_LISTENER:
(GLOBAL_DBNAME=up)
(GLOBAL_DBNAME=looking)
在SID_LIST_LISTENER中,每一个SID_DESC中,都是一段完整的数据信息的描述。
GLOBAL_DBNAME对应客户端传递过来的服务名。
SID_NAME是最终要连接的数据库SID。
注意,在LISTENER.ORA中添加完UP、LOOKING的相关信息后,必须重新启动监听器,LISTENER.ORA的配置才会生效。
而在客户端更改为TNSNAMES.ORA后,只须保存一下,更改后的TNSNAMES.ORA就当即生效。
二、SERVICE_NAMES
这个参数是必须要有值的,如果你没有为此参数准备值,ORACLE将自动把初化始参数DB_NAME(也就是全局数据库名)的值赋给SERVICE_NAMES。
第五节使用非1521端口
1521端口是ORACLE数据库默认的端口,这是很多人都知道,这也为一些企图侵入数据库中的人提供了方便。
将1521换为自定义一个端口,可以在一定程度上保护数据库。
下面我们来试一下如何将1521端口为其他的端口。
一、静态注册
静态注册中更换端口非常简单。
下面是LISTENER.ORA的内容:
将上面的LISTENER后ADDRESS中的PORT换为你指定的端口,比如1421:
(ADDRESS=(PROTOCOL=TCP)(HOST=jb)(PORT=1421))
LISTENER.ORA中的更改就做这么多。
在LISTENER.ORA中,有一个静态注册的服务:
uplooking。
在客户端的TNSNAMES.ORA文件中,将连接至此静态注册的服务的描述符中的端口,改为1421即可,如下:
test1=
(SERVICE_NAME=uplooking)
关闭并重新打开监听器,或者在监听器控制程序中,输入命令RELOAD,重新加载修改过的配置文件LISTENER.ORA。
在SQL*Plus中,就可以使用TEST1描述符连接数据库了:
sid=36pid=17>
connu1/abcde@test1
二、动态注册
ORACLE的动态注册是由PMON进程负责的。
它根据初始化参数SERVICE_NAMES中的服务名,自动生成LISTENER.ORA中SID_LIST_LISTENER里面的SID_DESC数据