一. 在源库和目标库分别建立对应的用户和表空间
使用表级别复制时,需要事先在源库和目标库建立相应的表空间和相应的用户,否则stream配置将无法初始化。
1.在源库和目标库创建用于复制的表空间
CREATE TABLESPACE infogrid DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORAC01\INFOGRID.DBF' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
2.在源库和目标库创建用于复制的用户
create user infogrid identified by infogrid default tablespace infogrid;
3. 在源库创建用于测试复制用的表
test1、test2、test3、test4…
在表中插入测试数据。
二. 在源库和目标库初始化用于stream复制的环境
1. 设置初始化参数
--COMPATIBLE 大于等于 10.2.0,目标库的值必须大于等于源库的值
--GLOBAL_NAMES 两边设置为:true,db_link的名字必须和链接库的global_name相同
--JOB_QUEUE_PROCESSES 大于等于 2,以支持消息传播队列
--AQ_TM_PROCESSES 大于等于 2,在有队列的streams数据库上需要配置队列进程
--STREAMS_POOL_SIZE 设置足够大小
--LOG_ARCHIVE_CONFIG 在使用downstream的时候需要配置DB_UNIQUE_NAME
--LOG_ARCHIVE_DEST_n 在使用 downstream时,至少需要针对downstream目标设置一个路径
--LOG_ARCHIVE_DEST_STATE_n 使用downstream时,需要将对应的归档路径设置为可用
--OPEN_LINKS 使用stream时,必须将这个值大于等于4
--PARALLEL_MAX_SERVERS 设置一个适合的值
--PROCESSES 保证进程够用
--SESSIONS 回话数保证够用
--SGA_MAX_SIZE 设置足够大小
--SGA_TARGET 设置足够大小
--SHARED_POOL_SIZE 设置足够大小
--TIMED_STATISTICS 设置为:true
--UNDO_RETENTION 设置为最小3600,确保不出现"snapshot too old"
2. 为确保 stream复制的准确性,增加辅助日志信息
Alter database add supplemental log data(primary key,unique)columns;
3. 分别在源库和目标库创建database link,用于源库和目标库的信息交互;
CREATE DATABASE LINK orac02.com CONNECT TO strmadmin IDENTIFIED BY infogrid USING 'orac02';
CREATE DATABASE LINK orac01.com CONNECT TO strmadmin IDENTIFIED BY infogrid USING 'orac01';
三. 在源库执行初始化streams复制的脚本(本地捕获)
DECLARE
tables DBMS_UTILITY.UNCL_ARRAY;
BEGIN
tables(1) := 'infogrid.test1';
tables(2) := 'infogrid.test2';
tables(3) := 'infogrid.test3';
DBMS_STREAMS_ADM.MAINTAIN_TABLES(
table_names => tables,
source_directory_object => NULL,
destination_directory_object => NULL,
source_database => 'orac01.com',
destination_database => 'orac02.com',
perform_actions => true,
--script_name => 'configure_rep.sql',
--script_directory_object => 'SCRIPT_DIRECTORY',
bi_directional => true,
--当为true时为双向,false则为单向
include_ddl => true,
instantiation => DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK);
END;
/
四. 测试streams复制的有效性
1. 查看 streams相关进程的运行情况
select * from dba_capture;
select * from dba_propagation;
select * from dba_apply;
2. 测试streams配置是否在起作用
在源库的测试表中插入一些数据,并在目标库中查询,看是否也被同步到对应的目标库的数据库表中。
五. 删除streams的配置
1. 停止并删除streams相关进程。
begin
dbms_capture_adm.stop_capture(capture_name => 'capture_name');
dbms_capture_adm.drop_capture(capture_name => 'capture_name');
dbms_propagation_adm.stop_propagation(propagation_name => 'propagation_name');
dbms_propagation_adm.drop_propagation(propagation_name => 'propagation_name');
dbms_apply_adm.stop_apply(apply_name => 'apply_name');
dbms_apply_adm.drop_apply(apply_name => 'apply_name');
end;
2. 移除streams的整个配置
begin
dbms_streams_adm.remove_streams_configuration;
end;
3. 删除streams配置脚本相关数据
--查找相关失败的数据
select * from dba_recoverable_script_errors
--清楚或回滚这些数据
begin
dbms_streams_adm.recover_operation(script_id => 'FCC27F88BDDD4EA59645D08B43C34DC6',operation_mode => 'PURGE');
end;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23071790/viewspace-697816/,如需转载,请注明出处,否则将追究法律责任。