• ベストアンサー

バッチからsqlplusの接続エラーの検知について

バッチからsqlplusの接続エラーの検知について 環境:Xp、Oracle11g バッチからsqlpulusを起動してPL/SQLを動かしてるのですが DB接続に失敗した時に%ERRORLEVEL%では接続エラー時には 0が戻ってきてしまいエラーを検知できませんでした。 DB接続に失敗した場合、検知する方法を模索しております。 識者の方、助言を頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

今、環境が無くて確認できないんですが、 sqlplus -L /nolog WHENEVER OSERROR exit 9 WHENEVER SQLERROR exit 9 connect ユーザ名/パスワード ではどうでしょうか?特にsqlplusの-Lオプションは使えそうな感じですが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

11gの環境が無いので10g(10.2.0.1.0)での検証ですが。 接続エラーの場合も%errorlevel%は1が戻ってきています。 以下がその結果です。 OSは WindowsXP Pro SP3です。 D:\>echo %errorlevel% 0 D:\>type conn.bat echo off sqlplus -l hoge/hoge@hoge @hoge.sql if %errorlevel% EQU 1 ( echo "エラー" ) D:\>conn.bat D:\>echo off SQL*Plus: Release 10.2.0.1.0 - Production on 木 8月 19 17:27:51 2010 Copyright (c) 1982, 2005, Oracle. All rights reserved. ERROR: ORA-12154: TNS: 指定された接続識別子を解決できませんでした SP2-0751: Oracleに接続できませんでした。SQL*Plusを終了します。 "エラー" D:\>echo %errorlevel% 1 可能であれば、問題の無い範囲でバッチファイルの中身を載せてみてはいかがでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バッチからのSQLPLUS実行について

    はじめまして。 SQLPLUSでご質問ををさせてください。 環境 OS:Win2003server Oracle:10g バッチから、以下のようにSQLを実行したいと考えています。 バッチファイル sqlplus ID/PASS@インスタンス名 @SQLファイル.sql SQLファイル.sql set trimsool on set pagesize 0 set linsize 2000 set feedback off set colsep ',' spool on spool ABC.txt select * from xxx; spool off exit; ご質問  バッチファイルからSQLファイル.sqlが呼ばれているのですが、  接続時にENTERキーを押下しないと、後続の処理が実行されません。  ENTERキー押下後のメッセージ内容が  「バージョン情報の表示や、接続されました。」と出力されているため、  接続時の処理と思われます。    上記でENTERキーを押下せずに、処理を実行させるためにはどうすればよろしいでしょうか。  初歩的な質問で申し訳ありませんが、宜しくお願い致します。

  • SQLファイル内のSQL実行ログ取得

    すいません、教えてください。 以下のようなCMDバッチを作成しました。 TEST.cmd------------ sqlplus -s ID/PASS@DB @MAIN.sql 'SUB1.sql' 'SUB2.sql' > MAIN.log echo %ERRORLEVEL% MAIN.sql------------ @&1 @&2 commit; quit; これを実行した場合、MAIN.sqlの最後のコマンドquit;の 実行結果を返してきているのでしょうか? SUB1.sql、SUB2.sqlで失敗していても%ERRORLEVEL%で0が返ってきます。 MAIN内のそれぞれのsqlの実行結果ログを取得することは可能でしょうか? SUB.sqlの内容はいずれも単純なMERGE文です。 識者の方がいればご教示いただきたく存じます。 よろしくお願いいたします。

  • .bat(バッチ)から.batを実行したいのですがエラーになってしまいます。

    <やりたい事> (1)メニュー的なバッチからOracleインストール後 (2)OracleのDB作成sqlを実行する.bat(バッチ)を実行する。 <現状> メニュー的バッチから(2)をCALLで呼びだすと「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とコンソールに表示されてしまいます。 コマンドの拡張子を実行できる設定になっている事は確認できています。 また、コマンドプロンプトから(2)のバッチを実行すると実行できました。 色々と調べて見たのですが原因、解決策が見つかりません。 どうか皆様のお力をお借りできればと思います。 宜しくお願いします。 ↓以下バッチの詳細 <(1)メニュー的なバッチ> ECHO OFF :Start ECHO. ECHO 1. ・・・ 運用APLデータベース設定 %P5% ECHO 99. ・・・ 終了 SET Process= SET Choice= SET /p Choice=Type 選択して下さい。 IF '%Choice%'=='1' GOTO MakeDB :MakeDB REM 5. 運用APLデータベース設定選択時 SET Process=運用APLデータベース設定 ECHO *** "%Process%"開始 *** REM 文字変換バッチ実行 CALL C:\TEMP\aaaa.bat IF ERRORLEVEL 1 GOTO ExceptionError :InputError REM 入力エラー時 ECHO 不正なパラメータが入力されました。 GOTO Start :ExceptionError REM 例外エラー時 ECHO ******** 失敗しました。 ******** GOTO Start :End REM バッチを終了する。 EXIT <(2)OracleのDB作成sqlを実行する.bat(バッチ)> SET ORACLE_INSTALL_DIR=C:\oraclexe SET ORACLE_BIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\BIN SET ADMIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\admin\XE SET ORADATA_DIR=%ORACLE_INSTALL_DIR%\oradata\XE SET DBS_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\dbs SET USERNAME=aaa SET PASSWORD=bbb REM // LOGファイル名用に日付の取得 // FOR /F "tokens=1,2,3 delims=/, " %%i IN ('date /t') DO SET SYSDATE=%%i%%j%%k REM // 「Win31J」に文字変換 // ECHO 文字変換開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\Drop.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError ECHO DBユーザー作成開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\CreateDB.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError

  • バッチからのSQLPlusの実行について

    こんばんは。 現在、バッチジョブからSQLPlusを起動してSQLファイルの SQL文を実行して以下の処理をしたいと考えておりますが 技術敵には可能でしょうか? 1.3つのパラメータをユーザが入力 2.1つの値についてマスタを検索して存在しない場合はエラー。 3.2でマスタに存在した場合、パラメータで他のテーブルを更新。 現時点では入力されたパラメータで更新処理はできたのですが マスタをチェックして存在の有無の戻り値を取得して 処理を分岐するといったことができるのかよくわかりませんので どなたかご教授ください。

  • SQLPLUSで接続できない

    新しいWINDOWSマシン(WINDOWS XP)に Oracle・SQL Plusをインストールしましたが、 以下のエラーがでて、接続できません。 > ORA-12154: TNS:could not resolve the connect identifier specified 考えられる原因、解決方法などありましたら、お願いします。 尚、TNSNAMES.ORA 、 SQLNET.ORA は設定済みであり、 SQL Plus の代わりに、Oracle Net Manager を使って、 表示されているツリーから、 ■Oracle Netの構成  の下の ■ローカル  の下の ■サービス・ネーミング   の下に表示されている、該当のサービス名を選んで、 ”サービスのテスト(接続のテスト)”を実行すると、 「接続テストに成功しました。」 という結果になります。 ので、クライアント - サーバ間 のネットワークの通信そのものは、問題ないと思います。 感じとしては、TNSNAMES.ORA の記述内容がSQLPLUSから認識できていない様な気がします。 クライアント、サーバのOS、Oracleのバージョンは以下の通りです。 クライアントOS : WindowsXP SP2 クライアントのOracle製品 : 10.2.0 サーバOS : Solaris8 Oracle : 8.1.7

  • SQLPLUSの接続に関して

    Oracle Database 11g Express Editionをインストールし、各設定をした後、 SQL-PLUSにて接続を試みています。 その際に、 sqlplus ユーザ名/パスワード@サーバIP の場合接続ができるものの、 sqlplus ユーザ名/パスワード@サービス名(XE) では接続ができません。 エラーの内容としては、  ORA-12154 TNS 指定された接続識別子を解決できませんでした となってしまいます。 “TNSPING XE”、”TNSPING サーバIP”は、いずれも問題なく通ります。 また、tnsnames.ora は、 XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.59)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) ) と記載がある為、問題はないかと思われます。 名前解決がうまくいってない気がしますが、どこを修正すれば良いでしょうか、、、 環境変数は特にいじっていません、、、 初歩的な質問で申し訳ありません。 教えて下さい。 よろしくお願いします。

  • 【SQLite】 sqlファイルに引数を渡したい

    バッチでoracleでいう sqlplus scott/tiger@orcl @test.sql "%1" のようなことをSQLiteでやりたいのですが、可能でしょうか? ※ sqlite3.exe Sample.db < test.sql "%1" みたいなことです。

  • DBMS障害を検知したい!

    DBMS障害を検知してプログラムを終了したいのですが、単にSQLExceptionでcatchするだけだと、SQL文の実行時エラー(INSERTに失敗したとか)でもプログラムが終了してしまいます。 SQL文の実行時エラーではプログラム終了せずに、DBに接続できない等のDBアクセスのエラーが出た場合のみプログラムを終了する良い方法は無いでしょうか? 最初は、SQLExceptionのエラー番号で処理を分けようと思ったのですが、エラー番号の種類が多すぎて困ってしまいました。 コンパイラがJDK5.0で、SQL Server を使用しています。 よろしくお願いいたします。

  • SQLPlusでUnicode

    Windows XP上でOracle 9 リリース2によるデータベースを構築しようとしています。Unicodeで書かれた.sqlファイルを使って次のことをしたいのですが、うまくいかずに悩んでいます。アドバイスいただけませんでしょうか。 INSERT, DELETE, UPDATEなどのコマンドが記述された SQLスクリプトをSQLPlusにてデータベースに投入する。 このデータベースは次のようにNLS変数を設定しました。 NLS_CHARACTERSET = AL32UTF8 NLS_NCHAR_CHARACTERSET = UTF8 SQLPlusは.sqlファイルを読み取れずSP2-0042というエラーを出してきます。いくつかのエンコード(UTF8, Unicode, ANSI)で.sqlファイルを保存することを試したのですが、どの場合もSQLPlusではじかれました。オラクルをインストールするときに、いつかのタイミングで日本語と英語で動作するようにインストールしたのですが、それがSQLPlusでUnicodeを読み取れない原因なのでしょうか。 よろしくおねがいします。

  • コマンドプロンプトのバッチについて

    WindowsのDOSなどのコマンド処理をするバッチファイルについて ですが、DOSからDB(OracleやSQL Serverなど)を起動させるバッチがあって、DBに入ってからSQLのコマンドなどを自動でさせるバッチって 何か方法はないのでしょうか?? DOS → DB起動後、自動でコマンドで動かしたいです。 細かくいうとWindowsのDOSではなくなるので、 動かなくなると思います。