oracle 流技術(轉),用於學習
Oracle 流提供了一種在資料庫之間共享訊息和資料的簡單而靈活的方法。例如, 您可以使用流, 作為事件捕獲對資料庫物件所進行的 DML 和 DDL 更改。然後您可以將這些事件傳播到其他資料庫, 從而有效地將資料庫物件複製到其他資料庫。 Oracle 流包括三個主要過程:
捕獲, 用來捕獲對重做日誌中資料庫物件的更改。這些更改將放置在一個佇列中。
傳播, 用來將更改從源資料庫中的佇列傳播到目標資料庫中的佇列。
應用, 用來從目標佇列區域檢索更改並應用於資料庫。
使用stream流複製環境作表級或模式schema級甚至DB級的資料複製,本指令碼僅供參考(詳細指令碼可透過OEM生成)。
(流的核心技術:Logminer+Queue):
/*************************************
設定stream流複製環境指令碼(表級或模式級流複製)
Created by xsb on 2006-9-8
**************************************/
--目標庫:
ACCEPT dest_dba_passwd PROMPT '請輸入目標資料庫 xsb2 中的使用者 SYS 的口令 : ' HIDE
ACCEPT dest_strmadmin_passwd PROMPT '請輸入目標資料庫 xsb2 中的使用者 STRMADMIN 的口令 : ' HIDE
connect as SYSDBA
drop user strmadmin cascade;
--drop table xsb.t1 purge;
drop user xsb cascade;
grant dba to xsb identified by a;
CREATE USER strmadmin IDENTIFIED BY &dest_strmadmin_passwd
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users;
GRANT DBA TO strmadmin;
BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'strmadmin',
grant_privileges => true);
END;
/
pause ...
conn
drop DATABASE LINK ORCL;
CREATE DATABASE LINK ORCL CONNECT TO strmadmin IDENTIFIED BY &dest_strmadmin_passwd
USING 'xsb';
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'strmadmin.strm_queue',
queue_name => 'strmadmin.strm_queue',
queue_user => 'strmadmin');
END;
/
/*********************************************************************
--表級strm
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'xsb.t1',
streams_type => 'apply',
streams_name => 'strm_apply',
queue_name => 'strmadmin.strm_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM',
inclusion_rule => true);
END;
/
*********************************************************************/
--模式級strm
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name => '"XSB"',
streams_type => 'APPLY',
streams_name => 'strm_apply',
queue_name => 'strmadmin.strm_queue',
include_dml => true,
include_ddl => true,
source_database => 'ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM');
END;
/
--源庫:
ACCEPT source_dba_passwd PROMPT '請輸入源資料庫 XSB 中的使用者 SYS 的口令 : ' HIDE
connect as SYSDBA
/************************************************
startup mount
alter database archivelog;
alter database open;
archive log list;
************************************************/
--ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY,UNIQUE INDEX) COLUMNS;
--ALTER SYSTEM SWITCH LOGFILE;
drop user strmadmin cascade;
CREATE USER strmadmin IDENTIFIED BY &dest_strmadmin_passwd
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users;
GRANT DBA TO strmadmin;
BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'strmadmin',
grant_privileges => true);
END;
/
pause ...
conn
drop DATABASE LINK orcl2 ;
CREATE DATABASE LINK orcl2 CONNECT TO strmadmin IDENTIFIED BY &dest_strmadmin_passwd
USING 'xsb2';
/***************************************
CREATE DIRECTORY admin_dir AS 'e:';
BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'strmadmin',
grant_privileges => false,
file_name => 'grant_strms_privs.sql',
directory_name => 'admin_dir');
END;
/
***************************************/
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'strmadmin.strm_queue',
queue_name => 'strmadmin.strm_queue',
queue_user => 'strmadmin');
END;
/
/*********************************************************************
--表級strm
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'xsb.t1',
streams_type => 'capture',
streams_name => 'strm_capture',
queue_name => 'strmadmin.strm_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => NULL,
inclusion_rule => true);
END;
/
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name => 'xsb.t1',
streams_name => 'strm_propagation',
source_queue_name => 'strmadmin.strm_queue',
destination_queue_name => ,
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM',
inclusion_rule => true,
queue_to_queue => true);
END;
/
*********************************************************************/
--模式級strm
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name => '"XSB"',
streams_type => 'CAPTURE',
streams_name => 'strm_capture',
queue_name => 'strmadmin.strm_queue',
include_dml => true,
include_ddl => true,
source_database => 'ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM');
END;
/
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
schema_name => '"XSB"',
streams_name => 'STRM_PROPAGATE',
source_queue_name => 'strmadmin.strm_queue',
destination_queue_name => ,
include_dml => true,
include_ddl => true,
source_database => 'ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM');
END;
/
--匯出源
--表級
--host exp USERID="STRMADMIN"@XSB TABLES="XSB"."T1" FILE=tables.dmp GRANTS=Y ROWS=Y LOG=exportTables.log OBJECT_CONSISTENT=Y INDEXES=Y
--模式級
host exp USERID="STRMADMIN"@XSB OWNER="XSB" FILE=schemas.dmp GRANTS=Y ROWS=Y LOG=exportSchemas.log OBJECT_CONSISTENT=Y
--匯入目標
--表級
--host imp USERID="STRMADMIN"@xsb2 FULL=Y CONSTRAINTS=Y FILE=tables.dmp IGNORE=Y GRANTS=Y ROWS=Y COMMIT=Y LOG=importTables.log STREAMS_CONFIGURATION=N STREAMS_INSTANTIATION=Y
--模式級
host imp USERID="STRMADMIN"@xsb2 FULL=Y CONSTRAINTS=Y FILE=schemas.dmp IGNORE=Y GRANTS=Y ROWS=Y COMMIT=Y LOG=importSchemas.log STREAMS_CONFIGURATION=N STREAMS_INSTANTIATION=Y
pause ...
--目標庫
conn
DECLARE
v_started number;
BEGIN
SELECT decode(status, 'ENABLED', 1, 0) INTO v_started
FROM DBA_APPLY WHERE APPLY_NAME = 'STRM_APPLY';
if (v_started = 0) then
DBMS_APPLY_ADM.START_APPLY(apply_name => 'STRM_APPLY');
end if;
END;
/
--源庫:
conn
DECLARE
v_started number;
BEGIN
SELECT decode(status, 'ENABLED', 1, 0) INTO v_started
FROM DBA_CAPTURE WHERE CAPTURE_NAME = 'STRM_CAPTURE';
if (v_started = 0) then
DBMS_CAPTURE_ADM.START_CAPTURE(capture_name => 'STRM_CAPTURE');
end if;
END;
/
pause ...
--測試:
conn
delete xsb.t1 where id1> (select id1 from (select row_number() over(order by id1) rn ,id1 from xsb.t1 ) where rn=5);
insert into xsb.t1 select id1+(select max(id1) from xsb.t1),id2 from xsb.t1;
commit;
select * from xsb.t1;
conn
select * from xsb.t1;
select * from xsb.t1;
http://zhouwf0726.itpub.net/post/9689/407281
一個簡單的表級複製的建立過程
Streams散記之一-如何清除流配置
Ref:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11423276/viewspace-994762/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 流體力學深度學習建模技術研究進展深度學習
- 用於HPC和深度學習工作負載的容器技術深度學習負載
- 運用深度學習技術檢測轉移性乳腺癌深度學習
- Oracle的全文檢索技術(轉)Oracle
- 如何快速應用機器學習技術?機器學習
- docker技術學習Docker
- Linux應用領域有哪些?linux應用技術學習Linux
- 深度強化學習技術開發與應用強化學習
- iOS-訊息轉發和方法調配技術學習iOS
- 基於口罩識別模型,探索機器學習自動化的技術應用模型機器學習
- Java基礎之IO轉換流學習Java
- 深度學習核心技術實踐與圖神經網路新技術應用深度學習神經網路
- NLPIR技術運用知識圖譜技術應用於智慧金融
- 如何學習後端技術?後端
- Hadoop技術學習報告Hadoop
- 深度學習技術研究會深度學習
- 機器學習的技術原理、應用與挑戰機器學習
- 飛機的 PHP 學習筆記十:應用技術PHP筆記
- 轉行學IT技術,薪資高嗎
- 深度學習、強化學習核心技術實戰深度學習強化學習
- 飛機的 PHP 學習筆記之應用技術篇PHP筆記
- 機器學習-搜尋技術:從技術發展到應用實戰的全面指南機器學習
- 區塊鏈技術學習指引區塊鏈
- 學習java技術有前途嗎Java
- AI技術在基於風險測試模式轉型中的應用AI模式
- 為什麼要學習Linux?如何學習Linux技術?Linux
- bzoj3442: 學習小組(費用流)
- Oracle EBS基礎學習:Oracle EBS啟用診斷功能Oracle
- 機器學習-ROC曲線:技術解析與實戰應用機器學習
- 深度學習技術在網路入侵檢測中的應用深度學習
- 深度學習在攝影技術中的應用與發展深度學習
- 遷移學習核心技術開發與應用研修班遷移學習
- 大規模深度學習系統技術是如何應用的深度學習
- 基於深度學習的影像超解析度重建技術的研究深度學習
- 基於深度學習的影象超解析度重建技術的研究深度學習
- 想轉行做IT!0基礎應該要學習哪個技術啊?
- 怎麼樣學習雲端計算相關技術?雲應用如何入門學習?
- 女生能學網路安全技術嗎?網路安全技術學習路線
- Oracle實時同步技術Oracle