日期:2014-05-17  浏览次数:20821 次

Oracle两台服务器之间数据过滤问题
我们公司有两台Oracle的服务器,用途不同,但有一部分数据会用一个C#的程序从一台复制部分到另一台上。
如工单这个表,会有部分工单资料从服务器A复制到服务器B。
现在想快速找出服务器A中工单这个表,有哪些工单号没有复制到服务器B上。
先是想在服务器B上查出全部工单号,再在服务器A上用not in ('',''...)这种方式,但提示not in后面的字符串不能超过1000个。
再试not in (select '' from dual union all select '' from dual ...)这种方式,提示
ORA-04031这个错误。
因为权限问题,只能在这两个服务器的Oracle中执行select命令。
请高手指点一下,有没有什么好办法。

------解决方案--------------------
两台数据库服务器之间的复制用c#多麻烦,为啥不用数据库自己的dblink实现,简单又安全。

如果不能修改设计,只能select,那真是没有其他比较好的办法。
------解决方案--------------------
如果要用SQL实现,可以试试下面方法,不知道能不能行得通
服务器B通过下面方法查出全部工单号:
select to_char(wm_concat(ID))
from (
select ID,
row_number()over(order by ID) as rn
from tt
)t
group by trunc(rn/1000);

服务器A用not in('') and not in ('')

------解决方案--------------------
先是想在服务器B上查出全部工单号,再在服务器A上用not in ('',''...)这种方式
这是多么无效率的操作~~~~~~~~
------解决方案--------------------
用not exists试试吧骚年、

select * from A a where not exists (
select 1 from B b where b.no = a.no
)


------解决方案--------------------
not exists 吧 效率也高点
------解决方案--------------------
引用:
not exists 吧 效率也高点

我同意
------解决方案--------------------
1、若有个你能控制库,建2个dblink然后查。外连、exist都行
2、若导出和建表权限,导出后到另一个库建表然后查
3、若啥啥没有,数据量少,用程序全查出存成文件,然后用svn对比
4、若啥啥没有,数据量大,用程序排序查,形成2个1000长度的数组,互相对。
------解决方案--------------------
引用:
1、若有个你能控制库,建2个dblink然后查。外连、exist都行
2、若导出和建表权限,导出后到另一个库建表然后查
3、若啥啥没有,数据量少,用程序全查出存成文件,然后用svn对比
4、若啥啥没有,数据量大,用程序排序查,形成2个1000长度的数组,互相对。


高端大气上档次啊~
------解决方案--------------------
随便建个库,把你要比较的数据导进来,直接左连,右连啥都给你比较出来