不得不说,oracle是一个很复杂但也是很奇怪的软件系统,几年一路下来,各种奇葩问题层出不穷,逐一记录。。。
sqlpus
1、不设置set define off 的话,包括@ & 等字符都会导致执行失败,或者可以通过char(10)等替换解决
2、新建索引时,先删约束,在删索引,在建立索引一般不会报错,顺序有问题则会出现无法创建的报错,虽然不影响最终结果
3、建立试图时,如果视图内容比较多,经常会出现多出的空格没对齐导致创建时提示无法识别,特别是使用太多union all 时。
不过这个问题应该是与编辑器的编码格式有关。(通过二分法找出这个问题时,已然疼死)
存储过程
1、采用java来使用数据库的object等自定义的结构体时,结构体的字段不能是表的字段,而必须是基本元素类型,当然,最蛋疼的是,
object 的定义的名字一定要大写,否则java端通过jdbc访问时会无法找到该定义,如
create ABC as Object( x number);
2、自定义的对象,不能跨用户使用(需要待明确原因)
2、采用游标时,千万记住,打开游标一定要有始有终,常见的场景是没数据时没做判断,直接跟着一句open cursor,结果就是游标数爆了(特别是通过jdbc访问经常出现)。。当然,可以考虑写个定时的程序释放这些未使用未及时释放的游标
3、通过查询语句作为条件然后delete的方式,会由于奇怪的数据变化导致删除的条数始终与直接删除不通(待明确原因)
数据源
1、was数据源无论成功失败。。一定要commit,否则日志会有大量连接释放异常的报错
2、dbcp数据不设置超时时候,线程获取连接池对象时会一直阻塞到天荒地老
3、was数据源有应用级的dns缓存,但是dbcp或者直接通过jdbc访问则没有,so,网络差或者dns问题,会导致系统挂掉。新的攻击方式哦