FIX、MSDAORA を使用して Oracle データベースに接続する場合、[ORA-01012"エラー メッセージが表示されます。

文書翻訳 文書翻訳
文書番号: 834905
Notice
この修正プログラムは累積的な修正プログラム パッケージの一部として。この修正プログラムをマイクロソフト製品サポート サービスから受信すると、この修正プログラム パッケージに記載されている資料番号 839801 で MDAC 2.8 または 836799 MDAC 2.7 SP1 用になります。詳細については、次の資料では、Microsoft Knowledge Base を参照してください。

MDAC 2.8
839801 FIX 修正プログラムは MDAC 2.8 で利用可能です。
MDAC 2.7 SP1
836799 FIX 修正プログラムは MDAC 2.7 Service Pack 1 が利用可能です。
すべて展開する | すべて折りたたむ

目次

現象

Microsoft OLE を使用して、Oracle データベースへの接続します。Db Oracle (MSDAORA) と、サーバー上の接続を終了します。あります。開くと、新しい接続を Oracle データベースから、アプリケーションは、次の例外エラー メッセージが表示されます。
System.Data.OleDb.OleDbException: エラー
ORA-01012: ログオンしていません

原因

終了すると、Oracle データベースへの接続には、MSDAORA を切断された接続の使用中に、サーバー側に返されるが、接続プールします。コードを正しくプールの接続の対話は、 ResetConnection MSDAORA のプロパティです。場合このプロパティはサポートされていませんが、プロバイダー、接続がリセットされるプールのコードが誤って解釈、接続が有効なものであります。クライアント コードが新しいが開きます接続を接続プールに返された切断可能性があります。取得します。したがってに記載されているエラー メッセージが表示されます、「現象」記載します。

解決方法

修正プログラムの情報

サポートされている修正プログラムがマイクロソフトから入手可能になりました。ただし、この資料に記載されている問題のみを修正するものです。この問題が発生しているシステムにのみ適用されます。この修正プログラムは、今後さらにテストが表示されます。したがって、この問題で深刻な影響をされていない場合は、この修正プログラムを含む次の service pack のリリースを待つことをお勧めします。

この問題を解決するには、マイクロソフト カスタマー サポート サービス、修正プログラムを入手するに問い合わせてください。Microsoft カスタマー サポート サービスの電話番号とサポート コストに関する情報の完全な一覧については、次のマイクロソフト Web サイトを参照してください。
http://support.microsoft.com/contactus/?ws=support
メモ Microsoft Support 担当者が特定の更新で問題が解決されると判断した場合は特殊なケースでは、料金が通常のサポート免除されるキャンセルする可能性があります。追加の質問および問題の特定のアップデートの対象とならない問題、通常のサポート料金が適用されます。

ファイル情報

この修正プログラムの英語版がファイル属性 (またはそれ以降のファイル属性) が、次のとおり。日付および時刻これらのファイルを世界協定時刻 (UTC) が表示されます。ファイル情報を表示すると、ローカル時刻に変換します。UTC とローカル時刻との時差を確認するを使用して、 タイム ゾーン タブ コントロール パネルの日付と時刻ツールでします。
Microsoft データ アクセス コンポーネント (MDAC) 2.8
   Date         Time   Version         Size     File name
   ---------------------------------------------------------
   10-Mar-2004  04:22  2.80.1036.0     225,280  Msdaora.dll
   10-Mar-2004  04:22  2000.85.1036.0   24,576  Odbcbcp.dll
   10-Mar-2004  04:21  2.80.1036.0     442,368  Oledb32.dll
   10-Mar-2004  04:21  2000.85.1036.0  401,408  Sqlsrv32.dll
MDAC 2.7 Service Pack の 1
   Date         Time   Version         Size     File name
   ---------------------------------------------------------
   10-Mar-2004  02:19  2000.81.9046.0   61,440  Dbnetlib.dll
   10-Mar-2004  02:20  2.71.9046.0     221,184  Msdaora.dll
   10-Mar-2004  02:15  2.71.9046.0     126,976  Msdart.dll
   10-Mar-2004  02:15  3.520.9046.0    204,800  Odbc32.dll
   10-Mar-2004  02:20  2000.81.9046.0   24,576  Odbcbcp.dll
   10-Mar-2004  02:20  3.520.9046.0     98,304  Odbccp32.dll
   10-Mar-2004  02:16  2.71.9046.0     417,792  Oledb32.dll
   10-Mar-2004  02:19  2000.81.9046.0  471,040  Sqloledb.dll
   10-Mar-2004  02:19  2000.81.9046.0  385,024  Sqlsrv32.dll

状況

マイクロソフトこれに記載されているマイクロソフト製品の問題であることを確認しています「対象」のセクションで。

詳細

現象の再現手順

  1. Microsoft Visual Studio を起動します。NET。
  2. で、 ファイル メニューのポイント新しい、し プロジェクト.は、 新しいプロジェクト ダイアログ ボックスが表示されます。
  3. 下にあります。 [プロジェクトの種類をクリックして ビジュアル基本プロジェクト、し コンソール アプリケーション下にあります。 テンプレート.
  4. で、 名前 ボックスの種類MyApp、し [OK].既定では、Module1.vb ファイルが作成されます。

    Microsoft Visual C# を使用している場合.NET で、Class1.cs のファイルが作成されます。
  5. 上部には、次のコードを追加します。

    マイクロソフトの Visual Basic。NET コード
    Imports System
    Imports System.Data.OleDb
    Visual C#。NET コード
    using System.Data.OleDb;
  6. 次のコードを追加、 メイン手順:

    Visual Basic。NET コード
    Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim r As OleDbDataReader
    Dim sid As String
    Dim orlcmd As String
    Dim connString As String = "Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;"
    Try
        'Create a new connection to the Oracle database by using MSDAORA.
        cn = New OleDbConnection
        cn.ConnectionString = connString
        cn.Open()
        cmd = New OleDbCommand
        cmd.CommandText = "SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)"
        cmd.Connection = cn
        r = cmd.ExecuteReader()
        sid = ""
        If (r.Read()) Then
            sid = r.GetValue(0).ToString() + "," + r.GetValue(1).ToString()
        End If
        orlcmd = "Alter System Kill Session '" + sid + "' Immediate;"
        Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:")
        Console.WriteLine(orlcmd)
        Console.ReadLine()
        r.Close()
        cmd.CommandText = "SELECT count(*) from TAB"
        Try
            'Expecting this command to fail because connection has been killed
            r = cmd.ExecuteReader()
        Catch orlex As OleDbException
            Console.WriteLine(orlex.Message)
            cmd.Dispose()
            'Close the bad connection.
            cn.Close()
            System.Threading.Thread.Sleep(1000)
            cn.ConnectionString = connString
            cn.Open()
            cmd = New OleDbCommand
            cmd.CommandText = "SELECT count(*) FROM TAB"
            cmd.Connection = cn
            'This command will fail, but it will work when a new connection is used.
            r = cmd.ExecuteReader()
            If (r.Read()) Then
                Console.WriteLine(r.GetValue(0))
            End If
       End Try
    Catch ex As OleDbException
       Console.WriteLine(ex.ToString())
    End Try
    Console.WriteLine("Press ENTER to exit...")
    Console.ReadLine()
    
    Visual C#。NET コード
    OleDbConnection cn;
    OleDbCommand cmd;
    OleDbDataReader r;
    String sid;
    String orlcmd;
    String connString="Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;";
    try
    {
        //Create a connection to the Oracle database by using MSDAORA.
        cn= new OleDbConnection();
        cn.ConnectionString=connString;
        cn.Open();
        cmd=new OleDbCommand();
        cmd.CommandText="SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)";
        cmd.Connection=cn;
        r=cmd.ExecuteReader();
        sid="";
        if(r.Read())
        {
           sid=r.GetValue(0).ToString()+","+r.GetValue(1).ToString();
        }
        orlcmd="Alter System Kill Session '"+sid+"' Immediate;";
        Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:");
        Console.WriteLine(orlcmd);
        Console.ReadLine();
        r.Close();
        cmd.CommandText="SELECT count(*) from TAB";
        try
        {
            //Expecting this to fail because the connection is killed.
            r=cmd.ExecuteReader();
        }
        catch(OleDbException orlex)
        {
            Console.WriteLine(orlex.Message);
            cmd.Dispose();
            //Close the bad connection.
            cn.Close();
            System.Threading.Thread.Sleep(1000);
            cn.ConnectionString=connString;
            cn.Open();
            cmd=new OleDbCommand();
            cmd.CommandText="SELECT count(*) FROM TAB";
            cmd.Connection=cn;
            //This command will fail, but it will work when a new connection is used.
            r=cmd.ExecuteReader();
            if(r.Read())
            {
               Console.WriteLine(r.GetValue(0).ToString());
            }
        }
    }
    catch(OleDbException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    Console.WriteLine("Press ENTER to exit...");
    Console.ReadLine();
    
    メモ に従って接続文字列を変更する、環境です。
  7. で、 ビルド メニューをクリックして ビルドソリューション.
  8. で、 デバッグ メニューをクリックして開始.コマンドをコンソールに表示されることを確認します。ウィンドウです。
  9. Oracle SQL の * さらに、表示されているコマンドを実行します。[ コンソール ] ウィンドウでします。
  10. ENTER キーを押します。コンソール ウィンドウでは、例外を表示します。「現象」に記載されていますいます。

関連情報

詳細については、Microsoft OLE DB プロバイダーOracle は、次のマイクロソフト開発ネットワーク (MSDN) Web サイトを参照してください。
http://msdn2.microsoft.com/en-us/library/ms810685.aspx
の詳細については、「を表示するには、次の資料番号をクリックします。マイクロソフト サポート技術。
824684マイクロソフトのソフトウェア更新プログラムの説明に使用される一般的な用語の説明
サード ・ パーティ製品これ説明から独立している会社によって製造されています[マイクロソフト]。マイクロソフト、黙示の保証がありませんまたはそれ以外の場合は、関連、パフォーマンスや信頼性これらの製品。

プロパティ

文書番号: 834905 - 最終更新日: 2011年7月30日 - リビジョン: 5.0
キーワード:?
kbbug kbfix kboracle kbprovider kbqfe kbdatabase kbconnectivity kbhotfixserver kbmt KB834905 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:834905
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com