<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>技術情報</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/" />
    <link rel="self" type="application/atom+xml" href="http://www.cosol.jp/tech/../feed/tech.xml" />
    <id>tag:www.cosol.jp,2011-01-17:/tech//5</id>
    <updated>2012-04-04T06:03:54Z</updated>
    <subtitle>コーソルでは経験豊かなエンジニアが、Oracle・データベースに関するお役立ち情報を発信しています。データベースのチューニングや設定にお役立ていただけます。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.06</generator>

<entry>
    <title>ORA-03136: インバウンド接続がタイムアウトになりました。</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0062_ora03136.shtml#000127" />
    <id>tag:www.cosol.jp,2012:/tech//5.127</id>

    <published>2012-04-04T06:01:45Z</published>
    <updated>2012-04-04T06:03:54Z</updated>

    <summary>ORA-03136エラーとはどのようなエラーか？ 専用サーバー接続構成で新規接続...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-03136エラーとはどのようなエラーか？</h4>

<p>専用サーバー接続構成で新規接続を試みた状況で、SQLNET.INBOUND_CONNECT_TIMEOUTの時間内にユーザー認証が完了せず、サーバープロセスにより新規接続がタイムアウトされた場合にORA-03136エラーが発生します。</p>

<h5>ORA-03136エラーのエラー出力例(Oracle Database 10.2以前）</h5>

<p>アラートログに、以下のようなエラーが出力されます。</p>

<pre class="prettyprint linenums">
Fri Mar 03 03:03:03 2012
WARNING: inbound connection timed out (ORA-3136)
</pre>

<h5>ORA-03136エラーのエラー出力例(Oracle Database 11.1 以降）</h5>

<p>アラートログに、以下のようなエラーが出力されます。Oracle Database 11.1 以降では、Oracle Database 10.2以前ではsqlnet.logに出力されていた情報も、アラートログに出力されます。</p>

<pre class="prettyprint linenums">
Fri Mar 16 17:09:59 2012
  
  
***********************************************************************
  
Fatal NI connect error 12170.
  
  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.1.0 - Production
        Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 16-3月 -2012 17:09:59
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
  
TNS-12535: TNS: 操作はタイム・アウトしました。
    ns secondary err code: 12606
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
  Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.15.40)(PORT=11162))
WARNING: inbound connection timed out (ORA-3136)
</pre>

<h4>ORA-03136の一般的な発生要因と対処</h4>
ORA-03136は一般に以下の要因で発生します。

<ul>
<li>悪意のあるクライアントからデータベースへの接続要求を受け取た場合</li>
<li>認証処理の過程で主にクライアント側の処理に時間がかかった場合</li>
<li>データベース・サーバーの負荷が高い場合</li>
<li>クライアントとデータベース・サーバー間のネットワーク通信上の問題があった場合</li>
<li>パスワードの入力ミス等で認証処理が失敗した状態で、セッションが切断されない状態が続いた場合</li>

</ul>

<h5>悪意のあるクライアントからデータベースへの接続要求を受け取た場合</h5>
アラートログファイル、サーバーの sqlnet.log ファイル又はディスパッチャのトレースファイルを使用してどのクライアント・アドレスから接続が実施されたか確認できます。

<h5>認証処理の過程で主にクライアント側の処理に時間がかかった場合 </h5>
クライアントの負荷状況を確認し、クライアントの負荷を低減させることを検討します。また、SQLNET.INBOUND_CONNECT_TIMEOUT をデフォルトの60秒より大きな値を設定します。

<h5>データベース・サーバーの負荷が高い場合 </h5>
サーバーの負荷状況を確認し、サーバーの負荷を低減させることを検討します。また、SQLNET.INBOUND_CONNECT_TIMEOUT をデフォルトの60秒より大きな値を設定します。

<h5>クライアントとデータベース・サーバー間のネットワーク通信上の問題があった場合 </h5>
クライアントとデータベース・サーバー間のネットワーク通信上の問題を解決します。

<h5>パスワードの入力ミス等で認証処理が失敗した状態で、セッションが切断されない状態が続いた場合 </h5>
正しいパスワードの入力を行なうか、セッションを切断します。

<h4>ORA-03136に関するFAQ</h4>

<h5>SQLNET.INBOUND_CONNET_TIMEOUT の設定値はどのようにすればいいですか？</h5>

<p>Oracle Database 10.1 までは SQLNET.INBOUND_CONNECT_TIMEOUT のデフォルト値は 0 (無限)でしたが、Oracle Database 10.2 より 60 (単位 秒)に変更されました。<br />
クライアントからの接続において認証処理がこの値以内に完了しない場合、その接続は終了します。<br />
ORA-03136の発生を抑止するためにSQLNET.INBOUND_CONNECT_TIMEOUTを変更する場合は、設定値を0 (無限)に設定する、あるいは例えば 120 等、現在より大きい値に設定する方法が考えられます。</p>

<p>しかし、認証処理に60秒以上の時間を要する状況は正常な状態とは考えにくいため、Oracle Databaseサポート窓口への問合せも検討してください。</p>

<h5>共有サーバ接続でインバウンド接続がタイムアウトした場合はどのようになりますか？ </h5>

<p>共有サーバー接続の場合にSQLNET.INBOUND_CONNECT_TIMEOUT によるタイムアウトが発生した場合は、ディスパッチャのトレースにTNS-12535 TNS-12606 が出力されます。</p>

<h5>どのクライアントからの接続で発生したかを確認するにはどうしたらいいですか？ </h5>

<p>専用サーバ接続の場合、アラートログまたはサーバ側のSQLNET.LOGを確認し、エラーの発生したクライアントのアドレスを確認します。</p>

<pre class="prettyprint linenums">
Fri Mar 16 17:09:59 2012
  
  
***********************************************************************
  
Fatal NI connect error 12170.
  
  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.1.0 - Production
        Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 16-3月 -2012 17:09:59
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
  
TNS-12535: TNS: 操作はタイム・アウトしました。
    ns secondary err code: 12606
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
  Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.15.40)(PORT=11162))←★
WARNING: inbound connection timed out (ORA-3136)
</pre>

<p>共有サーバ接続の場合、ディスパッチャプロセスのトレースファイルを確認し、エラーの発生したクライアントのアドレスを確認します。</p>

<pre class="prettyprint linenums">
*** 2012-03-03 03:03:03.000
  
  NS Primary Error: TNS-12535: TNS: 操作はタイム・アウトしました。
  NS Secondary Error: TNS-12606: TNS: アプリケーション・タイムアウトが発生しました。
