我是 Oracle 19C 数据库的 DBA,其中有许多数据库链接。其中一些链接是本地的,链接到我们防火墙内的其他实例,而其他链接是远程的,链接到第三方管理的数据库。我接任该职位时继承了这些链接,因此对它们的了解有限。
我有一个问题,对于其中一个第三方链接,我收到报告称通过链接向第三方传输数据的预定作业未传送内容,网络流量为零。但是,作业没有生成任何错误,我可以手动查询远程数据库表。我需要连接方法来向我的 IT 同事确认/拒绝他们监控的网络流量路由是否正确。
我已经确定了我的哪些数据库链接是为这次数据传输设置的,我在 DBA_DB_LINKS 中搜索过:
当我执行
select * from dba_db_links;
对于我感兴趣的数据库链接,我得到以下条目。
BODCDB BSA 海洋 BSA 29/05/2014 11:38:45 否 否 是 否
这没有提供 BSA 链接使用的连接字符串的任何详细信息,而这是我需要的关键信息。它不在 TNSNAMES.ORA 中,所以数据库中是否有其他地方保存它?
非常感谢
肖恩
我不是 DBA。
这是 11g,但没关系。
你
dba_db_links
包含的信息比我的多:数据库链接之一:
要连接到该用户,您将使用:
密码是你应该知道的;我不确定您是否可以从某个地方“提取”它。
或者,在你的情况下,
如果有帮助,那很好;否则,请等待合适的 DBA 来查看和回答您的问题。
此外,我们主要是这里的开发人员。这个问题可能会移到更合适的地方,SE for DBA ( Oracle )。如果需要,请将其加入书签。
名称解析可以通过多种方式发生。以下是我建议的操作方式。以 Oracle 所有者(通常为“ ”)身份登录到数据库服务器
oracle
。然后:首先,确定
$TNS_ADMIN
环境变量设置为LISTENER
进程继承的内容(侦听器创建的所有影子进程都继承侦听器的环境,因此它们将获得它们的TNS_ADMIN
设置)。您可以在除 HP-UX 之外的所有 Unix 风格操作系统中查询您拥有的任何进程的环境。在 Linux 中,获取侦听器的 pid 并执行以下操作:$TNS_ADMIN
如果已设置,请查看由那个指定的目录。您正在寻找sqlnet.ora
,tnsnames.ora
和ldap.ora
。如果您没有找到任何内容,请同时查看/etc
(对于 Linux)、/var/opt/oracle
(对于 Solaris)、$HOME
(Oracle 的)和$ORACLE_HOME/network/admin
. Oracle 查找这些文件有一个特定的顺序,但我会查看所有这些位置。假设您已经找到这些文件,请查看内部
sqlnet.ora
并找到NAMES.DIRECTORY_PATH
设置的内容。如果它不存在或没有sqlnet.ora
文件,则默认值为(tnsnames,ldap,ezconnect)
. Oracle 将按照从左到右的顺序使用这些目录解析名称。tnsnames.ora
因此,如果 tnsnames 是第一个,它将首先使用与我们查找时相同的逻辑sqlnet.ora
(通常在同一目录中)查看所定位的文件。如果找到
tnsnames.ora
,您应该找到其中定义的别名并获取 TNS 字符串。如果没有 tnsnames.ora 或其中没有定义别名,则转到下一个方法,例如 ldap。查找 ldap.ora 并查看
DIRECTORY_SERVERS
参数是否已定义。如果是,您可能正在使用集中式 LDAP 服务来查找 TNS 字符串。在操作系统级别对其进行测试。以 oracle 所有者身份登录,设置您的 Oracle 环境(包括
$ORACLE_HOME/bin
在您的环境中$PATH
),并设置$TNS_ADMIN
为您在上面#1 中找到的任何设置,然后执行tnsping
您的别名:如果得到结果,请查看它生成的 TNS 字符串之前的顶部。如果它使用 LDAP,它会说:
如果它使用 tnsnames,它会说:
最后,我没有使用 EZConnect 的经验,但我相信我几年前调查过它,发现你实际上可以通过自己指定主机名来连接数据库...... Oracle 假设默认的 1521 端口和默认服务已定义由听众。因此,请检查“bsa”是否是您网络上的主机名 (
nslookup bsa
)你确定吗?
对于 DB-Link,
tnsnames.ora
使用存储在数据库服务器上的文件,而不是本地 PC 上的文件。Oracle为客户端名称解析提供了四种不同的命名方式,参见DIRECTORY_PATH
尝试
tnsping BSA
,它应该回复包含所有信息的完整连接字符串。或者你可以直接从远程数据库获取信息:
如果您缺少选择权限,那么您可以尝试
它应该返回除端口之外的所有信息:-(