Windowsタスクスケジューラからバッチファイルを実行して、特定のOracleユーザーのすべてのオブジェクトをエクスポートしようとしています。
exp.exe myuser/pass@dbname owner=myuser log=mylog.txt
Oracle 11.2.0.4 x64とデータベースが同じWindows7 Proマシン上にある
タスクは正常に開始されます。つまり、間違ったユーザーやパスワードの問題がないということです。しかし、タスクがスケジュールで開始されると、ログに次のように表示されます。
ORA-12546: TNS:permission denied
タスクを手動で開始すると、スケジュールされたユーザーと同じユーザー(このユーザーはAdministratorsグループとora_dbaグループのメンバーです)で正常に動作し、エクスポートが実行されます。タスクはタスクのプロパティの[最高の特権で実行する]チェックボックスでスケジュールされているため、「スケジュールによる」タスクの開始と「手動の」タスクの開始に違いがある理由がわかりません。
私は、stackoverflowサイトの「ORA-12546:TNS:permission denied」で多くの記事を読みましたが、すべてのトピックはLinuxに関するものです。 Oracleがインストールされているc:\app\Oracle
に読み取りと実行の権限を設定しようとしました。実際には、管理者は既にデフォルトでそのディレクトリに対するすべての権限を持っているため、違いはありませんでした
ただし、テーブルのエクスポートは、スケジュールで開始されたタスクでも正常に機能することに気付きました。
exp.exe myuser/pass@dbname tables=mytable1,mytable2 log=mylog.txt
とにかく、Oracleユーザー「myuser」はデータベース全体をエクスポートするOracle権限を持っています
問題:テーブルのみが正常にエクスポートされますが、«owner=myuser»
エクスポートキーを使用すると«TNS:permission denied»
が取得されます。また、Windowsスケジュールタスクがスケジュールによって開始され、手動で開始されたタスクがすべて正常に実行される場合のみです。すべてをスケジュールどおりにエクスポートするにはどうすればよいですか?
問題は、ウィンドウのアクセス許可のどこかにあります。それらはOracle TNSシステムでなんとか混乱しています。私はまだ正しい方法とそれらの権限が正確に何であるかはわかりませんが、問題は今のところ、以前に自ずと示唆されているように、TNSをバイパスすることによって解決されています:
set Oracle_SID=dbname
exp.exe myuser/pass owner=myuser log=mylog.txt
これは機能し、エラーはありません