引出:
Qwhy同学的oracle数据库连接不上,错误提示为:ora 12560 tns 协议适配器错误
网上解决方案大体三种:
1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板, 启动oraclehome92TNSlistener服务。 2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务 面板,启动oracleserviceXXXX,XXXX就是你的database SID. 3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SI D设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建 ,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下 输set oracle_sid=XXXX,XXXX就是你的database SID. 经过以上步骤,就可以解决问题。
|
一一试过均不成立,最后发现是不小心改了配置文件(tnsnames.ora数据库里的实例描述被修改了,还有listener.ora中的主机名).可见自己最近缺少思考,有问题就google.在此反思~
顺带学习整理配置文件等相关信息
在$ORACLE_HOME\network\admin下有三个网络相关配置文件:listener.ora;sqlnet.ora;tnsnames.ora
先来sqlnet.ora文件配置:
# SQLNET.ORA Network Configuration File: D:\oracle\ora92\network\admin\sqlnet.ora # Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
|
其中:
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)作用如下:
当我们用sql>conn 连接时候,客户端就会在tnsnames.ora中查找iso的记录,如果找不到则尝试把iso当作主机名,通过网络途径查找其对应的ip,然后连接这个ip上对应GLOBAL_DBNAME=iso的实例.
SQLNET.AUTHENTICATION_SERVICES= (NTS)与oracle的os认证方式有关
sqlnet.ora文件,SPFILE文件(命名方式spfile+sid)和口令文件PWDsid.ora(命名方式为pwd+sid)三者协同作用实现身份认证。
sqlnet.ora中:
SQLNET.AUTHENTICATION_SERVICES= (NTS)|(NONE) --1 其中:nts为操作系统认证方式,不需要口令文件,而none为口令文件认证。
SPFILE文件中:
REMOTE_LOGIN_PASSWORDFILE=(NONE)|(EXCLUSIVE)|(SHARED) --2 其中:NONE不使用口令认证方式,使用os认证。
EXCLUSIVE使用口令文件认证,但只有一个数据库实例可以使用此文件。
SHARED口令文件认证,与EXCLUSIVE不同的是有多个数据库实例可以使用此文件。
只有internal|sys帐号可以被识别,即使文件中存有其他用户信息,也不允许以sysoper/sysdba登陆。
|
当1为NTS,2为NONE时为操作系统认证方式
当1为NONE,2为EXCLUSIVE|SHARED时,配合口令文件,为口令文件认证方式
当1为NTS,2为EXCLUSIVE|SHARED时,配合口令文件,这个时候os认证和口令认证同时起作用。
sqlnet.ora可以实现在数据库层的ip限制
tcp.validnode_checking=yes
#允许访问的ip tcp.invited_nodes =(ip1,ip2,……)
#不允许访问的ip tcp.excluded_nodes=(ip1,ip2,……)
|
当不允许访问的ip中的ip连接过来会有错误提示:
ERROR: ORA-12537: TNS: 连接已关闭
附上:1:internal,sys,system用户之间的区别
SYS and INTERNAL are synonymous. SYS should only be used administatively. SYS (and internal) is special. You cannot create a trigger on a SYS table, you cannot have a read only transaction as SYS and so on.
SYSTEM is simply an account that holds some data dictionary tables/views (not many) and is a DBA. SYSTEM is a "regular" user -- nothing special about it.
Use SYS/internal as little as possible, I never use system for anything (Oracle software might use it now and again to install some tables/run some scripts but thats it). Create your own DBA accounts.
|
sys是数据用户,system是dba用户,internal相当与sys as sysdba
2:赋予用户sysdba权限
阅读(1574) | 评论(0) | 转发(0) |