是这样,本来是一个数据库,现在把其中一部份数据放到了另外一个orcal数据库中,但是前台的客户端程序一点都不能动,这样一来,用客户端去操作移走的数据的时候,就会提示数据不存在,有什么好的办法,在不动客户端的情况下,还能对移走的数据进行操作。不知道orcal有没有这样的功能,就是可以截获客户端发出的sql语句命令,这样就能进行判断是在哪个数据库里了,请大家帮帮忙!
调试欢乐多
CREATE PUBLIC DATABASE LINK linkname CONNECT TO username IDENTIFIED BY password USING 'linkoracle'--取
SELECT * FROM tablename@linkname
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;
这样你的程序就不用改变
把表名改掉,建立一个和表名同名的视图,数据来源于本地表和远程表的UNION
如果你的应用程序都是通过存储过程访问数据库的话,只修改存储过程就可以了,不过大多都是直接传入SQL语句处理的,所以不太好办。
我想你只是查询用到另一个数据库的历史数据,插入更新都是这台数据库上吧。有这样一个方案你可以考虑:
1.比如原来有表A,现在分在两个数据库中,用上面我给你的方法将另一个数据库中的表关键到这台数据库,假如对象名(同义词)为B(另外一台数据库的表A)
2.将现在的表A重命名为C
3.然后新建一个视图命名为A,该视图数据来源于B和C,这样你的SQL语句查询就可以通过该视图进行,比如原来select * from A查询的是表数据,而现在是通过视图中操作;对于插入和更新,因为操作的是视图,所以需要在该视图上建立替代触发器(需要你自己查资料如何去写,我这里就不给你细写了),以便对表数据进行插入更新操作,至于是插入更新到表C还是B,需要在触发器中实现。
通过此种方式,我想应该可以满足你的需求。
在到user_dump_dest下寻找trace文件,可以用tkprof记录用户的所有sql。