【ORACLE 高可用】 高级复制的两个配置实例 - 使用高级复制和物化视图
生活随笔
收集整理的這篇文章主要介紹了
【ORACLE 高可用】 高级复制的两个配置实例 - 使用高级复制和物化视图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.演示針對某個表使用高級復制進行數據同步。
2.1 配置GLOBAL_NAME
?? ?2.1.1 源庫
?? ?SQL> alter database rename global_name to db1.com;
?? ?Database altered.
?? ?SQL> show parameter global_names;
?? ?NAME?? ??? ?TYPE??????? VALUE
?? ?-----------------------------------------
?? ?global_names?? ?boolean?? ??? ?FALSE
?? ?SQL> alter system set global_names=true scope=both;
?? ?System altered.
?? ??? ?
?? ?2.1.2 目標庫:
?? ?SQL> alter system set global_names=true scope=both;
?? ?System altered.
?? ?SQL> alter database rename global_name to db2.com;
?? ?Database altered.
?? ?SQL> show parameter global_name;
?? ?NAME?? ??? ??? ??? ????? TYPE?? ?VALUE
?? ?-----------------------------------------------------
?? ?global_names?? ??? ??? ????? boolean?? ?TRUE
?? ?SQL> select * from global_name;
?? ?GLOBAL_NAME
?? ?---------------------
?? ?DB2.COM
?? ?
2.2 兩個庫中創建應用用戶,
?? ?這里我還是使用HR 用戶及用戶下的po 來做實驗
?? ?
?? ?SQL> create table po(id integer);
?? ?Table created.
?? ?SQL> alter table po? add constraint pk_po_id primary key (ID);
?? ?Table altered.
2.3 兩個庫中創建復制管理用戶repadmin
?? ?CREATE USER repadmin IDENTIFIED BY oracle DEFAULT TABLESPACE users;
?? ?GRANT connect,resource,DBA TO repadmin;
?? ?--授予repadmin用戶權限可以管理當前站點中任何主體組
?? ?EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');
?? ?--授予repadmin用戶權限可以為任何表創建snapshot?logs
?? ?GRANT comment any table TO REPADMIN;
?? ?GRANT lock any table TO REPADMIN;
?? ?--指定repadmin用戶為propagator,并授予執行任何procedure的權限
?? ?execute dbms_defer_sys.register_propagator('REPADMIN');
?? ?GRANT execute any procedure TO REPADMIN;
2.4在兩個數據庫上建立數據庫鏈接
create public database link db2.com connect to repadmin identified by oracle using 'DB2';
create public database link db1.com connect to repadmin identified by oracle using 'DB1';
2.5 創建復制組:
execute dbms_repcat.create_master_repgroup('repg');
--刪除復制組
--execute dbms_repcat.drop_master_repgroup('repg');
SQL>
SQL> SELECT GNAME,MASTER,STATUS FROM DBA_REPGROUP;
GNAME??? MASTER?? ??? ?STATUS
--------------------------------
REPG?? ??? ?Y?? QUIESCED
2.6 在復制組里加入復制對象:
execute dbms_repcat.create_master_repobject(sname=>'hr',oname=>'po',type=>'table',use_existing_object=>true,gname=>'repg',copy_rows=>false);
--刪除對象
--execute dbms_repcat.drop_master_repobject(sname=>'hr',oname=>'po',type=>'table',DROP_OBJECTS=>true);
select sname,oname,status,gname from dba_repobject where gname='REPG';
SNAME?? ??? ??? ONAME?? ??? ?????????? STATUS?? ??? ????? GNAME
----------------------------------------------------------------------------------------
HR?? ??? ??? PO?? ??? ??? ?????????? VALID?? ??? ??? ????? REPG
SQL>
2.7對復制對象產生復制支持:
execute dbms_repcat.generate_replication_support('hr','po','table');
execute dbms_repcat.drop_master_repobject('hr','po','table'); [取消同步]
SQL> select sname,oname,status,gname from dba_repobject where gname='REPG';
SNAME?? ??? ??? ONAME?? ??? ?????????? STATUS?? ??? ????? GNAME
----------------------------------------------------------------------------------------
HR?? ??? ??? PO?? ??? ??? ?????????? VALID?? ??? ??? ????? REPG
HR?? ??? ??? PO$RP?? ??? ?????????? VALID?? ??? ??? ????? REPG
HR?? ??? ??? PO$RP?? ??? ?????????? VALID?? ??? ??? ????? REPG
2.8添加主體復制節點:
begin
dbms_repcat.add_master_database(gname=>'repg',
master=>'db2.com',
use_existing_objects=>true,
copy_rows=>false,
propagation_mode=>'synchronous');
end;
/
?? ?第一次執行上面代碼出錯:
?? ?ERROR at line 1:
?? ?ORA-23358: invalid remote user
?? ?ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
?? ?ORA-06512: at "SYS.DBMS_REPCAT_RPC", line 12
?? ?ORA-06512: at "SYS.DBMS_REPCAT_RPC", line 1768
?? ?ORA-06512: at "SYS.DBMS_REPCAT_UTL", line 4280
?? ?ORA-06512: at "SYS.DBMS_REPCAT_MAS", line 2158
?? ?ORA-06512: at "SYS.DBMS_REPCAT", line 146
?? ?ORA-06512: at line 2
?? ?
?? ?重做后又沒問題,不知什么原因。
select gname,dblink,masterdef ,master FROM SYS.DBA_REPSITES WHERE GNAME='REPG';
SQL> select gname,dblink,masterdef ,master FROM SYS.DBA_REPSITES WHERE GNAME='REPG';
GNAME?? ??? ?DBLINK?? ??? ??? ?? MASTERDEF? MASTER
--------------- ------------------------- ---------- ----------
REPG?? ??? ?DB1.COM ?? ??? ?? Y?? ????? Y
測試數據同步,通過
**********************************************??
參數說明:??
gname?主復制組名??
master?加入主復制節點的另一個數據庫??
use_existing_object?true 表示用主復制節點已經存在的數據庫對象??
copy_rows?false表示第一次開始復制時不用和主復制節點保持一致??
propagation_mode?同步地執行
synchronous(上邊配置異步復制)?
***********************************************
在主體定義站點啟動復制:
execute dbms_repcat.resume_master_activity('repg',true);
execute dbms_repcat.resume_master_activity('repg',false);
execute dbms_repcat.suspend_master_activity('repg')[停止復制]
--------------------------------------------------------------------
3.演示使用物化視圖的方式進行數據同步。
1.在DB1.COM建立一個新表,用于測試物化視圖
create table hr.emp(id int primary key);
insert into hr.emp
select rownum from dual connect by rownum<=1000;
2.在DB1.COM 創建物化視圖日志
CREATE MATERIALIZED VIEW LOG ON hr.emp WITH PRIMARY KEY INCLUDING NEW VALUES
3.在DB2.COM 創建物化視同步數據。
create materialized view hr.mv_emp build immediate refresh fast ?
enable query rewrite as select * from hr.emp@db1.com;
DB2.COM查詢數據:
SQL> select count(0) from hr.mv_emp;
? COUNT(0)
----------
????? 1000
DB1.COM 插入新數據
SQL> insert into hr.emp values(1001);
1 row created.
SQL> commit;
Commit complete.
SQL>
DB2.COM 刷新特化視圖并查詢數據。
SQL> execute dbms_mview.refresh('hr.mv_emp','f');
PL/SQL procedure successfully completed.
SQL> select count(0) from hr.mv_emp;
? COUNT(0)
----------
????? 1001
SQL>
看到數據已同步過來了。
總結
以上是生活随笔為你收集整理的【ORACLE 高可用】 高级复制的两个配置实例 - 使用高级复制和物化视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ORACLE 高可用】ORACLE S
- 下一篇: 【配置DATAGUARD 时的监听静态注