plsql连接多个数据库设置

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在此运行提示缺少OraOps10.dll---这个问题一直困扰小弟。最后在师兄的提醒下。在自己的机器上安装了Oracle的精简版。是10.2.0的版本然后缺少OraOps10.dll的问题解决了(原因是自己的机器上没有安装Oracle的部分dll造成的)。
正当小弟欣喜之时。问题在此降临。我发现自己原先的NHibernate连接Oracle的字符串有问题。运行Test后发现竟然连不上了。暴怒之下上网搜资料。发现是原先自己制作的客户端跟现在安装的Oracle的精简版在端口上冲突了。考虑再三。将原先配置的Oracle客户端和环境变量。以及现在安装的Oracle精简版全部删掉。没想到。用360和微软自带的添加删除程序竟然找不到Oracle的程序。幸好oracle碰上克星了---删除Oracle的方法:先在服务里面将Oracle的4个服务停掉。然后将Orace的安装文件删掉。然后去注册表里将带Oracle的文件删掉,当然。这时候要小心了vs2008自带的Oracle连接字符串不要删。可能有几个Oracle删不掉。没有关系我们下一个优化大师。点击清理注册表。清理完后。在注册表里点击搜索Oracle已经没有东西了。---
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="Yalta.Core"/>
</property>
<property name="show_sql">false</property>
<!--<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>-->
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
再次运行程序,会抛出“无法将类型为“Oracle.DataAccess.Client.OracleConnection”的对象强制转换为类型“System.Data.Common.DbConnection”。”异常。引发这个异常的是“NHibernate\Tool\hbm2ddl\SuppliedConnectionProviderConnectionHelper.cs”。第25行:“connection = (DbConnection)provider.GetConnection();”。有一个方法可以绕过这行代码的执行,就是在hibernate.cfg.xml里增加一行“<property name="hbm2ddl.keywords">none</property>”。
这是tnsnames.ora的代码:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = yinfuqing)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = yinfuqing)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
的后面加上
YANKUANG=
(DESCRIPTION =
)
(CONNECT_DATA =
(SERVICE_NAME = yankuang.sys)
)
)
然后我将空格去掉我们可以用Editplus来打开。可以清楚的看到前面有空格。去掉之后问题解决了。现在不但自己机器上的精简版可用。远程的Oracle也可以连上了
问题终于完成了。现在的连接代码小弟将他们贴出来供大家参考:
plsql连接多个数据库设置
前一段时间在网上看到OracleClientDriver是微软出的连接Nhibernate和Oracle的字符串。而OracleDataClientDriver是Oracle自己出的。有很多的地方OracleDataClientDriver比OracleClientDriver要优秀。而且微软规定以后可能要废弃OracleClientDriver。所以要将项目中用到的OracleClientDriver改为OracleDataClientDriver。当然这时会报错的然后将Oracle.DataAccess.dll”拷贝到网站的bin目录下。
<property name="connection.connection_string">
<!--Data Source=yankuang;User ID=yankuanguser;Password=yankuanguser-->
Data Source=XE;User ID=system;Password=sdie?!3406
<property name="use_outer_join">trueห้องสมุดไป่ตู้/property>
<property name="command_timeout">10</property>
<property name="hbm2ddl.keywords">none</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 202.194.254.198)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = yankuang.sys)
)
)
保存后运行Test。晕了。不但连不上了。连连接OracleXE版本的也不行了。提示无法解析指定的连接标识符
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
</session-factory>
</hibernate-configuration>
</configuration>
没办法在上网查资料发现原来我加的字符串前面有空格。可能这个问题大家不是很明白。我放大一下
空格+YANKUANG=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 202.194.254.198)(PORT = 1521))
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
删完之后重启电脑。然后重新安装Oracle。----这是在运行Test。哈哈---可以将VS2008跟Oracle连上了。然后在路径F:\SimpleC\OracleXE\app\oracle\product\10.2.0\server\NETWORK\ADMIN下面找到sqlnet.ora文件在字段--
)
)
这是hibernate.cfg.xml的代码:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
)
YANKUANG=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 202.194.254.198)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = yankuang.sys)
)
相关文档
最新文档