sqlplus 命令支持名为@<connect_identifier> 的参数,链接数据库
最近遇到一个问题 我的数据库实例名是orc,有一个用户密码scott/tiger,fedora12 环境, 如果我直接用 conn scott/tiger,可以登录oracle,但是如果我加一个conn scott/tiger@orc 则会报错
ERROR: ORA-12154: TNS:could not resolve the connect identifier specified
然后用tnsping orc也报错
[oracle@dagu ~]$ tnsping orc
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 12-FEB-2011 09:01:49
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
TNS-03505: Failed to resolve name
才想起应给没有配置服务名,于是通过netca 创建一个Net服务名orc链接数据库。再执行
[oracle@dagu ~]$ tnsping orc
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 12-FEB-2011 09:03:57
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orc)))
OK (0 msec)
也可以在/u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora($ORACLE_HOME/network/admin/tnsnames.ora)中直接添加
ORC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orc)
)
)
也可以。
还有listener.ora------listener监听器进程的配置文件
listener进程是接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
图形的配置工具来完成配置:netca 向导形式的 netmgr
其中netmgr中 profile 配置的是sqlnet.ora也就是名称解析的方式;
service name 配置的是tnsnames.ora文件;
listeners配置的是listener.ora文件,即监听器进程。
你输入sqlplus sys/oracle@orc的时候
1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME
2. 则查询tnsnames.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name
3. 如果listener进程没有问题的话,建立与listener进程的连接。
4. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。
5. 这时候网络连接已经建立,listener进程的历史使命也就完成了。
几种连接用到的命令形式
1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。(应该是服务器端的listener进程必须要处于可用状态,才能为客户端提供服务)
也可以不用配置NET服务名,直接按照“conn 用户名/密码@ip:port/service_name”即可链接数据库。当连接的数据库监听端口是默认的1521则可以省略端口号,如:conn sl/sl@10.1.1.1/orc