楼主: herozyw

物化视图刷新错误

[复制链接]
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
11#
发表于 2005-1-6 10:48 | 只看该作者
我测试过A->B->C的情况,记得是可以快速刷新的。(时间太长了,记不清了)
你的问题应该是由于建立了中转用户B造成的。

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
12#
发表于 2005-1-6 10:49 | 只看该作者
最初由 herozyw 发布
[B]我又创建了一个新表,不经过用户B的中转,直接用用户A通过DBLINK连接,还是不能够使用快速刷新,整个过程我是用OEM来完成的。 [/B]


不要用oem,用脚本去做。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54
13#
 楼主| 发表于 2005-1-6 11:53 | 只看该作者
没有希望了,可能是版本BUG。

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
14#
发表于 2005-1-6 11:55 | 只看该作者
手头正好有环境,刚刚做了一个测试,没有出现你提到的错误
操作步骤大致如下:
SQL> insert into xys.tt values('mv' , 'mv' , 'mv');

已创建 1 行。

SQL> commit;

提交完成。


已选择13行。

SQL> insert into xys.tt values('mv1' , 'mv1' , 'mv1');

已创建 1 行。

SQL> commit;

提交完成

SQL> select * from xys.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
mv         mv         mv
mv1        mv1        mv1
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
mvtest     mvtest     mvtest
test       test1      test

AA         BB         CC
---------- ---------- ----------
test1      test       test1
test2      test2      test2
test3      test3      test3
test5      test5      test5

已选择15行。

SQL> connect test/test@repn;
已连接。
SQL> begin
  2  dbms_refresh.refresh(name=>'mvadmin.mv_test');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest
mv         mv         mv
mv1        mv1        mv1

已选择15行。

SQL>

用户xys就是你的A用户,TEST是你的B用户,完全是模仿你的环境,它们之间是实体化试图复制,而且刷新方式是FAST

在另一台机器上作了如下操作:
SQL> create user test identified by test default tablespace users;

用户已创建

SQL> grant dba to test;

授权成功。

SQL> connect test/test@repw;
已连接。
SQL> create materialized view tt refresh fast with primary key for update as seect * from test.tt@repn.us.oracle.com;

实体化视图已创建。

SQL> connect system/system@repw;
已连接。
SQL> CREATE USER mvadmin IDENTIFIED BY mvadmin;

用户已创建

SQL> BEGIN
  2  DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
  3  username => 'mvadmin');
  4  END;
  5  /

PL/SQL 过程已成功完成。

SQL> GRANT COMMENT ANY TABLE TO mvadmin;

授权成功。

SQL> GRANT LOCK ANY TABLE TO mvadmin;

授权成功。

SQL> GRANT SELECT ANY DICTIONARY TO mvadmin;

授权成功。

SQL> GRANT CREATE SESSION TO mvadmin;

授权成功。

SQL> GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;

授权成功。

SQL> BEGIN
  2  DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
  3  username => 'mvadmin',
  4  privilege_type => 'receiver',
  5  list_of_gnames => NULL);
  6  END;
  7  /

PL/SQL 过程已成功完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest

已选择13行。

SQL> commit;

提交完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest

已选择13行。

SQL> connect test/test@repw;
已连接。
SQL> begin
  2  dbms_refresh.refresh(name=>'mvadmin.mv_test');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select * from tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest
mv         mv         mv
mv1        mv1        mv1

已选择15行。

SQL>

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54
15#
 楼主| 发表于 2005-1-6 12:02 | 只看该作者
TO:warehouse
你的数据库版本是多少?

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
16#
发表于 2005-1-6 12:07 | 只看该作者
9201 WINDOWS2000

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
17#
发表于 2005-1-6 12:17 | 只看该作者
最初由 warehouse 发布
[B]手头正好有环境,刚刚做了一个测试,没有出现你提到的错误
操作步骤大致如下:
SQL> insert into xys.tt values('mv' , 'mv' , 'mv');

已创建 1 行。

SQL> commit;

提交完成。


已选择13行。

SQL> insert into xys.tt values('mv1' , 'mv1' , 'mv1');

已创建 1 行。

SQL> commit;

提交完成

SQL> select * from xys.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
mv         mv         mv
mv1        mv1        mv1
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
mvtest     mvtest     mvtest
test       test1      test

AA         BB         CC
---------- ---------- ----------
test1      test       test1
test2      test2      test2
test3      test3      test3
test5      test5      test5

已选择15行。

SQL> connect test/test@repn;
已连接。
SQL> begin
  2  dbms_refresh.refresh(name=>'mvadmin.mv_test');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest
mv         mv         mv
mv1        mv1        mv1

已选择15行。

SQL>

用户xys就是你的A用户,TEST是你的B用户,完全是模仿你的环境,它们之间是实体化试图复制,而且刷新方式是FAST

在另一台机器上作了如下操作:
SQL> create user test identified by test default tablespace users;

用户已创建

SQL> grant dba to test;

授权成功。

SQL> connect test/test@repw;
已连接。
SQL> create materialized view tt refresh fast with primary key for update as seect * from test.tt@repn.us.oracle.com;

实体化视图已创建。

SQL> connect system/system@repw;
已连接。
SQL> CREATE USER mvadmin IDENTIFIED BY mvadmin;

用户已创建

SQL> BEGIN
  2  DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
  3  username => 'mvadmin');
  4  END;
  5  /

PL/SQL 过程已成功完成。

SQL> GRANT COMMENT ANY TABLE TO mvadmin;

授权成功。

SQL> GRANT LOCK ANY TABLE TO mvadmin;

授权成功。

SQL> GRANT SELECT ANY DICTIONARY TO mvadmin;

授权成功。

SQL> GRANT CREATE SESSION TO mvadmin;

授权成功。

SQL> GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;

授权成功。

SQL> BEGIN
  2  DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
  3  username => 'mvadmin',
  4  privilege_type => 'receiver',
  5  list_of_gnames => NULL);
  6  END;
  7  /

PL/SQL 过程已成功完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest

已选择13行。

SQL> commit;

提交完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest

已选择13行。

SQL> connect test/test@repw;
已连接。
SQL> begin
  2  dbms_refresh.refresh(name=>'mvadmin.mv_test');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select * from tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest
mv         mv         mv
mv1        mv1        mv1

已选择15行。

SQL> [/B]


create materialized view tt refresh fast with primary key for update as seect * from test.tt@repn.us.oracle.com;
seect[/COLOR]

使用道具 举报

回复
论坛徽章:
0
18#
发表于 2005-1-6 12:22 | 只看该作者
手工将需要 刷新的数据,插到表里面去,找出哪些数据产生这个错误。

这个不太可能是bug。

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
19#
发表于 2005-1-6 13:18 | 只看该作者
最初由 yangtingkun 发布
[B]

create materialized view tt refresh fast with primary key for update as seect * from test.tt@repn.us.oracle.com;
seect[/COLOR] [/B]


不好意思,拷贝的时候少拷了,上面为了大家看的方便,稍微做了一点整理,很佩服版主认真,细致,学习的榜样 :)
原操作过程如下:
SQL> create materialized view tt refresh fast with primary key for update as sel
ect * from test.tt@repn.us.oracle.com;
create materialized view tt refresh fast with primary key for update as select *
from test.tt@repn.us.oracle.com

           *
ERROR 位于第 1 行:
ORA-12571: TNS: 包写入程序失败


SQL> connect test/test@repw;
已连接。
SQL> create materialized view tt refresh fast with primary key for update as sel
ect * from test.tt@repn.us.oracle.com;

实体化视图已创建。

SQL> connect system/system@repw;
已连接。
SQL> CREATE USER mvadmin IDENTIFIED BY mvadmin;

用户已创建

SQL> BEGIN
  2  DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
  3  username => 'mvadmin');
  4  END;
  5  /

PL/SQL 过程已成功完成。

SQL> GRANT COMMENT ANY TABLE TO mvadmin;

授权成功。

SQL> GRANT LOCK ANY TABLE TO mvadmin;

授权成功。

SQL> GRANT SELECT ANY DICTIONARY TO mvadmin;

授权成功。

SQL> BEGIN
  2  DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'mvadmin');
  3  END;
  4  /
BEGIN
*
ERROR 位于第 1 行:
ORA-23394: 复制传播函数
ORA-06512: 在"SYS.DBMS_DEFER_INTERNAL_SYS", line 1572
ORA-06512: 在"SYS.DBMS_DEFER_SYS", line 2460
ORA-06512: 在line 2


SQL> GRANT CREATE SESSION TO mvadmin;

授权成功。

SQL> GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;

授权成功。

SQL> BEGIN
  2  DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
  3  username => 'mvadmin',
  4  privilege_type => 'receiver',
  5  list_of_gnames => NULL);
  6  END;
  7  /

PL/SQL 过程已成功完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest

已选择13行。

SQL> commit;

提交完成。

SQL> select * from test.tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest

已选择13行。

SQL> connect test/test@repw;
已连接。
SQL> begin
  2  dbms_refresh.refresh(name=>'mvadmin.mv_test');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select * from tt;

AA         BB         CC
---------- ---------- ----------
d          d          d
e          e          e
standby    standby    standby
standby1   standby1   standby1
a          a          a
b          b          b
c          c          c
test       test1      test
test1      test       test1
test2      test2      test2
test3      test3      test3

AA         BB         CC
---------- ---------- ----------
test5      test5      test5
mvtest     mvtest     mvtest
mv         mv         mv
mv1        mv1        mv1

已选择15行。

SQL>

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
20#
发表于 2005-1-6 13:23 | 只看该作者
不过在操作过程中遇到了这样一个错误,不知道什么原因:
SQL> show user
USER 为"TEST"
SQL> connect mvadmin/mvadmin@repn;
已连接。
SQL> insert insert xys.tt values('mv2' , 'mv2' , 'mv2');
insert insert xys.tt values('mv2' , 'mv2' , 'mv2')
       *
ERROR 位于第 1 行:
ORA-00925: 缺失 INTO 关键字


SQL> insert into xys.tt values('mv2' , 'mv2' , 'mv2');

已创建 1 行。

SQL> commit;

提交完成。

SQL> begin
  2  dbms_refresh.refresh(name=>'mvadmin.mv_test');
  3  end;
  4  /
begin
*
ERROR 位于第 1 行:
ORA-12008: 实体化视图的刷新路径中存在错误
ORA-00942: 表或视图不存在
ORA-06512: 在"SYS.DBMS_SNAPSHOT", line 794
ORA-06512: 在"SYS.DBMS_SNAPSHOT", line 851
ORA-06512: 在"SYS.DBMS_IREFRESH", line 683
ORA-06512: 在"SYS.DBMS_REFRESH", line 195
ORA-06512: 在line 2


SQL>

就是说刷新的时候我都是以test用户连接的,如果以mvadmin连接,出现了上面的问题,不知道为什么,以前没有遇到过这样的错误!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表