• ベストアンサー

startup、shutdownコマンド実行時のエラーでもリターンコードは0

whenever oserror exit failure whenever sqlerror exit failure を付けていても startupコマンドもしくはshutdownコマンドを実行してエラーが発生した場合、リターンコードは0になってしまいます (alter database openのようにalter文を使うと、リターンコードは0以外になります)。 これは仕様なのでしょうか? [環境] OS:Solaris9 DB:Oracle9i

  • fgesw
  • お礼率42% (102/238)
  • Oracle
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • FudaKeji
  • ベストアンサー率73% (58/79)
回答No.2

私がよく使う方法は、 --- startup.sql --- conn sys/xxxx as sysdba spool startup.log startup spool off exit --- dbstart.sh --- #!/bin/sh sqlplus /nolog @startup.sql grep ORA- startup.log if [ $? -eq 0 ] ; then echo "NG" fi という具合に、結果をspool(もしくは標準出力をリダイレクト)し、ORA-から始まるエラーがあれば異常発生とします。

その他の回答 (1)

回答No.1

>これは仕様なのでしょうか? startupやshutdownをSQL文と解釈しているのが間違いの始まり。 起動/停止の”コマンド”なので、SQL命令のようにキャッチできない。 (仕様通りなんだけど、仕様を誤解している) unixプラットフォームのオラクルには詳しくないのだけど・・ コマンド投入時の標準出力を見れば良いと思いますよ。