kmduicxd: 0C760020, kmduiflg: 9, circuit: 2C9A7CFC
  (circuit) dispatcher process id = (2F07E394, 1), holder = 2C9A7304
            parent holder = (2C9A7304)
            serial # = 2
            connection context = 0C760020
            user session = (00000000), flag = (10130), queue = (4)
            buffers - status = (0, 0)
Client Address = (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.15.40)(PORT=11162))←★
</pre>

<h4>キーワード</h4>

<p>ORA-3136 ORA-03136 ORA-3135 ORA-03135 ORA-3113 ORA-3106 TNS-12535 インバウンド タイムアウト inbound connection timed out INBOUND_CONNECT_TIMEOUT<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-12543: TNS: 接続先ホストに接続できません。 </title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0052_ora12543.shtml#000126" />
    <id>tag:www.cosol.jp,2012:/tech//5.126</id>

    <published>2012-04-04T05:58:26Z</published>
    <updated>2012-04-04T06:01:30Z</updated>

    <summary>ORA-12543 エラーとはどのようなエラーか？ ORA-12543 は、接続...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-12543 エラーとはどのようなエラーか？</h4>
ORA-12543 は、接続先として指定されたホストにネットワークの観点で到達出来ない場合に発生するエラーです。

<h4>ORA-12543 のエラー出力例</h4>

<pre class="prettyprint linenums">
[oracle@l54x64a ~]$ sqlplus system/oracle@db1
  
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 7 12:37:42 2012
  
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
  
ERROR:
ORA-12543: TNS:destination host unreachable
</pre>

<h4>ORA-12225 の発生例と対処法</h4>
指定したネットサービス名に対応するホストに、ネットワークの観点で到達できない場合に発生するエラーであるため、pingなどのOSレベルのネットワーク疎通確認ツールを用いて、該当ホストにアクセス可能であるかを調べてください。
アクセス不可である場合、tnsnames.oraに指定したホスト名に誤りがないか、OSのネットワーク設定に誤りが無いかを調べてください。

<h4>キーワード</h4>
ORA-12543 ORA-12225 接続先ホスト EHOSTUNREACH ICMP host unreachable
ORA-12543: TNS:destination host unreachable
]]>
        
    </content>
</entry>

<entry>
    <title>アイドル・インスタンスに接続しました</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0054_idle_instance.shtml#000125" />
    <id>tag:www.cosol.jp,2012:/tech//5.125</id>

    <published>2012-04-04T05:56:42Z</published>
    <updated>2012-04-04T05:58:14Z</updated>

    <summary>「アイドル・インスタンスに接続しました」とはどのような時に表示されるメッセージか...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>「アイドル・インスタンスに接続しました」とはどのような時に表示されるメッセージか？</h4>

<p>「アイドル・インスタンスに接続しました」は、インスタンスが起動していない状態でインスタンスへ接続すると表示されるメッセージです。<br />
なお、インスタンスが起動していない状態でインスタンスに接続できるのは、SYSDBA 権限またはSYSOPER 権限を指定した場合のみです。これらの権限を指定しなかった場合は ORA-01034 が発生してインスタンスに接続できません。</p>

<h4>「アイドル・インスタンスに接続しました」の発生例</h4>

<pre class="prettyprint linenums">
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on 水 2月 1 17:27:49 2012
Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
アイドル・インスタンスに接続しました。
SQL>
</pre>

<h4>一般的な発生要因</h4>

<h5>Windows の場合</h5>

<p>Oracle Databaseのサービス自体は起動しているが、インスタンスが起動していない。<br />
 <br />
<h5>UNIX/Linuxの場合</h5><br />
 <br />
インスタンスが起動していない。または、環境変数 ORACLE_SID の設定が間違っている。</p>

<h4>対処方法</h4>

<p>インスタンスが起動していない場合は、startupコマンドを実行して、インスタンスを起動します。</p>

<p>UNIX/Linuxで、インスタンスを起動しても問題が解決しない場合は、 ORACLE_SID の設定が間違っている可能性があります。<br />
一旦sqlplus を終了した後、 シェルに設定している環境変数 ORACLE_SID を確認し、間違っていた場合は正しい値に設定して、再度接続してください。</p>

<h4>キーワード</h4>

<p>アイドルインスタンス ORACLE_SID SYSDBA権限 SYSOPER権限 インスタンス起動<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-01654: 索引 ??? を拡張できません(???分、表領域 ???)</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0051_ora01653.shtml#000124" />
    <id>tag:www.cosol.jp,2012:/tech//5.124</id>

    <published>2012-04-04T05:54:21Z</published>
    <updated>2012-04-04T05:56:24Z</updated>

    <summary>ORA-01654エラーとはどのようなエラーか？ テーブルに索引が作成されている...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-01654エラーとはどのようなエラーか？</h4>

<p>テーブルに索引が作成されている場合、テーブルのデータが変更されると、Oracle Databaseによって索引データも自動的にメンテナンスされます。<br />
索引データを格納している索引セグメントの空き領域が不足した場合、索引セグメントは拡張されますが、索引セグメントを格納している表領域に、拡張分に対応した空きがない場合、ORA-01654エラーが発生します。</p>

<h4>ORA-01654エラーのエラー出力例</h4>

<pre class="prettyprint linenums">
ORA-01654: 索引 USER1.TEST_INDEX_1 を拡張できません(128分、表領域 USERS)
ORA-01654: unable to extend index USER1.TEST_INDEX_1 by 128 in tablespace USERS
</pre>

<p>意味は以下のとおりです。</p>

<pre>
      USER1.TEST_INDEX_1      エクステントを割り当てようとした索引セグメント
      128                     足りなかったデータブロックの数
      USERS                   索引セグメントがある表領域
</pre>

<h4>ORA-01654の一般的な発生要因と対処</h4>
ORA-01654は一般に以下の要因で発生します。

<ul>
<li>索引セグメントが格納されている表領域が小さい</li>
<li>ディスク領域が不足</li>
<li>索引セグメントが長期間メンテナンスされていない</li>
</ul>

<p><br />
<h5>索引セグメントが格納されている表領域が小さい </h5><br />
索引セグメントを保存する表領域が小さい場合は、以下のいずれかの対処を行い、表領域を拡張して下さい。</p>

<ul>
<li>表領域のデータファイルを自動拡張(AUTOEXTEND)に設定する</li>
<li>表領域のデータファイルサイズを手動で拡張(RESIZE)する</li>
<li>表領域に、新たにデータファイルを追加する</li>
</ul>

<h5>ディスク領域が不足</h5>
表領域のデータファイルを自動拡張(AUTOEXTEND)に設定した場合でも、データファイルを配置しているディスク領域に
空き領域がない場合は、データファイルを拡張することができず、索引セグメントの拡張に失敗します。
データファイルを配置しているディスク領域の空き領域を増やしてください。また、表領域内の不要なセグメントを削除するか、再編成して、表領域内の空き領域を増やしてください。

