一步一步學Streams(12) 第二部分 實踐之建立全庫複製(2)執行建立
二、進入建立環節,操作如下:
1、 建立streams管理員帳號
建議為streams的管理帳號建立獨立表空間,方便管理的維護。
JSSWEB> create tablespace strmtbs datafile ¨/data/oradata/jssweb/strmtbs01.ora¨ size 300m;
Tablespace created.
JSSWEB> create user strmadmin identified by strmadmin default tablespace strmtbs quota unlimited on strmtbs;
User created.
JSSWEB> grant dba to strmadmin;
Grant succeeded.
JSSWEB> revoke unlimited tablespace from strmadmin;
Revoke succeeded.2、 建立資料庫鏈
JSSWEB> conn strmadmin/strmadmin
Connected.
JSSWEB> create database link jssstr connect to strmadmin identified by strmadmin using ¨jssstr _172.25.13.231 ¨;
Database link created.提示:此時jssstr確實尚不存在,沒有關係,PRE_INSTANTIATION_SETUP過程在執行時並不會驗證資料庫的有效性,因此仍然建立。
3、 源端執行初始化過程
JSSWEB> conn strmadmin/strmadmin
Connected.
JSSWEB > DECLARE
2 empty_tbs DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
3 BEGIN
4 DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP(
5 maintain_mode => ¨GLOBAL¨,
6 tablespace_names => empty_tbs,
7 source_database => ¨jssweb.jss.cn¨,
8 destination_database => ¨jssstr.jss.cn¨,
9 perform_actions => true,
10 bi_directional => true,
11 include_ddl => true,
12 start_processes => true,
13 exclude_schemas => ¨strmadmin¨,
14 exclude_flags => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_ FULL +
15 DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
16 DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
17 END;
18 /
PL/SQL procedure successfully completed.下面逐條說明PRE_INSTANTIATION_SETUP各個引數 :
- maintain_mode 只有兩個值:GLOBAL,表示資料庫級的複製;TRANSPORTABLE TABLESPACES,表示表空間級的複製,需要同時指定tablespace_names引數,表空間可以是多個,後面會有示例演示通過PRE_INSTANTIATION_SETUP/POST_INSTANTIATION_SETUP建立表空間級的複製環境。
- tablespace_names :要複製的表空間,此處為資料庫級的複製,因此此引數為空,不過該引數不能直接指定為null,因為該引數型別為DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,因此我們在執行過程前先declare了一個empty_tbs的變數。
- source_datebase :連線到源端資料庫的資料庫鏈 。
- destination_database :連線到目標端資料庫的資料庫鏈 。
- perform_actions :如果為true,則過程直接執行。如果為false,則過程並不直接生成複製環境,而是建立複製環境的配置指令碼,由dba手動執行(或修改編輯後執行),因此必須同時設定script_name和script_directory_object兩引數,指定指令碼輸出路徑和指令碼檔名,不然過程執行將直接報錯。
- bi_directional :true時表示啟用雙向複製。false表示源庫向目錄庫單向複製。
- include_ddl :是否同步ddl語句 。
- start_processes :是否啟用捕獲和應用程式 。
- exclude_schemas :指定不包含在複製環境中的schemas。*表示全不包括,null表示全部包括(一個bu字,意義千差萬別,漢字太奇妙啦),注意,由於源端的捕獲程式不會捕獲SYS/SYSTEM/CTXSYS這三個schema,因此即使此處指定null,這三個schema也不會被同步。另外,此引數僅在MAINTAIN_MODE=>¨GLOBAL¨時有效。
- exclude_flags : 這個要好好說說,這個選項是與exclude_schemas組合使用,同時由於該引數值具有多個組合屬性,因此設定時也特別需要注意。
有如下可選值:
- DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL :排除指定schemas中所有物件操作。
- DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED :排除指定schemas中不支援的物件操作。
- 上述兩值僅能同時選一個,如果兩個同時選擇在配置時會丟擲異常。同時還有下列兩個附加選項:
- DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML :排除對不支援物件的DML操作。
- DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL :排除對不支援物件的DDL操作。
上述四個屬性值可以通過"+"號連線來達到同時支援的目的。
比如,對於exclude_schemas引數中指定的schemas物件,複製其DML操作但不復制DDL操作,則設定exclude_flags引數值如下可滿足要求:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL +
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL又比如,對於exclude_schemas引數中指定的schemas不支援的物件,即不復制其DDL操作也不復制其DML操作,則設定如下即可:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED +
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL提示:這個引數僅在maintail_mode設定為GLOBAL,並且exclude_schemas引數設定為非空值是有效,其它情況下即使設定也會自動忽略該引數值。
在本例中我們的設定相當於不復制strmadmin下的所有物件,也不同步對該schema下物件的操作。
4、 源端建立 rman 的備份
[oracle@yans1 ~]$ rman target /
Recovery Manager: Release 10.2.0.3.0 - Production on 星期三 11月 26 11:17:37 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: JSSWEB (DBID=3439008274)
RMAN> run{
2> allocate channel c1 device type disk format ¨/data/backup/jssweb/%U¨;
3> backup database plus archivelog delete input;
4> }
using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=126 devtype=DISK
Starting backup at 26-11 月-08
current log archived
......................
...........................
..................................
archive log filename=/data/oradata/jssweb/archivelog/1_41_671128850.dbf thread=1 sequence=41
Finished backup at 26-11 月-08
released channel: c1然後馬上檢視一下當前系統的scn,並且歸檔當前的redo
JSSWEB> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
192553
JSSWEB> alter system archive log current;
System altered.5、 複製備份檔案,及剛剛產生的歸檔至目錄端
方式很多,過程不詳述 。注意保持目錄相同(如果不相同,需要通過rman catalog命令等重新註冊備份檔案,總之就是要保證rman duplicate執行時,要能找的到備份集和需要讀取的歸檔檔案)。
6、 執行Rman duplicate 命令複製資料庫
注意此處set until scn為前文操作中獲取的scn。
[oracle@yans1 ~]$ rman target / auxiliary sys/tfad04@jssstr
Recovery Manager: Release 10.2.0.3.0 - Production on 星期三 11月 26 14:32:57 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: JSSWEB (DBID=3439008274)
connected to auxiliary database: JSSSTR (not mounted)
RMAN> run{
2> set until scn 192553;
3> duplicate target database to jssstr
4> DB_FILE_NAME_CONVERT=(jssweb,jssstr) LOGFILE
5> ¨/data/oradata/jssstr/redo01.log¨ SIZE 50M,
6> ¨/data/oradata/jssstr/redo02.log¨ SIZE 50M,
7> ¨/data/oradata/jssstr/redo03.log¨ SIZE 50M
8> open restricted;
9> }
executing command: SET until clause
using target database control file instead of recovery catalog
Starting Duplicate Db at 26-11 月-08
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=155 devtype=DISK
contents of Memory Script.
{
set until scn 192553 ;
set newname for datafile 1 to
"/data/oradata/jssstr/system01.dbf";
set newname for datafile 2 to
"/data/oradata/jssstr/undotbs01.dbf";
set newname for datafile 3 to
"/data/oradata/jssstr/sysaux01.dbf";
set newname for datafile 4 to
"/data/oradata/jssstr/users01.dbf";
set newname for datafile 5 to
"/data/oradata/jssstr/strmtbs01.ora";
restore
check readonly
clone database
;
}
executing Memory Script.
...............
...................
.........................
contents of Memory Script.
{
sql clone ¨alter system enable restricted session¨;
Alter clone database open resetlogs;
}
executing Memory Script.
sql statement: alter system enable restricted session
database opened
Finished Duplicate Db at 26-11 月-087、 連線到目標端,檢視當前GLOBAL_NAME
JSSSTR> select * from global_name;
GLOBAL_NAME
-------------------------------------------------------------------------------------------
JSSWEB.JSS.CN如果不等於db_name+db_domain,則通過alter database rename命令修改:
JSSSTR> alter database rename global_name to jssstr.jss.cn;
資料庫已更改。8、 建立目標端到源端的資料庫鏈
JSSSTR> conn strmadmin/strmadmin
已連線。
JSSSTR> create database link jssweb connect to strmadmin identified by strmadmin using ¨jssweb _172.25.13.229 ¨;
資料庫連結已建立。不過由於jssstr資料庫是由jssweb複製過來的,因此strmadmin使用者下也存在一個jssstr.jss.cn的dblink,如果看其不爽可以將它刪除,不過直接刪除是不行的,肯定會報ORA-02082錯誤,因為不能刪除與global_name同名的dblink。如果確實想刪除該dblink,方法有二:
A>. 先修改global_name,再刪除dblink
JSSSTR> alter database rename global_name to test.jss.cn;
資料庫已更改。
JSSSTR> drop database link jssstr.jss.cn;
資料庫連結已刪除。
JSSSTR> alter database rename global_name to jssstr.jss.cn;
資料庫已更改。
B>. 直接刪除字典表
注:本方法由yangtingkun老大提供,號稱其對drop database link做過精確的trace分析,確認該項操作實際就是delete sys.link$字典。
JSSSTR> conn / as sysdba
已連線。
JSSSTR> delete link$ where name=¨JSSSTR.JSS.CN¨;
已刪除 1 行。
JSSSTR> commit;
提交完成。
9、 源端執行POST_INSTANTIATION_SETUP過程
JSSWEB> DECLARE
2 empty_tbs DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
3 BEGIN
4 DBMS_STREAMS_ADM.POST_INSTANTIATION_SETUP(
5 maintain_mode => ¨GLOBAL¨,
6 tablespace_names => empty_tbs,
7 source_database => ¨jssweb.jss.cn¨,
8 destination_database => ¨jssstr.jss.cn¨,
9 perform_actions => true,
10 bi_directional => true,
11 include_ddl => true,
12 start_processes => true,
13 instantiation_scn => 192552 ,
14 exclude_schemas => ¨strmadmin¨,
15 exclude_flags => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_ FULL +
16 DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
17 DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
18 END;
19 /
PL/SQL procedure successfully completed.如果沒報錯,至此,雙向同步的streams整庫複製環境就算完成了,最後,在目標端執行,取消受限連線:
JSSSTR> conn / as sysdba
已連線。
JSSSTR> ALTER SYSTEM DISABLE RESTRICTED SESSION;
系統已更改。======================================
一步一步學Streams(11) 第二部分 實踐之建立全庫複製(1)準備工作
一步一步學Streams(10) 第二部分 實踐之準備工作(2)初始化環境
一步一步學Streams(9) 第二部分 實踐之準備工作(1)明確需求
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-557884/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一步一步學Streams(13) 第二部分 實踐之建立全庫複製(3)測試
- 一步一步學Streams(11) 第二部分 實踐之建立全庫複製(1)準備工作
- 一步一步學Streams(14) 第二部分 實踐之移除Streams複製環境
- 一步一步學DataGuard(26)RMAN備份來建立之實踐2
- 一步一步學Streams(10) 第二部分 實踐之準備工作(2)初始化環境
- 一步一步學DataGuard(25)RMAN備份來建立之實踐
- 一步一步學DataGuard(5)物理standby之建立示例
- 一步一步學DataGuard(13)邏輯standby之建立示例
- 一步一步學Streams(1) 第一部分 基礎之概述篇
- 一步一步學Streams(3) 第一部分 基礎之捕獲程式
- 一步一步學Streams(5) 第一部分 基礎之傳播程式(下)
- 一步一步學Streams(6) 第一部分 基礎之應用程式(上)
- 一步一步學Streams(7) 第一部分 基礎之應用程式(中)
- STREAMS筆記(1) step by step 建立一個Streams複製環境筆記
- 一步步瞭解執行緒池之按需建立-CachedThreadPool執行緒thread
- STREAMS筆記(2) 其他建立Streams的方式筆記
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- 全表複製過程建立指令碼指令碼
- 職場暢行:第一步 建立職場思考模型模型
- MySQL 複製全解析 Part 9 一步步搭建基於GTID的MySQL複製MySql
- 一步一步教你使用Eclipse如何建立Swing專案(一)Eclipse
- PyCharm入門第一步(四):建立和執行第一個Django專案PyCharmDjango
- PyCharm入門第一步:建立並執行第一個Python專案PyCharmPython
- [zt] 高階複製、流複製(Streams)、備庫區別
- 一步一步學RMAN第二篇 RMAN命令知多少
- 一步一步學DataGuard(2)基礎之術語再瞭解大概
- 元件化第一步,建立私有Pod元件化
- mysql線上建立半同步複製的從庫MySql
- MySQL運維實戰(7)建立複製MySql運維
- (轉) 一步一步學習ASP.NET 5 (二)- 通過命令列和sublime建立專案ASP.NET命令列
- 一步一步實現一個符合PromiseA+規範的Promise庫(2)Promise
- lucene第一步,lucene基礎,索引建立索引
- AIX 5L:第一步——建立VGAI
- 一步一步學DataGuard(14)邏輯standby之switchover
- [譯] 多執行緒簡介:一步一步來接近多執行緒的世界執行緒
- 使用CocoaPods建立自己的私有庫-iOS元件化第一步iOS元件化
- 一步一步學Silverlight 2系列(14):資料與通訊之WCF
- 一步一步學ROP之Android ARM 32位篇Android