none
Oracleに接続できない RRS feed

  • 質問

  • 表題の通り、接続でエラーが出力されます。

    エラー内容:

     【アプリケーション定義またはオブジェクト定義のエラーです。】

    コード:

    Public Function Connect(ServiceNamee As String, ID As String, Pass As String) As Boolean
    
        On Error GoTo Err:
        
        Dim constr As String
        Set AdoCon = CreateObject("ADODB.Connection")
        
        constr = "Provider=OraOLEDB.Oracle"
        constr = constr & ";Data Source=" & ServiceNamee
        constr = constr & ";User ID=" & ID
        constr = constr & ";Password=" & Pass
        
        'constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\OD2013\Desktop\asd.accdb"
    
        AdoCon.ConnectionString = constr
        AdoCon.Open
        
        Connect = True
        Exit Function
    
    Err:
        
    End Function

    何の変哲もないサンプルソースと変わらないコードだと思います。(コメント部分は、Accessへの接続テストコードです)

    試したこと:

    ・ADODB.Connection は正常に使えるのか ⇒ Accessには接続できた

    ・サービス名称や設定に誤りはないか ⇒ コマンドから確認するがレスポンスがある

    えらーの内容からもっと手前のDBに届く前の所で蹴られてる感じなのですが
    これ以上、どう検証していいか分からず質問させていただきました。
    識者の方、お力を貸してくださいm(__)m

    追記:

    tnsnames.ora を使わずHost,Portを個々に指定する方法でも接続確認していますが同様にopneメソッドでエラーが出ます。

    2023年3月20日 7:03

