tnsnames.ora配置小结
解决ORATNS监听程序当前无法识别连接描述符中请求的服务

解决ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务错误原因分析:检查监听,发现未设置对服务名的监听(默认安装后不自动设置监听)当你的tnsnames.ora 文件中的SERVICE_NAME没有向你想要连接的数据库服务器中的监听器注册的时候,就会出现这个错误信息。
如果你的客户端配置没有发生变化,那么数据库服务器配置就必须进行改变,否则你用来进行连接的SERVICE_NAME就永远不会注册到监听器。
注册到监听器的SERVICE_NAME是由数据库实例的service_names参数来决定的。
解决办法:1. 打开文件"OracleHome/network/admin/listener.ora" ,你将看到如下的内容SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = extproc)))2. 将下面的语句添加到上面的语句中去。
(SID_DESC =(GLOBAL_DBNAME = ORCL2)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(SID_NAME = ORCL2))3. 文件的内容则变成了如下所示SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = extproc))(SID_DESC =(GLOBAL_DBNAME = ORCL2)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(SID_NAME = ORCL2)))4. 保存文件,然后重新启动监听服务就可以了!问题解决主动跟被动的关系1.是让listener主动加载服务,原因是添加(SID_DESC =(SID_NAME = orcl)(ORACLE_HOME = /data/cache1/oracleDB/oracle/product/10.2.0/db_2) )后,在使用lsnrctl start监听程序时会将listene的服务注册到进程监视器(pmon)中。
ORACLE TNS协议分析

ORACLE协议分析1TNS介绍TNS协议是ORACLE服务端和客户端通讯的协议。
TNS协议传输可以使用TCP/IP 协议、使用SSL的TCP/IP协议、命名管道和IPC协议传输,其中TCP/IP协议传输是使用明文传送。
这里我们只分析基于TCP/IP协议上的TNS数据。
ORACLE网络通讯协议TNS有许多版本,并且大部分向下兼容,我们主要oracle 9.2.0.1.0客户和服务间的传输协议,他的协议版本号为312,其兼容到300。
TNS协议有一个通用的头,通用头包含一个请求数据类型。
不同的服务请求和数据传输使用不同的请求数据类型。
对于通常意义的查询操作一般使用数据类型,当出现错误或其他情况时可能使用其他类型。
在分析过程中发现以下类型数据:●查询语句出错会用标记(marker)类型●客户端向服务器请求失败(如不存在的服务ID),服务器会发送拒绝(refuse)类型●客户机登陆会发送连接类型,而服务器返回一个重定向类型数据●当重定向端口连接完成后客户端重现发送连接类型数据,服务器返回接受类型数据,然后能够正常通讯。
2TNS数据格式TNS数据包含一个通用的包头,这个包头包含包校验,包长度和包类型等信息。
不同的类型的数据实现不同功能的数据传输。
Common Packet Header 8 通用包头Data 可变数据2.1 通用包头格式每个TNS完整数据都包含一个通用包头,他说明接受数据的长度及其相关校验和解析的信息。
Length 2 包的长度,包括通用包头Packet check sum 2 包的校验和Type 1 TNS类型Flag 1 状态Header check sum 2 通用头的校验和注:Length:包长度(包括包头)Type:数据包的类型类型号类型说明1 连接(CONNECT)2 接受(ACCEPT)3 确认(ACK)4 拒绝(REFUTE)5 重定向(REDIRECT)6 数据(DATA)7 NULL89 中止(ABORT)1011 重新发送(RESEND)12 标记(MARKER)13 ATTENTION14 控制(CONTROL)2.2 连接包结构(0x01)在客户端和ORACLE要建立连接时,客户端首先发送一个连接结构,然后服务器返回重定向包(参见2.5)。
ora-12545连接错误解决一例

ora-12545连接错误解决⼀例在远端客户端连接RAC数据库时,通过统⼀的服务名连接时经常会出现ORA-12545错误。
在METALINK上查询了⼀下,竟是Oracle的⼀个⼩bug。
环境:ORACLE 11G R2 RAC数据库,两节点。
现象:[oracle@ted35 ~]$sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期五 6⽉ 15 11:57:00 2012Copyright (c) 1982, 2010, Oracle. All rights reserved.SQL> conn as sysdba;ERROR:ORA-12545: 因⽬标主机或对象不存在, 连接失败故障分析:⽤tnsping检查⼀下,发现可以ping通,这是因为tnsping只检查IP地址和端⼝是否能连通,⾄于数据库实例状态,监听注册了哪些服务这些,它是不检查的。
我们看⼀下本地数据库TNSNAMES的配置:TESTRAC =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.125)(PORT = 1521))(LOAD_BALANCE = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = 10.58.12.124)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5)))Oracle在⽂档Note:364855.1:RAC Connection Redirected To Wrong Host/IP ORA-12545中进⾏了描述,并给出了解决⽅法:修改数据库中的初始化参数LOCAL_LISTENER(注:这种⽅法在修改初始化参数后,需要重启监听,重启实例)SQL>conn / as sysdba;Connected.SQL> ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 10.58.12.124)(PORT = 1521)) 'SID ='prodb1';系统已更改。
PLSQL Developer 远程连接Oracle数据库

PL/SQL Developer 远程连接Oracle数据库2011-12-17 15:06:07 我来说两句收藏我要投稿PL/SQL Developer远程连接Oracle数据库网上搜了很多方法,这个可行!1、配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安装了oracle的机上拷贝一个(tnsnames.ora文件)放在指定目录下,因为我已安装oracle,所以直接配置该文件。
# tnsnames.ora Network Configuration File:D:\Oracle11g\product\11.2.0\dbhome_1\network\admin\tnsnames.ora# Generated by Oracle configuration tools.LISTENER_ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))ORACLR_CONNECTION_DATA =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) )(CONNECT_DATA =(SID = CLRExtProc)(PRESENTATION = RO)))ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.25.224)(PORT = 1521)) (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))orcle为远程Oracle数据库的实例名,IP地址和端口也要配置正确。
2、配置完成后,Oracle客户端应该可以连接到远程Oracle 数据库上。
3、使用PL/SQL Developer连接数据库Database内填上远程数据库的SERVICE_NAME ,如图:注:根据实际得到用户名、口令和数据库:用户名:gateway 口令:gateway 数据库:orcl4、连接后在PL/SQL Developer中操作远程数据库,新建一个sql 窗口,如图:5、在新建的SQL 窗口进行远程操作,如图:6、查看单个表数据,如图:7、查看单个表结构,如图:未验证:免安装客户1、oracle不用安装客户端也可以用plsql远程连接首先,在安装ORACLE服务器的机器上搜索下列文件,oci.dllocijdbc10.dllociw32.dllorannzsbb10.dlloraocci10.dlloraociei10.dll (可能服务器没有,如果没有则pl sql 随便用户名密码可以登陆)sqlnet.oratnsnames.oraclasses12.jarojdbc14.jar放到一个文件夹,如oraclient2、配置tnsnames.ora,如果本机上没有安装oracle,可以从安装了oracle 的机上拷贝一个(tnsnames.ora文件在%ORACLE_HOME%\network\admin下)放在上面的目录D:\oraclient下。
Oracle 11g Gateway (ODBC)安装配置

Oracle 11g Gateway (ODBC)安装配置(UTF-8中文支持) 环境信息:操作系统:RHEL 6U4 64bitLANG使用:zh_CN.UTF-8Oracle 数据库版本:Oracle 11g database 11.2.0.1.0安装目录:/home/oracle/product/ora11g服务名称(ORACLE_SID):ora11gOracle Gateway版本:Oracle 11g gateway 11.2.0.1.0安装目录:/home/gateway/product/gateway服务名称(ORACLE_SID):gatewayGbase 8t数据库版本:Gbase 8t V8.5 12.10.FC4G1AEE_1.6.3.43安装目录:/home/gbase8t/8t服务名称(INFORMIXSERER):gbase8tInformix CSDK版本:Informix CSDK 4.10.FC7安装目录:/home/gbase8t/8t连接方式:Oracle Database通过dblink连接到Gateway;Gateway通过CSDK提供的ODBC驱动(unixODBC),访问Gbase 8t/Informix数据库。
组件安装1,Oracle 11g database安装详细过程略Oracle database使用的环境如下:安装时选上中文支持,数据库的字符集使用AL32UTF8。
数据库安装时,如果LANG=zh_CN.UTF-8时,界面有乱码,可使用LANG=en_US.UTF-8来安装。
另一种方式是将中文字体zysong.ttf放到操作系统的/usr/share/fonts/zh_CN/TrueType/目录下。
2,Gbase 8t database安装详细过程略3,Informix CSDK安装详细过程略Gbase 8t database和Informix CSDK使用的环境如下:4,Oracle gateway安装详细过程a.创建gateway 用户,并设置密码[root@rhel64 ~]# useradd -g oinstall -G dba -d /home/gateway -m -s /bin/bash gateway[root@rhel64 ~]# passwd gatewayb.设置用户环境变量:c.解压缩gateway安装包,然后在窗口模式下执行安装[gateway@rhel64 soft]$ unzip linux.x64_11gR2_gateways.zip[gateway@rhel64 soft]$ cd gateways开始安装./runInstaller增加产品语言支持,选上简体中文,服务名使用gateway安装组件选上:Oracle Database Gateway for InformixOracle Database Gateway for ODBC注:仅使用ODBC时,不需要安装Oracle Database Gateway for Informix若选了Gateway for Informix,会要求指定Informix服务器信息开始安装组件如果gateway与oracle database安装在同一个服务器上,可以不用再执行root.sh组件安装完成后,自动调用netca,创建LISTENER如果gateway和oracle database在同一台服务器,需要指定不同的LISTENER端口,这里指定为1522完成网络配置后,整个安装过程完成。
Oracle导dmp出现文件ORA-12154:TNS:无法解析指定的连接标识符问题的解决方案

Oracle导dmp出现⽂件ORA-12154:TNS:⽆法解析指定的连接标识符问题的解决⽅案其实TNS⽆法解析是Oracle操作⾥经常遇到的问题,原因有⼆:(1)Oracle服务器没有装好(⼀般不建议重装,因为Oracle卸载不完全是没法重装的)(2)TNS没有配置现在本⽂给出解决⽅案:现在先测试⼀下tns是否可以ping,成功的界⾯⼤致如下(1)在oracle安装路径的tns配置⽂件⾥添加如下代码# tnsnames.ora Network Configuration File: d:\Oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora# Generated by Oracle configuration tools.ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = ORCL)))其中orcl是我的数据库名称,这个需要根据需要配置(2)配置TNS环境变量环境变量类似于:D:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN补充:下⾯给出Oracle数据库还原的步骤⽰例1、将TESTDB.bmp放置在dpdump⽬录,如下路径:E:\app\Administrator\admin\orcl\dpdump2、创建⽤户create user testdb65 identified by “testdb65” default tablespace users temporarytablespace temp;⽤户授权grant connect,dba to testdb65;3、创建表空间CREATE TABLESPACE NNC_DATA01 DATAFILE ‘D:\tablespace\nnc_data01.dbf' SIZE 500MAUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;CREATE TABLESPACE NNC_INDEX01 DATAFILE ‘D:\tablespace\nnc_index01.dbf' SIZE 100MAUTOEXTEND ONNEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;4、导⼊ bgyhr2是来源库impdp testdb65/testdb65@orcl schemas=testdb65 dumpfile=TESTDB65.dmpimpdp ncjob65/ncjob65@orcl schemas=testdb65 dumpfile=TESTDB65.dmp导出 scott 是要导出的库expdp lfwtrain/a@orcl schemas=当前⽤户 dumpfile=expdptest.dmp以上所述是⼩编给⼤家介绍的Oracle导dmp出现⽂件ORA-12154: TNS: ⽆法解析指定的连接标识符问题的解决⽅案,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
RAC报告
部署RAC实训报告一前言 (4)二实验内容 (5)三实验目的 (5)四实验目标 (5)五实验过程 (5)(一) 安装前准备 (5)1. 准备oracle集群软件安装介质 (5)2. Linux虚拟机准备 (5)3. 主机规划 (5)(二) 配置操作系统环境 (6)1. 创建oracle用户以及dba,oinstall组 (6)2. 配置host,确保hostname能访问 (6)3. 配置内核控制参数 (6)4. 配置oracle用户权限 (7)5. 安装包oracleasm-2.6.18-238.el5-2.0.5-1.el5.i686.rpm (7)6. 配置裸设备 (8)7. 创建oracle安装目录 (9)8. 配置ssh信任 (9)9. 配置oracle用户环境变量 (10)10. 使用集群检查程序来确认clusterware的配置 (10)(三) 安装cluster软件 (10)1. 修改oracle检测文件 (10)2. 弹出欢迎使用的窗口 (10)3. 修改crs的home (12)4. Specify Cluster Configuration配置 (13)5. 添加crs节点 (14)6. 网卡配置 (16)7. 配置OCR以及voting磁盘位置 (18)8. 安装并运行脚本 (19)9. 配置vip服务 (22)10. 安装完成 (26)(四) 安装database软件 (28)1. 修改oracle检测文件 (28)2. 弹出欢迎使用的窗口 (28)3. 选择版本 (29)4. 选择安装路径 (30)5. 节点选择 (31)6. 配置安装并允许脚本 (32)7. 安装完成 (35)(五) 配置Oracle NET (36)1. RAC监听的配置 (37)2. 使用一下命令查看监听状态 (41)3. RAC监听的启动和停止 (41)(六) 配置ASM (41)1. 分发安装ASM (41)2. 配置ASM (41)3. 创建ASM磁盘 (42)4. 在双节点上使用root用户列出ASM磁盘 (42)5. 删除ASM磁盘 (42)(七) 运行DBCA创建数据库 (42)1. 启动DBCA工具 (42)2. Oracle Real Application Cluster数据库 (43)3. 启动asm实例 (43)4. 选择所有节点 (44)5. 配置ASM实例密码 (45)6. 点击OK进行ASM实例的创建 (45)7. 点击“create new”创建新磁盘组。
plsql连接数据库的三种方式
plsql连接数据库的三种⽅式本地pc机上的plsql连接本地Oracle库和其他远程环境的Oracle database库,都必须通过本地pc机上的client配置连接,client连接有三种配置⽅式:⽅式⼀:只需要在本地安装oracle client的tnsnames.ora⽂件中,添加TNS(连接串)即可;tnsnames.ora⽂件所在的⽬录,这个要看⾃⼰的Oracle安装⽬录,每个⼈的安装⽬录可能不⼀样,本⼈的安装⽬录在F盘,所以在下列⽬录下:F:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN在这个⽂件中,添加TNS信息之后,点击保存即可;TEST=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = testlg)(SERVER = DEDICTED)))然后打开plsql登录界⾯,数据库下拉选中,可以找到刚配置的TNS服务名称,对应关系如下图:⽅式⼆:通过oracle client图形界⾯来配置数据库连接(推荐):Net Manager图形配置⼯具对Oracle客户端进⾏配置,该配置⼯具实际上是修改Oracle client的tnsnames.ora⽂件,推荐使⽤这种图形界⾯⽅式。
选择服务名称,点击新增:这个⽹络服务名是⾃⼰给数据库连接起的⼀个名字,就是plsql下拉选中显⽰的名称,可以⾃⼰定义;⼀般连接的协议都是tcp,如果没有特殊情况,都选择这个协议:这个主机名⼀般都是主机ip,如果是本地库,就写本地ip,如果是远程库,就写远程ip:服务名是远程数据库名称,当然,这个也可以配置本地数据:最后关闭时,会提⽰是否保存,⼀定要保持之后,才能写⼊到tnsnames.ora⽂件中⽣效:查看tnsnames.ora⽂件如下,然后打开plsql登录,下拉可以看到对应的名称,和直接修改tnsnames.ora是⼀样的效果:⽅式三:通过instant client来配置数据库连接:Instantclient是oracle连接的⼀个客户端之⼀,通常只是登录使⽤,功能⽐较简单,相⽐oracle client⽽⾔,功能要简单的多,体积⼩,轻量级;具体使⽤如下:1.下载对应版本的Instantclient(注意32位和64位),有免安装版的,⽹上都很多教程;2.然后打开plsql不登录,打开界⾯,然后配置Instantclient客户端路径:配置连接,将instantclient配置进去,例如我的instantclient的位置如下:Oracle主⽬录名:F:\Oracle\instantclientx32\instantclient_12_2OCI库:F:\Oracle\instantclientx32\instantclient_12_2\oci.dll此处配置好之后,提⽰下次登录⽣效,然后关闭plsql;3.配置TNS连接:找到instantclient客户端的TNS配置⽂件,然后将数据库的TNS连接串配置进去:例如我的TNS配置⽂件位置:然后将TNS配置到这个⽂件中:配置好之后,保存就可以了;4.打开plsql登录:plsql登录界⾯登录:这⾥要注意的是,这个数据库指的是刚配置中的⾃定义连接名,⽽且要⼿动输⼊,下拉选中没有配置的选项,但是不影响连接;(oracle client客户端可以看到配置的选项;)上述的三种⽅式配置实际上是两种,前两种是oracle client的不同配置⽅式,第三种是instant client的配置,这三种配置可以是本地库,也可以是远程库,配置好之后,在plsql登录的时候可以根据需要来选择;。
不用安装oracle客户端也可以用plsql连接远程oracle
PL/SQL Developer远程连接Oracle数据库1、配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安装了oracle的机上拷贝一个(tnsnames.ora文件)放在指定目录下,因为我已安装oracle,所以直接配置该文件。
# tnsnames.ora Network Configuration File: D:\Oracle11g\product\11.2.0\dbhome_1\network\admin\tnsnames.ora# Generated by Oracle configuration tools.LISTENER_ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))ORACLR_CONNECTION_DATA =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)))(CONNECT_DATA =(SID = CLRExtProc)(PRESENTATION = RO)))ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.25.224)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))orcl为远程Oracle数据库的实例名,IP地址和端口也要配置正确。
2、配置完成后,Oracle客户端应该可以连接到远程Oracle 数据库上。
Database内填上远程数据库的SERVICE_NAME ,如图:用户名:gateway 口令:gateway 数据库:orcl4、连接后在PL/SQL Developer中操作远程数据库,新建一个sql窗口,如图:5、在新建的SQL 窗口进行远程操作,如图:6、查看单个表数据,如图:7、查看单个表结构,如图:免安装oracle客户端1、 oracle不用安装客户端也可以用plsql远程连接首先,在安装ORACLE服务器的机器上搜索下列文件,oci.dllocijdbc10.dllociw32.dllorannzsbb10.dlloraocci10.dlloraociei10.dll (可能服务器没有,如果没有则pl sql 随便用户名密码可以登陆) sqlnet.oratnsnames.oraclasses12.jarojdbc14.jar放到一个文件夹,如 oraclient2、配置tnsnames.ora,如果本机上没有安装oracle,可以从安装了oracle的机上拷贝一个(tnsnames.ora文件在%ORACLE_HOME%\network\admin下)放在上面的目录D:\oraclient下。
tns写法
TNS(Transparent Network Substrate)是Oracle数据库的一个组件,用于管理Oracle网络连接。
TNS主要提供以下功能:1. 网络服务名称(TNS)的管理2. 监听器的管理3. 网络服务的发现和注册4. 客户端和服务器之间的连接管理TNS文件是Oracle数据库的一个配置文件,用于指定TNS服务名称、监听器地址、网络服务名称等信息。
TNS文件通常包含以下几个部分:1. TNSNames:指定TNS服务名称、监听器地址、网络服务名称等信息。
2. TNSGlobal:指定全局的TNS服务名称、监听器地址、网络服务名称等信息。
3. TNSService:指定服务名称和相关信息。
以下是一个TNS文件的示例:TNSNames# 服务名称ORCL -联机数据库服务# 监听器地址ORCLPUB - URL:端口号TNSGlobal# 网络服务名称ORCL - ORCLTNSService# 服务名称ORCL - ORCL在TNS文件中,每个部分的格式如下:# 部分名称# 部分内容例如,在TNSNames部分中,第一行为“TNSNames”,第二行为“服务名称”和相关信息,最后一行为空行。
在TNSGlobal部分中,第一行为“TNSGlobal”,第二行为“网络服务名称”和相关信息。
在TNSService部分中,第一行为“TNSService”,第二行为“服务名称”和相关信息。
需要注意的是,TNS文件的具体格式和内容可能会因Oracle版本和配置而有所不同,具体情况可以参考Oracle官方文档。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
tnsnames.ora配置小结 oracle网络配置 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下。 1. sqlnet.ora—–作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。 例如我们客户端输入 sqlplus sys/oracle@orcl 假如我的sqlnet.ora是下面这个样子 SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME) 那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的 ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名 如果我是这个样子 NAMES.DIRECTORY_PATH= (TNSNAMES) 那么客户端就只会从tnsnames.ora查找orcl的记录,括号中还有其他选项,如LDAP等并不常用。 2. Tnsnames.ora——这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似 NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。 PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。 HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(for WINDOWS) or ifconfig(for UNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在 hosts文件中加入数据库侦听所在的机器的机器名的解析。 PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。 SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令察看。 ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接 #你所要连接的时候输入得TNSNAME ORCL = (DESCRIPTION = (ADDRESS_LIST = #下面是这个TNSNAME对应的主机,端口,协议 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = #使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节 (SERVER = DEDICATED) #对应service_name,SQLPLUS>;show parameter service_name; 进行查看 (SERVICE_NAME = orcl) ) ) #下面这个类似 SALES = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = sales) ) ) 注意:如果数据库服务器用MTS,客户端程序需要用database link时最好明确指明客户端用dedicated直连方式,不然会遇到很多跟分布式环境有关的ORACLE BUG。一般情况下数据库服务器用直接的连接会好一些,除非你的实时数据库连接数接近1000。 3. listener.ora——listener监听器进程的配置文件 关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。 Listener.ora文件的例子 #listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora # Generated by Oracle configuration tools. #下面定义LISTENER进程为哪个实例提供服务 这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME 其中GLOBAL_DBNAME不是必需的除非 #使用HOSTNAME做数据库连接 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = boway) (ORACLE_HOME = E:/oracle/product/10.1.0/Db_2) (SID_NAME = ORCL) ) ) #监听器的名字,一台数据库可以有不止一个监听器 #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名 LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521)) ) 上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。 监听器的操作命令 $ORACLE_HOME/bin/lsnrctl start,其他诸如stop,status等。具体敲完一个lsnrctl后看帮助。 上面说到的三个文件都可以通过图形的配置工具来完成配置 $ORACLE_HOME/netca 向导形式的 $ORACLE_HOME/netmgr 本人比较习惯netmgr, profile 配置的是sqlnet.ora也就是名称解析的方式 service name 配置的是tnsnames.ora文件 listeners配置的是listener.ora文件,即监听器进程 具体的配置可以尝试一下然后来看一下配置文件。 这样一来总体结构就有了,是 当你输入sqlplus sys/oracle@orcl的时候 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进程处于可用状态。最普遍的通过网络连接。 以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。 init.ora中的Remote_Login_Passwordfile对身份验证的影响 三个可选值: NONE:默认值,指示Oracle系统不使用密码文件,通过操作系统进行身份验证的特权用户拥有SYSORA和SYSOPER权限 EXCLUSIVE: 1.表示只有一个数据库实例可以使用密码文件 2.允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用户 SHARED: 1.表示可以有多个数据库实例可以使用密码文件 2.不允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用户 所以,如果要以操作系统身份登录,Remote_Login_Passwordfile应该设置为NONE 当登录用户不是ORA_DBA组和ORA_OPER组成员时,登录数据库需要在Oracle中创建当前操作系统用户相同的用户名,如果当前用户是域用 户,则名称为:domainname/yourname,如果是本地计算机用户,则名称为:computername/yourname 创建方法: create "domainname/yourname" identified externally; 操作系统,修改HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0下面添加AUTH_PREFIX_DOMAIN,值设为FALSE,在创建Oracle用户时可以忽略 掉域名