我尝试使用Visual Studio C#Windows应用程序,使用Bequeath协议连接到本地Oracle 12.2数据库(使用Oracle.ManagedDataAccess.Client),这样我就不必经历因此,Oracle侦听器仅用于本地数据库连接。
我知道sqlplus在未指定连接字符串或TNS条目时本机使用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
我可能在这里遗漏了一些基本的东西,但我不确定还有什么可以尝试...
答案 0 :(得分:0)
看起来不可能。
在12c Data Provider for .NET Developer's Guide:
的dataSources部分没有遗赠(beq)支持。默认地址是TCP环回 使用端口1521和来自环境的Oracle服务名称(ORACLE_SID)