我们的一个项目是在老项目的经验基础上设计的,针对数据库有可能连接失败的问题,老方案的解决方法是,设置两个数据库:主数据库和备用数据库,一旦发现主数据库连接不上,立刻转到备用数据库。当然这种切换是自己编写程序控制的。新项目我想用JAVA技术(EJB3的持久化)开发,也查阅了很多资料,例如c3p0连接池可以设置成一旦发现数据库连接失败,尝试重新连接,但是不能设置主和备用数据库并自动切换,我们的项目使用的是Oracle,Oracle本身可以设置主备用(primary standby)数据库,但是这仅仅用于数据库本身的故障,不能解决网络故障。很棘手。想想老项目的解决方案到底有没有必要,实际上使用c3p0尝试重新连接+Oracle的主备用数据库的方案已经足够完美了,如果网络都断了,那就不单单是数据库的连接问题了,还能指望什么呢?呵呵。老项目之所以采用那个方案还有一个重要原因是使用的C++技术,对查询结果必须在在线状态下处理,没有Java中离线数据集或者ORM的概念(ORM本质上讲也是离线的),况且老是切换来切换去,主从数据库之间的数据同步也是个问题。新项目中数据库部分不是我负责的,所以有什么好的方法能够“说服”他就好了,还请各位指点指点,呵呵

解决方案 »

  1.   

    我们这的数据库是ora9i  这叫双机热备
    网络问题你可以每天定时将数据库中的表生成excel存入本地硬盘
      

  2.   

    也就是说如果网络断了的话就直接连接本地的Excel?但是数据量相当大啊...
      

  3.   


    给楼主建议:1、在filter里检查数据库连接
    2、如果3链接失败,启动异步程序
    3、异步程序负责关闭webserver,并且将备份数据库配置copy到webserver
    4、异步程序链接备份数据库、如果成功则启动webserver
    5、filter检测数据库连接,如果成功可以从备份数据库切换回来。
      

  4.   

    询问了我们设计数据库的,他说用Oracle的RAC,于是上网查了查,确实不错,JDBC连接字符串配置好后就可以自动切换了,呵呵