<h5>索引セグメントが長期間メンテナンスされていない</h5>

<p>頻繁にデータの更新や削除が行われるシステムを長期間運用した場合、索引セグメントが断片化して、格納されているデータ量（テーブル件数）に比べて、多くの領域を使用している場合があります。<br />
索引セグメントを拡張しなくてもすむように、以下の手動メンテナンスを定期的に実施して下さい。</p>

<ul>
<li>索引の再構築(ALTER INDEX 索引名 REBUILD)、コアレス(ALTER INDEX 索引名 COALESCE)</li>
<li>不要な索引の削除</li>
</ul>

<p>索引の再構築中は、現在使用している索引と作成中の新しい索引の2つ分のディスク領域が必要です。また、索引が設定されたテーブルに対するDMLは待機させられる点にも注意が必要です。(*1) </p>

<p><small><br />
(*1) Enterprise Editionでは、ONLINE句(ALTER INDEX 索引名 REBUILD ONLINE)によりオンライン実行が可能で、対象テーブルへのDMLも同時に実行できます。<br />
</small></p>

<h4>キーワード</h4>

<p>ORA-01654 ORA-01654 索引 拡張 再構築 AUTOEXTEND RESIZE REBUILD COALESCE<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-01653: 表???.???を拡張できません(???分、表領域???)。</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0051_ora01653.shtml#000123" />
    <id>tag:www.cosol.jp,2012:/tech//5.123</id>

    <published>2012-04-04T05:52:04Z</published>
    <updated>2012-04-04T05:54:07Z</updated>

    <summary>ORA-01653エラーとはどのようなエラーか？ テーブルへのデータ追加・更新に...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-01653エラーとはどのようなエラーか？</h4>

<p>テーブルへのデータ追加・更新により、データを格納している表セグメントの空き領域が不足した場合、表セグメントは拡張されます。表セグメントを格納している表領域に、拡張分に対応した空きがない場合、ORA-01653エラーが発生します。</p>

<h4>ORA-01653エラーのエラー出力例</h4>

<pre class="prettyprint linenums">
SQL> INSERT INTO TEST VALUES (60000,60000,60000);
INSERT INTO TEST VALUES (60000,60000,60000)
            *
行1でエラーが発生しました。:
ORA-01653: 表SCOTT.TESTを拡張できません(8分、表領域USERS)。
</pre>

<p>エラーの数値、引数の意味は以下のとおりです。</p>

<pre>
    SCOTT                  スキーマ名
    TEST                  データを登録・更新しようとしたテーブル名
    8                  データブロック数
    USERS                  テーブルが格納されている表領域
</pre>

<h4>ORA-01653の一般的な発生要因と対処</h4>
ORA-01653の発生要因は、表セグメントを格納している表領域に、拡張分に対応した空きがないことです。
このため、以下のいずれかの対処を行って、表領域のサイズを手動で拡張するか、または、自動での拡張を可能にします。

<ul>
<li>データファイルを追加して表領域のサイズを拡張する</li>
<li>データファイルを大きなサイズにリサイズし、表領域のサイズを拡張する</li>
<li>データファイル自動拡張設定を有効化して、自動での拡張を可能にする</li>
</ul>

<h5>データファイルの追加</h5>
以下のコマンドを実行して、データファイルを追加して表領域のサイズを拡張します。
<pre class="prettyprint linenums">
ALTER TABLESPACE <表領域名> ADD DATAFILE '<データファイルのパス>' SIZE <サイズ>;
</PRE>

<h5>データファイルのリサイズ</h5>
以下のコマンドを実行して、データファイルのサイズを拡張して、表領域のサイズを拡張します。
<pre class="prettyprint linenums">
alter database datafile '<データファイルのパス>' resize <サイズ>;
</PRE>

<h5>データファイル自動拡張設定を有効化</h5>
以下のコマンドを実行して、データファイルの自動拡張設定を有効化して、表領域の空き領域が不足した場合に、自動的にデータファイルが拡張できるようにします。

<pre class="prettyprint linenums">
ALTER DATABASE DATAFILE '<データファイルのパス>' AUTOEXTEND ON;
</PRE>

<h4>ORA-01653に関するFAQ</h4>

<h5>ORA-01653発生時、ディスク領域不足で上記対処方法が不可能な場合は、どうすればよいのでしょうか？</h5>
ディスク領域が不足している場合、データファイルの追加・サイズ拡張という対処法がとれません。何らかの方法で空き領域を増やす必要があります。テーブルの不要データをTRUNCATEすることで、空き領域を増やすことが可能です。ただし、TRUNCATE処理はROLL BACKできませんので、作業前に十分な確認が必要になります。または、オンライン・セグメント縮小(Shrink Space)機能を使って、フラグメンテーションを解消し使用領域を縮小させることもできます。

<h4>キーワード</h4>

<p>ORA-01653 ORA-01653 unable to extend table テーブル エクステント セグメント 自動拡張<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0035_waited_too_long_for_a_row_cache_enqueue_lock .shtml#000122" />
    <id>tag:www.cosol.jp,2012:/tech//5.122</id>

    <published>2012-04-04T05:50:03Z</published>
    <updated>2012-04-04T05:51:49Z</updated>

    <summary>アラートログに出力される &quot;WAITED TOO LONG FOR A ROW ...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>アラートログに出力される "WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" はどのような意味があるか?</h4>

<p>行キャッシュ・ロック(row cache lock) の獲得に 50 分間連続して失敗した場合にアラートログに出力されるメッセージです。行キャッシュ・ロックは、共有プールにキャッシュされたデータ・ディクショナリ情報にアクセスする際に獲得するロックです。何らかの処理が行キャッシュ・ロックを保持し続けているため、他の処理が 行キャッシュ・ロック の獲得に失敗した状況にあることが疑われます。</p>

<h4>アラートログへの出力例</h4>

<pre class="prettyprint linenums">
Mon Feb 10 17:10:37 2012
>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=9
</pre>

<p>pidが行キャッシュ・ロックを獲得しようとしているプロセスのpidを示します。</p>

<h4>"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" の一般的な発生要因と対処</h4>

<p>行キャッシュ・ロックは共有プールにキャッシュされたデータ・ディクショナリ情報に関するロック機構です。<br />
このメッセージが出力された場合、該当の行キャッシュ・ロックが他のプロセスによって長時間獲得されている可能性が高いです。</p>

<p>相互のプロセス間でデッドロックに陥り獲得できなかった場合もこのエラーが出力されます。ただし、行キャッシュ・ロックについては、エンキュー（ORA-00060)、ライブラリキャッシュロック(ORA-04020)のようにOracle Databaseが自動的にデッドロックを検知してロックを解除する仕組みがありません。このため、行キャッシュ・ロックを獲得しているセッションがロックを解放しない場合、行キャッシュ・ロックを獲得しているセッションを ALTER SYSTEM KILL SESSION コマンドで強制終了する必要があります。</p>

<p>この現象は、一般にOracle Database のBugである可能性が高いため、現象発生時に出力されたアラートログとトレースファイルをOracle Databaseのサポート窓口に提供し、調査を依頼することをお勧めします。</p>

<h4>"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" に関するFAQ</h4>

<h5>このメッセージが出力された後、ロック獲得待ちの状況は解消されるのでしょうか?</h5>
"WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!" が出力されても 行キャッシュ・ロックは解放されません。行キャッシュ・ロック が獲得できる状態になるまで該当のセッションは待機し続けます。

<p><br />
<h4>キーワード</h4></p>

<p>行キャッシュ・ロック row cache lock WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! ORA-60 ORA-00060 ORA-4020 ORA-04020<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>TNS-12542: TNS: アドレスがすでに使用中です。</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0034_ora12542.shtml#000121" />
    <id>tag:www.cosol.jp,2012:/tech//5.121</id>

    <published>2012-04-04T05:48:31Z</published>
    <updated>2012-04-04T05:49:52Z</updated>

    <summary>ORA-12542エラーとはどのようなエラーか？ TCP/IPを用いてクライアン...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-12542エラーとはどのようなエラーか？</h4>

<p>TCP/IPを用いてクライアントアプリケーションからOracle Databaseに対してリモート接続する場合、TCPコネクションを設定します。TCPコネクションを設定するには、TCPポートの割り当てが必要ですが、何らかの理由でTCPポートの割り当てに失敗した場合、ORA-12542エラーが発生します。</p>

<h4>ORA-12542エラーのエラー出力例（リスナー起動時）</h4>

<pre class="prettyprint linenums">
TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Production
システム・パラメータ・ファイルはC:\app\oracle\product\11.2.0\dbhome_1\network\admin\listener.oraです。
ログ・メッセージをC:\app\oracle\diag\tnslsnr\test\listener\alert\log.xmlに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test.com)(PORT=1521)))
リスニング・エラーです: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test.com)(PORT=1521)))
TNS-12542: TNS: アドレスがすでに使用中です。
 TNS-12560: TNS: プロトコル・アダプタ・エラー
  TNS-00512: そのアドレスはすでに使用中です。
   32-bit Windows Error: 48: Unknown error
</pre>

<p><br />
エラーの数値、引数の意味は以下のとおりです。<br />
<pre><br />
リスニングしています       リスナーが起動する際に使うPortを意味しています。<br />
リスニング・エラーです     リスナーが使用できないPortとHOSTを意味しています。<br />
TNS-12542                  ORA-12542 と同じ意味となります。<br />
TNS-12560                  一般的なプロトコル・アダプタ・エラーを意味しています。<br />
TNS-00512                  そのアドレスはすでに使用中という意味になります。<br />
32-bit Windows Error       OS側のエラー（WINSOCK エラー）となります。<br />
</pre></p>

<h4>ORA-12542の一般的な発生要因と対処</h4>
ORA-12542は一般に以下の要因で発生します。

<ul>
<li> リスナーのリスニングポートが既に使用されている  </li>
<li> listener.ora で同じPortが重複して設定されている </li>
<li> TCPコネクションの設定時に割り当て可能なポート番号がなかった</li>
</ul>

<h5> リスナーのリスニングポートが既に使用されている </h5>
エラーが発生したマシンにおいて、リスナーのリスニング用に指定したポート番号が、他のプロセスによって使用されている場合、ORA-12542エラーでリスナーの起動に失敗します。
ポートを使用しているプロセスを特定し、終了してください。

<p>ポートを使用しているプロセスを特定するためには以下のコマンドを使用します。</p>

<ul>
<li>Linux/UNIX : lsof 
<li>Windows :  Sysinternals(http://www.sysinternals.com)で配布されている TCP View など
</ul>
     
<h5> listener.ora で同じポートが重複して設定されている </h5>
下記のように、同一のポートをリスニングするような設定がされている場合、ORA-12542エラーでリスナーの起動に失敗します。

<pre class="prettyprint linenums">
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = <ホスト名もしくはIPアドレス>)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = <ホスト名もしくはIPアドレス>)(PORT = 1521))
      )
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCtest))
      )
    )
</pre>

<p>同一のポートをリスニングしないように、listener.oraの設定を変更してください。</p>

<p><br />
<h5> TCPコネクションの設定時に割り当て可能なポート番号がなかった </h5><br />
TCPコネクションを設定するとき、クライアント側ではOSがポート番号を動的に割り当てます。<br />
コネクション数が非常に多い場合や、頻繁にコネクションの設定、解放が行われる状況では、割り当て可能なポートが枯渇し、ポートの割り当てができない場合があります。ポートの割り当てができない場合、ORA-12542エラーが発生し、リモート接続に失敗します。</p>

<p>このような場合、以下のような対処が考えられます。</p>

<ul>
<li>OSの設定を変更して、動的割り当て用のポート範囲を増やす。
<li>OSの設定を変更して、TCPコネクションの解放後にTIME_WAITステータスで待機する時間を短くする。
<lI>(可能であれば)同時コネクション接続数や、コネクションの設定回数を減らす。
<li>(可能であれば)リモート接続の代わりに、ローカル接続で接続する
</ul>

<p><br />
<h4>ORA-12542に関するFAQ</h4></p>

<h5>ローカル接続ではORA-12542は発生しますか？ </h5>
ローカル接続ではORA-12542は発生しません。ORA-12542はTCPコネクション設定時のポート割り当てに起因して発生するエラーであるためです。

<h5> サーバ側で割り当て可能なポート番号がないために、ORA-12542が発生する可能性はありますか？</h5>
Oracle Database 10.2以降では基本的にありません。例外的に、ポートリダイレクションと呼ばれるTCPコネクションのの再設定を伴う動作をする場合は発生する可能性があります。
ポートリダイレクションが発生する状況は以下のとおりです。

<ul>
<li>Oracle DatabaseサーバーのOSがWindowsで、専用サーバー接続を行っており、レジストリパラメータUSE_SHARED_SOCKETがFALSEである場合 (Oracle Database 10.2以降ではデフォルトTRUE)
<li>ダイレクトハンドオフが無効(listener.ora に DIRECT_HANDOFF_TTC_[listener_name]=OFF / 9.0以降デフォルトON) である場合の共有サーバ接続
</ul>

<h4>キーワード</h4>

