求救 Oracle的ORA-12560和ORA-12514报错问题

qiongshenshen7248 2019-08-02 04:54:13
刚毕业不久 入职医疗软件公司
oracle数据库和powerbuilder(PB)之前都没接触过
所以工作了一个月都只是熟悉PB系统 跑的是本地数据库

前天开始给了个新程序让看 不过是连公司服务器的
我用navicat连了下 报ORA-12638: 身份证明检索失败
然后去sqlnet改成NONE 后面就连不上本地的服务器了


然后这两天 天天瞎折腾 现在情况是
引用
PB Version: 9.0.3
Oracle:11.2.0


Path顺序是:
引用
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;
E:\app\lzy23\product\11.2.0\client_1\bin;
E:\app\lzy23\product\11.2.0\dbhome_1\bin;


如果dbhome在client上面
sql plus连接数据库会出现下面的错误
引用
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist


所以我调成client在上面 之前也是client在上面 其他同事也是client在上面


注册表看过了 是没错的.
引用
Oracle_Sid=orcl


下面是各程序连接数据库的情况

引用
Navicat: 本地数据库 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
公司数据库 OK

NetManager: 本地数据库 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
公司数据库 OK

SqlPlus: 连不上数据库 ORA-12560:TNS:协议适配器错误

PB DB: 本地数据库 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
公司数据库 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

之前是ORA-12154 解释标识符出错 好像是安装目录带括号导致的 重装就没报错了



cmd打lsnrctl出来的是dbhome的程序
所以我就放dbhome的几个配置文件
如果大神们有需要就再放client的出来

sqlnet.ora

# sqlnet.ora Network Configuration File: E:\app\lzy23\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

SQLNET.AUTHENTICATION_SERVICES= (NONE)

NAMES.DIRECTORY_PATH= (TNSNAMES)

ADR_BASE = E:\app\lzy23


listener.ora

# listener.ora Network Configuration File: E:\app\lzy23\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:\app\lzy23\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\lzy23\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Lzyyyyy)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

ADR_BASE_LISTENER = E:\app\lzy23


tnsnames.ora


# tnsnames.ora Network Configuration File: E:\app\lzy23\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

GMYKYY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)



ORA-12560在网上的三个方法这几天都走了几遍 也没什么多余空格给我删
希望大神可以帮忙解决这个问题吧.



...全文
513 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
天凯科技 2019-10-25
  • 打赏
  • 举报
回复
这个问题解决了吗?直觉应该是环境变量TNS_ADMIN的问题,设置一下让你那些客户端识别正确的读取tnsnames.ora文件路径即可
qiongshenshen7248 2019-08-15
  • 打赏
  • 举报
回复
引用 46 楼 minsic78 的回复:
好吧,其实你应该只装一个32位客户端的……
现在全改client 暂时先用着吧 再搞下去工作都要没了. 这帖子到现在已经不是oracle的问题了 就结贴吧.
minsic78 2019-08-13
  • 打赏
  • 举报
回复
好吧,其实你应该只装一个32位客户端的……
qiongshenshen7248 2019-08-13
  • 打赏
  • 举报
回复
引用 44 楼 minsic78 的回复:
可能问题出在PB上,看看它是不是有特别的设置把某些操作系统的设置给覆写了
没有 PB9可设置的东西非常少...
minsic78 2019-08-12
  • 打赏
  • 举报
回复
如果怀疑变量没生效,可以在脚本中打印变量确认
qiongshenshen7248 2019-08-12
  • 打赏
  • 举报
回复
引用 38 楼 Summer9856 的回复:
为什么不用PLSQL+client 连呢?tnsnames改一下则个文件设置一下环境变量不就好了吗?我也是mysql转到Oracle刚工作没多久,
现在想解决的问题是PB中连接oracle出现12557的问题 不是用不用别的数据库开发软件问题.
引用 40 楼 minsic78 的回复:
把ORACLE_BASE变量也设置下看看
ORACLE_BASE二者都是同一个文件夹 bat没做变动 但现在bat运行改变环境变量 跟没运行一个样 现在手动改环境测试
引用
测试操作: 2019年8月12日08:45 path中client优先 oracle_home改client TNS同上. Navicat 修改client的oci 结果: OB 12541 无监听 navicat OCI not loaded PB 远程数据库 连接成功 本地数据库 12541 无监听
=-==-=-=-===-=-=-=-=-=-=-=-=-=-=-=
引用
测试操作: 2019年8月12日9:45 path中client删除 oracle_home改dbname TNS同上. Navicat 修改dbname的oci 结果: PB OCI.DLL查找失败? Navicat两个数据库连接成功 PB OCI查找失败.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
引用
测试操作: 2019年8月12日10:05 path中client添至最尾端 结果 OB OCI.DLL查找失败 PB 两个数据库均报ORA-12557
现在看起来 所以环境调成client 至少PB还能跑个公司服务器了.
minsic78 2019-08-12
  • 打赏
  • 举报
