Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300010
  • 博文数量: 54
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 606
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-03 22:43
文章分类
文章存档

2011年(3)

2010年(26)

2009年(2)

2008年(23)

我的朋友

分类: Oracle

2010-05-26 15:30:56

引出:
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权限

sql>grant sysdba to 用户;



阅读(1525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~