S-JIS[2004-06-12/2010-07-29] 変更履歴

Oracleエラー


Oracle遭遇したエラーについてのメモ。

エラー メッセージ 発生状況 対処方法 更新日
ORA-00001 一意制約に反しています INSERTやUPDATE実行時。 ユニークキー制約が指定されている項目(プライマリキー等)で、既存のデータになるようなINSERTやUPDATEが行われた場合に発生する。
そういうデータで更新しないようにするしかない。
2007-09-15
ORA-00054 リソース・ビジー、NOWAITが指定されていました。 SELECT〜FOR UPDATE NOWAITでタイムアウトした時。   2009-01-19
ORA-00060 リソース待機の間にデッドロックが検出されました。 デッドロックが発生した時。 Oracleがデッドロックを検知すると、片方にこのエラーが発生する。
エラーが発生した側がロールバックすることにより、もう一方は正常に処理できる。
このエラーが起きると、トレースログ(udumpに拡張子trcのファイル)が作られる。
2009-01-19
ORA-00101 invalid specification for system parameter DISPATCHERS DB起動時。
端末を移動してIPアドレスの設定を変えたら、サーバー名からIPアドレスが取得できなくなったらしい(サーバー名自体は変わってないのに)。
vi $ORACLE_HOME/network/admin/listener.ora

      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
      )
とりあえず、HOSTのhostnameをIPアドレスに変更。
2004-10-30
ORA-00439 機能は使用可能ではありせん: Partitioning パーティションテーブルを作成しようとした時。 Oracle9iのStandard Editionではパーティションを作れない。
バージョンを表示したときにEditionが何も表示されなければStandardらしい。
2007-12-11
機能は使用可能ではありせん: XXX 使用できない機能を使おうとした時。 たいてい、Enterprise Editionでないと使えない機能を使おうとした時にこのエラーが出る。
v$optionで、その機能(オプション)が使えるかどうか確認できる。
2009-12-24
ORA-00904 無効な識別子です。 INSERTやUPDATE実行時。
SQL> insert into emp("empno") values('9002');
insert into emp("empno") values('9002')
                *
行1でエラーが発生しました。:
ORA-00904: "empno": 無効な識別子です。

列名を指定する時は「"(ダブルクォーテーション)」でくくったりしてはいけない。
(大文字なら問題ない…「into "EMP"("EMPNO")」…かなり変だが(爆))

SQL> update emp
  2  set ename='test0'
  3  where ename="test";
where ename="test"
            *
行3でエラーが発生しました。:
ORA-00904: "test": 無効な識別子です。

定数を指定する時は「"(ダブルクォーテーション)」でなく「'(シングルクォーテーション)」でくくる。

2004-11-12
ORA-00907 右カッコがありません。 マテリアライズド・ビューの作成時。括弧なんか使ってないのに。 高速リフレッシュマテリアライズド・ビューの場合、内容の制限が色々ある。それに引っかかるのはしょうがないとして、なぜ括弧のエラー!? 2005-02-05
ORA-00942 表またはビューが存在しません。 他者が保有しているテーブルを指定した時。 そのオブジェクトに対するアクセス権限が無い。
「アクセス権限が無い」というエラーメッセージだと、そのオブジェクト名が存在することは分かってしまうので、セキュリティーの観点からこういう文言になっている…のかなぁ?
2007-09-22
SQLを書いた関数やプロシージャをCREATEした時。 SQL*Plusで問題なく実行できるSQLが、ストアドプロシージャではエラーになることがある
そのテーブルに対するアクセス権限がロールによるものである可能性が高い。
ORA-00955 すでに使用されているオブジェクト名です。 CREATE TABLE時。テーブルは存在していないのに。 テーブルが存在していなくても、CREATE TABLE文でPRIMARY KEYを作成している場合に そのインデックスが存在していたらこのエラーになる。
インデックス名をリネーム又は削除する。
2004-11-18
CREATE VIEW時。
SQL> create view test_view as select * from test_table;
create view test_view as select * from test_table
                                       *
行1でエラーが発生しました。:
ORA-00955: すでに使用されているオブジェクト名です。

エラーはtest_tableを指しているが、実は既に存在しているのはtest_viewの方。select元が存在しているのは当たり前じゃぁ!

2005-02-02
ORA-00984 ここでは列は使用できません。 SQL*Loaderでのロード実行時。
HIREDATE NEXT * , CHARACTER 
    列のSQL文字列 : "TO_DATE(HIREDATE,'YYYY/MM/DD HH24:MI:SS')"
〜
レコード1: 拒否されました。- 表EMP,列HIREDATEでエラーが発生しました。
ORA-00984: ここでは列は使用できません。

関数の引数の項目名に:(コロン)」を付けていない

2004-10-30
INSERT実行時。
SQL>  insert into emp(empno) values("9002");
 insert into emp(empno) values("9002")
                               *
行1でエラーが発生しました。:
ORA-00984: ここでは列は使用できません。

定数を指定する時は「"(ダブルクォーテーション)」でなく「'(シングルクォーテーション)」でくくる。

2004-11-12
ORA-01034 ORACLE not available DBが立ち上がっていない。
DB起動時にORA-00101のエラーが出ていることに気付かずDBにログイン。
DB起動時のエラーを無くす。 2004-10-30
ORA-27101 shared memory realm does not exist
ORA-01013 ユーザーによって現行の操作の取消しが要求されました。 JDBCのsetQueryTimeout()によってタイムアウトした時。   2009-01-19
ORA-01031 権限が不足しています。   その操作を行う権限が無い。GRANT文で権限を付与する必要がある。 2010-07-29
ORA-01460 要求された変換はできません JavaのPreparedStatement実行時。 いまいちはっきりしないけど、SJISで扱うつもりのDBをEUCで作っていた。DBをSJISで作り直したら出なくなった。 2004-06-12
ORA-01722 数値が無効です to_number()使用時。 to_number()に、数値に変換できない文字列が指定された場合のエラー。
そういう時でも大丈夫な関数は自前で作る必要がある。
2008-12-14
ORA-01861 literal does not match format string JDBCでINSERT時。 JDBC(preparedでないStatement)でINSERTしようとした際、DATE型の項目にVALUES句で'2009/03/20'to_date('2009/03/20')を指定したら出た。
to_date('2009/03/20','YYYY/MM/DD')にしたら通った。
2009-03-20
ORA-02264 既存の制約によってすでに使用されている名前です。 CREATE TABLE時。 読んで字の如し。CREATE TABLE文でPRIMARY KEYを作成している場合に そのユニークキー制約が存在していたらこのエラーになる。
制約(CONSTRAINT)をリネーム又は削除する。
2004-11-18
ORA-03113 通信チャネルでend-of-fileが検出されました with句を使ってFULL OUTER JOINしたとき。 何らかの要因(Oracleのバグ?)によってDBMS側のプロセスが落ちてSQL*Plusとの接続が切れるとこのエラーになるっぽい。
サーバー側でコアダンプファイルが作られていないか確認すべし。
2007-10-30
ORA-12514 TNS: リスナーは接続記述子で要求されたサービスを現在認識していません Oracle10gをインストールしてDBを作った後にOAS10gをインストールし、sql*plusでDBに接続しようとした時。 WindowsのOracleのサービスは起動しているのに、DB自体は起動/マウントされていなかった。手動で起動してやれば接続できるようになる。どうやったら自動起動するようになるかは不明…。 2005-05-27
ORA-12913 ディクショナリ管理表領域を作成できません 一時表領域を作成しようとした。 ハードディスクの容量とは無関係っぽい。一時表領域を作って使うのは諦めて、最初から在る「TEMP」表領域を使うことにしたけど。
実はOracle9.2では Oracle9.0までの一時表領域作成用のSQLの文法は使えず、新しい文法になったらしい。
2004-11-12
ORA-14019 パーティション・バウンド要素は、文字列、日付時刻または間隔を示すリテラル、数値、またはMAXVALUEの1つです。 レンジパーティションを作成しようとした時。
ハッシュパーティションの索引をインポートしようとした時。
パーティションでRANGEの上限値にNULLを指定した場合に発生する。
PARTITION パーティション名 VALUES LESS THAN(NULL)
2007-12-13
ORA-14024 number of partitions of LOCAL index must equal that of the underlying table ローカルインデックスを作成しようとした時。 ローカルインデックスでは、基となるテーブルと異なる個数のパーティションを指定することが出来ない。
例えば2つのパーティションに分かれているテーブルに対し「CREATE INDEX インデックス名 ON テーブル名(項目) LOCAL (PARTITION p1, PARTITION p2, PARTITION p3);」というように3つのパーティションを指定するとダメ。
2007-12-13
ORA-14151 invalid table partitioning method リストパーティション形式のインデックスを作成しようとした時。 グローバルパーティション索引を作るときにはリストパーティションを指定できない 2007-12-13
ORA-14551 問合せの中でDML操作を実行することはできません。 自作の関数をSELECT文で実行しようとした。 更新系のSQL(DML)を含む関数は、SELECTでは実行できない
EXECを使って実行すべし。
2007-09-22
ORA-24777 移行できないデータベース・リンクは使用できません XAトランザクション内でDBリンク経由のテーブルにアクセスしようとした。 DBリンクをXAトランザクションで使う場合、“共有サーバー接続”である必要がある。
ORA-24777の説明にある「マルチスレッド・サーバー(MTS)」という語は、共有サーバー接続を指す昔の言葉らしい)
サーバー(DB)側で、共有サーバー接続を受け付ける設定にする必要がある。
2008-10-30
ORA-30006 リソース・ビジー; WAITタイムアウトの期限に達しました。 SELECT〜FOR UPDATE WAIT nでタイムアウトした時。   2009-01-19
ORA-38301 can not perform DDL/DML over objects in Recycle Bin テーブル名がBIN$で始まるテーブルをDROPしようとした。 Oracle10gでは、テーブルを普通にDROPしただけではリサイクルビンの管理下に入る(BINで始まるテーブル名にリネームされる)だけとなった。別途PURGEコマンドを実行するか、DROP時にPURGEオプションを付けるかする必要がある。 2005-06-26

エラーメッセージの確認方法

エラー番号が分かれば、SQL*Plus上で そのエラーメッセージを表示してみることが出来る。[2007-06-26]

SQL> set serveroutput on
SQL> exec dbms_output.put_line(sqlerrm(-101));
ORA-00101: システム・パラメータDISPATCHERSの指定が無効です

PL/SQLプロシージャが正常に完了しました。

sqlerrmの引数に(マイナスの値で)エラー番号を指定する。


Oracle目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま