Oracle 流stream数据的复制

Oracle 流stream数据的复制

--实验的目的是捕获scott.emp1表的变化,将变化应用到远程数据库scott.emp1表中。

--设置初始化参数

AQ_TM_PROCESSES=1

COMPATIBLE=9.2.0

LOG_PARALLELISM=1

GLOBAL_NAMES=true

JOB_QUEUE_PROCESSES=2

--查看数据库的名称,我的为ora9,将以下的ora9全部替换为你的数据库名称

--数据库为归档模式

conn scott/tiger

drop table emp1;

create table emp1 as select * from emp;

alter table emp1 add constraint pk_emp1 primary key (empno);

--建立管理用户,设定默认表空间,授权

conn / as sysdba

create tablespace streamout datafile 'F:\ORACLE\ORADATA\ORA9\streamout.dbf' size 20m

autoextend on;

create tablespace streamin datafile 'F:\ORACLE\ORADATA\ORA9\streamin.dbf' size 20m

autoextend on;

create tablespace tslogmnr datafile 'F:\ORACLE\ORADATA\ORA9\logmnr.dbf' size 20m

autoextend on;

drop user streamout cascade;

drop user streamin cascade;

--建立streamout帐号-------------------------------------------------------------------

conn / as sysdba

GRANT CONNECT, RESOURCE, SELECT_CATALOG_ROLE

TO streamout IDENTIFIED BY streamout;

ALTER USER streamout DEFAULT TABLESPACE streamout;

GRANT EXECUTE ON DBMS_AQADM TO streamout;

GRANT EXECUTE ON DBMS_CAPTURE_ADM TO streamout;

GRANT EXECUTE ON DBMS_PROPAGATION_ADM TO streamout;

GRANT EXECUTE ON DBMS_STREAMS_ADM TO streamout;

BEGIN

DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(

privilege => DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,

grantee => 'streamout',

grant_option => FALSE);

END;

/

BEGIN

DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(

privilege => DBMS_RULE_ADM.CREATE_RULE_OBJ,

grantee => 'streamout',

grant_option => FALSE);

END;

/

--建立流队列,名称叫streams_queue ,用于存储捕获的变化,同时建立了表streams_queue_table

CONNECT streamout/streamout

EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

select * from tab;

--建立数据库连接,连接到远程,先配置网络连接,建立的时候要使用数据库的名称

CREATE DATABASE LINK ora11 CONNECT TO streamin IDENTIFIED BY streamin USING 'ora11';

--建立streamin帐号----要是远程其它数据库-------------------------

conn / as sysdba

GRANT CONNECT, RESOURCE, SELECT_CATALOG_ROLE

TO streamin IDENTIFIED BY streamin;

ALTER USER streamin DEFAULT TABLESPACE streamin;

GRANT EXECUTE ON DBMS_APPLY_ADM TO streamin;

GRANT EXECUTE ON DBMS_AQADM TO streamin;

GRANT EXECUTE ON DBMS_STREAMS_ADM TO streamin;

BEGIN

DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(

privilege => DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,

grantee => 'streamin',

grant_option => FALSE);

END;

/

BEGIN

DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(

privilege => DBMS_RULE_ADM.CREATE_RULE_OBJ,

grantee => 'streamin',

grant_option => FALSE);

END;

/

conn streamin/streamin

EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

select * from tab;

----------------------------本地的数据库--------------------------

--配置logmnr使用的表空间,我们就用tslogmnr

conn / as sysdba

EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('tslogmnr');

--增强日志的模式

ALTER TABLE scott.emp1 ADD SUPPLEMENTAL LOG GROUP log_group_emp1_pk (empno) ALWAYS;

grant all on scott.emp1 to streamout;

--配置捕获城序-----------------输出的帐号-----------------

CONNECT streamout/streamout

BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(

table_name => 'scott.emp1',

streams_name => 'str1_to_str2',

source_queue_name => 'streamout.streams_queue',

destination_queue_name => 'streamin.streams_queue@ora11',

include_dml => true,

include_ddl => true,

source_database => 'ora9');

END;

/

BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_RULES(

table_name => 'scott.emp1',

streams_type => 'capture',

streams_name => 'capture_simp',

queue_name => 'streamout.streams_queue',

include_dml => true,

include_ddl => true);

END;

/

-------------------------------dos下exp/imp----------------------------------

--实例化emp1表,emp1存在于scott帐号内

将scott.emp1导出,再导入到远程数据库的scott帐号

exp scott/tiger FILE=d:\bk\1.dmp TABLES=emp1 OBJECT_CONSISTENT=y ROWS=n

--imp到远程数据库中

imp scott/tiger FILE=d:\bk\1.dmp IGNORE=y COMMIT=y LOG=import.log STREAMS_INSTANTIATION=y

-----------------------------远程数据库---------------------------------

conn scott/tiger

ALTER TABLE emp1 DROP SUPPLEMENTAL LOG GROUP log_group_emp1_pk;

GRANT ALL ON EMP1 TO streamin;

--配置应用程序-------------------输入的帐号------远程数据库----------

conn streamin/streamin

BEGIN

DBMS_STREAMS_ADM.ADD_TABLE_RULES(

table_name => 'scott.emp1',

streams_type => 'apply',

streams_name => 'apply_simp',

queue_name => 'streamin.streams_queue',

include_dml => true,

include_ddl => true,

source_database => 'ora9');

END;

/

--启动应用程序

conn streamin/streamin

BEGIN

DBMS_APPLY_ADM.SET_PARAMETER(

apply_name => 'apply_simp',

parameter => 'disable_on_error',

value => 'n');

END;

/

conn streamin/streamin

BEGIN

DBMS_APPLY_ADM.START_APPLY(

apply_name => 'apply_simp');

END;

/

--如果想停止应用,该句话不运行

conn streamin/streamin

BEGIN

DBMS_APPLY_ADM.STOP_APPLY(

apply_name => 'apply_simp');

END;

/

--启动捕获程序----------------------输出的帐号-----本地数据库-------

conn streamout/streamout

--如果想停止应用,该句话不运行

BEGIN

DBMS_CAPTURE_ADM.STop_CAPTURE(

capture_name => 'capture_simp');

END;

/

--启动

conn streamout/streamout

BEGIN

DBMS_CAPTURE_ADM.START_CAPTURE(

capture_name => 'capture_simp');

END;

/

--对scott.emp1进行插入,删除和修改

conn scott/tiger

update emp1 set sal=300 where empno=7369;

COMMIT;

--远程数据库

CONNECT scott/tiger

SELECT * FROM emp1;

--显示应用程序的错误------------------------------------------------------

conn streamin/streamin

COLUMN APPLY_NAME HEADING 'Apply|Process|Name' FORMAT A8

COLUMN SOURCE_DATABASE HEADING 'Source|Database' FORMAT A8

COLUMN LOCAL_TRANSACTION_ID HEADING 'Local|Transaction|ID' FORMAT A11

COLUMN ERROR_MESSAGE HEADING 'Error Message' FORMAT A50

SELECT APPLY_NAME, SOURCE_DATABASE, LOCAL_TRANSACTION_ID, ERROR_MESSAGE

FROM DBA_APPLY_ERROR;

conn / as sysdba

select * from DBA_QUEUE_SCHEDULES;

SELECT

p.SOURCE_QUEUE_OWNER||'.'||

p.SOURCE_QUEUE_NAME||'@'||

g.GLOBAL_NAME SOURCE_QUEUE,

p.DESTINATION_QUEUE_OWNER||'.'||

p.DESTINATION_QUEUE_NAME||'@'||

p.DESTINATION_DBLINK DESTINATION_QUEUE

FROM DBA_PROPAGATION p, GLOBAL_NAME g;

SELECT STATUS FROM DBA_CAPTURE;

select * from V$STREAMS_CAPTURE ;

相关推荐
2301_809204701 小时前
JavaScript中严格模式use-strict对引擎解析的辅助.txt
jvm·数据库·python
zjy277771 小时前
mysql如何选择合适的索引类型_mysql索引设计实战
jvm·数据库·python
笨蛋不要掉眼泪2 小时前
Mysql架构揭秘:update语句的执行流程
数据库·mysql·架构
万邦科技Lafite2 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
秋92 小时前
ruoyi项目更换为mysql9.7.0数据库
数据库
Andya_net3 小时前
MySQL | MySQL 8.0 权限管理实践-精确赋予库、表只读等权限
android·数据库·mysql
筑梦之路4 小时前
harbor数据库报错权限异常如何处理——筑梦之路
数据库·harbor
czlczl200209254 小时前
理解 MySQL 行锁:两阶段锁协议与热点更新优化
数据库·mysql
AllData公司负责人5 小时前
通过Postgresql同步到Doris,全视角演示AllData数据中台核心功能效果,涵盖:数据入湖仓,数据同步,数据处理,数据服务,BI可视化驾驶舱
java·大数据·数据库·数据仓库·人工智能·python·postgresql
哆啦A梦15885 小时前
20, Springboot3+vue3实现前台轮播图和详情页的设计
javascript·数据库·spring boot·mybatis·vue3