用exp、imp遷移包含物化檢視日誌的資料
今天在測試環境中,原來正常快速重新整理的物化檢視不能同步資料了,最後發現是因為在同一個庫做exp、imp操作後使得物化檢視日誌失效了,不記錄基表的資料變化了。
在解決問題的過程中發現了其他一些問題,這裡一併記錄。
源庫:> 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
--在源庫建立使用者> create user a identified by a default tablespace suk;
使用者已建立。
> create user b identified by b default tablespace suk;
使用者已建立。
> grant connect,resource,create materialized view to a;
授權成功。
> grant connect,resource,create materialized view to b;
授權成功。
> conn
已連線。> create table t(a int primary key);
表已建立。
> create materialized view log on t;
實體化檢視日誌已建立。
> insert into t values(1);
已建立 1 行。
> commit;
提交完成。
> select * from mlog$_t;
A SNAPTIME$$ D O CHANGE_VECTOR$$
---------- -------------- - - ------------------------
1 01-1月 -00 I N FE
其他庫:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
--在其他庫建立使用者
SQL> create user suk identified by suk default tablespace suk;
User created.
SQL> create user a identified by a default tablespace suk;
User created.
SQL> grant connect,resource,create materialized view to suk;
Grant succeeded.
SQL> grant connect,resource,create materialized view to a;
Grant succeeded.
1、匯入同一個庫中的另一個使用者
E:oracleora92bin>imp file=e:a.dmp fromuser=a touser=b log=e:b.log
Import: Release 9.2.0.1.0 - Production on 星期二 10月 30 13:46:10 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
連線到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
經由常規路徑匯出由EXPORT:V09.02.00建立的檔案
警告: 此物件由 A 匯出, 而不是當前使用者
已經完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的匯入
. . 正在匯入表 "MLOG$_T" 1行被匯入
. . 正在匯入表 "T" 1行被匯入
IMP-00015: 由於物件已存在,下列語句失敗:
"CREATE SNAPSHOT LOG ON "A"."T" WITH PRIMARY KEY EXCLUDING NEW VALUES USING "
"("MLOG$_T", (5, 'TEST1.COM', 98, '2007-10-30:13:43:30', '2007-10-30:13:43:3"
"0', '2007-10-30:13:43:30', '4000-01-01:00:00:00', '4000-01-01:00:00:00', 1,"
" "A", '2007-10-30:13:43:30', 2, 0, ("RUPD$_T")))"
成功終止匯入,但出現警告。
匯入失敗,從log看原因很清楚:雖然是要匯入到其他使用者下,但建立物化檢視日誌時仍然嘗試在原來的使用者下建立,結果當然是失敗的。
這個還不是最主要的,最嚴重的是這樣導致了原來的物化檢視日誌失效。
> col CHANGE_VECTOR$$ format a30> select * from mlog$_t;
A SNAPTIME$$ D O CHANGE_VECTOR$$
---------- -------------- - - ------------------------------
1 01-1月 -00 I N FE
> insert into t values(2);
已建立 1 行。
> select * from mlog$_t;
A SNAPTIME$$ D O CHANGE_VECTOR$$
---------- -------------- - - ------------------------------
1 01-1月 -00 I N FE
從上面看到,物化檢視日誌已經不能記錄基表的資料變化,所有基於這個表的快速重新整理的物化檢視將不能快速重新整理(重新整理時不會報錯,但是資料修改的資料同步不過去)。
此時的解決方式是,重建原來使用者的物化檢視日誌,然後對引用到這些表的物化檢視做一次完全重新整理。
2、匯入其他庫中的其他使用者
[oracle@datasrv1 dmp]$ imp suk/suk file=a.dmp fromuser=a touser=suk log=imp_suk.log
Import: Release 9.2.0.4.0 - Production on 星期二 10月 30 13:16:04 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
Export file created by EXPORT:V09.02.00 via conventional path
Warning: the objects were exported by A, not by you
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. . importing table "MLOG$_T" 1 rows imported
. . importing table "T" 1 rows imported
IMP-00017: following statement failed with ORACLE error 942:
"BEGIN SYS.DBMS_SNAPSHOT_UTL.SYNC_UP_LOG('A','T'); END;"
IMP-00003: ORACLE error 942 encountered
ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 1589
ORA-06512: at line 1
"CREATE SNAPSHOT LOG ON "A"."T" WITH PRIMARY KEY EXCLUDING NEW VALUES USING "
"("MLOG$_T", (5, 'TEST1.COM', 98, '2007-10-30:13:43:30', '2007-10-30:13:43:3"
"0', '2007-10-30:13:43:30', '4000-01-01:00:00:00', '4000-01-01:00:00:00', 1,"
" "A", '2007-10-30:13:43:30', 2, 0, ("RUPD$_T")))"
IMP-00003: ORACLE error 1435 encountered
ORA-01435: user does not exist
IMP-00000: Import terminated unsuccessfully
匯入失敗,原因和上面所述一樣。
SQL> conn suk/suk
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
MLOG$_T TABLE
RUPD$_T TABLE
T TABLE
oracle在匯入的時候是先建立物化檢視日誌表,然後再建立物化檢視日誌的。在這裡,物化檢視日誌表雖然建立成功了,但是物化檢視日誌不能建立成功,此時這系列MOG$_、RUPD$_沒有任何作用。
這種情況下,如果需要在T上記錄物化檢視日誌,則在刪除對應的MLOG$和RUPD$表後重建物化檢視日誌。
如果有必要,你還需要在其他庫上重建指向這些表的物化檢視。
3、匯入其他庫中的相同使用者
[oracle@datasrv1 dmp]$ imp a/a file=a.dmp fromuser=a touser=a log=imp_a.log
Import: Release 9.2.0.4.0 - Production on 星期二 10月 30 13:53:14 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
Export file created by EXPORT:V09.02.00 via conventional path
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. . importing table "MLOG$_T" 1 rows imported
. . importing table "T" 1 rows imported
Import terminated successfully without warnings.
從匯入資訊看,完全沒有錯誤,且物化檢視日誌仍然有效。
SQL> select * from mlog$_t;
A SNAPTIME$$ D O CHANGE_VECTOR$$
---------- ---------- - - ------------------------------
1 01-1月 -00 I N FE
SQL> insert into t values(10);
1 row created.
SQL> select * from mlog$_t;
A SNAPTIME$$ D O CHANGE_VECTOR$$
---------- ---------- - - ------------------------------
1 01-1月 -00 I N FE
10 01-1月 -00 I N FE
從這個測試看,物化檢視日誌也可以反應基表資料的變化,那麼基於這個表的物化檢視也可以快速重新整理。
對於這個問題,Utilities的import章節有如下解釋:
Importing a Snapshot into a Different Schema
Snapshots, snapshot logs, and related items are exported with the schema name explicitly given in the DDL statements; therefore, snapshots and their related items cannot be imported into a different schema.
If you attempt to use FROMUSER and TOUSER to import snapshot data, an error will be written to the Import log file and the items will not be imported.
但是為何在把含有物化檢視日誌的表匯入到同一個庫的另一個使用者後,會使物化檢視日誌失效的問題這裡仍然沒有解釋。
結論:
1、含有物化檢視日誌的表匯入到同一個庫的另一個使用者後,原來使用者下物化檢視日誌會失效;新使用者的物化檢視日誌不能成功匯入。
2、含有物化檢視日誌的表匯入到另一個庫的另一個使用者後,原來使用者下的物化檢視日誌不受影響;物化檢視日誌不能成功匯入到新資料庫中。
3、含有物化檢視日誌的表匯入到另一個庫的同一個使用者後,原來使用者下的物化檢視日誌不受影響;物化檢視日誌可以成功匯入到新資料庫中並正常工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63872/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫的物化檢視資料庫
- 物化檢視日誌無法正常清除的解決方法
- oracle資料匯出匯入(exp/imp)Oracle
- 【exp/imp不同版本】Oracle不同版本的exp/imp使用注意事項Oracle
- oracle exp和impOracle
- 物化檢視
- exp和imp詳解
- exp&imp的使用方法
- 物化檢視如何快速完成資料聚合操作?
- 物化檢視(zt)
- Linux 檢視日誌Linux
- alertmanager: 檢視日誌
- 檢視系統的日誌
- 工作日誌,多租戶模式下的資料備份和遷移模式
- exp匯出遭遇IMP-00020
- [20190520]exp imp on th fly.txt
- Oracle普通檢視和物化檢視的區別Oracle
- Hyperf日誌檢視元件元件
- Logminer如何檢視日誌
- 用rman遷移資料庫資料庫
- 檢視日誌的幾種形式
- 資料泵匯出匯入物化檢視(ORA-39083)
- 使用imp/exp遇到兩個問題
- 不同版本exp/imp使用注意事項
- calcite物化檢視詳解
- 檢測資料庫遷移準確性資料庫
- docker檢視容器日誌命令Docker
- windows_weblogic日誌檢視WindowsWeb
- 用prebuild mv 方法遷移資料Rebuild
- Linux 檢視日誌的命令彙總Linux
- 用begin backup的方式遷移資料庫資料庫
- 物化檢視分割槽實驗
- 如何在iOS手機上檢視應用日誌iOS應用日誌
- Oracle物化檢視的建立及使用(二)Oracle
- Oracle物化檢視的建立及使用(一)Oracle
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- 自定義 Command 檢視 Laravel 日誌Laravel
- mysql檢視binlog日誌詳解MySql