我正在尝试使用 SELECT 查询来使用 DB1 的数据库链接填充 DB2 中的表。我在 Windows 7 VM 上使用 Oracle SQL Developer。我连接到 DB2,并运行以下查询。
INSERT INTO DB_NAME.TABLE_NAME (SELECT * FROM DB_NAME.TABLE_NAME@LINK_TO_DB1);
每次,无论如何,我都会收到以下错误:
ORA-12154: TNS:could not resolve the connect identifier specified
12154. 00000 - "TNS:could not resolve the connect identifier specified"
*Cause: A connection to a database or other service was requested using
a connect identifier, and the connect identifier specified could not
be resolved into a connect descriptor using one of the naming methods
configured. For example, if the type of connect identifier used was a
net service name then the net service name could not be found in a
naming method repository, or the repository could not be
located or reached.
*Action:
- If you are using local naming (TNSNAMES.ORA file):
- Make sure that "TNSNAMES" is listed as one of the values of the
NAMES.DIRECTORY_PATH parameter in the Oracle Net profile
(SQLNET.ORA)
- Verify that a TNSNAMES.ORA file exists and is in the proper
directory and is accessible.
- Check that the net service name used as the connect identifier
exists in the TNSNAMES.ORA file.
- Make sure there are no syntax errors anywhere in the TNSNAMES.ORA
file. Look for unmatched parentheses or stray characters. Errors
in a TNSNAMES.ORA file may make it unusable.
- If you are using directory naming:
- Verify that "LDAP" is listed as one of the values of the
NAMES.DIRETORY_PATH parameter in the Oracle Net profile
(SQLNET.ORA).
- Verify that the LDAP directory server is up and that it is
accessible.
- Verify that the net service name or database name used as the
connect identifier is configured in the directory.
- Verify that the default context being used is correct by
specifying a fully qualified net service name or a full LDAP DN
as the connect identifier
- If you are using easy connect naming:
- Verify that "EZCONNECT" is listed as one of the values of the
NAMES.DIRETORY_PATH parameter in the Oracle Net profile
(SQLNET.ORA).
- Make sure the host, port and service name specified
are correct.
- Try enclosing the connect identifier in quote marks.
Error at Line: 1 Column: 30
我一直在谷歌搜索并尝试不同的解决方案 2 天,但没有运气。我已经完成了以下所有操作:
- 将 PATH 环境变量设置为 C:\Oracle\instantclient_11_2
- 将 ORACLE_HOME 环境变量设置为 C:\Oracle\instantclient_11_2
- 将 TNS_ADMIN 环境变量设置为 C:\Oracle\instantclient_11_2\network\admin
- 在 C:\Oracle\instantclient_11_2\network\admin 中创建了一个带有正确连接信息的 tnsnames.ora 文件
- 将 SQL Developer(工具 > 首选项 > 数据库 > 高级)中的 Tnsnames 目录字段设置为 C:\Oracle\instantclient_11_2\network\admin
我不知道为什么这些数据库链接不起作用。有人有建议吗?
如果您希望在 DB1 上有一个指向 DB2 的数据库链接,那么 DB1 需要能够解析您在数据库链接定义中指定的任何 TNS 别名。假设您在任何地方都使用 tnsnames.ora 文件进行 TNS 名称解析,这意味着 DB1 上的 tnsnames.ora 文件需要有一个指向 DB2 的条目。您在
CREATE DATABASE LINK
语句中指定的 TNS 别名需要引用该 TNS 别名(可能与您在本地机器上创建的 DB2 别名不同)。如果您对 DB1 所在机器的访问权限有限,那么您很可能需要 DB1 的 DBA 来确保正确创建 TNS 别名。您可以使用完整的 TNS 连接描述符创建数据库链接,以解决在 DB 框中需要 tnsnames.ora 条目的要求。
例如: