Streams全库复制
一、設(shè)置標(biāo)識(shí)
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六9月 1 09:36:23 2012
Copyright (c) 1982, 2005, Oracle.? All rights reserved.
連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> set sqlprompt 'JSSWEB> ';
JSSWEB>
二、創(chuàng)建輔助實(shí)例
1. 創(chuàng)建輔助實(shí)例
?? C:\WINDOWS\system32>oradim –new –sid jssstr
?? 實(shí)例創(chuàng)建。
2. 創(chuàng)建輔助實(shí)例的密碼文件
?? C:\WINDOWS\system32>orapwd file=c:\oracle\database\PWDjssstr.ora password=oracle entries=30
3. 創(chuàng)建助實(shí)例的初始化參數(shù)文件
1). 創(chuàng)建相應(yīng)的目錄
?
?
2). 創(chuàng)建并修改本地初始化參數(shù)
從源庫(kù)創(chuàng)建初始華文件:
JSSWEB> create pfile='c:\admin\jssstr\pfile\20120901.ora' from spfile;
用記事打開并更改相應(yīng)的參數(shù)。并添加以下兩參數(shù):
db_file_name_convert='oradata\jssweb','oradata\jssstr'
log_file_name_convert='oradata\jssweb','oradata\jssstr'
接著:
JSSSTR> create spfile from pfile='c:\admin\jssstr\pfile\20120901.ora';
?
文件已創(chuàng)建。
JSSSTR> startup force nomount;
例程已經(jīng)啟動(dòng)。
Total System Global Area? 612368384 bytes
Fixed Size????????????????? 1250428 bytes
Variable Size???????????? 339741572 bytes
Database Buffers????????? 264241152 bytes
Redo Buffers??????????????? 7135232 bytes
JSSSTR>
?三、查看初始化參數(shù)
使用 pfile的修改init<SID>.ora 文件,使用spfile的通過alter system命令修改spile文件,主要包括以下幾項(xiàng)(源和目標(biāo)數(shù)據(jù)庫(kù)都需要設(shè)置):
- COMPATIBLE:數(shù)據(jù)庫(kù)的兼容版本不能低于10.2.0.1
- GLOBAL_NAMES:必需設(shè)置為true
- JOB_QUEUE_PROCESSES:設(shè)置實(shí)例最大同時(shí)啟用的job里程數(shù)不能小于2
- STREAMS_POOL_SIZE:為streams分配適當(dāng)?shù)木彺鎱^(qū)。參數(shù)值不能為0
sql> alter system set global_names=true scope=both;
sql> alter system set aq_tm_processes=10 scope=both;
sql> alter system set streams_pool_size=200m scope=spfile;
執(zhí)行完成后重啟數(shù)據(jù)庫(kù)
四、檢查歸檔模式
c:> sqlplus ‘/ as sysdba’
?
sql> alter system set log_archive_dest_1=’location=c:/jssweb/arch’ scope=spfile;
sql> alter system set log_archive_start=TRUE scope=spfile;
sql> alter system set log_archive_format=’ arch%t_%s_%r.arc’ scope=spfile;
sql> shutdown immediate;
sql> startup mount;
sql> alter database archivelog;
sql> alter database open;
?
數(shù)據(jù)庫(kù)置為歸檔模式后,可以按如下方式檢驗(yàn)一下
?
sql> archive log list;
?
五、創(chuàng)建表空間及管理員帳戶(源庫(kù)操作)
sql> create tablespace stream_tbs datafile '/data/oradata/jssweb/stream01.dbf' size 200m;
將logminer 的數(shù)據(jù)字典從system表空間轉(zhuǎn)移到新建的表空間,防止撐滿system表空間
sql> execute dbms_logmnr_d.set_tablespace('stream_tbs');
創(chuàng)建管理員
sql> create user strmadmin identified by strmadmin default tablespace stream_tbs quota unlimited on stream_tbs;
?
分配權(quán)限
sql> grant connect,resource,dba,aq_administrator_role to strmadmin;
sql> begin
dbms_streams_auth.grant_admin_privilege( grantee => 'strmadmin', grant_privileges =>true);
end;
六、 創(chuàng)建數(shù)據(jù)庫(kù)鏈接(源庫(kù)操作)
以strmadmin身份登錄創(chuàng)建:
sql> create database link jssstr connect to strmadmin identified by strmadmin using 'jssstr';
--查看db links
sql> select owner,db_link,host from all_db_links;
?
七、源庫(kù)執(zhí)行初始化過程
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 => false,
?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 過程已成功完成。
maintain_mode 只有兩個(gè)值:GLOBAL,表示數(shù)據(jù)庫(kù)級(jí)的復(fù)制;TRANSPORTABLE?TABLESPACES,表示表空間級(jí)的復(fù)制,需要同時(shí)指定 tablespace_names參數(shù),表空間可以是多個(gè)PRE_INSTANTIATION_SETUP/POST_INSTANTIATION_SETUP創(chuàng)建表空間級(jí)的復(fù)制環(huán)境。
tablespace_names :要復(fù)制的表空間,此處為數(shù)據(jù)庫(kù)級(jí)的復(fù)制,因此此參數(shù)為空,不過該參數(shù)不能直接指定為null,因?yàn)樵搮?shù)類型為 DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,因此我們?cè)趫?zhí)行過程前先declare了一個(gè) empty_tbs的變量。
source_datebase :連接到源端數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)鏈 。
destination_database :連接到目標(biāo)端數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)鏈 。
perform_actions :如果為true,則過程直接執(zhí)行。如果為false,則過程并不直接生成復(fù)制環(huán)境,而是創(chuàng)建復(fù)制環(huán)境的配置腳本,由dba手動(dòng)執(zhí)行(或修改編輯后執(zhí) 行),因此必須同時(shí)設(shè)置script_name和script_directory_object兩參數(shù),指定腳本輸出路徑和腳本文件名,不然過程執(zhí)行將 直接報(bào)錯(cuò)。
bi_directional :true時(shí)表示啟用雙向復(fù)制。false表示源庫(kù)向目錄庫(kù)單向復(fù)制。
include_ddl :是否同步ddl語(yǔ)句 。
start_processes :是否啟用捕獲和應(yīng)用進(jìn)程 。
exclude_schemas :指定不包含在復(fù)制環(huán)境中的schemas。*表示全不包括,null表示全部包括(一個(gè)bu字,意義千差萬(wàn)別,漢字太奇妙啦),注意,由于源端的捕獲進(jìn) 程不會(huì)捕獲SYS/SYSTEM/CTXSYS這三個(gè)schema,因此即使此處指定null,這三個(gè)schema也不會(huì)被同步。另外,此參數(shù)僅在 MAINTAIN_MODE=>¨GLOBAL¨時(shí)有效。
exclude_flags : 這個(gè)要好好說說,這個(gè)選項(xiàng)是與exclude_schemas組合使用,同時(shí)由于該參數(shù)值具有多個(gè)組合屬性,因此設(shè)置時(shí)也特別需要注意。
有如下可選值:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL :排除指定schemas中所有對(duì)象操作。
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED :排除指定schemas中不支持的對(duì)象操作。
上述兩值僅能同時(shí)選一個(gè),如果兩個(gè)同時(shí)選擇在配置時(shí)會(huì)拋出異常。同時(shí)還有下列兩個(gè)附加選項(xiàng):
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML :排除對(duì)不支持對(duì)象的DML操作。
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL :排除對(duì)不支持對(duì)象的DDL操作。
上述四個(gè)屬性值可以通過"+"號(hào)連接來達(dá)到同時(shí)支持的目的。
比如,對(duì)于exclude_schemas參數(shù)中指定的schemas對(duì)象,復(fù)制其DML操作但不復(fù)制DDL操作,則設(shè)置exclude_flags參數(shù)值如下可滿足要求:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL?+?
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL
八、源庫(kù)創(chuàng)建RMAN備份
RMAN>?run{
2>?allocate?channel?c1?device?type?disk;
3>?backup?database?plus?archivelog?delete?input;
4>?}
然后馬上查看一下當(dāng)前系統(tǒng)的scn,并且歸檔當(dāng)前的redo
JSSWEB>?select?dbms_flashback.get_system_change_number?from?dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
??????????????????687812
JSSWEB>?alter?system?archive?log?current;
System?altered.
九、 執(zhí)行RMAN Duplicate復(fù)制數(shù)據(jù)庫(kù)
C:\WINDOWS\system32>rman?target?sys/oracle@jssweb?auxiliary/
RMAN>?run{
2>? set?until?scn?687812;
3>?duplicate?target?database?to?jssstr? open?restricted;
9>?}
十、連接目標(biāo)數(shù)據(jù)庫(kù)檢查global_name
十一、創(chuàng)建目標(biāo)數(shù)據(jù)庫(kù)到源數(shù)據(jù)庫(kù)的鏈接
JSSSTR>?conn?strmadmin/strmadmin
已連接。
JSSSTR>?create?database?link?jssweb?connect?to?strmadmin?identified?by?strmadmin?using?‘jssweb’;
不過由于jssstr數(shù)據(jù)庫(kù)是由jssweb復(fù)制過來的,因此strmadmin用戶下也存在一個(gè)jssstr.jss.cn的dblink, 如果看其不爽可以將它刪除,不過直接刪除是不行的,肯定會(huì)報(bào)ORA-02082錯(cuò)誤,因?yàn)椴荒軇h除與global_name同名的dblink。如果確實(shí) 想刪除該dblink,方法有二:
A>. 先修改global_name,再刪除dblink
JSSSTR>?alter?database?rename?global_name?to?test.jss.cn;
數(shù)據(jù)庫(kù)已更改。
JSSSTR>?drop?database?link?jssstr.jss.cn;
數(shù)據(jù)庫(kù)鏈接已刪除。
JSSSTR>?alter?database?rename?global_name?to?jssstr.jss.cn;
數(shù)據(jù)庫(kù)已更改。
B>. 直接刪除字典表
JSSSTR>?conn?/?as?sysdba
已連接。
JSSSTR>?delete?link$?where?name=¨JSSSTR.JSS.CN¨;
已刪除?1?行。
JSSSTR>?commit;
提交完成。
十二、在源數(shù)據(jù)庫(kù)執(zhí)行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 => false,
?11???? include_ddl => true,
?12???? start_processes => true,
?13???? instantiation_scn => 687811,
?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 過程已成功完成。
十三、 在目標(biāo)端執(zhí)行,取消受限連接:
JSSSTR>?conn?/?as?sysdba
已連接。
JSSSTR>?ALTER?SYSTEM?DISABLE?RESTRICTED?SESSION;
系統(tǒng)已更改。
至此,單向同步的streams整庫(kù)復(fù)制環(huán)境就算完成了
?
十四、文件路徑轉(zhuǎn)換
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,’oradata\jssweb’,’oradata\jssstr’);
?10????execute?immediate?to_char(ddl_text);
?11????DBMS_LOB.FREETEMPORARY(ddl_text);
?12??end;
?13??/
過程已創(chuàng)建。
設(shè)置ddl?handler:
JSSSTR>?select?apply_name?from?dba_apply;
APPLY_NAME ????????????????????
------------------------------
APPLY$_JSSWEB_44
JSSSTR>?exec?DBMS_APPLY_ADM.ALTER_APPLY(apply_name=>‘APPLY$_JSSWEB_44,,ddl_handler=>’strmadmin.file_convert’);
PL/SQL? 過程已成功完成。
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/landexia/archive/2012/09/01/2667021.html
總結(jié)
以上是生活随笔為你收集整理的Streams全库复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《编程珠玑》笔记3 数据结构选择
- 下一篇: WP7sdk安装