0

Bequeath プロトコルを使用して (Oracle.ManagedDataAccess.Client を使用して) ローカルの Oracle 12.2 データベースに接続する Visual Studio C# Windows アプリケーションを使用しようとしています。ローカル データベース接続。

接続文字列または TNS エントリを指定しない場合、sqlplus は Bequeath プロトコルをネイティブに使用することを知っています。

sqlplus scott/tiger

*connected* 

SID と service_names はどちらも「mydb」です。

select instance from v$thread;
-----
mydb

show parameter service_names;
VALUE
-----
mydb

SQL Developer を介して接続するときに Bequeath プロトコルを使用することもできます (Local/Bequeath の接続タイプを使用)。

ただし、動作する接続文字列で Bequeath を使用する例を見つけることができませんでした (少なくとも私にとっては)。

Oracle Net Servicesの 12.1 ドキュメントはあまり役に立ちません。Bequeath の概要を例を挙げずに説明します。


tnsnames.ora:

MYDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = MYDB)
    )
  )

MYDB_BEQ = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = BEQ)(PROGRAM = oracle)(ARGV0 = oracleMYDB)
      )
    )
    (CONNECT_DATA = (SID = MYDB)
    )
  )

以下は、TCP を使用して機能します (リスナーを経由します)。

new OracleConnection(@"User Id=scott; Password=tiger
;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(
HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=MYDB)))");

*connected*

または、TNSNAMES エントリを使用します。

new OracleConnection("User Id=scott;Password=tiger;Data Source=MYDB")

*connected*

SQLPLUS を使用して、上記の BEQ エントリを使用して TNSNAMES 経由で接続できます。

sqlplus scott/tiger@mydb_beq

*connected*

ただし、これを Oracle.ManagedDataAccess で機能させることはできないようです。

new OracleConnection(@"User Id=scott; Password=tiger
                                      ;Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = BEQ)(PROGRAM = oracle)(ARGV0 = oracleMYDB)))(CONNECT_DATA = (SID = MYDB)))")

ORA-12533: Network Session: Connect transport address syntax error

上記で機能した TNSNAMES エントリを使用するために、これも試しました。

new OracleConnection("User Id=scott;Password=tiger;Data Source=MYDB_BEQ")

ORA-12533: Network Session: Connect transport address syntax error

ここにはおそらく基本的なものが欠けていますが、他に何を試すべきかわかりません...

4

1 に答える 1