您的位置:首页 > 其它

建立远程物化视图

2013-07-16 13:56 232 查看

一,配置监听

[oracle@dsg1 admin]$cat listener.ora

# copyright (c) 1997by the Oracle Corporation

LISTENER =

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=dsg1)(PORT=1521))

)



SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=orcl)

(ORACLE_HOME=/u01/app/oracle/product/10.2.0)

(PRESPAWN_MAX=20)

(PRESPAWN_LIST=

(PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))

)

)

)



[oracle@dsg1 admin]$cat tnsnames.ora

orcl =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.75.100)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA =

(SERVER = dsg1)

(SERVICE_NAME =orcl)



)



)



lcro =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.75.101)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA =

(SERVER = dsg2)

(SERVICE_NAME =lcro)



)



)



二,创建db_link

语法:



createpublic database link dblink_name connecttousername identified by
passwd using 'tns_name'



说明:



dblink_name :是dblink名称



username:是远端的用户名,要连接的数据库用户



passwd:是远端的秘码



'tns_name' :是tnsnames.ora中的连接字符串名称



SQL> createpublic database link lcro connect to scott identified by tiger using 'lcro';



Database linkcreated.



测试创建按的db_link

SQL>conn scott/tiger@lcro

ERROR:

ORA-28001: the password has expired
-----由于是第一次链接这个Scott用户





Changingpassword for scott

Newpassword:

Retypenew password:

Passwordchanged

Connected.



查看lcro下scott中的表

SQL>select * from tab;



TNAME TABTYPE CLUSTERID

------------------------------------- ----------

DEPT TABLE

EMP TABLE

BONUS TABLE

SALGRADE TABLE

然后再在原来的数据库上建一张表

SQL>create table t (t varchar2(8));



Tablecreated.

再回到远程查看

SQL>/



TNAME TABTYPE CLUSTERID

------------------------------------- ----------

DEPT TABLE

EMP TABLE

BONUS TABLE

SALGRADE TABLE

T TABLE
成功!!!

三,创建物化视图同步数据

1.在源用户上执行以下,创建物化视图日志

对于已定义主键的表,分别执行以下 sql:



create materialized view log on 表名 withprimary key;



对于未定义主键的表,分别执行以下 sql:



creatematerialized view log on 表名 with rowid;



先创建测试表

SQL>create table scott.t as select * from dba_objects;



Tablecreated.



SQL>conn scott/tiger

Connected.

SQL>select * from tab;



TNAME TABTYPE CLUSTERID

------------------------------------- ----------

DEPT TABLE

EMP TABLE

BONUS TABLE

SALGRADE TABLE

T TABLE



SQL> creatematerialized view log on t with rowid;



Materialized viewlog created.





2.在目标用户上执行以下 sql,创建物化视图

SQL> create materialized view t_mv refresh fast on demand withrowid as select * from t@lcro; ---lcro为db_link的名字



Materialized viewcreated.



查看创建的物化视图

SQL>show parameter instance_name



NAME TYPE VALUE

----------------------------------------------- ------------------------------

instance_name string orcl

SQL>select table_name,TABLESPACE_NAME,INSTANCES from user_tables wheretable_name='T_MV';



TABLE_NAME TABLESPACE_NAME INSTANCES

------------------------------------------------------------ --------------------

T_MV SYSTEM 1

SQL>select count(*) from t_mv;



COUNT(*)

----------

50334

3.测试

在源数据库插入100条数据,在远程进行刷新



SQL> insert intot select * from t where rownum<101;



100 rows created.



SQL> commit;



Commit complete.



SQL>

SQL>

SQL> selectcount(*) from t;



COUNT(*)

----------

50434

SQL> selectcount(*) from mlog$_t;



COUNT(*)

----------

100

在远程进行刷新:

SQL> execdbms_mview.refresh('t_mv','fast')



PL/SQL proceduresuccessfully completed.

SQL> selectcount(*) from t_mv;



COUNT(*)

----------

50434

源端:

SQL> selectcount(*) from mlog$_t;



COUNT(*)

----------

0

成功!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: