Oracle 10/11にバンドルされているsqlldrを使用して完全修飾TNSエントリを使用することは可能ですか?
たとえば、SQLPlusでは次のようになります。
sqlplus user/password@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl))) @script.sql
ただし、sqlldr(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エントリを引用符で囲んでカプセル化しようとすると、同じエラーが発生します。
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がユーザーをローカルインスタンスに強制して、リモートホストにデータをプッシュする際のI/Oを軽減することを望んでいることは理にかなっています。しかし、サポートされている構文の逸脱はそれほど直感的ではありません。他の誰かが同様の問題を経験していますか?