関連するQ&A

  • sqlのエラーハンドリングについて質問です。

    シェルからsqlplusを実行し、そのsqlplusで発生したエラーをハンドリングするために、 出力内容をORACLEエラーコード(ORA-xxxxx)、SQLPLUSエラーコード(SP2-xxxxx) で検索して判定しています。 また、SQLで何らかのエラーが発生した際に処理を終了させるために、 SQL実行前に whenever sqlerror exit; whenever oserror exit; を定義しています。 何らかのエラーが発生した際は、ORACLEエラーコード(ORA-xxxxx)、SQLPLUSエラーコード(SP2-xxxxx) が出力されるため、エラーハンドリングは可能と考えているのですが、 sqlplusのstartコマンドでsqlファイルを実行した場合のみ、エラーコードが出 力されないため、ハンドリングできません。 ■実行例 SQL> start 存在しないsqlファイル O/Sメッセージ:No such file or directory 切断しました。 試しにwhenever oserror exit;の記述を削除したところ SP2-0130が出力されエラーハンドリングできました。 whenever oserror exit; の記述があるとエラーコードが出力されないのはなぜでしょうか??

  • shellからsqlplusでコマンドを順次実行

    shellスクリプトから sqlplus @AAA.sqlを実行する。 以下:AAA.sql @home/~/aaa.sql @home/~/bbb.sql quit; 以下:aaa.sql exec dbms_refresh('XXX'); 以下:bbb.sql set serveroutput on set linesize 1000 set pagesize 0 set trimspool on set feedback off whenever oserror exit 9 whenever sqlerror exit 5 MERGE ~ 中略 commit; exit ---------------- 以上、がソース内容です。 aaa.sqlでexitしていないのにbbb.sqlへ処理が移行しません。 ログ見てみるとリフレッシュコマンド実行後に接続が切れてしまっているようです。 処理概要ですが、あるMVをリフレッシュ後にそのMVを使用してMERGE文を実行するという処理です。 上記説明で原因特定は可能でしょうか? よろしくお願いいたします。

  • インスタンスについて

    Server:Solaris DB:Oracle8.1.7 オラクルについての質問です。 夜間バッチ処理後にシェルを起動してshutdown,startupを 行っているのですが、今朝はstartupできていませんでした。 Alertログには、shutdownは正常に行われていましたが startupが下記のように止まっていました。 --------------------------------------       ・       ・ Tue Jul 2 07:53:10 2002 Starting ORACLE instance (normal)  ←ここで止まっていました。 ------------------------------------- よって、インスタンスは上がらず、中途半端なままでした。 その対応は、shutdown abortで落として、startupしようとしました。 しかし、今度は「ORA-03113: end-of-file on communication channel」が 発生したので、確認したところリスナーが停止していました。 その後、リスナーを起動し直したらstartupできました。 ここで、いろいろ疑問があります。  ・startupできなかったのは、制御ファイルがおかしいのか?  (しかし、その場合はエラーが出るはずですよね。)  ・何かの容量がオーバーしたのか? (maxdatafileなど)  ・なぜ、リスナーを起動しないとstartupできなかったのか?   また、リスナーはなぜ停止していたのか?  ・監査を使用して原因解明できるか? お分かりの方がいらっしゃれば、ご教授ください。 お願いします。

  • 『ALTER SYSTEM』と『ALTER DATABASE』の違い

    はじめまして、現在Oracle新Silver取得に向けてDBA1を勉強しています。 ※SilverFellowは取得済です。 DBA1の内容に関して皆様に質問なのですが、Alterコマンドはいろいろな種類が ありますよね? たとえば、alter system,alter database,alter table,alter user等など・・・ ここに出てくるsystemとdatabaseの違いが良く分かりません。 覚えろ!と言われればそれまでかもしれませんが、この二つのコマンドの棲み分け がいまいちよくわからないため、覚えられません。 皆様はどうやって、理解(覚え)しましたか? よろしければお教えください。 systemとdatabaseの違いがわからない例 alter system archive log all; alter database add logfile; alter database open; お願いいたします。

  • ノーアーカイブログモードからアーカイブログモードへの変更

    ノーアーカイブログモードからアーカイブログモードへ変更する際の手順に関してご教授願います。 (1)shutdown immediate; (2)startup mount (3)alter database archivelog; (4)archive log list;  ←確認 (5)alter database open; (1)~(5)の手順は理解できています。上記以外に 初期化パラメータを変更しなければならないと思うのですが(LOG_ARCHIVE_DEST_n)、initファイルの差し替えはどの段階ですればいいでしょうか? また、上記手順以外に行うことはありますでしょうか? 使用しているOSはHP‐UXです。

  • オンラインREDOログ障害からの復旧方法について

    現在、Oracle11g Release2 11.2.0.3(ASM使用) の環境で、オンラインREDOログファイルが全て消失した場合を想定して、以下の手順で復旧の方法をテストしています。 ----- 1.sqlコマンドでテーブルに1件データを挿入する。 2.フルバックアップ(バックアップセット)を取得する。 3.sqlコマンドでテーブルに1件データを挿入する。 4.累積増分バックアップを取得する。 5.sqlコマンドでテーブルに1件データを挿入する。 6.DBをシャットダウンする。 (RMAN> shutdown immediate;) 7.オンラインREDOログファイルを全て削除する。 8.DBをマウントする。 (RMAN> startup mount;) 9.リストアをする。 (RMAN> restore database;) 10.バックアップの際に除外している表領域をオフラインにする。 (SQL> Alter database datafile '+DATA/orcl/DATAFILE/hoge2' offline drop;) 11.リカバリをする。 (SQL> recover database using backup controlfile until cancel;) (ログの指定は AUTO) 12.DBをオープンする。 (RMAN> alter database open resetlogs;) 13.sqlコマンドでテーブルの中を確認する。 (SQL> select * from HOGEHOGE;) (データが1件) ----- 上記の手順でDBをオープンにするところまで上手くいったのですが、 私の考えでは、13でテーブルを確認するとデータが2件はいっていると思ったのですが、 結果は、1件だけでした。 累積増分バックアップを取得した時点(データが2件入った状態)まで戻したいのですが、 解決の手がかりになる情報などがございましたらご教示いただけますでしょうか。 よろしくお願いします。

  • svrmgrl起動時のTNSプロトコル・アダプタエラー

    Oracle8iをインストールしました。インストール時にDBを作成せずに、あとでcreate databaseコマンドで作成するつもりでした。 インストールが終わり、コマンドプロンプトでsvrmgrlと打ったのですが ORA-12560: TNS: プロトコル・アダプタ・エラー が出てしまいます。リスナーは起動しています。 どうすればよいでしょうか。 よろしくお願いします。

  • 起動時エラー

    RedHat9にPosgreSQL 7.3をインストールしたんですが、DB起動時にエラーが出てます。 DB起動コマンドは、 pg_ctl start -D /usr/local/pgsql/data -l /home/postgres/logfile postmaster successfully started DB停止コマンドは、 pg_ctl stop -D /usr/local/pgsql/data メッセージは、 pg_ctl: cannotfind /usr/local/pgsql/data/postmaster.pid Is postmaster running? postmastar.pidファイルを探しましたが、確かにありません。 そして、logfileは以下です。 LOG: startup process (pid 14202) was terminated by signal 6 LOG: aborting startup due to startup process failure 一度は起動停止確認は出来たのですか、2回目からできなくなってしまい、大変困っています。 ポート番号はデフォルトの5432のままです。 どうしたらいいのかわかりません。 よろしくお願いいたします。

  • SPOOLのファイル名

    スプールのファイル名にバインド変数の内容を使うことはできるでしょうか? 下記のように使用すると、SPOOLファイルが作成されませんでした。 20050322.TODAYといった具合に SYSDATEに応じてファイル名を可変にしたいのですが。。 どなたかご教示いただければ幸いです。 ============================================== WHENEVER OSERROR EXIT FAILURE ROLLBACK WHENEVER SQLERROR EXIT FAILURE ROLLBACK VARIABLE V_SYSDATE VARCHAR2(8); BEGIN SELECT TO_CHAR(SYSDATE,'YYYYMMDD') INTO :V_SYSDATE FROM DUAL; END; / SPOOL :V_SYSDATE.TODAY SPOOL OFF EXIT;

  • rpm コマンドでエラーが…

    お世話になります。 少し古いノートPCを貸してもらい、Linux7.2を動かしています。 カーネルが2.4.7-10ということもあり、新しくしようとパッケージをダウンロードしました。 そしていざrpmコマンドを打ちました。すると、 # rpm -ivh *.rpm error: db3 error(2) from dbenv->open: No such file or directory error: cannot open Packages index using db3 - No such file or directory (2) error: cannot open Packages database in /var/lib/rpm というメッセージが出ました。 カーネルが相手だからかなと思い、テストとして、 # rpm -q perl と打つと error: db3 error(2) from dbenv->open: No such file or directory error: cannot open Packages index using db3 - No such file or directory (2) というメッセージが返ってきました。 これって何が原因なのでしょうか? すいませんが回答よろしくお願いします。 足りない情報があれば随時補足します。