本文由一木译编著
请您多指正!
[@more@]我们会发现用得最多的连接情况是通过TCP/IP网络的连接。在这种情况里,客户端在一台机器上,服务在另一台机器上,它们之间通过TCP/IP网络进行连接。连接从客户端开始,客户端通过ORACLE客户端软件发送请求到数据库里。
TNS是透明网络层(Transparent Network Substrate)简称,且是ORACLE客户端安装过程中已被打包一起安装了,这是作为ORACLE客户端到远程连接。TNS连接字符串能告诉ORACLE软件怎样连到远程的数据库。通常在你机器运行的客户端软件会去读TNSNAMES.ORA文件,而这个字符配置文件通常在$ORACLE_HOME/network/admin目录。
ORCL10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.12.57)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl10g)
)
)
通过这些配置信息ORACLE客户端软件把TNS连接字符串映射成主机名,在数据库服务器上的监听器接受连接的端口,我们希望连接数据库的服务名等。
服务名代表了有普通属性(如服务层次权限和优先权)应用程序集合。提供服务的实例的数目对应用来说是透明的,每一个数据库实例可以通过在监听器上注册方式来提供很多服务。所以,服务对应到物理数据库实例,允许DBA给服务设置一些限制和优秀级。
通过TNS告诉客户端你想连接到哪里去,现在客户知道了你要连接到那里,它会打一个TCP/IP包的连接,连到主机名是HOSTNAME的6666端口上。如果这个数据库服务的DBA安装并配置了ORACLE NET,并且监听器在6666端口上监听连接请求,那么这个连接会被监听接受。在网络环境里,我们在服务器端跑了一个叫做监听器的进程。监听进程其实就是让我们的物理连接连到数据库。当监听进程收到内部连接请求时,它先用自己配置文件检查请求是不是合法,然后拒绝或接受连接。
如果我们是在专一模式下,监听器会创建一个为我们创建一个服务进程。在UNIX平台下,这个操作是通过fork()和exec()系统请求来实现的,新创建的专一服务进程接受监听器建立的连接,这时我们物理连接到数据库上了。在WINDOWS平台下,监听进程会请求数据库进程为这个新连接启动一个新线程。一旦这个线程创建成功,客户端连接被转到新的线程上。
但如果我们是在共享模式下,那就大不相同了。首先监听器要知道这个数据库实例上在运行的调度进程。当连接请求被接受时,监听器会从可用调度进程池中选择一个调度进程。然后监听器会给客户端发送怎样连接到调度进程的信息,或把连接交给调度进程。
由于监听是运行在一台已知主机名和端口的机器上,但是调度进程是通过服务器上端口的随机分配来接受连接信息, 所以由监听器把连接信息发回给客户端。监听器知道用以分配调度进程的随机端口,并根据这个为我们选择调度进程。客户端跟监听断掉联接,直接连到调度进程,现在我们就有到数据库的物理连接了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7248175/viewspace-1000065/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7248175/viewspace-1000065/