Ala*_*orm 12 oracle tns tnsnames connection-string
Borderline ServerFault问题,但我想先在这里尝试一下,因为我过去对Oracle的问题很满意.
我正在尝试从PHP连接到oracle数据库,我收到以下错误.
ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
Run Code Online (Sandbox Code Playgroud)
这是PHP报告的错误,以及Oracle的listener.log中显示的错误.
我当前的问题是解决这个错误.我想回答的一个更大的问题是Oracle连接模型是如何工作的?
这是在我的本地Windows机器上运行的开发环境中,并且一直在运行.不幸的是,环境被移交给我(我没有设置它),谁的人没有设置它是不可用的帮我调试.
如果我在MySQL或PostgreSQL(我更熟悉的两个系统)中遇到类似的错误,我会检查以确保数据库进程正在运行,然后尝试使用用户名/密码/手动连接到数据库连接字符串.不幸的是,我不熟悉Windows上的Oracle工具(除了SQL Developer),我不知道什么是TNS:监听器或SID在Oracle的上下文中(我有一些模糊的想法,但模糊的想法很少有帮助你正在调试这样的东西)
任何一般建议将不胜感激.
每条评论的更新:
我的tnsnames.ora文件中有很多内容,相关条目是
OBS2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = steel-ae39650)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = OBS2)
)
)
Run Code Online (Sandbox Code Playgroud)
当我运行时,这不会反映在实例列表中
LSNRCTL> services
Run Code Online (Sandbox Code Playgroud)
所以我认为我的下一个问题是,如何尝试手动启动OBS2实例?
TNS名称就像是服务实例的别名.在这方面,TNS监听器服务为您提供一种查找服务.如果您尝试通过TNS名称连接的实际服务无效,则该错误消息将失败.
然后,您可以测试以查看TNS侦听器是否使用命令行工具正确查看服务:
%>lsnrctl services
Run Code Online (Sandbox Code Playgroud)
哪个应输出如下内容:
Service "myservice" has 1 instance(s).
Instance "myinstance", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1002 state:ready
DISPATCHER <machine: LOCALHOST, pid: 12345>
(ADDRESS=(PROTOCOL=tcp)(HOST=LOCALHOST)(PORT=6789))
Run Code Online (Sandbox Code Playgroud)
您能否发布相关的TNS条目(在tnsnames.ora文件中)?它位于ORAHOME\client或db\ADMIN\NETWORK中.如果您同时拥有客户端和服务器,请确保tnsnames.ora文件的两个副本都具有正确的值,以确保安全.
这是一个tnsnames.ora名为'mydb' 的正确TNS名称定义的示例:
myDbAlias =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 12345)(QUEUESIZE = 100))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = myservice)
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55466 次 |
| 最近记录: |