※环境
OS:windows server 2008R2 64bit.
开发工具: VS2010 (NetFv4.0)+ C# + NHibernate + OracleClient
Oracle:10.0.2 64bit server +10.0.2 32bit client
※错误现象
数据库连接失败:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务.
※解决方案:
在监听文件中加入下面红字部分:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\oracle)
(SID_NAME = ORCL)
)
)
※错误现象
C#连接ORACLE 报错“System.Data.OracleClient需有Oracle用户端软体版本8.1.7或以上版本".
※解决方案:
权限限制。Oracle安装目录,NETWORK SERVICE用户没有访问权限。
所以只要给Oracle安装目录,设置NETWORK SERVICE的访问权限即可。详细步骤如下:
1. 在 Oracle 安装目录上(如D:\Oracle10\),按鼠标右键,选择 [共享与安全],到 [安全]选项卡。
添加"NETWORK SERVICE"用户组,权限增加“修改、读取和执行”,如果不够就加上完全控制。
2. 计算机管理--用户和组--在administrator组中加上"NETWORK SERVICE"用户组。
一般介绍到此重启机器就可以了,这里涉及一些VS内部使用组件的问题,事实上有些是不行的,还需要配置下oci.dll.
3. 下载“instantclient-basic-win32-10.2.0.4”,解压后放到某个目录下。(如:C:\instantclient-basic-win32-10.2.0.4)
4. 把"C:\instantclient-basic-win32-10.2.0.4"加到环境变量PATH中。
5. 设置环境变量:TNS_ADMIN=“tnsnames.ora所在路径”,如果不行就把tnsnames.ora copy到"C:\instantclient-basic-win32-10.2.0.4"目录下。
6. 重启机器,OK。
※错误现象
PL SQL DEVELOPER在以上环境中不能用。
※解决方案
1. 按照上面3、4、5所述,做好配置。
2. 打开PLSQLDEV,在其“工具”--“首选项”中,把Oracle主目录名设为:C:\instantclient-basic-win32-10.2.0.4
3. 把“OCI库”设为:C:\instantclient-basic-win32-10.2.0.4\OCI.DLL
4. 关闭PLSQLDEV,重启,OK。
※错误现象
程序执行报ora-00911错误(无效字符)
※解决方案
1. 通常是SQL末尾加了个分号(;)所致。
2. 客户端和服务器端字符集不一致所致。
SELECT * FROM v$nls_parameters; 或
select * from nls_database_parameters 或
select userenv(‘language’) from dual;
a. 修改客户端字符集(设置环境变量)
NLS_LANG = AMERICAN_CHINA.ZHS16GBK
b. 修改客户端字符集(修改注册表)--不建议。
附:NLS_LANG 参数组成
NLS_LANG参数由以下部分组成:
NLS_LANG=<Language>_<Territory>.<Clients Characterset>
NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页
或者对于unicode应用设置为UTF8
在Windows上查看当前系统的代码页可以使用chcp命令。