Можно ли использовать полную запись TNS с помощью sqldr в комплекте с Oracle 10/11?
Например, в SQLPlus:
sqlplus user/password@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl))) @script.sql
Но при использовании sqldr (загрузчик SQL) возникают проблемы с прямым использованием записи 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 в кавычки приводит к той же ошибке.
Просмотрел документацию sqldr и попытался использовать аргумент командной строки «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 надеется принудить пользователя к локальному экземпляру, чтобы смягчить ввод-вывод при отправке данных на удаленный хост. Но отклонение в поддерживаемом синтаксисе не так интуитивно понятно. Кто-нибудь еще испытывает подобные проблемы?