回答

  • お使いの VBA が 32bit 版か 64bit 版かわかりませんが、"OraOLEDB.Oracle" はインストールされていますか?

    VBA から『CreateObject("DataLinks").PromptNew』を実行したときに、
    "Oracle Provider for OLE DB" が表示されるか確認してみてください。
    ("Microsoft OLE DB Provider for Oracle" ではなく)

    あるいは PowerShell から下記を実行して確認するなど。

    (New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Out-GridView -Title "$(@(32,64)[[System.Environment]::Is64BitProcess])bit環境"

    2023年3月20日 8:16
  • ORA-01033 はデータベースサーバーが再起動処理中(あるいはシャットダウン処理中)に接続した場合に表示されるものですよね。

     

    確認なのですが、Oracle Database Server の環境に Excel を入れているのでしょうか? (スタンドアロン環境)

    それとも、Oracle Database Server とは別に、Excel と Oracle Client の両方を入れた Windows 環境があるのですか? (自分は後者だと思っていました)

     
    どちらであるにせよ、Oracle Database のフォルダーと、Oracle Client のフォルダーは別管理ですし、Oracle Database のフォルダーに上書きでもしない限り、データベースサーバーそのものが壊れることは無いと思います。

    現状は、client_1 というのが 64bit の Oracle Client のフォルダーだと思いますので、たとえば client_2 に 32bit 版を入れてみてください。誤って 64bit Client のフォルダーに上書きしてしまっていた場合は、64bit Client を再インストールしてみてください。

     

    もし、データベース本体が ORA-01033 から復旧しない場合は、sqlplus /nolog で繋いでから shutdown & 再mount できないか確認してみてください。Oracle そのものの話になるようだと、VBA の話題から逸脱してしまうので、リンク紹介に留めておきます。

    • 回答としてマーク コーベル 2023年3月22日 12:34
    2023年3月22日 10:26

すべての返信

  • お使いの VBA が 32bit 版か 64bit 版かわかりませんが、"OraOLEDB.Oracle" はインストールされていますか?

    VBA から『CreateObject("DataLinks").PromptNew』を実行したときに、
    "Oracle Provider for OLE DB" が表示されるか確認してみてください。
    ("Microsoft OLE DB Provider for Oracle" ではなく)

    あるいは PowerShell から下記を実行して確認するなど。

    (New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Out-GridView -Title "$(@(32,64)[[System.Environment]::Is64BitProcess])bit環境"

    2023年3月20日 8:16
  • それと、「On Error GoTo Err」にジャンプしたときに、
    Debug.Print Err.Source
    Debug.Print Err.Number
    Debug.Print Err.Description
    の 3 点が何を返しているのかも確認してみてください。
    2023年3月20日 8:20
  • 魔界の仮面弁士さん、ご回答ありがとうございます。

    まず環境ですが以下になります。

    Excel32bit(前回もお世話になっており、64で動作が変だったので32に変更しました。

    エラー内容:

    ADODB.Connection
     3706 
    プロバイダーが見つかりません。正しくインストールされていない可能性があります。

    でした。
    32,64の問題でしょうか、、

    2023年3月20日 10:00
  • 32,64の問題でしょうか、、

    OLE DB は 32bit と 64bit で別管理です。
    (だからこそ、VBA で CreateObject("DataLinks").PromptNewしてみて欲しいと書いたわけですが)

    貼っていただいた PowerShell 画像のタイトルバーを見ると、「64bit」になっていますよね。
    VBA が 32bit なら、32bit 環境の PowerShell で確認してください。

    あるいは Oracle Installer で、x86 版の Oracle Provider for OLE DB がインストールされているかを確認することもできるでしょう。

    2023年3月20日 11:25
  • 内容を理解できておらず、レスがおかしくなってしまい申し訳ありませんでした。

    仰る通り、データリンクプロパティには当該のものが登録されていませんでした。
    提示頂いたリンクから32ビット版をインストールしましたが、それでもMicrosoft,,,しか出ずに
    変わらず同じエラーになります、その辺りもう少し調べてみます。
    取り急ぎご報告まで。

    2023年3月21日 4:24
    1. Oracle Client の 32bit版を、新しい ORACLE_HOME にインストールしていますか? 既存の ORACLE_HOME に ODAC をインストールすると、元の Oracle Applications が破損することがあります。
    2. お使いの Office はデスクトップ版でしょうか? ストアアプリ版の Microsoft Office だと利用できないかもしれません(未確認)。
    2023年3月21日 15:42
  • いま確認しましたが、仰るように破損したかもしれません。。
    既存のアプリが動作しなくなりました、、

    オラクルホームは複数あってはいけないと思ったのですが、ダメでしたね(-_-;)

    オフィスは社内Sharepointからアプリを選択してインストールしています。

    解決策としては、既存の64bitOracleを削除して32bitに差し替えるしかないのかもしれないですね。

    2023年3月22日 5:08
  • ORA-01033 はデータベースサーバーが再起動処理中(あるいはシャットダウン処理中)に接続した場合に表示されるものですよね。

     

    確認なのですが、Oracle Database Server の環境に Excel を入れているのでしょうか? (スタンドアロン環境)

    それとも、Oracle Database Server とは別に、Excel と Oracle Client の両方を入れた Windows 環境があるのですか? (自分は後者だと思っていました)

     
    どちらであるにせよ、Oracle Database のフォルダーと、Oracle Client のフォルダーは別管理ですし、Oracle Database のフォルダーに上書きでもしない限り、データベースサーバーそのものが壊れることは無いと思います。

    現状は、client_1 というのが 64bit の Oracle Client のフォルダーだと思いますので、たとえば client_2 に 32bit 版を入れてみてください。誤って 64bit Client のフォルダーに上書きしてしまっていた場合は、64bit Client を再インストールしてみてください。

     

    もし、データベース本体が ORA-01033 から復旧しない場合は、sqlplus /nolog で繋いでから shutdown & 再mount できないか確認してみてください。Oracle そのものの話になるようだと、VBA の話題から逸脱してしまうので、リンク紹介に留めておきます。

    • 回答としてマーク コーベル 2023年3月22日 12:34
    2023年3月22日 10:26
  • ご指摘の通り、サーバが落ちてただけでした。。

    また、
    現状は、client_1 というのが 64bit の Oracle Client のフォルダーだと思いますので、たとえば client_2 に 32bit 版を入れてみてください。

    ということで、仰るようにインストールした結果、データリンクプロパティに当該のライブラリが追加されアクセスできることを確認しました。

    ホントに何か何までフォローして頂き、ありがとうございました、無事解決できました!

    結論:

    インストールされているVBAと、オラクルクライアントのBit(32,64)は合わせなくては動作しない。
    VBE上で【
    CreateObject("DataLinks").PromptNew】を実行すると実行可能なリストが表示されるので無ければインストール

    2023年3月22日 12:34