一步一步學Streams(13) 第二部分 實踐之建立全庫複製(3)測試
三、 測試複製環境:
1、 DDL 操作
源端操作:
JSSWEB> create tablespace jsstbs datafile ¨/data/oradata/jssweb/jsstbs01.dbf¨ size 200m;
Tablespace created.
JSSWEB> create user jss identified by jss default tablespace jsstbs quota unlimited on jsstbs;
User created.
JSSWEB> grant connect,resource to jss;
Grant succeeded.
JSSWEB> alter system switch logfile;
System altered.轉到目標端查詢:
JSSSTR> select username from dba_users where username=¨JSS¨;
USERNAME
------------------------------
JSS
JSSSTR> select name from v$tablespace;
NAME
------------------------------
SYSTEM
TEMP
UNDOTBS1
SYSAUX
USERS
STRMTBS
JSSTBS
已選擇7行。
JSSSTR> select name from v$datafile;
NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
/data/oradata/jssstr/system01.dbf
/data/oradata/jssstr/undotbs01.dbf
/data/oradata/jssstr/sysaux01.dbf
/data/oradata/jssstr/users01.dbf
/data/oradata/jssstr/strmtbs01.ora
/data/oradata/jssweb/jsstbs01.dbf
已選擇6行。目標端操作:
JSSSTR > conn jss/jss
已連線。
JSSSTR> create table t as select * from all_objects where rownum<10;
表已建立。
JSSSTR> conn / as sysdba
已連線。
JSSSTR> alter system switch logfile;
系統已更改。源端檢視:
JSSWEB> conn jss/jss
Connected.
JSSWEB> select count(0) from t;
COUNT(0)
----------
9可以看到,使用者/表空間/表均已成功建立,雙向基本同步成功,不過如果你足夠細心會發現這裡頭有一個問題,資料檔案路徑的問題,這個問題暫時擱下,後面再介紹解決方案,接著測試DML操作的同步情況。
2、 DML 操作
JSSWEB> delete t;
9 rows deleted.
JSSWEB> commit;
Commit complete.
JSSWEB> conn / as sysdba
Connected.
JSSWEB> alter system switch logfile;
System altered.
JSSSTR> select count(0) from jss.t;
COUNT(0)
----------
0
DML 同步成功。3、 資料檔案路徑的匹配
在第一步測試ddl建立表空間時,我們指定了資料檔案路徑,某些情況下,可能源端和目標端的路徑並不相同(甚至源端路徑在目標端不存在),如上例中我們的環境就是這樣,因此我們希望源端路徑到目標端後能夠做適當轉換,以避免出錯。Streams不支援dataguard中使用的db_file_convert之類的引數,但是streams中提供了更強大的DDL handler,這裡我們就通過DDL handler來解決這個問題。
首先先將路徑不正常的表空間刪除(當然也可以不刪而是通過命令修改,這裡為了演示更加清晰首先刪除該表空間,建立好DDL handler後再重建):
雙向複製,兩邊都是源,因此哪邊執行刪除都可以:
JSSSTR> drop tablespace jsstbs including contents and datafiles;
表空間已刪除。
JSSSTR> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/data/oradata/jssstr/system01.dbf
/data/oradata/jssstr/undotbs01.dbf
/data/oradata/jssstr/sysaux01.dbf
/data/oradata/jssstr/users01.dbf
/data/oradata/jssstr/strmtbs01.ora
JSSSTR> alter system switch logfile;
系統已更改。到目標端看一看:
JSSWEB> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/data/oradata/jssweb/system01.dbf
/data/oradata/jssweb/undotbs01.dbf
/data/oradata/jssweb/sysaux01.dbf
/data/oradata/jssweb/users01.dbf
/data/oradata/jssweb/strmtbs01.oraOK ,成功刪除。
下面演示建立DDL handler解決源與目標端路徑不同的問題,以我們這裡遇到的問題為例,我們希望將/data/oradata/jssweb轉換為/data/oradata/jssstr,那麼,可以通過如下操作:
連線到strmadmin使用者,建立一個處理過程:
JSSSTR> conn strmadmin/strmadmin
已連線。
JSSSTR> create or replace procedure file_convert (in_any IN ANYDATA) authid current_user is
2 ddl_lcr SYS.LCR$_DDL_RECORD;
3 ddl_text CLOB;
4 rc PLS_INTEGER;
5 begin
6 rc := in_any.GETOBJECT(ddl_lcr);
7 DBMS_LOB.CREATETEMPORARY(ddl_text, true);
8 ddl_lcr.GET_DDL_TEXT(ddl_text);
9 ddl_text := replace(ddl_text,¨/data/oradata/jssweb¨,¨/data/oradata/jssstr¨);
10 execute immediate to_char(ddl_text);
11 DBMS_LOB.FREETEMPORARY(ddl_text);
12 end;
13 /
過程已建立。提示:通過這種方式也可以很容易記錄下所有操作過的ddl語句。
設定ddl handler:
JSSSTR> select apply_name from dba_apply;
APPLY_NAME
------------------------------
APPLY$_JSSWEB_31
JSSSTR> exec DBMS_APPLY_ADM.ALTER_APPLY(apply_name => ¨APPLY$_JSSWEB_31¨,ddl_handler => ¨strmadmin.file_convert¨);
PL/SQL 過程已成功完成。查詢dba_apply字典:
JSSSTR> select apply_name,ddl_handler,status from dba_apply ;
APPLY_NAME DDL_HANDLER STATUS
------------------------------ ---------------------------------------- --------
APPLY$_JSSWEB_31 "STRMADMIN"."FILE_CONVERT" ENABLED驗證一下,源端重新建立表空間:
JSSWEB> create tablespace jsstbs datafile ¨/data/oradata/jssweb/jsstbs01.dbf¨ size 200m;
Tablespace created.
JSSWEB> alter system switch logfile;
System altered.目標端檢視錶空間建立情況:
JSSSTR> select name from v$datafile;
NAME
--------------------------------------------------------
/data/oradata/jssstr/system01.dbf
/data/oradata/jssstr/undotbs01.dbf
/data/oradata/jssstr/sysaux01.dbf
/data/oradata/jssstr/users01.dbf
/data/oradata/jssstr/strmtbs01.ora
/data/oradata/jssstr/jsstbs01.dbf
已選擇6行。路徑轉換成功,不過注意喲,我們這裡是雙向複製,因此從完整性的角度說還應該在jssweb資料庫中也建立一個ddl hander,以替換/data/oradata/jssstr為/data/oradata/jssweb,因操作步驟與此相同,這裡就不演示了,塗廢筆墨,非我所好。
至此整庫的複製環境搭建完成!
======================================
一步一步學Streams(12) 第二部分 實踐之建立全庫複製(2)執行建立
一步一步學Streams(11) 第二部分 實踐之建立全庫複製(1)準備工作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-558259/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一步一步學Streams(12) 第二部分 實踐之建立全庫複製(2)執行建立
- 一步一步學Streams(11) 第二部分 實踐之建立全庫複製(1)準備工作
- 一步一步學Streams(14) 第二部分 實踐之移除Streams複製環境
- 一步一步學Streams(10) 第二部分 實踐之準備工作(2)初始化環境
- 一步一步學Streams(3) 第一部分 基礎之捕獲程式
- 一步一步學DataGuard(13)邏輯standby之建立示例
- 一步一步學DataGuard(25)RMAN備份來建立之實踐
- 一步一步學DataGuard(26)RMAN備份來建立之實踐2
- 一步一步學Streams(1) 第一部分 基礎之概述篇
- 一步一步學Streams(5) 第一部分 基礎之傳播程式(下)
- 一步一步學Streams(6) 第一部分 基礎之應用程式(上)
- 一步一步學Streams(7) 第一部分 基礎之應用程式(中)
- 一步一步學DataGuard(5)物理standby之建立示例
- 一步一步實現現代前端單元測試前端
- STREAMS筆記(1) step by step 建立一個Streams複製環境筆記
- MySQL 複製全解析 Part 9 一步步搭建基於GTID的MySQL複製MySql
- [zt] 高階複製、流複製(Streams)、備庫區別
- 一步一步學RMAN第二篇 RMAN命令知多少
- 車載乙太網第二彈|測試之實錘-AVB測試實踐
- 一步一步實現一個符合PromiseA+規範的Promise庫(3)Promise
- 從零開始帶你一步一步使用YOLOv3測試自己的資料YOLO
- 一步一步學DataGuard(14)邏輯standby之switchover
- 一步一步學ROP之Android ARM 32位篇Android
- 一步一步學ROP之linux_x64篇Linux
- 一步一步學ROP之linux_x86篇Linux
- 一步一步學DataGuard(15)邏輯standby之failoverAI
- 我是如何一步一步做介面測試的一些感悟
- 一步一步分析vue之observeVue
- 一步一步學spring bootSpring Boot
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- 一步一步分析vue之$mount(1)Vue
- 一步一步學RMAN第11篇 rman筆記之綜述筆記
- 塗抹Oracle—三思筆記之一步一步學Oracle全書目錄Oracle筆記
- 全表複製過程建立指令碼指令碼
- 一步一步分析vue之_data屬性Vue
- 一步一步學DataGuard(2)基礎之術語再瞭解大概
- 一步一步學DataGuard(22)Standby之選擇資料保護模式模式
- mysql資料庫的主從複製和主主複製實踐MySql資料庫