So Easy! Oracle在Linux上的安装配置系列六

So Easy! Oracle在Linux上的安装配置系列六


oracle数据库的几种连接方法


上篇内容回顾

一个监听器配置文件中有一个或多个监听的协议地址,支持服务器的信息和控制运行时行为的参数,监听器配置存储在名为listener.ora的配置文件中,因为所有的配置参数都有默认值,所以在没有配置的情况下它仍然可以被启动和使用,这个默认监听器名字是LISTENET,它监听在以下TCP/IP协议地址,(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))但这个默认监听器它在启动时不支持任何的服务 监听器转发客户端的请求到支持的服务上,服务能被静态的配置在linstener.ora文件中,也能自动注册到监听器中,Oracle PMON 进程负责向监听器动态服务注册新Oracle数据库服务名,也就是说,在创建新oracle数据库时,它们将自动向监听器注册服务,PMON进程将在每个新数据库在服务器上创建之后更新listerer.ora文件。

为了完成自动服务注册,init.ora文件或spfile必须包含以下参数:

SERVICE_HAMES

INSTANCE_NAME

动态服务注册不要求在listener.ora文件中做任何手动配置

Listener主要负责下面的几方面功能

配置简单减少了必须的参数SID_LIST_LISTENER_NAEME

连接时的故障转移 

连接的负载均衡


配置客户机以连接到数据库,可使用4种可行的方法之一连接到某个Oracle数据库, 这4种方法分别为:本地命名

简易连接命名

目录命名

外部命名

在前面的文单中,说明了连接描述符和连接标识符,连接标识符可以是连接描述符本身,也可以是一个能解析为连接描述符的简单名字(如orcl),一般使用的简单连接标识符称为net service name(网络服务名),使用网络服务名需要维护网络服务名和连接描述符信息之间所有映射的一个中心信息库(central repository),以便Oracle验证这些网络服务名。因此,在一个用户使用网络服务名orcl启动连接进程时

.oracle将搜索中心信息库查找orcl的连接描述符。找到连接描述符后,Oracle Net会为指定服务器上的数据库初始化一个连接 

Oracle允许几种类型的命名信息库,可用下列4种命名方法访问存储在这些位置中的映射信息。

本地命名(local nameing):使用存储在每个客户机上的名为tnsname.ora的文件连接到数据库服务器

简易连接命名(easy connect nameing):允许连接而无需任何服务名配置

外部命名(external nameing):使用第三方命名来解析服务名

目录命名(driectory nameing):使用一个集中式的符合LDAP的目录服务器来解析服务名


对应的配置客户机以连接到数据库,可使用4种可行的方法之一连接到某个Oracle数据库, 这4种方法分别为:本地命名

简易连接命名

目录命名

外部命名

不管使用的是何种命名方法,名字解析过程都是相同的。每种命名法都遵循以下步骤将连接描述符解析为网络服务名.

①、选择命名方法----本地、简易连接、外部命名或目录服务命名

②、映射连接描述符到服务名

③、配置客户机以使用步骤1中选择的命名方法


本命名法

之前的示例中其实我们使用的就是本地命名法,使用这种方法,在名为tnsnames.ora的本地化配置文件 中存储服务名及其连接描述符,此文件默认存储在$ORACLE_HOME/network/admin目录中.

可将tnsnames.ora文件视为一个类似于/etc/hosts的文件,后者包含UNIX/linux系统的网络信息

除tnsnames.ora文件外,如果客户机机器使用本地命名方法的话,还要使用另一个名为sqlnet.ora的文件 ,sqlnet.ora文件位于每个客户机上,它包含重要的网络配置参数 

sqlnet.ora的配置项,第四篇文章中有讲到。

tnsnames.ora和sqlnet.ora配置文件在UNIX/linux系统上位于$ORACLE_HOME/network/admin目录中。不过,这两个文件可放置于任何你想放的地方。如何把它们放在非默认位置,则必须使用TNS_ADMIN环境变量为Oracle指定这两个文件的位置

一个手工编写的trnsames.ora文件的示例

orcl =
(DESCRIPTION=
       (ADDRESS_LIST=
     (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.23.130)(PORT = 1521))
               )
       (CONNECT_DATA =
     (SERVICE_NAME = orcl_Oracle.Study.org)
       )
        )

sqlnet.ora文件的内容

NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES= (NTS)

最后一行说明Oracle Net将用来解析连接标识符为连接描述符的连接方法.NAMES.DIRCROTY_PATH参数指定Oracle Net将用来解析连接标识符为连接描述符的命名方法的顺序。在本例中,TNSNAMES

为第一设置 ,因此Oracle Net将默认使用tnsnames.ora文件。如果它不能使用tnsname.ora文件进行连接。则试着通过EZCONNECT方法进行连接 。

如果希望将EZCONNECT定为默认方法,可手动编辑sqlnet.ora文件,使SZCONNECT成为NAMES.DIRECTORY_PATH参数中的第一个值,如下所示:

NAMES.DIRECTORY_PATH= (EZCONNECT,TNSNAMES,)
SQLNET.AUTHENTICATION_SERVICES= (NTS)


简易连接命名

简易连接方法的唯一条件是必须在客户机和服务器上都具有TCP/IP协议的支持,而无须配置tnsname.ora文件,  服务器也必须有静态注册监听设置 

下面是这种新连接方法的一般句法:

CONNECT "host[:port][/service_name][:server][/instance_name]"

也可以使用sys以DBA身份登录

CONNECT "host[:port][/service_name][:server][/instance_name]" as sysdba


简易连接法实验:

  1. 查看监听器状态可以看到服务器是静态注册的设置

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-APR-2015 23:20:18

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                           LISTENER
Version                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                19-APR-2015 19:35:53
Uptime                       0 days 3 hr. 44 min. 25 sec
Trace Level                off
Security                    ON: Local OS Authentication
SNMP                        OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Oracle/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "orcl_Oracle.Study.org" has 1 instance(s).
 Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

2 .查看数据库是否启动 没有后台进程也没有共享内容段

$ ps -ef | grep ora
oracle     2450      1        0 19:35 ?           00:00:07 /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inh
root       3494      3468  0 22:58 pts/0    00:00:00 su - oracle
oracle     3496     3494  0 22:58 pts/0    00:00:00 -bash
oracle     3653      1        0 23:04 ?          00:00:00 oracleorcl (LOCAL=NO)
root       3688   3661     0 23:08 pts/1    00:00:00 su - oracle
oracle     3690   3688    0 23:08 pts/1    00:00:00 -bash
oracle     3774   3690    1 23:22 pts/1    00:00:00 ps -ef
oracle     3775   3690   0 23:22 pts/1    00:00:00 grep ora

$ ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages


3.在win7即时客户端中的SQL * Plus 连接oracle服务器

[c:\~]$ cd d:\instantclient_11_2
[D:\instantclient_11_2]$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:23:46 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0

可以看到普通用户在实例没有启动的时候无法连接到数据库

下面我们用sys用户使用dba权限登录数据库并启动数据库实例

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:27:32 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size    2220200 bytes
Variable Size  616566616 bytes
Database Buffers  444596224 bytes
Redo Buffers    5554176 bytes
Database mounted.
Database opened.

普通用户也可以登录了

[D:\instantclient_11_2]$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:28:30 2015

Copyright (c) 1982, 2010, 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

4. 在服务器监听文件中注释掉静态注册监听项:

)

5.重新加载监听器配置文件 

$ lsnrctl reload
$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-APR-2015 23:43:55

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                19-APR-2015 23:42:16
Uptime                    0 days 0 hr. 1 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Oracle/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "orcl.Oracle.Study" has 1 instance(s).
 Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_Oracle.Study.org" has 1 instance(s).
 Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

可以看到监听器没有静态注册设置了

数据库实例也是启动的

SQL> COL host_name FOR a14
SQL> COL instance_name for a14
SQL> SELECT host_name,instance_name,status FROM v$instance;

HOST_NAME      INSTANCE_NAME  STATUS
--------------       ----------------------   ----------------
Oracle.Study     orcl                             OPEN

6.使用win7即进客户端连接远程oracle服务器,依然可以连接 

$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:37:17 2015

Copyright (c) 1982, 2010, 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

7.关闭数据库实例

[oracle@Oracle admin]$ sqlplus  / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 19 23:46:47 2015

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.

8.使用win7即进客户端连接远程oracle服务器

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:43:21 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

这个实验说明,监听器在没有静态注册设置的时候如果实例没启动是无法连接到数据库的,这也很容易理解,因为数据库相对于客户端来说,它表现为一个服务,监听器只是这个数据库服务的一个代理。动态注册是数据库实例启动后,由PMON进程把数据库服务注册进监听器, 现在实例没启动也就不存在可注册的服务了.

下面启动实例,并恢复listener.ora静态注册部分重新加载监听器配置文件重命名上次课创建的密码文件

[oracle@Oracle ~]$ cd $ORACLE_HOME/dbs 
[oracle@Oracle dbs]$ ls
hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl
[oracle@Oracle dbs]$ mv orapworcl orapworcl.bk

尝试使用普通用户和DBA进行远程连接 

[D:\instantclient_11_2]$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:45:33 2015

Copyright (c) 1982, 2010, 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 option

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:55:23 2015

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01031: insufficient privileges

可以看到普通用户可以连接,而dba用户连接时出错,这就是密码文件的作用

以上实验证明连接时的过程都是一样的,只是连接方法语句不同


外部命名法

外部命名法就是使用像NIS(Network Infomation Service)这样的外部命名服务 

目录命名法这里不做解释




本篇的内容到此为止,恭候阅读,不对的地址请批评指证,讨论. 

                                                                                                                                                   qq:276631587

                                                                                                                                               good luck!



本文出自 “关注linux技术” 博客,请务必保留此出处http://werewolftj.blog.51cto.com/1606482/1636171

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。