問題:
物化視圖問題:
物化視圖復(fù)制的設(shè)置
主站點(diǎn):db001.d-link
物化視圖站點(diǎn):db002.d-link
主機(jī)名:dbmis
復(fù)制用戶:dev001
檢查初始化參數(shù)
SQL> connect sys/change_on_install@db001.d-link as sysdba ;
已連接。
SQL> show parameter global_names ;
NAME TYPE VALUE
------------------------------------ ----------- -------------------------
global_names boolean TRUE
SQL> show parameter job;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_PRocesses integer 20
SQL> select * from global_name ;
GLOBAL_NAME
------------------------------------------------------------------------------
DB001.d-link
SQL>
SQL> connect sys/change_on_install@db002.d-link as sysdba ;
已連接。
SQL> show parameter global_names ;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean TRUE
SQL> show parameter job;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
SQL> select * from global_name ;
GLOBAL_NAME
-----------------------------------------
DB002.d-link
SQL>
檢查全局?jǐn)?shù)據(jù)庫名稱
SQL> connect dev001/whoami@db002.d-link ;
已連接。
SQL> select * from dev001.test001@db001 ;
A B
---------- ----------
1 wui
2 zyun
SQL>
SQL> connect sys/change_on_install@db002.d-link as sysdba ;
已連接。
SQL> select owner,db_link from all_db_links ;
OWNER DB_LINK
-------------------- --------------------
SYS DB001.d-link
PUBLIC DB001.d-link
SQL> connect sys/change_on_install@db001.d-link as sysdba ;
已連接。
SQL> select owner,db_link from all_db_links ;
OWNER DB_LINK
-------------------- --------------------
SYS DB002.d-link
PUBLIC DB002.d-link
SQL>
建立主體站點(diǎn)
SQL> connect system/whoami@db001.d-link ;
已連接。
SQL>
--建立復(fù)制管理用戶repadmin 并授權(quán)
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin');
END;
/
GRANT COMMENT ANY TABLE TO repadmin;
GRANT LOCK ANY TABLE TO repadmin;
GRANT SELECT ANY DICTIONARY TO repadmin;
--注冊傳播用戶并授權(quán)
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'repadmin');
END;
/
--注冊接收用戶
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'repadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
--建立物化視圖站點(diǎn)復(fù)制管理員的代理用戶
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'repadmin',
privilege_type => 'proxy_snapadmin',
list_of_gnames => NULL);
END;
/
GRANT CREATE session TO repadmin;
GRANT SELECT ANY TABLE TO repadmin;
--以復(fù)制管理員身份登陸到主站點(diǎn)
SQL> CONNECT repadmin/repadmin@db001.d-link ;
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => 'SYSDATE + 1/24',
delay_seconds => 0);
END;
/
commit;
設(shè)置物化視圖站點(diǎn)
SQL> connect system/whoami@db002.d-link ;
--建立物化視圖管理員,并授權(quán)
CREATE USER mvadmin IDENTIFIED BY mvadmin;
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
username => 'mvadmin');
END;
/
GRANT COMMENT ANY TABLE TO mvadmin;
GRANT LOCK ANY TABLE TO mvadmin;
GRANT SELECT ANY DICTIONARY TO mvadmin;
--建立傳播者,并授權(quán)
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'mvadmin');
END;
/
--建立刷新者,并授權(quán),這里使用mvadmin 用戶刷新物化視圖
GRANT CREATE SESSION TO mvadmin;
GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;
--注冊接受者
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'mvadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
--建立PUBLIC 數(shù)據(jù)庫鏈
CREATE PUBLIC DATABASE LINK db001 USING 'db001.d-link';
SQL> CONNECT mvadmin/mvadmin@db002.d-link;
已連接。
SQL>CREATE DATABASE LINK db001 CONNECT TO repadmin IDENTIFIED BY repadmin;
--建立到主站點(diǎn)上復(fù)制管理員的數(shù)據(jù)庫鏈
--以傳播者身份登陸物化視圖站點(diǎn)
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => 'SYSDATE + 1/24',
delay_seconds => 0,
rollback_segment => '');
END;
/
--設(shè)置將修改推入到主站點(diǎn)的job
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'db001.d-link',
interval => 'SYSDATE + 1/24',
next_date => SYSDATE,
stop_on_error => FALSE,
delay_seconds => 0,
parallelism => 0);
END;
/
commit;
建立主體組
--以復(fù)制管理員身份登陸復(fù)制站點(diǎn)
CONNECT repadmin/repadmin@db001.d-link ;
--建立名為rep_test 的復(fù)制組
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => 'reptest');
END;
/
--將復(fù)制對象增加到復(fù)制組中
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => 'rep_test',
type => 'TABLE',
oname => 'test001',
sname => 'dev001',
use_existing_object => TRUE,
copy_rows => FALSE);
END;
/
--生成復(fù)制支持
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 'dev001',
oname => 'test001',
type => 'TABLE',
min_communication => TRUE);
END;
/
--開始復(fù)制
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => 'reptest');
END;
/
commit;
建立物化視圖
CONNECT dev001/whoami@db001.d-link ;
--建立物化視圖日志表,F(xiàn)AST 刷新方式必須要求建立物化視圖日志
CREATE MATERIALIZED VIEW LOG ON dev001.test001;
--建立復(fù)制用戶到主站點(diǎn)代理刷新者的數(shù)據(jù)庫鏈
CONNECT dev001/whoami@db002.d-link;
CREATE DATABASE LINK db001 CONNECT TO repadmin IDENTIFIED BY repadmin;
--建立物化視圖組
CONNECT mvadmin/mvadmin@db002.d-link ;
--物化視圖組必須和復(fù)制站點(diǎn)上的復(fù)制組名稱相同
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
gname => 'reptest',
master => 'db001.d-link',
propagation_mode => 'ASYNCHRONOUS');
END;
/
-----------------------------------------------------
錯誤提示:
SQL> begin
2 dbms_repcat.create_mview_repgroup(
3 gname=>'reptest',
4 master=>'db001.d-link',
5 propagation_mode => 'ASYNCHRONOUS');
6 end;
7 /
begin
*
ERROR 位于第 1 行:
ORA-23313: 在 PUBLIC 沒有控制對象組 "REPTEST"."db001.d-link"
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
ORA-06512: 在line 2
SQL>
查找資料后得到的結(jié)論:說是因?yàn)槟壳爸髡緦儆陟o默模式,解決過程如下:
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => 'reptest');
END;
/
但依然無效,同樣樣報(bào)錯,上午這樣執(zhí)行一下后,建立物化視圖組雖然通過了,但意外的是,
現(xiàn)在把所有都刪除了重新建立,竟然報(bào)錯誤了。
SQL> connect repadmin/repadmin@db001.d-link ;
已連接。
SQL> select gname, master, status from dba_repgroup;
GNAME M STATUS
------------------------------ - ---------
REPTEST Y NORMAL
按照其他方法:
SQL> execute dbms_repcat.suspend_master_activity (gname => 'reptest');
PL/SQL 過程已成功完成。
SQL> connect mviewadmin/mviewadmin@db002.d-link ;
已連接。
SQL> begin
2 dbms_repcat.create_mview_repgroup(
3 gname=>'reptest',
4 master=>'db001.d-link',
5 propagation_mode=>'ASYNCHRONOUS');
6 end;
7 /
begin
*
ERROR 位于第 1 行:
ORA-23313: 在 PUBLIC 沒有控制對象組 "REPTEST"."db001.d-link"
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
ORA-06512: 在line 2
SQL>
-----------------------------------------------------
--創(chuàng)建刷新組
BEGIN
DBMS_REFRESH.MAKE (
name => 'mvadmin.rep_refresh',
list => '',
next_date => SYSDATE,
interval => 'SYSDATE + 1/24',
implicit_destroy => FALSE,
rollback_seg => '',
push_deferred_rpc => TRUE,
refresh_after_errors => FALSE);
END;
/
SQL> connect mviewadmin/mviewadmin@db002.d-link ;
已連接。
SQL> select *from dev001.test001@db001 ;
A B
---------- ----------
1 wui
2 zyun
SQL>
------------------------------------------------------------------
--創(chuàng)建物化視圖
SQL> CREATE MATERIALIZED VIEW dev001.test001
2 REFRESH FAST WITH PRIMARY KEY FOR UPDATE
3 AS SELECT * FROM dev001.test001@db001 ;
AS SELECT * FROM dev001.test001@db001
*
ERROR 位于第 3 行:
ORA-12028: 主體站點(diǎn) @DB001.d-link 不支持實(shí)體化視圖類型
SQL>
-------------------------------------------------------------------
(兩處用長虛線的位置是問題所在)。
解決方法:(參考)
在進(jìn)行復(fù)制組創(chuàng)建的過程中出現(xiàn)如下錯誤:
SQL> begin
2 dbms_repcat.create_mview_repgroup(
3 gname=>'reptest',
4 master=>'db001.d-link',
5 propagation_mode => 'ASYNCHRONOUS');
6 end;
7 /
begin
*
ERROR 位于第 1 行:
ORA-23313: 在 PUBLIC 沒有控制對象組 "REPTEST"."db001.d-link"
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
ORA-06512: 在"SYS.DBMS_REPCAT_SNA_UTL", line 1690
ORA-06512: 在"SYS.DBMS_REPCAT_SNA", line 64
ORA-06512: 在"SYS.DBMS_REPCAT", line 1262
ORA-06512: 在line 2
經(jīng)多次檢查后發(fā)現(xiàn)問題出現(xiàn)在db link上,在測試中發(fā)現(xiàn)的問題:
SQL> connect system/pass@db002 ;
已連接。
SQL> select owner,db_link from dba_db_links ;
OWNER DB_LINK
---------- --------------------
PUBLIC DB001.Q-LINK
MVADMIN DB001.Q-LINK
DEV001 DB001.Q-LINK
SQL> connect system/pass@db001 ;
已連接。
SQL> select owner,db_link from dba_db_links ;
OWNER DB_LINK
---------- --------------------
PUBLIC DB002.Q-LINK
REPADMIN DB002.Q-LINK
SQL> connect mvadmin/pass@db002
已連接。
SQL> select * from dev001.test001@db001 ;
A B
---------- --------------------
1 wanghui
2 zhangyun
SQL> select * from dev001.test001@db001.q-link ;
select * from dev001.test001@db001.q-link
*
ERROR 位于第 1 行:
ORA-00933: SQL 命令未正確結(jié)束
SQL>
當(dāng)引用類似"db001.q-link"的db link時,Oracle出現(xiàn)了錯誤,此時應(yīng)注意"-"這個特殊字符,因?yàn)镺racle在db link 中無法正確的識別。
然后加上雙引號(""),如下:
select * from dev001.test001@"db001.q-link" ;
此時結(jié)果正常。現(xiàn)在就可以確認(rèn)是域名出現(xiàn)問題了。
然后通過使用類似命令更改了域名以后,即可恢復(fù)正常:
alter database rename global_name to DB002.QLINK;
問題的詳細(xì)描述,Note:274162.1
The above problem is known to arise due to the presence of the '-' character in the domain name. Upon renaming the domain to a name that doesn't contain this character, the above problem disappears. Oracle的說法:
The cause of this occurance is not clear. 報(bào)告中的影響范圍為:
Oracle Net Services - Version: 8.1.7.4 to 8.1.7.4
Solaris Operating System (SPARC 32-bit)
注釋:Oracle 9i中此問題也同樣存在,此示例的數(shù)據(jù)庫版本如下:
SQL> 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
SQL>
新聞熱點(diǎn)
疑難解答
圖片精選