关于物化视图的问题,急,高手进来指点下

xqmarine 2007-09-08 09:54:14
两台数据库电脑,一台上面的物化视图是从另一台电脑上的基表中取数据的,设置是每 3 秒种增量刷新,正常情况没有问题,现在问题是 当基表所在的电脑重新启动再启动数据库正常后(意思就是两台电脑网络断开再重新恢复正常后), 另一台电脑中物化视图就再也刷新不了了。大概查看了下,发现是刷新组不工作了,状态处于“中断”,还有个就是 开始刷新时间不是 sysdate 了(创建的时候设置开始刷新时间就是sysdate),变成 4000年1月1号了。 只有在orahome手动点即时刷新,并且把刷新时间改回 sysdate之后, 物化试图才能恢复正常。 请问有没有办法保证在这种情况下不用手动操作就能自动恢复?????? 散了所有分,救命啊!!!
...全文
427 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdyrain 2007-09-19
  • 打赏
  • 举报
回复
不好意思,一直没有上来,呵呵,我的msn基本不上,留qq吧 29940283
xqmarine 2007-09-13
  • 打赏
  • 举报
回复
zdyrain(雨), 能不能加下我 msn? msn: xiao_marine@hotmail.com ,这贴我结了, 今天配置好后,开始小量数据测试没问题, 后来在 物化站点更新 500万数据,结果发现 主表没被更新。。郁闷ing。。
zdyrain 2007-09-12
  • 打赏
  • 举报
回复
两边的数据库名完全相同可以吗?
是可以的,主体站点---物化视图站点 两个数据库(好像叫方案更合适些)可以不一样的名字也可以一样,如果两个都是主体站点的话,好像必须同名(这是我的同事测试出来的结果)。

我的database link 建立的情况如下,给你参考下。
alter database rename global_name to hh.garims.com;

HH =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = tsgarims)
(SERVER = DEDICATED)
)
)

Create database link hh.garims.com connect to repadmin identified by repadmin using 'HH';
xqmarine 2007-09-11
  • 打赏
  • 举报
回复
非常感谢大家,尤其是 zdyrain(雨),你的方法确实没问题,这两天问题比较多,所以没空来结贴,现在在配置物化视图的双向复制环境又碰到问题,想再问你一下,两边的数据库名完全相同可以吗? 因为我是在两台虚拟机上做实验。。虚拟机是直接copy的,所以只改了个ip地址不一样,其他都一样。 这样行吗? 还有在配置过程中建dblink的名字是不是一定和globa_name相同? 希望得到你的帮忙,看了网上的帖子也没能搞定。。好急。。
christophe 2007-09-11
  • 打赏
  • 举报
回复
最好的办法是重建你的物化视图,因为重建过程会重新full refresh一次并重新执行新的job,所花费的成本比你去修复oracle的job问题要快很多.
zdyrain 2007-09-11
  • 打赏
  • 举报
回复
用job来做,就可以达到你想要的目的。
zdyrain 2007-09-11
  • 打赏
  • 举报
回复
有没有此job:dbms_refresh.refresh('"MVADMIN"."REP_REFRESH"');如果有,那就再做个下面的job,就可以解决网络断开自动恢复。

sql>create or replace procedure resume_broken_job as
CURSOR my_broken_jobs IS SELECT job FROM user_jobs WHERE broken = 'Y';
BEGIN
FOR broken_job IN my_broken_jobs LOOP
BEGIN
dbms_job.broken(broken_job.job, FALSE); /*设置job的broken为N,这样job可以再次执行*/
commit;
EXCEPTION WHEN OTHERS THEN NULL;
END;
END LOOP;
END;
/

sql>variable job2 number;
begin
dbms_job.submit(:job2,'resume_broken_job;',sysdate,'sysdate+5/(24*60*60)');
commit;
end;
/

我在物化视图复制环境中用过,没有问题。请参考。
doer_ljy 2007-09-10
  • 打赏
  • 举报
回复
感觉上没有好的办法让系统自动激活已经故障的MView。

使用excute DBMS_MVIEW.refresh('物化视图名','参数')
参数:增量是'f',不过由于有过网络中断,建议使用'c'完全刷新。
可以手动刷新试图。
xqmarine 2007-09-09
  • 打赏
  • 举报
回复
up
dy314 2007-09-08
  • 打赏
  • 举报
回复
不懂 不过帮你顶顶

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