回复
可能问题出在PB上,看看它是不是有特别的设置把某些操作系统的设置给覆写了
qiongshenshen7248 2019-08-12
  • 打赏
  • 举报
回复
引用 42 楼 minsic78 的回复:
如果怀疑变量没生效,可以在脚本中打印变量确认
打印了 也的确输出了 但也的确是不生效
qiongshenshen7248 2019-08-09
  • 打赏
  • 举报
回复
引用 36 楼 minsic78 的回复:
如果你的PB要32位的客户端,那就到32位客户端配置tnsnames.ora。 如果是环境变量的问题,也不麻烦,写个BAT,为PB设置专门的环境变量,然后调用PB。
把系统path中client路径删掉了.写了个bat文件调用. 运行之后提示OCI not be loaded.也就是环境变量没变. 你看看BAT有没什么问题?

:: 设置环境变量运行PB
:: 关闭终端回显
@echo off

 :: 现环境变量输出
set Env_Path=%PATH%
set TNS=%TNS_ADMIN%
set ORA=%ORACLE_HOME%
@echo ====元环境变量====
@echo TNS:%TNS%
@echo ORA_BIN:%ORA%
@echo Path:%Env_Path%

 
:: 改变环境变量.仅为当前的环境 并未永久改变.
set TNS=D:\Oracle\product\11.2.0\client_1\network\admin
set ORA=D:\Oracle\product\11.2.0\client_1
set Env_Path=D:\Oracle\product\11.2.0\client_1\bin;%PATH%

@echo  
@echo ====局部环境变量设置====
@echo TNS:%TNS%
@echo ORA_BIN:%ORA%
@echo Path:%Env_Path%

@echo  
@echo ====局部环境运行PB====
set TNS_ADMIN=%TNS%
set ORACLE_HOME=%ORA%
set PATH=%Env_Path%

@echo TNS_ADMIN:%TNS_ADMIN%
@echo ORACLE_HOME:%ORACLE_HOME%
@echo PATH:%PATH%

start "" "D:\Sybase\PowerBuilder 9.0\pb90.exe"

pause
minsic78 2019-08-09
  • 打赏
  • 举报
回复
如果你的PB要32位的客户端,那就到32位客户端配置tnsnames.ora。 如果是环境变量的问题,也不麻烦,写个BAT,为PB设置专门的环境变量,然后调用PB。
qiongshenshen7248 2019-08-09
  • 打赏
  • 举报
回复
引用 34 楼 minsic78 的回复:
[quote=引用 33 楼 minsic78 的回复:] 说明这里用的“orcl”和你用navicat使用的还不是同一个。
不对,你之前tnsnames.ora里面不是设置了gmyy什么的名字吗?这里为什么用orcl?[/quote] 填zmtyy或者gmykyy这些网络服务名的话 报的是ORA-12557. 网络上的普遍解决方法是删除系统Path中的client路径. 但之前测试 一旦删除的话 PB连oracle都连不了 报错oci not be loaded. 估摸着PB需要32位的客户端oci支持连接吧.
minsic78 2019-08-09
  • 打赏
  • 举报
回复
引用 33 楼 minsic78 的回复:
说明这里用的“orcl”和你用navicat使用的还不是同一个。
不对,你之前tnsnames.ora里面不是设置了gmyy什么的名字吗?这里为什么用orcl?
minsic78 2019-08-09
  • 打赏
  • 举报
回复
说明这里用的“orcl”和你用navicat使用的还不是同一个。
qiongshenshen7248 2019-08-09
  • 打赏
  • 举报
