2007年8月14日星期二

VS2005 + Oracle 9i2 经历

做了个数据库连接,可是一直报错。 ASP.NET显示如下:
System.Data.OracleClient 需有 Oracle 用戶端軟體版本 8.1.7 或以上版本。

后来按照网上N多教程进行权限设定,内容大致如下:

1. 安装完ASP.NET,Oracle9i客户端后,使用System.Data.OracleClient访问Oracle数据库时收到如下信息:System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.

原因

Oracle 9i Release 2 客户端在安装到WindowsNTFS分区下时的安全认证设置不正确,引起本机的Authenticated Users用户无法看到ORACLE_HOME目录下的内容; 这导致在ASP.NETAuthenticated Users权限使用System.Data.OracleClient连接Oracle数据库时报出以上错误。

解决

要解决以上问题,只要给Authenticated Users 组加上访问Oracle Home目录的权限即可

a、以Administrator权限登录Windows.

b、启动Window 资源浏览器找到ORACLE_HOME目录,如C:\Oracle\ora92

c、右键弹出菜单,选择该目录共享与安全(Win2000下要点击属性)

d、点击安全页签

e、在组和用户名称列表中点击“Authenticated Users” .

f、在该用户的权限列表中,将读取和运行的选择框置为不选中状态

g、再次点击读取和运行的选择框,将其设置为选中状态

h、点击高级按钮并在权限项目中确定“Authenticated Users” 是否拥有读取并运行权限并应用于该文件夹,及子文件夹和文件”. 如果不是,双击这样,并确保权限可以应用于” “该文件夹,及子文件夹和文件”. 该项非常重要你一定要核查.

i、点击确定按钮

j、重启动, 以使得所有的修改生效.


可是,搞了之后,是另外一个错误:

OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用。

网上也有解决办法:

IIS下部署asp.net程序(访问Oracle数据库数据)的几个问题

主要是使用OracleClient连接数据库导致的一些错误:

1、System.Data.OracleClient requires Oracle client software version 8.1.7 or greater

原因:
Oracle 9i Release 2 客户端在安装到Windows的NTFS分区下时的安全认证设 置不正确,引起本机的Authenticated Users用户无法看到ORACLE_HOME目录下的内容; 这导致在ASP.NET以 Authenticated Users权限使用System.Data.OracleClient连接Oracle数据库时报出以上错误。

解决办法:
找到ORACLE_HOME文件夹(我的是d:\oracle\ora92),点右键,选属性--安全,在组或用户栏中选 “Authenticated Users”,在下面权限列表中增加的修改权限,"应用";再去掉刚增加的权限,点击应用;选权限框下面的“高级”按钮, 确认“Authenticated Users”后面的应用于是“该文件夹、子文件夹及文件”,按确定把

权限的更改应用于该文件夹;

----遇到这种问题一般重装一遍Oracle Client。

2、OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用

原因:环境句柄(OCIEnv)创建时失败,网上搜了下,OCIEnv的创建函数OCIEnvCreate() 或 OCIEnvNlsCreate()。这样问题就类似于"Could not create an environment: OCIEnvCreate returned -1"(网上该问题的原因认为是对oracle目前设置足够的权限)

解决办法:
给该机的oracle的安装目录设置:
IUSR_<你的机器名>(Internet来宾帐户), IWAM_<你的机器名>(启动IIS进程帐户)设置这两个用户的权限为“完全控制”就可以了,后来考虑到这样权限给的太大了,遂删掉之,还 原为最开始的权限设置情况,重连IIS,竟然没问题。还在茫然中:((显然该方法没解决根本问题,不管了)。

----我试验了上述方法都无效,结果重启后删除了Microsoft Oracle Client for .Net就好了。

3、ORA-12154: TNS: 无法处理服务名

网上对该问题的解决方案太多了,不过我机器情况不一样吧,用控制台添加数据库到树,设置网络服务名跟web.config中的Data Source一致,OK了。

最后说一下我的环境:

Oracle9.2i,Windws 2003 Server(SP1),.net 2.0

----先用Oracle的工具SQL Plus测试一下本地服务名,看看监听什么的都启动没有。

你可以通过这个链接引用该篇文章:http://rushing.bokee.com/tb.b?diaryId=15434953


照着尝试了下,failed。。。

最后只能走最危险的路:
使用 Local System 账户启动应用程序池。。。

搞定!可是心慌慌啊。。。

没有评论: