[原创]如何向现有的流中增加表_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4004 | 回复: 0   主题: [原创]如何向现有的流中增加表        下一篇 
kim
注册用户
等级:中校
经验:1729
发帖:222
精华:0
注册:2011-7-21
状态:离线
发送短消息息给kim 加好友    发送短消息息给kim 发消息
发表于: IP:您无权察看 2011-8-15 12:12:14 | [全部帖] [楼主帖] 楼主

应用范围

Oracle Server企业版,版本号:9.2.0.1到11.1.0.7。

本文内容适用任何操作系统平台。

本文目标

如何向现有流中添加表?

解决方案

向现有流添加表的文档说明很多。具体如何操作,这取决于你当前的设置,选择合适的文档说明。

如下的示例演示要求两个数据库,hora10r24和hora10r242,来进行单向复制。源数据库(hora10r24)必须处在归档模式。

set echo on
set serveroutput on
spool setup.out
connect sys/oracle@hora10r24 as sysdba
exec dbms_propagation_adm.stop_propagation('STREAMS_PROPAGATION')
exec dbms_streams_adm.remove_streams_configuration;
drop user strmadmin cascade;
create user strmadmin identified by streams;
grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to strmadmin;
grant CREATE DATABASE LINK to strmadmin;
grant CREATE ANY DIRECTORY to strmadmin;
BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'strmadmin',
grant_privileges => true);
END;
/
ALTER USER strmadmin DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
drop user test cascade;
create user test identified by test;
grant connect, resource to test;
alter user test default tablespace users;
connect test/test@hora10r24
CREATE TABLE TESTA ( COL1A VARCHAR(4) PRIMARY KEY);
grant select, update, delete, insert on test.testA to strmadmin;
connect sys/oracle@hora10r242 as sysdba;
exec dbms_streams_adm.remove_streams_configuration;
drop user strmadmin cascade;
create user strmadmin identified by streams;
grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to strmadmin;
grant CREATE DATABASE LINK to strmadmin;
grant CREATE ANY DIRECTORY to strmadmin;
BEGIN
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
grantee => 'strmadmin',
grant_privileges => true);
END;
/
ALTER USER strmadmin DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
drop user test cascade;
create user test identified by test;
grant connect, resource to test;
alter user test default tablespace users;
connect test/test@hora10r242
CREATE TABLE TESTA ( COL1A VARCHAR(4) PRIMARY KEY);
grant select, update, delete, insert on test.testa to strmadmin;
connect STRMADMIN/streams@hora10r24;
CREATE DATABASE LINK hora10r242 connect to strmadmin identified by streams using 'hora10r242';
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'streams_capture_qt',
queue_name => 'streams_capture_q',
queue_user => 'strmadmin');
END;
/
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name => 'test.testa',
streams_name => 'STREAMS_PROPAGATION',
source_queue_name => 'STRMADMIN.STREAMS_CAPTURE_Q',
destination_queue_name => 'STRMADMIN.STREAMS_APPLY_Q@hora10r242.uk.oracle.com',
include_dml => true,
include_ddl => true,
source_database => 'hora10r24.uk.oracle.com',
inclusion_rule => true,
queue_to_queue => true);
END;
/
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'test.testa',
streams_type => 'capture',
streams_name => 'STREAMS_CAPTURE',
queue_name => 'STRMADMIN.STREAMS_CAPTURE_Q',
include_dml => true,
include_ddl => true,
source_database => 'hora10r24.uk.oracle.com',
include_tagged_lcr => false,
inclusion_rule => true);
END;
/
connect STRMADMIN/streams@hora10r242;
CREATE DATABASE LINK hora10r24 connect to STRMADMIN identified by streams using 'hora10r24';
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'STREAMS_APPLY_QT',
queue_name => 'STREAMS_APPLY_Q',
queue_user => 'STRMADMIN');
END;
/
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'test.testa',
streams_type => 'apply',
streams_name => 'STREAMS_APPLY',
queue_name => 'STRMADMIN.STREAMS_APPLY_Q',
include_dml => true,
include_ddl => false,
source_database => 'hora10r24.uk.oracle.com',
include_tagged_lcr => false,
inclusion_rule => true);
END;
/
connect STRMADMIN/streams@hora10r24;
DECLARE
iscn NUMBER; -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@hora10r242.uk.oracle.com(
source_object_name => 'test.testa',
source_database_name => 'hora10r24.uk.oracle.com',
instantiation_scn => iscn);
END;
/
connect STRMADMIN/streams@hora10r242;
begin
dbms_apply_adm.start_apply('STREAMS_APPLY');
end;
/
connect STRMADMIN/streams@hora10r24;
begin
dbms_capture_adm.start_capture('STREAMS_CAPTURE');
end;
/
connect test/test@hora10r24
INSERT INTO testa VALUES('A');
commit;
connect sys/oracle@hora10r24 as sysdba
exec dbms_lock.sleep(60)
connect test/test@hora10r242
select * from testa;
spool off
Add the table to the environment.
set echo on
set serveroutput on
spool add.out
connect test/test@hora10r24
CREATE TABLE TESTB ( COL1B VARCHAR(4) PRIMARY KEY);
grant select, update, delete, insert on test.testb to strmadmin;
INSERT INTO testb VALUES('B');
commit;
connect STRMADMIN/streams@hora10r242;
begin
dbms_apply_adm.stop_apply('STREAMS_APPLY');
end;
/
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'test.testb',
streams_type => 'apply',
streams_name => 'STREAMS_APPLY',
queue_name => 'STRMADMIN.STREAMS_APPLY_Q',
include_dml => true,
include_ddl => false,
source_database => 'hora10r24.uk.oracle.com',
include_tagged_lcr => false,
inclusion_rule => true);
END;
/
connect STRMADMIN/streams@hora10r24;
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name => 'test.testb',
streams_name => 'STREAMS_PROPAGATION',
source_queue_name => 'STRMADMIN.STREAMS_CAPTURE_Q',
destination_queue_name => 'STRMADMIN.STREAMS_APPLY_Q@hora10r242.uk.oracle.com',
include_dml => true,
include_ddl => true,
source_database => 'hora10r24.uk.oracle.com',
inclusion_rule => true,
queue_to_queue => true);
END;
/
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'test.testb',
streams_type => 'capture',
streams_name => 'STREAMS_CAPTURE',
queue_name => 'STRMADMIN.STREAMS_CAPTURE_Q',
include_dml => true,
include_ddl => true,
source_database => 'hora10r24.uk.oracle.com',
include_tagged_lcr => false,
inclusion_rule => true);
END;
/
--表在应用层面初始化。
--以下操作是由datapump工具所进行的。
connect test/test@hora10r242
CREATE TABLE TESTB ( COL1B VARCHAR(4) PRIMARY KEY);
grant select, update, delete, insert on test.testb to strmadmin;
INSERT INTO testb VALUES('B');
commit;
connect STRMADMIN/streams@hora10r24;
DECLARE
iscn NUMBER; -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@hora10r242.uk.oracle.com(
source_object_name => 'test.testb',
source_database_name => 'hora10r24.uk.oracle.com',
instantiation_scn => iscn);
END;
/
connect STRMADMIN/streams@hora10r242;
begin
dbms_apply_adm.start_apply('STREAMS_APPLY');
end;
/
connect test/test@hora10r24
INSERT INTO testb VALUES('B1');
commit;
connect sys/oracle@hora10r24 as sysdba
exec dbms_lock.sleep(30)
connect test/test@hora10r242
select * from testb;
spool off


相关产品

Oracle 数据库 > Oracle Server企业版

关键字

DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER; DBMS_APPLY_ADM.STOP_APPLY; DBMS_STREAMS_ADM.ADD_TABLE_RULES; DBMS_APPLY_ADM.START_APPLY; DBMS_CAPTURE_ADM.START_CAPTURE; STREAMS; INSTANTIATION




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论