
数据源没有oracle
data
provider
for
net选项
.net4.0框架中已经不集成其他数据库的连接方式,只可以使用oledb
连接oracle除了可以使用oledb,还可以选择使用调用oracleclient命名空间的方法
解决Oracle测试数据库中的ORA-1555错误:现象:
应用的夜维从夜里00:00开始执行,但因为hang的原因(暂时猜测为夜维处理的某条数据和当前应用正常处理的某条数据相同,出现前后等待同一资源锁的现象),直到第二天白天09:25左右才继续执行,但此时应用日志记录:
snapshot too old: rollback segment number 29 with name "_SYSSMU29$" too small
原因分析:
因hang导致夜维的DELETE语句一直处于等待状态(超过一天),直到资源锁释放,但此时由于开始存放于UNDO中的前镜像超过UNDO_RETENTION参数设置的时间,且这是高并发的一个系统,很快可能就会被应用session覆盖UNDO中的记录,导致无法找到UNDO中的记录产生一致性读,因此报错ORA-1555,此次执行失败。
引申:
不过从这个报错现象可以接触到ORA-1555这个经典的错误号,尤其是在生产中,也是一种不多见的情况,尤其在现在UNDO基本都是用Oracle自动管理方式,且磁盘空间分配都比较大的情况下。
这个ORA-1555的错误是Oracle回滚段错误中的一种经典。UNDO用于记录DML *** 作数据的前镜像,ORA-1555的错误简单用一句话总结,我觉得就是当DML语句需要用UNDO记录的数据找到前镜像时,该记录已经被覆盖,导致无法利用UNDO中的记录完成一致性读。当然Oracle也有UNDO_RETENTION等参数避免这种情况的产生,但仍旧可能发生,原因有多种,解决方法也有多种,下面就简单说明介绍下。
从原因来讲,ORA-1555的错误原因归为两种,一是一致性读,一个是延迟块(锁)清除。
目测这种情况应该是由于服务器端的防火墙设置引起的。有几种解决方法(需要用root用户执行)
1. 临时禁用防火墙,机器重启之后防火墙会重新启动。
service iptables stop
2. 永久禁用防火墙。
chkconfig iptables off
3. 在防火墙规则中打开1521端口(Oracle数据库监听端口)
iptables -A RH-Firewall-1-INPUT -p tcp --dport 1521 -j ACCEPT
修改后通过下面命令检查配置结果,查看RH-Firewall-1-INPUT链。
iptables -L RH-Firewall-1-INPUT -nv
4. 也可以用图形化界面修改防火墙设置。
system-config-securitylevel
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)