oracle 11g streams搭建

7 篇文章 0 订阅
7 篇文章 1 订阅
环境:
主数据库
操作系统:oracle linux 6.3
IP地址:192.168.137.81
数据库:Oracle 11.2.0.3.0
ORACLE_SID:sm1
Global_name:sm1

从数据库
操作系统:oracle linux 6.3
IP地址:192.168.137.82
数据库:Oracle 11.2.0.3.0
ORACLE_SID:sm2

Global_name:sm2

搭建步骤:

1、sm1、sm2 开启归档

SQL> startup mount;
SQL> ALTER DATABASE ARCHIVELOG;
2、sm1、sm2 配置数据库相关参数

SQL> alter system set aq_tm_processes=2 scope=both;

System altered.

SQL> alter system set global_names=true scope=both; 

System altered.

SQL> alter system set job_queue_processes=10 scope=both;

System altered.

SQL> alter system set parallel_max_servers=20 scope=both; 

System altered.

SQL> alter system set undo_retention=3600 scope=both;

System altered.

SQL> alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile; 

System altered.

SQL> alter system set streams_pool_size=25M scope=spfile;

System altered.

SQL> alter system set utl_file_dir='*' scope=spfile; 

System altered.

SQL> alter system set open_links=4 scope=spfile; 

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> startup
ORACLE instance started.

Total System Global Area  822579200 bytes
Fixed Size                  2232840 bytes
Variable Size             662703608 bytes
Database Buffers          155189248 bytes
Redo Buffers                2453504 bytes
Database mounted.
Database opened.
3、sm1、sm2 配置streams用户(注意:sm1、和sm2数据文件的路径要相应的修改)

SQL> create tablespace streams_tbs datafile '/u01/app/oracle/oradata/sm1/streams_tbs01.dbf' 
size 100m autoextend on 
next 1m maxsize unlimited;

Tablespace created.

SQL> create user stradmin identified by oracle default tablespace streams_tbs;

User created.

SQL> grant connect, resource, dba, aq_administrator_role to stradmin;

Grant succeeded.

SQL> begin
	dbms_streams_auth.grant_admin_privilege(
		grantee => 'stradmin',
		grant_privileges => true
	);
end;

PL/SQL procedure successfully completed.
4、配置监听

-- sm1库上的listener.ora
LISTENER = (
	DESCRIPTION_LIST = (
		DESCRIPTION = 
		(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.81)(PORT = 1521))
		(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
)

SID_LIST_LISTENER = (
	SID_LIST = (
		SID_DESC =
			(GLOBAL_DBNAME = sm1)
			(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
			(SID_NAME=sm1)
	)
)
ADR_BASE_LISTENER = /u01/app/oracle

-- sm1库上的tnsname.ora
sm1 = (
	DESCRIPTION = (
		ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.81)(PORT = 1521)
	)
    (CONNECT_DATA =
		(SERVER = DEDICATED)
		(SERVICE_NAME = sm1)
	)
)

sm2 = (
	DESCRIPTION = (
		ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.82)(PORT = 1521)
	)
    (CONNECT_DATA =
		(SERVER = DEDICATED)
		(SERVICE_NAME = sm2)
	)
)


-- sm2库上的listener.ora
LISTENER = (
	DESCRIPTION_LIST = (
		DESCRIPTION = 
		(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.82)(PORT = 1521))
		(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
)

SID_LIST_LISTENER = (
	SID_LIST = (
		SID_DESC =
			(GLOBAL_DBNAME = sm2)
			(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
			(SID_NAME=sm2)
	)
)
ADR_BASE_LISTENER = /u01/app/oracle

-- sm2库上的tnsname.ora
sm1 = (
	DESCRIPTION = (
		ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.81)(PORT = 1521)
	)
    (CONNECT_DATA =
		(SERVER = DEDICATED)
		(SERVICE_NAME = sm1)
	)
)

sm2 = (
	DESCRIPTION = (
		ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.82)(PORT = 1521)
	)
    (CONNECT_DATA =
		(SERVER = DEDICATED)
		(SERVICE_NAME = sm2)
	)
)
5、  在主库(sm1)上面启用 supplemental log

SQL> ALTER DATABASE FORCE LOGGING;

Database altered.

SQL> alter database add supplemental log data; 

Database altered.

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN,
	SUPPLEMENTAL_LOG_DATA_PK, 
	SUPPLEMENTAL_LOG_DATA_UI,
	SUPPLEMENTAL_LOG_DATA_ALL 
FROM V$DATABASE;

SUPPLEME SUP SUP SUP
-------- --- --- ---
YES      NO  NO  NO
6、创建db link

-- sm1
SQL> conn stradmin/oracle
Connected.

SQL> create database link sm2 connect to stradmin identified by oracle using 'sm2';

Database link created.

-- sm2
SQL> conn stradmin/oracle
Connected.

SQL> create database link sm1 connect to stradmin identified by oracle using 'sm1';

Database link created.
7、创建队列流

-- 创建主库队列流(sm1)
SQL> conn stradmin/oracle
Connected.

SQL> exec dbms_streams_adm.set_up_queue(queue_table => 'sm1_queue_table', queue_name => 'sm1_queue')

PL/SQL procedure successfully completed.

-- 创建从库队列流(sm2)
SQL> conn stradmin/oracle
Connected.

SQL> exec dbms_streams_adm.set_up_queue(queue_table => 'sm2_queue_table', queue_name => 'sm2_queue')

PL/SQL procedure successfully completed.
8、创建示例用户用于测试

-- 主库上操作
--在sm1上创建表空间
SQL> CREATE TABLESPACE chenhao
DATAFILE '/u01/app/oracle/oradata/sm1/chenhao01.dbf' SIZE 300M AUTOEXTEND ON NEXT 8M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

Tablespace created.
--在sm1上创建用户
SQL> create user chenhao identified by oracle
default tablespace chenhao
temporary tablespace tempts1
profile DEFAULT;

User created.

SQL> grant connect, resource to chenhao;

Grant succeeded.

-- 从库上操作
--在sm2上创建表空间
SQL> CREATE TABLESPACE chenhao
DATAFILE '/u01/app/oracle/oradata/sm2/chenhao01.dbf' SIZE 300M AUTOEXTEND ON NEXT 8M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

Tablespace created.
--在sm2上创建用户
SQL> create user chenhao identified by oracle
default tablespace chenhao
temporary tablespace tempts1
profile DEFAULT;

User created.

SQL> grant connect, resource to chenhao;

Grant succeeded.
9、在主库上(sm1)创建捕获进程

QL> connect stradmin/oracle 
Connected.

begin
	dbms_streams_adm.add_schema_rules(
		schema_name => 'chenhao',
		streams_type => 'capture',
		streams_name => 'capture_sm1',
		queue_name => 'stradmin.sm1_queue',
		include_dml => true,
		include_ddl => true, 
		include_tagged_lcr => false,
		source_database => null,
		inclusion_rule => true
	);
end;
/

PL/SQL procedure successfully completed.
10、实例化复制数据库

--导出主库(sm1)chenhao schema数据
[oracle@sm1 ~]$ exp userid=chenhao/oracle@sm1 file='/home/oracle/chenhao.dmp' object_consistent=y rows=y

Export: Release 11.2.0.3.0 - Production on Tue Jul 29 15:51:36 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
. exporting pre-schema procedural objects and actions
. exporting foreign function library names for user CHENHAO 
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions for user CHENHAO 
About to export CHENHAO's objects ...
. exporting database links
. exporting sequence numbers
. exporting cluster definitions
. about to export CHENHAO's tables via Conventional Path ...
. exporting synonyms
. exporting views
. exporting stored procedures
. exporting operators
. exporting referential integrity constraints
. exporting triggers
. exporting indextypes
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting statistics
Export terminated successfully without warnings.

-- 导入刚刚导出的数据到从库(sm2)的chenhao schema中
[oracle@sm1 ~]$ imp userid=chenhao/oracle@sm2 file='/home/oracle/chenhao.dmp' ignore=y commit=y log='/home/oracle/chenhao.log' streams_instantiation=y fromuser=chenhao touser=chenhao

Import: Release 11.2.0.3.0 - Production on Tue Jul 29 15:53:06 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.02.00 via conventional path
import done in US7ASCII character set and AL16UTF16 NCHAR character set
Import terminated successfully without warnings.
11、创建传播进程

--在主库的操作(sm1)
SQL> connect stradmin/oracle 
Connected.

SQL> begin 
	dbms_streams_adm.add_schema_propagation_rules( 
		schema_name => 'chenhao', 
		streams_name => 'sm1_to_sm2', 
		source_queue_name => 'stradmin.sm1_queue', 
		destination_queue_name => 'stradmin.sm2_queue@sm2', 
		include_dml => true, 
		include_ddl => true, 
		include_tagged_lcr => false, 
		source_database => 'sm1', 
		inclusion_rule => true
	); 
end;
/

PL/SQL procedure successfully completed.

--修改propagation休眠时间为5,表示实时传播LCR(logical change recoder)。
SQL> begin
	dbms_aqadm.alter_propagation_schedule(
		queue_name => 'sm1_queue',
		destination => 'sm2',
		destination_queue => 'sm2_queue',
		latency => 5
	);
end;
/

PL/SQL procedure successfully completed.
12、创建应用进程 

--从库(sm2)上操作
SQL> conn stradmin/oracle
Connected.

SQL> begin 
	dbms_streams_adm.add_schema_rules( 
		schema_name => 'chenhao', 
		streams_type => 'apply', 
		streams_name => 'apply_sm2', 
		queue_name => 'stradmin.sm2_queue', 
		include_dml => true, 
		include_ddl => true, 
		include_tagged_lcr => false, 
		source_database => 'sm1', 
		inclusion_rule => true
	); 
end; 
/

PL/SQL procedure successfully completed.
13、启动STREAM

--以stradmin身份,登录从数据库(sm2)。 
SQL> conn stradmin/oracle
Connected.

--启动Apply进程
SQL> exec dbms_apply_adm.start_apply(apply_name => 'apply_sm2')

PL/SQL procedure successfully completed.

--以stradmin身份,登录主数据库(sm1)。 
SQL> conn stradmin/oracle
Connected.

--启动Capture进程
SQL> exec dbms_capture_adm.start_capture(capture_name => 'capture_sm1');

PL/SQL procedure successfully completed.
14、测试

--在主库上操作(sm1)
SQL> conn chenhao/oracle
Connected.
SQL> create table t1(id number, name varchar2(10));

Table created.

SQL> insert into t1 values(1, 'AAA');

1 row created.

SQL> insert into t1 values(2, 'BBB');

1 row created.

SQL> insert into t1 values(3, 'CCC');

1 row created.

SQL> commit;

Commit complete.

--从库上操作(sm2)
SQL> desc t1;
 Name     Null?    Type
 -------- -------- --------------
 ID                NUMBER
 NAME              VARCHAR2(10)

SQL> select * from t1;

        ID NAME
---------- ----------
         1 AAA
         2 BBB
         3 CCC
15、停止stream

--以stradmin, 登陆主库(sm1)
SQL> conn stradmin/oracle
Connected.

SQL> exec dbms_capture_adm.stop_capture(capture_name => 'capture_sm1')

PL/SQL procedure successfully completed.

--以stradmin, 登陆从库(sm2)
SQL> conn stradmin/oracle
Connected.

SQL> exec dbms_apply_adm.stop_apply(apply_name => 'apply_sm2')

PL/SQL procedure successfully completed.
16、清除所有配置(注意在清除钱要先停止stream)

--以stradmin身份,登录主数据库(sm1)。 
SQL> conn stradmin/oracle
Connected.

SQL> exec DBMS_STREAMS_ADM.remove_streams_configuration(); 

PL/SQL procedure successfully completed.

--以stradmin身份,登录从数据库(sm2)。 
SQL> conn stradmin/oracle
Connected.

SQL> exec DBMS_STREAMS_ADM.remove_streams_configuration();

PL/SQL procedure successfully completed.
大功告成!~









  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值