トップ回答者
Oracleに接続できない

質問
-
表題の通り、接続でエラーが出力されます。
エラー内容:
【アプリケーション定義またはオブジェクト定義のエラーです。】
コード:
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:09
回答
-
お使いの 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環境"
- 編集済み 魔界の仮面弁士MVP 2023年3月20日 8:20 誤記修正:お追加の → お使いの
- 回答としてマーク コーベル 2023年3月22日 12:35
-
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
すべての返信
-
お使いの 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環境"
- 編集済み 魔界の仮面弁士MVP 2023年3月20日 8:20 誤記修正:お追加の → お使いの
- 回答としてマーク コーベル 2023年3月22日 12:35
-
32,64の問題でしょうか、、
OLE DB は 32bit と 64bit で別管理です。
(だからこそ、VBA で CreateObject("DataLinks").PromptNewしてみて欲しいと書いたわけですが)貼っていただいた PowerShell 画像のタイトルバーを見ると、「64bit」になっていますよね。
VBA が 32bit なら、32bit 環境の PowerShell で確認してください。あるいは Oracle Installer で、x86 版の Oracle Provider for OLE DB がインストールされているかを確認することもできるでしょう。
-
- Oracle Client の 32bit版を、新しい ORACLE_HOME にインストールしていますか? 既存の ORACLE_HOME に ODAC をインストールすると、元の Oracle Applications が破損することがあります。
- お使いの Office はデスクトップ版でしょうか? ストアアプリ版の Microsoft Office だと利用できないかもしれません(未確認)。
-
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
-
ご指摘の通り、サーバが落ちてただけでした。。
また、
>現状は、client_1 というのが 64bit の Oracle Client のフォルダーだと思いますので、たとえば client_2 に 32bit 版を入れてみてください。ということで、仰るようにインストールした結果、データリンクプロパティに当該のライブラリが追加されアクセスできることを確認しました。
ホントに何か何までフォローして頂き、ありがとうございました、無事解決できました!
結論:
インストールされているVBAと、オラクルクライアントのBit(32,64)は合わせなくては動作しない。
VBE上で【CreateObject("DataLinks").PromptNew】を実行すると実行可能なリストが表示されるので無ければインストール