2014-1-15日修改下面文章:物化视图日志的迁移由于不能更改创建物化日志的用户名,所以导致不是同名的用户入库会失效,这是oracle的bug,如果非要不同名用户下使用,可以使用以下语句建立新的内部触发器:
exec dbms_snapshot_utl.sync_up_log(‘ring’,’T_USERINFO’);
select * from dba_internal_triggers where table_name=’T_USERINFO’and Owner_name=’RING’;
这个问题给我最大感触:迁移数据库的时候,要保持新库和老库都一样,包含全局名,sid,用户名等,这样就不会出现乱七八糟的问题,这也是比较傻瓜的迁移方式。
今天在测试环境中,原来正常快速刷新的物化视图不能同步数据了,最后发现是因为在同一个库做exp、imp操作后使得物化视图日志失效了,不记录基表的数据变化了。
在解决问题的过程中发现了其他一些问题,这里一并记录。
源库:a@TEST1> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
--在源库创建用户sys@TEST1> create user a identified by a default tablespace suk;
用户已创建。
sys@TEST1> create user b identified by b default tablespace suk;
用户已创建。
sys@TEST1> grant connect,resource,create materialized view to a;
授权成功。
sys@TEST1> grant connect,resource,create materialized view to b;
授权成功。
sys@TEST1> conna/a@suk
已连接。a@TEST1> create table t(a int primary key);
表已创建。
a@TEST1> create materialized view log on t;
实体化视图日志已创建。
a@TEST1> insert into t values(1);
已创建 1 行。
a@TEST1> commit;
提交完成。
a@TEST1> select * from mlog$_t;
A SNAPTIME$$ D O CHANGE_VE