oracle连接数据库报错:ORA-01034: ORACLE not available(Oracle 不存在),ORA-27101: shared memory realm does not exist
花一天半的时间解决客户端连接服务端的oracle数据库,无法连接问题。ORA-01034: ORACLE not available(Oracle 不存在),ORA-27101: shared memory realm does not exist 分析:
前几天还可以连接数据库,但是昨天开始,本地无缘无故的不能连接服务端数据库。网上很多人说造成这个问题的原因是异常关机
,数据库没有在关机之前关闭。我公司人说在前几天确实有人重启过电脑,就当是这个原因吧,有时间一定要把真正原因找出来。
下面主要的任务还是解决问题先。遇到问题的详细过程:
通过plsql访问数据报错:ORA-01034: ORACLE not available(Oracle 不存在),ORA-27101: shared memory realm does not
exist(共享内存领域不存在);通过程序登录同样报这个错误。
遇到这种问题,大部分人第一步想到的是检查服务端配置文件是否有问题,所以打开你的Oracle安装路径(这里必须是服务端的,
因为服务端才有监听文件listener.ora,客户端只有sqlnet.ora和tnsnames.ora两个文件)主目录下面的Admin文件夹有三个文件(
我的服务端安装路径是:E:\opt\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN) ,分别是:listener.ora和sqlnet.ora和
tnsnames.ora。打开sqlnet.ora和tnsnames.ora 匹配本地(就是你本地的Oracle客户端主目录)的两个文件sqlnet.ora和
tnsnames.ora,检查两个tnsnames.ora的ip和prot是否一致,必须要相同。下面本人分享下本人能正常访问的,服务端和客户端两
个文件全部的参数配置 分别是本地:sqlnet.ora本地:tnsnames.ora 服务端:sqlnet.ora 服务端:tnsnames.ora 如下:
本地客户端sqlnet.ora 配置文件全部copy如下:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
服务端sqlnet.ora 配置文件全部copy如下:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
ADR_BASE = E:\opt\oracle\product\11.2.0\dbhome_1\log
本地客户端tnsnames.ora和服务端tnsnames.ora也是一样的:tnsnames.ora配置文件全部copy如下:
# tnsnames.ora Network Configuration File: C:\instantclient_12_1\tnsnames.ora
# Generated by Oracle configuration tools.
CCNF2008 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 180.166.155.134)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ccnf_2008)
)
)
前面打星号的可以忽略。CCNF2008是本地客户连接数据库的别名,plsql登录的入口的,数据库输入框就是填写它了。prot=1521不
用多说。SERVICE_NAME的值就是ccnf_2008 是你在服务端实例化出来的数据库名称。其他参数照搬。
服务端的listener.ora文件全部copy下面如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ccnf_2008)
(ORACLE_HOME = E:\opt\oracle\product\11.2.0\dbhome_1)
(SID_NAME = ccnf_2008)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =180.166.155.134)(PORT = 1521))
)
ADR_BASE_LISTENER = E:\opt\oracle\product\11.2.0\dbhome_1\log
检查完上面三个文件ip,端口,和其他参数都匹配就可以排除不是配置文件原因。
排除配置文件原因后,需要用netmanager管理器使用用户测试连接是否成功,如果用户登录测试成功,在外网telnet ip+端口命令
连接失败,说明是网络端口没有对外开放,需要建立端口1521的出入站规则。如果还不行,进入cmd,命令:lsnrctl stop 停止监
听,再次重启监听:lsnrctl start; 再进入sql操作:sqlplus /nolog执行,在执行 conn / as sysdba 以管理员身份连接数据
库 startup 启动数据库,如果已经启动先 卸载数据shutdowm immediate 关闭数据库,再startup。再次在外网telnet ip +端口,
如果还不行就:来源网络查找:http://blog.csdn.net/inthirties/article/details/4558769最后面的方法
1. 打开注册表
2. 找到[HKEY_LOCAL_MACHINESOFTWAREORACLEKEY_OraDb10g_home1]这个目录
在其下加入一个字符串值
键:USE_SHARED_SOCKET
值: TRUE
3. 重启监听服务
如果上面步骤还不行,估计最有可能的原因就是ip和机器名和127.0.0.1这个区别问题。所以请在C:\Windows\System32\drivers
\etc ,打开hosts文件,添加一个映射。 127.0.0.1 ip地址。设置完成映射后,重启监听、startup数据库。本人就是通过这个
步骤解决问题的。
最新文章
- ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略(转)
- Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序
- webApi 导入Excel
- 设计模式之美:Mediator(中介者)
- Nginx环境下http和https可同时访问方法
- Daily Scrum 10.30
- TP自带的缓存机制
- JavaScript的DOM操作(1)
- [翻译]HTML中不知名的语义标签
- [BZOJ 1081] [SCOI2005] 超级格雷码 【找规律】
- C++ 面向对象学习2 构造方法
- HDU 4990 Reading comprehension
- LINQ TO SQL和Entity Framework 的关系 你了解多少?
- eclipse中tomcat的add and Remove找不到项目
- python中sorted()和set()去重,排序
- 如何生成指定架构的Linux内核默认配置文件
- bzoj千题计划272:bzoj4557: [JLoi2016]侦察守卫
- 【CC2530强化实训02】普通延时函数实现按键的长按与短按
- Linux-cpu分析-vmstat
- 20155207 2016-2017-2 《Java程序设计》第八周学习总结
热门文章
- js遍历商品编码
- windows命令之PING DIR DEL CD TASKLIST (转)
- 《C++ Primer Plus》15.5 类型转换运算符 学习笔记
- 多图上传-webupload 使用详解
- ajax jquery校验用户是否已经注册
- web基础----->;servlet中得到请求的数据
- JS-【同页面多次调用】轮播特效封装-json传多个参数
- js的字符串charAt()方法
- 【BZOJ2453】维护队列/【BZOJ2120】数颜色 分块
- 【BZOJ1045】[HAOI2008] 糖果传递 贪心