Можно ли использовать полностью квалифицированную запись TNS, используя sqlldr в комплекте с Oracle 10/11?
Например, в SQLPlus:
sqlplus user/password@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl))) @script.sql
Но с использованием sqlldr (SQL Loader)Кажется, есть проблемы с использованием записи TNS напрямую.В частности:
sqlldr user/password@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl))) bad='bad_file.txt' control='control.ctl' data='data.txt' log='log.txt' direct='true'
Вот сообщение об ошибке:
LRM-00116: syntax error at 'address' following '('
SQL*Loader: Release 11.2.0.1.0 - Production on Tue Sep 13 15:41:54 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
SQL*Loader-100: Syntax error on command-line
Попытка инкапсулировать запись TNS в кавычках приводит к той же ошибке.
Посмотрелв документации sqlldr и попытался использовать аргумент командной строки 'userid', но безрезультатно.В частности:
sqlldr userid='user/password@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl)))' bad='bad.txt' control='control.ctl' data='data.txt' log='log.txt' direct='true'
LRM-00116: syntax error at 'password@(' following '='
SQL*Loader: Release 11.2.0.1.0 - Production on Tue Sep 13 15:44:17 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
SQL*Loader-100: Syntax error on command-line
Имеет смысл, что Oracle будет надеяться принудить пользователя к локальному экземпляру, чтобы уменьшить количество операций ввода-вывода при передаче данных на удаленный хост.Но отклонение в поддерживаемом синтаксисе не так интуитивно понятно.Кто-нибудь еще сталкивался с подобными проблемами?