<p>ORA-12542 TNS-12542<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-28009: SYSでの接続はSYSDBAまたはSYSOPERで行う必要があります</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0021_ora28009.shtml#000120" />
    <id>tag:www.cosol.jp,2012:/tech//5.120</id>

    <published>2012-04-04T05:46:06Z</published>
    <updated>2012-04-04T05:48:19Z</updated>

    <summary> ORA-28009 はどのようなときに表示されるエラーなのか？ SYSDBA ...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<p><br />
<h4>ORA-28009 はどのようなときに表示されるエラーなのか？</h4></p>

<p>SYSDBA または SYSOPER を指定せずに SYS ユーザでの接続を試みた際にORA-28009 が発生します。</p>

<h4>ORA-28009 の出力例</h4>
ORA-28009 の出力例 を以下に記します。

<pre class="prettyprint linenums">
SQL> conn sys/[パスワード]
ERROR:
ORA-28009: SYSでの接続はSYSDBAまたはSYSOPERで行う必要があります
SQL>
</pre>

<h4>ORA-28009 の発生条件と対処</h4>

<p>SYSユーザーでの接続コマンドに "AS SYSDBA"を指定していないことがORA-28009 の発生原因であるため、"AS SYSDBA"を指定します。</p>

<pre class="prettyprint linenums">
SQL> conn sys/[パスワード]
ERROR:
ORA-28009: SYSでの接続はSYSDBAまたはSYSOPERで行う必要があります 
  
  
Warning: You are no longer connected to ORACLE.
SQL>
SQL> conn sys/[パスワード] as sysdba
Connected. 
SQL>
</pre>

<h4>ORA-28009 に関するFAQ</h4>

<h5>"AS SYSDBA"を指定せずにSYSユーザーでログインする方法はありますか？</h5>

<p>初期化パラメータO7_DICTIONARY_ACCESSIBILITY を TRUE に設定することで、as sysdba を用いなくとも、SYS スキーマ内のオブジェクトへアクセスできます。<br />
なお、O7_DICTIONARY_ACCESSIBILITYへの変更を反映させるためには、インスタンス再起動が必要です。</p>

<pre class="prettyprint linenums">
SQL> sho parameter O7_DICTIONARY_ACCESSIBILITY
  
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY          boolean     TRUE
SQL>
SQL> conn sys/[パスワード]
Connected. 
SQL>
</pre>

<h4>キーワード</h4>
ORA-28009 O7_DICTIONARY_ACCESSIBILITY 
]]>
        
    </content>
</entry>

<entry>
    <title>ORA-19809: リカバリ・ファイルの制限を超えています</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0018_ora19809.shtml#000119" />
    <id>tag:www.cosol.jp,2012:/tech//5.119</id>

    <published>2012-04-04T05:44:05Z</published>
    <updated>2012-04-04T06:05:03Z</updated>

    <summary>ORA-19809エラーとはどのようなエラーか？ ORA-19809 はフラッシ...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-19809エラーとはどのようなエラーか？</h4>

<p>ORA-19809 はフラッシュ・リカバリ領域(11.2以降で高速リカバリ領域と名称変更)が不足した場合に発生するエラーです。<br />
フラッシュ・リカバリ領域とは、バックアップファイル、アーカイブログファイルなどのリカバリ関連のファイルの出力先となるディスク領域です。フラッシュ・リカバリ領域に出力されたファイルはOracle Databaseによって管理され、初期化パラメータDB_RECOVERY_FILE_DEST_SIZEに設定されたサイズを超えないように制御されます。<br />
フラッシュリカバリ領域へファイルを出力しようとして、ファイルサイズの総計がDB_RECOVERY_FILE_DEST_SIZEを超える場合、ORA-19809 エラーが発生します。</p>

<h4>ORA-19809エラーのエラー出力例</h4>

<h5>RMAN (Recovery Manager) によるバックアップに失敗した場合のコマンド出力</h5>
<pre class="prettyprint linenums">
RMAN> backup database;
  
backupが開始されました(開始時間: 11-12-15)
  ：
  ：
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backupコマンド(ORA_DISK_1チャネル上)が12/15/2011 13:27:43で失敗しました
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-19804: 67108864バイトのディスク領域を制限31457280から再生できません
</pre>
フラッシュリカバリ領域にファイルを出力するコマンドを実行した結果、ORA-19809エラーが発生した場合、ORA-19804エラーが同時に出力されます。

<h5> アーカイブログの出力に失敗した場合のアラートログ出力 </h5>

<pre class="prettyprint linenums">
Errors in file /var/log/oracle/xxxx/diag/rdbms/xxxx/xxxx/trace/xxxx_arc1_3853.trc:
ORA-19815: 警告: db_recovery_file_dest_size(31457280バイト)は100.00%バイトが使用され、残り0バイトが使用可能です。
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
ARC1: Error 19809 Creating archive log file to '/var/log/oracle/xxxx/arch/xxxx/archivelog/2011_12_15/o1_mf_1_7_%u_.arc'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance xxxx - Archival Error
ORA-16038: ログ1、順序番号7をアーカイブできません。
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-00312: オンライン・ログ1 スレッド1: '/oradata/xxxx/redo01/redo111.log'
ORA-00312: オンライン・ログ1 スレッド1: '/oradata/xxxx/redo02/redo112.log'
</pre>
ORA-19809エラー発生時、アラートログにはORA-19809エラーとあわせてORA-19815エラーが出力されます。

<p><br />
<h4>ORA-19809の一般的な発生要因と対処</h4></p>

<p>フラッシュ・リカバリ領域に出力されたファイルサイズの総計が初期化パラメータ DB_RECOVERY_FILE_DEST_SIZEを超えたことが本エラーの発生要因です。<br />
このため、ORA-19809エラー発生時には、以下のいずれかの対処を行う必要があります。</p>

<ul>
<li>フラッシュ・リカバリ領域にある不要なファイルを削除する</li>
<li>DB_RECOVERY_FILE_DEST_SIZE の値を大きくする</li>
</ul>

<p><br />
<h5>フラッシュ・リカバリ領域にある不要なファイルを削除する</h5></p>

<p>RMAN の DELETE コマンドを使用してフラッシュ・リカバリ領域にある不要なファイルを削除します。<br />
なお、RMANのDELETEコマンドを使用せずに、OS コマンドを使用してファイルを直接削除した場合、Oracle Database はフラッシュ・リカバリ領域の空き領域が増加したと認識しないため、注意が必要です。</p>

<p>また、不要なファイルがない場合は、DB_RECOVERY_FILE_DEST_SIZE の値を大きくする必要があります。</p>

<h5>DB_RECOVERY_FILE_DEST_SIZE の値を大きくする </h5>

<p>初期化パラメータファイルの値を変更後にデータベースの再起動を行うか、ALTER SYSTEM コマンドで動的に変更します。</p>

<h4>ORA-19809に関するFAQ</h4>

<h5>OS コマンドを使用してファイルを削除して確保したフラッシュ・リカバリ領域の空き領域を、Oracle Databaseに認識させるには？</h5>

<p>RMAN の CROSSCHECK コマンドにて OS 上で削除されているファイルを Oracle Database に認識させてから、DELETE EXPIRED コマンドにて無効となっているファイルの情報を論理的に削除する必要があります。<br />
アーカイブログファイルを削除した場合の実行例を以下に示します。</p>

<h6>RMAN を使用して接続します。</h6>
<pre class="prettyprint linenums">
$ rman target /
</pre></li>

<h6>
OS 上で削除されているアーカイブログファイルを Oracle が持っている情報から削除するためにチェックをつけます。</h6>
<pre class="prettyprint linenums">
RMAN> crosscheck archivelog all;
</pre></li>
<li>

<h6>チェックをつけたファイルを削除します。</h6>
<pre class="prettyprint linenums">
RMAN> delete expired archivelog all;
</pre></li>
</ol>

<p><br />
<h4>キーワード</h4><br />
ORA-19809 ORA-19804 ORA-19815 フラッシュ・リカバリ領域 DB_RECOVERY_FILE_DEST DB_RECOVERY_FILE_DEST_SIZE<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-30036: UNDO表領域内でセグメントを拡張できません</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0022_ora30036.shtml#000118" />
    <id>tag:www.cosol.jp,2012:/tech//5.118</id>

    <published>2012-04-04T05:42:29Z</published>
    <updated>2012-04-04T05:43:53Z</updated>

    <summary>ORA-30036エラーとはどのようなエラーか？ Oracle Database...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-30036エラーとはどのようなエラーか？</h4>

<p>Oracle Database は読み取り一貫性を実現するために、更新前のデータをUNDO表領域内に存在するUNDOセグメントに保管しています。<br />
大量にデータを更新したなどの理由で、UNDOセグメントに格納すべきデータ量が増え、UNDOセグメントの拡張が必要となった状況で拡張に失敗した場合、ORA-30036エラーが発生します。</p>

<h4>ORA-30036エラーのエラー出力例</h4>

<pre class="prettyprint linenums">
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
</pre>

<p><br />
<h4>ORA-30036の一般的な発生要因と対処</h4><br />
ORA-30036は一般に以下の要因で発生します。</p>

<ul>
<li>UNDO表領域のサイズが小さい</li>
<li>UNDO保存の保証が有効になっている</li>
<li>そのほかの原因</li>
</ul>

<p><br />
<h5>UNDO表領域のサイズが小さい </h5></p>

<p>UNDO表領域の自動拡張がOFFであり、かつ、UNDO表領域のサイズが小さい場合は、大量の更新処理が同時に発生すると、ORA-30036が発生する可能性があります。これは、実行中のトランザクションが生成したUNDOデータを保管するために必要なUNDOセグメントのサイズが確保できないためです。<br />
この場合は、UNDO表領域のサイズ拡張や、自動拡張設定の有効化(ON)を検討してください。</p>

<p><br />
<h5>UNDO保存の保証が有効になっている </h5></p>

<p>UNDO表領域の自動拡張がOFFであり、かつ、UNDO保存の保証(RETENTION GUARANTEE)が有効になっている場合は、ORA-30036が発生する可能性があります。<br />
UNDO保存の保証を有効にすると、終了したトランザクションが生成したUNDOデータを、UNDO_RETENTION パラメータで指定された期間保持しようとします。このため、実行中のトランザクションが生成したUNDOデータを格納するために、UNDOセグメントの拡張が必要となった場合にサイズの確保に失敗する場合があります。<br />
この場合は、以下の対処を検討してください。</p>

<ul>
<li>UNDO表領域のサイズを拡張する
<li>UNDO表領域の自動拡張設定を有効化(ON)する
<li>UNDO保存の保証(RETENTION GUARANTEE)を無効化する
<li>UNDO_RETENTION パラメータをより小さい値に設定する
</ul>

<h5>そのほかの原因</h5>

<p>上記に該当しない状況で、ORA-30036 のエラーが発生してしまうケースには、Oracle Database のサポート窓口へ問い合わせることを検討してください。</p>

<h4>ORA-30036に関するFAQ</h4>

<h5>アラートログにORA-30036は出力されますか？ </h5>
一つのトランザクションを実行していてUNDOセグメントの拡張に失敗し、再度拡張を行おうとした段階でアラートログに出力されますので、必ず出力されるというものではありません。

<h5>手動UNDO管理でもORA-30036は発生しますか？ </h5>
手動UNDO管理(UNDO_MANAGEMENT=FALSE)では、ORA-30036ではなくORA-01650が発生します。ただし、発生までのメカニズムは異なるので注意してください。

<h4>キーワード</h4>

<p>ORA-30036 ORA-01650 ORA-1650 ORA-01562 ORA-1562 UNDO ROLLBACK <br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-12535: TNS: 操作はタイムアウトしました。</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0063_ora12535.shtml#000117" />
    <id>tag:www.cosol.jp,2012:/tech//5.117</id>

    <published>2012-03-28T12:29:02Z</published>
    <updated>2012-03-28T12:30:19Z</updated>

    <summary>ORA-12535エラーとはどのようなエラーか？ ネットワークに関わる何らかの処...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-12535エラーとはどのようなエラーか？</h4>

<p>ネットワークに関わる何らかの処理ががタイムアウトしたときに出力されるエラーです。</p>

<h4>ORA-12535エラーのエラー出力例</h4>

<pre>
ORA-12535: TNS: 操作はタイムアウトしました。
</pre>
※同様の状況で TNS-12535 エラーが出力される場合もありますが、エラーの意味は同じです。

<p><br />
<h4>ORA-12535の一般的な発生要因と対処</h4><br />
ORA-12535は一般に以下の要因で発生します。</p>

<ul>
<li>ネットワークに問題が発生している</li>
<li>tnsnames.ora 内のエントリで指定した IPアドレス が間違っている</li>
<li>ファイアウォールによるポートフィルタリングが行われている</li>
<li>ネットワークや OS の負荷が高い</li>
</ul>

<p><br />
<h5>ネットワークに問題が発生している </h5><br />
ネットワークに何らかの問題が発生して接続先ホストに到達出来ない場合に ORA-12535 が発生します。<br />
クライアントから接続先ホストに対して ping コマンドを実行して、応答が返るか確認して下さい。ping コマンドの応答が返らない場合、ネットワークの観点で調査を実施します。</p>

<p><br />
<h5>tnsnames.ora 内のエントリで指定した IPアドレス が間違っている </h5><br />
tnsnames.ora 内の接続記述子の ADDRESS 部に IPアドレス を指定している場合、指定した IPアドレス が誤っていないか確認します。<br />
ping コマンド等から指定された IPアドレス が正しいものであるか確認して下さい。</p>

<h6>tnsnames.ora 内の接続記述子</h6>
<pre class="prettyprint linenums">
orcl =
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = orcl)
)
</pre>

<h5>ファイアウォールによるポートフィルタリングが行われている</h5>
クライアントとサーバー間にファイアウォールが存在する場合、ファイアウォールによってポートフィルタリングが行われていないか確認して下さい。ポートフィルタリングによって指定のポートに接続出来ない場合も ORA-12535 が発生する可能性があるため、ファイアウォールの設定を見直して下さい。

<h5>ネットワークや OS の負荷が高い </h5>
ネットワークや OS の負荷が高く、クライアントからの接続要求に対してサーバーが応答を返せない場合にも ORA-12535 は発生します。この場合、ネットワークや OS の負荷を解消するか、TCP/IP タイムアウトの設定時間を延ばすことで ORA-12535 が解消するか確認して下さい。
(TCP/IP タイムアウトの設定方法は各 OS により異なります)

<p><br />
<h4>キーワード</h4><br />
ORA-12535 TNS-12535 操作はタイムアウトしました<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-02290：チェック制約(???.???)に違反しました</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0061_ora02290.shtml#000116" />
    <id>tag:www.cosol.jp,2012:/tech//5.116</id>

    <published>2012-03-28T12:21:58Z</published>
    <updated>2012-03-28T12:30:56Z</updated>

    <summary>ORA-02290はどのようなエラーか？ 挿入しようとしている値が、指定されたチ...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-02290はどのようなエラーか？</h4>

<p>挿入しようとしている値が、指定されたチェック制約を満たしていない場合に発生するエラーです。</p>

<h4>ORA-02290エラーの出力例</h4>

<p>以下にORA-02290エラーの発生例を示します。</p>

<pre class="prettyprint linenums">
SQL> create table tab1 (col1 varchar2(10));
  
表が作成されました。
  
SQL> alter table tab1 add constraint tab1_ck
  2 check( not REGEXP_LIKE(col1,'[^(A-z)(0-9)]'));
  
表が変更されました。
  
SQL>  insert into tab1 values('1');
  
1行が作成されました。
  
SQL> insert into tab1 values('10');
  
1行が作成されました。
  
SQL> insert into tab1 values('a');
  
1行が作成されました。
  
SQL> insert into tab1 values('A');
  
1行が作成されました。
  
SQL> insert into tab1 values('"');
insert into tab1 values('"')
*
行1でエラーが発生しました。:
ORA-02290: チェック制約(SCOTT.TAB1_CK)に違反しました
</pre>

<p>上記のケースでは、col1列にはアルファベットか数字のみが指定できるようチェック制約が作成されています。<br />
そのため、記号を挿入しようとした際にはチェック制約に違反するといったエラーが発生いたします。</p>

<h4>ORA-02290の一般的な発生要因と対処</h4>
挿入しようとしている値が、指定されたチェック制約を満たしていない場合に発生します。制約に違反する値を挿入しないことが、対処方法となります。

<h4>チェック制約とは</h4>

<p>チェック 制約によって、表の各行に必要な条件を指定できます。<br />
制約を満たすためには、表のそれぞれの行が、その条件に対してTRUE または不明（NULL のため）のいずれかである必要があります。<br />
特定の行に対するCHECK 制約条件が評価される場合、条件にある列名に、その行の列値が適用されます。</p>

<h5>チェック制約の制限事項</h5>

<ul>
<li>ビューに対しては、CHECK 制約を指定できません。ただし、WITH CHECK OPTION 句を使用してビューを定義することは可能です。これは、ビューにCHECK 制約を指定することと同じです。
<li>CHECK 制約の条件では、その表の中のすべての列を参照できますが、他の表の列は参照できません。
<li>CHECK 制約の条件は、次の構造を持つことができません。
<ul>
<li>副問合せおよびスカラー副問合せ式
<li>決定的でないファンクションへのコール（CURRENT_DATE、CURRENT_TIMESTAMP、DBTIMEZONE、LOCALTIMESTAMP、SESSIONTIMEZONE、SYSDATE、SYSTIMESTAMP、UID、USER およびUSERENV）
<li>ユーザー定義ファンクションへのコール
<li>REF 列の参照解除（DEREF ファンクションを使用する場合など）
<li>ネストした表の列または属性
<li>疑似列CURRVAL、NEXTVAL、LEVEL またはROWNUM
<li>完全に指定されていない日付定数
</ul>
</ul>

<h4>キーワード</h4>

<p>ORA-02290<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-01846 : 指定した曜日が無効です。</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0060_ora01846.shtml#000115" />
    <id>tag:www.cosol.jp,2012:/tech//5.115</id>

    <published>2012-03-28T12:09:11Z</published>
    <updated>2012-03-28T12:10:41Z</updated>

    <summary>ORA-01846エラーとはどのようなエラーか？ ORA-01846エラーは、曜...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-01846エラーとはどのようなエラーか？</h4>

<p>ORA-01846エラーは、曜日に指定した値が無効であるときに発生します。</p>

<h4>ORA-01846エラーのエラー出力例</h4>

<p>NLS_DATE_LANGUAGEの設定が "JAPANESE" の場合</p>

<pre class="prettyprint linenums">
SQL> SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL
                         *
行1でエラーが発生しました。:
ORA-01846: 指定した曜日が無効です。
</pre>

<h4>ORA-01846の一般的な発生要因と対処</h4>
指定した曜日の値が NLS_LANGUAGE または NLS_DATE_LANGUAGE パラメータ で指定した言語の形式に従っていない時にORA-01846が発生します。
上記の例では、NLS_DATE_LANGUAGE に日本語が設定されている環境で英語の曜日を指定したためにORA-01846が発生しています。
このような場合、曜日を日本語で指定するか、NLS_DATE_LANGUAGE に"AMERICAN" を指定することでエラーの発生を回避できます。

<h5>曜日を日本語で指定する </h5>

<pre class="prettyprint linenums">
SQL> SELECT NEXT_DAY(SYSDATE, '月曜') FROM DUAL;
  
