是这样,本来是一个数据库,现在把其中一部份数据放到了另外一个orcal数据库中,但是前台的客户端程序一点都不能动,这样一来,用客户端去操作移走的数据的时候,就会提示数据不存在,有什么好的办法,在不动客户端的情况下,还能对移走的数据进行操作。不知道orcal有没有这样的功能,就是可以截获客户端发出的sql语句命令,这样就能进行判断是在哪个数据库里了,请大家帮帮忙!

解决方案 »

  1.   

    用建「DATABASE LINK」方式把另外一个orcal数据库連接起来。--建 DATABASE LINK
    CREATE PUBLIC DATABASE LINK linkname CONNECT TO username IDENTIFIED BY password USING 'linkoracle'--取
    SELECT * FROM tablename@linkname
      

  2.   

    在这台数据库中用dblink连接另外一台数据库
    SQL> create public database link dblinkname connect to username identified by password using 'sid';
    然后创建同义词
    比如你的表table_name 已经移到了另外一个数据库中
    SQL> create public synonym table_name for table_name@dblinkname;
    然后就可以像操作本台机器上的表一样去操作这个同义词指向的表,如
    SQL> select * from table_name;
    SQL> delete from table_name;
    这样你的程序就不用改变
      

  3.   

    skystar99047(天星):不是表的转移,是数据的转移,新建的数据库和原来的数据库里面的表一模一样的,就是把原来的数据库里的一些历史数据转移到新的数据库里面去了,但是客户端的应用程序是封装好的exe,没有原码,所以一点都改动不了,这样的情况,用您说的这样方法能够实现么?可否再具体的讲一下解决方案,谢谢了!
      

  4.   

    按照skystar99047(天星)的方法建DBLINK
    把表名改掉,建立一个和表名同名的视图,数据来源于本地表和远程表的UNION
      

  5.   

    原来你是这样的情况呀
    如果你的应用程序都是通过存储过程访问数据库的话,只修改存储过程就可以了,不过大多都是直接传入SQL语句处理的,所以不太好办。
    我想你只是查询用到另一个数据库的历史数据,插入更新都是这台数据库上吧。有这样一个方案你可以考虑:
    1.比如原来有表A,现在分在两个数据库中,用上面我给你的方法将另一个数据库中的表关键到这台数据库,假如对象名(同义词)为B(另外一台数据库的表A)
    2.将现在的表A重命名为C
    3.然后新建一个视图命名为A,该视图数据来源于B和C,这样你的SQL语句查询就可以通过该视图进行,比如原来select * from A查询的是表数据,而现在是通过视图中操作;对于插入和更新,因为操作的是视图,所以需要在该视图上建立替代触发器(需要你自己查资料如何去写,我这里就不给你细写了),以便对表数据进行插入更新操作,至于是插入更新到表C还是B,需要在触发器中实现。
    通过此种方式,我想应该可以满足你的需求。
      

  6.   

    alter system set sql_trace=true;
    在到user_dump_dest下寻找trace文件,可以用tkprof记录用户的所有sql。