Streams全库复制
一、設置標識
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>
二、創建輔助實例
1. 創建輔助實例
?? C:\WINDOWS\system32>oradim –new –sid jssstr
?? 實例創建。
2. 創建輔助實例的密碼文件
?? C:\WINDOWS\system32>orapwd file=c:\oracle\database\PWDjssstr.ora password=oracle entries=30
3. 創建助實例的初始化參數文件
1). 創建相應的目錄
?
?
2). 創建并修改本地初始化參數
從源庫創建初始華文件:
JSSWEB> create pfile='c:\admin\jssstr\pfile\20120901.ora' from spfile;
用記事打開并更改相應的參數。并添加以下兩參數:
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';
?
文件已創建。
JSSSTR> startup force nomount;
例程已經啟動。
Total System Global Area? 612368384 bytes
Fixed Size????????????????? 1250428 bytes
Variable Size???????????? 339741572 bytes
Database Buffers????????? 264241152 bytes
Redo Buffers??????????????? 7135232 bytes
JSSSTR>
?三、查看初始化參數
使用 pfile的修改init<SID>.ora 文件,使用spfile的通過alter system命令修改spile文件,主要包括以下幾項(源和目標數據庫都需要設置):
- COMPATIBLE:數據庫的兼容版本不能低于10.2.0.1
- GLOBAL_NAMES:必需設置為true
- JOB_QUEUE_PROCESSES:設置實例最大同時啟用的job里程數不能小于2
- STREAMS_POOL_SIZE:為streams分配適當的緩存區。參數值不能為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;
執行完成后重啟數據庫
四、檢查歸檔模式
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;
?
數據庫置為歸檔模式后,可以按如下方式檢驗一下
?
sql> archive log list;
?
五、創建表空間及管理員帳戶(源庫操作)
sql> create tablespace stream_tbs datafile '/data/oradata/jssweb/stream01.dbf' size 200m;
將logminer 的數據字典從system表空間轉移到新建的表空間,防止撐滿system表空間
sql> execute dbms_logmnr_d.set_tablespace('stream_tbs');
創建管理員
sql> create user strmadmin identified by strmadmin default tablespace stream_tbs quota unlimited on stream_tbs;
?
分配權限
sql> grant connect,resource,dba,aq_administrator_role to strmadmin;
sql> begin
dbms_streams_auth.grant_admin_privilege( grantee => 'strmadmin', grant_privileges =>true);
end;
六、 創建數據庫鏈接(源庫操作)
以strmadmin身份登錄創建:
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;
?
七、源庫執行初始化過程
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 只有兩個值: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
八、源庫創建RMAN備份
RMAN>?run{
2>?allocate?channel?c1?device?type?disk;
3>?backup?database?plus?archivelog?delete?input;
4>?}
然后馬上查看一下當前系統的scn,并且歸檔當前的redo
JSSWEB>?select?dbms_flashback.get_system_change_number?from?dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
??????????????????687812
JSSWEB>?alter?system?archive?log?current;
System?altered.
九、 執行RMAN Duplicate復制數據庫
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>?}
十、連接目標數據庫檢查global_name
十一、創建目標數據庫到源數據庫的鏈接
JSSSTR>?conn?strmadmin/strmadmin
已連接。
JSSSTR>?create?database?link?jssweb?connect?to?strmadmin?identified?by?strmadmin?using?‘jssweb’;
不過由于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>. 直接刪除字典表
JSSSTR>?conn?/?as?sysdba
已連接。
JSSSTR>?delete?link$?where?name=¨JSSSTR.JSS.CN¨;
已刪除?1?行。
JSSSTR>?commit;
提交完成。
十二、在源數據庫執行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 過程已成功完成。
十三、 在目標端執行,取消受限連接:
JSSSTR>?conn?/?as?sysdba
已連接。
JSSSTR>?ALTER?SYSTEM?DISABLE?RESTRICTED?SESSION;
系統已更改。
至此,單向同步的streams整庫復制環境就算完成了
?
十四、文件路徑轉換
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??/
過程已創建。
設置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? 過程已成功完成。
?
?
?
?
轉載于:https://www.cnblogs.com/landexia/archive/2012/09/01/2667021.html
總結
以上是生活随笔為你收集整理的Streams全库复制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《编程珠玑》笔记3 数据结构选择
- 下一篇: WP7sdk安装