NEXT_DAY(SYSDATE,'     
------------------- 
2012/03/19 23:00:00 
</pre>

<h5>NLS_DATE_LANGUAGE に"AMERICAN" を指定する </h5>

<pre class="prettyprint linenums">
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
  
セッションが変更されました。
  
SQL> SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
  
NEXT_DAY(SYSDATE,'M 
------------------- 
2012/03/19 23:00:00 
</pre>

<h4>ORA-01843に関するFAQ</h4>

<h5>曜日を数値で指定したのですが、意図した曜日を指定できません。なぜでしょうか？ </h5>
NLS_TERRITORY で指定された値 によって週初めの曜日が異なるためです。（日曜日が週初めである場合や、月曜日が週初めである場合があります。）
なお、日本（NLS_TERRITORY = 'JAPAN'）では週初めは日曜日となり、 1 は日曜日を、7 は土曜日を表します。

<p><br />
<h4>キーワード</h4></p>

<p>ORA-01846 ORA-1846 NLS_DATE_LANGUAGE NLS_TERRITORY<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-12502: TNS: リスナーがクライアントからCONNECT_DATAを受信していません。</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0058_ora12502.shtml#000114" />
    <id>tag:www.cosol.jp,2012:/tech//5.114</id>

    <published>2012-03-28T12:03:07Z</published>
    <updated>2012-03-28T12:05:27Z</updated>

    <summary>ORA-12502エラーとはどのようなエラーか？ クライアントからOracleデ...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-12502エラーとはどのようなエラーか？</h4>

<p>クライアントからOracleデータベースに接続する際、クライアントはリスナーへ接続を要求します。クライアントとリスナー間で、TCP コネクションが確立されたあと、クライアントはCONNECT_DATAと呼ばれる接続先サービスに関する情報をリスナーに送信します。何らかの理由で、リスナーが接続先の CONNECT_DATA を受信できなかった場合、ORA-12502エラーが発生します。</p>

<h4>ORA-12502エラーの出力例</h4>

<p>リスナーのログに以下のように出力されます。</p>

<pre class="prettyprint linenums">
24-FEB-2012 03:00:27 * 12502
TNS-12502: TNS:listener received no CONNECT_DATA from client
</pre>

<h4>ORA-12502の一般的な発生要因と対処</h4>
ORA-12502は一般に以下の要因で発生します。

<ul>
<li>CONNECT_DATA が渡される前に TCP コネクションが切断された</li>
<li>Oracle Net 接続以外の接続がリスナーに対して行われた</li>
</ul>

<h5>CONNECT_DATA が渡される前に TCP コネクションが切断された</h5>
リスナーが、以下のような原因で、クライアントからの CONNECT_DATA を受信できない状況で、TCP コネクションが切断された場合に発生します。

<ul>
<li>クライアント、リスナー間のネットワークの問題</li>
<li>クライアントのリソース不足</li>
</ul>

<p>上記の問題が発生していないか、確認してください。</p>

<h5>Oracle Net 接続以外の接続がリスナーに対して行われた </h5>
通常、接続時のエラーについては sqlnet.log にエラーが出力されます。しかし、sqlnet.log にエラーが出力されていない場合は以下が原因として考えられます。Oracle Net 接続以外の接続がリスナーに対して行われたため、エラーが発生しています。

<ul>
<li>何らかの監視ツールがLISTENERの監視を行う場合</li>
<li>リスナーのポートに対して telnet 等のアプリケーションにより何らかの接続要求が行われた場合</li>
</ul>

<p>Oracle Net 接続以外の接続がないか確認してください。</p>

<h4>キーワード</h4>

<p>ORA-12502 TNS-12502 リスナー CONNECT_DATA<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>ORA-12514: TNS: リスナーは現在、接続識別子でリクエストされているサービスを認識していません</title>
    <link rel="alternate" type="text/html" href="http://www.cosol.jp/tech/detail/ot0053_ora12514.shtml#000113" />
    <id>tag:www.cosol.jp,2012:/tech//5.113</id>

    <published>2012-03-28T11:46:01Z</published>
    <updated>2012-03-28T11:47:22Z</updated>

    <summary>ORA-12514 エラーとはどのようなエラーか？ リスナーがクライアントからの...</summary>
    <author>
        <name>cosol</name>
        <uri>http://www.cosol.jp/</uri>
    </author>
    
        <category term="Oracle DB Tips" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.cosol.jp/tech/">
        <![CDATA[<h4>ORA-12514 エラーとはどのようなエラーか？</h4>

<p>リスナーがクライアントからの接続要求を受け付けた時に、接続先となるサービスを認識していない時に発生するエラーです。</p>

<h4>ORA-12514 の一般的な発生要因と対処</h4>

<p>ORA-12514は一般に以下の要因で発生します。</p>

<ul>
<li>リスナーにサービスが登録されていない</li>
<li>クライアントの接続定義が誤っている</li>
</ul>

<h5>リスナーにサービスが登録されていない</h5>

<p>lsnrctl servicesコマンドを用いて、リスナーに登録されているサービスを確認します。</p>

<pre class="prettyprint linenums">
c:\>lsnrctl services
  
LSNRCTL for 32-bit Windows: Version 11.2.0.2.0 - Production on 02-2月 -2012 17:20:22
  
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
  
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=C10203477)(PORT=1521)))に接続中
サービスのサマリー...
サービス"ora112.c10203477"には、1件のインスタンスがあります。
  インスタンス"ora112"、状態READYには、このサービスに対する1件のハンドラがあります...
    ハンドラ:
      "DEDICATED" 確立:2 拒否:0 状態:ready
         LOCAL SERVER
</pre>

<p>上記例では、サービス名「ora112.c10203477」として、インスタンス「ora112」<br />
がサービス登録されています。</p>

<p>サービス登録されていない一般的な原因として以下があります。</p>

<h6>インスタンスが起動していない</h6>

<p>インスタンスが起動していない場合は、インスタンスからリスナーに対してサービスが登録されません。<br />
この場合は、インスタンスを起動してください。</p>

<h6>リスナーの起動直後である</h6>
リスナー起動後、インスタンスからサービスが登録されるまで最大1分かかることがあります。この場合は、しばらく待つか、インスタンスでalter system register;コマンドを実行します。

<h5>クライアントの接続定義が誤っている</h5>
リスナーが起動しているノードに、クライアントの接続先となるサービス（インスタンス）が存在せず、クライアントの接続定義が誤っている場合があります。
この場合は、$ORACLE_HOME/network/admin/tnsnames.ora を参照し、接続定義を確認します。

<pre class="prettyprint linenums">
ora112 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
    (SERVICE_NAME = ora112.C10203477)
    )
  )
</pre>

<p>SERVICE_NAME 句で指定されている値がリスナーに登録されているサービス名と一致しているか確認します。</p>

<h4>キーワード</h4>
ORA-12514 TNS-12514 サービス tnsnames.ora
]]>
        
    </content>
</entry>

</feed>

