由于 tnsping 未随 oracle 安装一起安装,是否可以使用 sqlplus 作为 tnsping 的替代方案。我只是想通过批处理脚本检查 tnsnames.ora 中的定义是否可访问。
如果没有,是否可以随后安装 tnsping?
答案1
来自 SQL*Plus 帮助文档(sqlplus --help
):
Usage 2: sqlplus [ [<option>] [{logon | /nolog}] [<start>] ]
...
<start> is: @<URL>|<filename>[.<ext>] [<parameter> ...]
这意味着您可以提供一个脚本的路径,该脚本将在您连接/登录时立即运行。
最基本的例子是向文件回显“exit”,然后运行该文件,例如
C:\>echo exit > exit.tmp
C:\>sqlplus /nolog @exit.tmp
SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 14 15:34:35 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
C:\>del exit.tmp
当然,上面我没有登录数据库,所以我没有真正检查过数据库。如果您想检查特定条目tnsnames.ora
,您可能需要在命令行上提供该服务的完整凭据(这可能会产生安全后果),否则您的脚本发出的“退出”可能会被 sqlplus 通常发出的用户名提示所吸收(要么您的脚本会在用户名提示处挂起)。
J.
答案2
互联网上有一个“丑陋”的黑客程序,展示了如何将 tnsping 添加到 InstantClient 安装中。由于某些未知原因,Oracle 坚持不将其嵌入到 InstantClient 中,尽管各种客户多次询问过它。
你可以使用它但是:
- 优点:
tnsping
仅联系监听器,不会检查数据库是否真正在运行。而 sqlplus 还会检查数据库服务器端 SID 的“存在性”。 - 缺点:
sqlplus
不会告诉您数据库名称是如何转换的。而 tnsping 可以指出所sqlnet.ora
使用的文件以及是否使用了 TNSNAMES、ONAMES 或 LDAP。 - 缺点:
tnsping
还会告诉hostname
你port
数据库
答案3
这取决于您实际想要使用 TNSPING 检查的内容;连接本身,或连接速度,或两者兼而有之。但 SQLPLUS 将使用相同的 TNS 设置,因此您可以测试相同的 TNS 设置。
如果您编写脚本(甚至是 Windows 或 Linux),您可以记录创建这种连接所需的时间,这将是与 TNSPING 类似的目标。