回复
引用 31 楼 minsic78 的回复:
[quote=引用 30 楼 qiongshenshen7248 的回复:] [quote=引用 29 楼 minsic78 的回复:] [quote=引用 28 楼 qiongshenshen7248 的回复:] [quote=引用 27 楼 minsic78 的回复:] 我的意思是你的客户机和服务器上oracle软件的部署我搞的不太清楚: 客户机上装了64位的服务器端软件+32位的客户端软件? 然后你的navicat使用了64位服务器端软件包含的客户端去连接远程服务器上的oracle数据库?
应该是这样吧.[/quote] 如果这样的话,修改客户端的AUTHENTICATION_SERVICES文件没意义啊,除非你连的是自己机器上的数据库。[/quote] 根据你的思路 我把所有涉及oracle操作的版本都指向dbname了 也就是64位服务端 通过PATH中dbname的位序提升,变量TNS_NAME,变量ORACLE_HOME,navicat的oci位置等. 现在CMD中执行lsnrctl,tnsping,sqlplus操作的执行路径都指向服务端dbname文件夹里了,且运行都正常了. 可PB还是报错ORA-12154.[/quote] 那么问题就出在PB这边了,PB是怎么连的?[/quote] 以前连O84正常.
minsic78 2019-08-09
  • 打赏
  • 举报
回复
引用 30 楼 qiongshenshen7248 的回复:
[quote=引用 29 楼 minsic78 的回复:] [quote=引用 28 楼 qiongshenshen7248 的回复:] [quote=引用 27 楼 minsic78 的回复:] 我的意思是你的客户机和服务器上oracle软件的部署我搞的不太清楚: 客户机上装了64位的服务器端软件+32位的客户端软件? 然后你的navicat使用了64位服务器端软件包含的客户端去连接远程服务器上的oracle数据库?
应该是这样吧.[/quote] 如果这样的话,修改客户端的AUTHENTICATION_SERVICES文件没意义啊,除非你连的是自己机器上的数据库。[/quote] 根据你的思路 我把所有涉及oracle操作的版本都指向dbname了 也就是64位服务端 通过PATH中dbname的位序提升,变量TNS_NAME,变量ORACLE_HOME,navicat的oci位置等. 现在CMD中执行lsnrctl,tnsping,sqlplus操作的执行路径都指向服务端dbname文件夹里了,且运行都正常了. 可PB还是报错ORA-12154.[/quote] 那么问题就出在PB这边了,PB是怎么连的?
qiongshenshen7248 2019-08-09
  • 打赏
  • 举报
回复
引用 29 楼 minsic78 的回复:
[quote=引用 28 楼 qiongshenshen7248 的回复:] [quote=引用 27 楼 minsic78 的回复:] 我的意思是你的客户机和服务器上oracle软件的部署我搞的不太清楚: 客户机上装了64位的服务器端软件+32位的客户端软件? 然后你的navicat使用了64位服务器端软件包含的客户端去连接远程服务器上的oracle数据库?
应该是这样吧.[/quote] 如果这样的话,修改客户端的AUTHENTICATION_SERVICES文件没意义啊,除非你连的是自己机器上的数据库。[/quote] 根据你的思路 我把所有涉及oracle操作的版本都指向dbname了 也就是64位服务端 通过PATH中dbname的位序提升,变量TNS_NAME,变量ORACLE_HOME,navicat的oci位置等. 现在CMD中执行lsnrctl,tnsping,sqlplus操作的执行路径都指向服务端dbname文件夹里了,且运行都正常了. 可PB还是报错ORA-12154.
minsic78 2019-08-09
  • 打赏
  • 举报
回复
把ORACLE_BASE变量也设置下看看
Summer9856 2019-08-09
  • 打赏
  • 举报
回复
而且 你安装了Oracle 也可以暂时用sqldevelop吧
Summer9856 2019-08-09
  • 打赏
  • 举报
回复
为什么不用PLSQL+client 连呢?tnsnames改一下则个文件设置一下环境变量不就好了吗?我也是mysql转到Oracle刚工作没多久,
minsic78 2019-08-08
  • 打赏
  • 举报
回复
我的意思是你的客户机和服务器上oracle软件的部署我搞的不太清楚: 客户机上装了64位的服务器端软件+32位的客户端软件? 然后你的navicat使用了64位服务器端软件包含的客户端去连接远程服务器上的oracle数据库?
加载更多回复(28)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