0

我有一个基于服务器的oracle数据库,我想在服务器上的表中导入数据。我正在尝试使用 sqlloadr(sqlldr) 将所有数据插入到 oracle 数据库中,该数据库位于本地主机上,在这种情况下没有问题,但是当我尝试连接网络服务器(不是本地主机)时出现问题。

我在 localhost 案例中使用的命令:

sqlldr <usrname>/<password> control=table.ctl log=table.log ERRORS=25000

以下是关于网络服务器的

sqlldr <usrname>/<password>@LABSERVER control=table.ctl log=table.log ERRORS=25000

我在其中创建了一个 tnsnames.ora,如下所示:

LABSERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(Host = <hostaddress>)(Port = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = <servicename>)
    )
  )

但我收到了这个错误:

SQL*Loader-704: Internal error: ulconnect:OCIServerAttache [0]

ORA-12154: TNS:could not resolve the connect identifier specified

任何想法将不胜感激

4

5 回答 5

2

我们遇到了类似的问题,并且没有权限在本地修改 tnsnames.ora,因此我们必须在命令行中指定服务,例如:

sqlldr userid=username/password@\"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myDBHost)(PORT= 1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=MYDBSID))) \" 控制='mytable.ldr' 日志='mytable.log'

感谢https://hs2n.wordpress.com/2012/06/12/oracle-using-sqlplus-and-sqlldr-on-databases-without-tnsnames-entry/#comment-700

于 2017-01-03T00:37:35.063 回答
1

“我在其中创建了一个 tnsnames.ora,如下所示:”

这似乎意味着您已经从数据库服务器发布了 TNSNAMES.ORA 文件。

请记住,您还需要客户端上的 TNSNAMES.ORA 文件。那也是正确配置的吗?

于 2011-06-04T04:19:39.363 回答
0

基本上,这个错误告诉你,给定主机、端口、协议和 service_name 客户端找不到正在侦听的 Oracle 服务。确保您的主机名有效(例如,您可以 ping 它),侦听器正在侦听 1521,并且服务器数据库中的 service_name 确实是您指定的名称。您可以通过在 sqlplus 中发出以下命令来验证它:

SHOW PARAMETER service_names

它告诉您数据库将自己注册为侦听器的内容。

于 2011-06-04T01:30:52.260 回答
0

对于像我这样找到此线程的人。

要检查的一件事:tnsnames.ora 文件的文件权限。

对于同一台机器上但不属于 DBA 组且 ORACLE_HOME 和 ORACLE_BIN 设置正确的客户端,报告了主题错误。tnsnames.ora 文件的文件权限排除了世界读取;由于无法读取 tnsnames.ora 文件 704 / 12514 抛出服务名称无法解析。

从命令提示符: chmod 644 $ORACLE_HOME/network/admin/tnsnames.ora

于 2014-11-10T19:33:19.757 回答
0

如果您的密码有@ 字符,那么 sqlldr 实用程序将不起作用,更改您的密码它将起作用 http://www-01.ibm.com/support/docview.wss?uid=swg21347615

于 2015-06-12T14:56:24.233 回答