Stream技术总结及11gR2 Stream Replication同步复制实验(SCHEMA&TABLE)

本文介绍了Oracle Stream的特点及其与OGG的区别,详细阐述了一个11gR2 Stream Replication同步复制实验,包括准备阶段、参数配置、进程管理、数据验证等步骤。实验涵盖了数据库链接、初始化参数设置、队列创建、捕获与应用进程、传播进程的启动和停止,以及数据同步验证。通过实验展示了Stream在数据库间复制和同步数据的过程。
摘要由CSDN通过智能技术生成

一、Stream技术特点及与OGG产品的主要区别


Stream和OGG都可作为高可用环境中用于复制并同步数据的解决方案。Stream是自9i以来,Oralce数据库提供的一种功能,主要是Oracle的消息队列(也叫Oracle Advanced Queue)技术的一种扩展应用,流复制(Stream replication)只是基于它的一个数据共享技术。不同的是,OGG作为原来的第三方软件,自从被oracle收购并加以改进以后,其功能上较Stream而言则更加完善,配置也更方便。它们都可以用于Oralce与Oralce或Oracle与非Oracle数据库之间的同步,但在复制机制上,还是存在不少区别的,主要有以下几点:

 

1.Stream由于是基于消息队列的,所以在同步复制数据库前,源和目标端必须都要配置一个队列Queue,再配置相关的capture,propagation,apply进程,并且还需要配置DB LINK,而OGG只需要配置extract,pump,replicat就可以满足复制条件。

 

2.Stream采用的是内部进程,即采用Oralce数据库提供的包和存储过程来配置进程,而OGG是需要另外安装软件,由软件来提供的参数命令来配置相关工作进程。

 

3.Stream采用的复制机制是类似与在DG中LOGICALSTANDBY的方式,即利用LOGMINER,对复制到目标端的log日志数据文件进行挖掘分析,然后重新执行SQL语句来达到同步数据的目的,使用的是自己特有的一种格式——LCR。Stream需要把日志文件全部通过队列复制到目标端,而不管是否是提交的数据,最后再过滤掉未提交的数据,应用提交数据,由于捕获的日志非常多(可能是大量无效数据,实时同步时,如果全部取消提交的话),对源端数据库会造成一定的影响,且有较高的网络依赖性,效率不高。而ogg则是采用自己的方式,通过抽取源端日志中已提交的事务,传送到目标端后直接应用,由于抽取的数据量较之Stream要少很多,所以效率要高,据官方称,理论上可以达到亚秒级别。

 

4.Stream由于是把Commited和Uncommited的数据都复制到源端,应用的时候只能采用SCN的顺序,而OGG因为复制的都是Commited的数据,在目标端也是以Commit的顺序应用的。这是它们之间在数据应用时的一大区别。

 

5.Stream作为数据库组件之一,其工作时需要用到数据库SGA分配的内存,还要建立StreamPool,占用了一定的数据库资源,而OGG由于是第三方软件,用的是OS分配的内存,对数据库的影响很有限。

 

6.最后一点区别和机制无关,但是也得提一下,鉴于ogg动辄百万的昂贵的价格,如果只是执行复制Schema或Table等简单操作,Stream完全可以胜任,在能够以不花钱又能完成相同的任务的前提下,首选的当然是简单又好用的Stream了。由于这两种软件在所实现的功能上差异性并不大,考虑到商业因素,将来Oralce一定是大力发展OGG,据我所知,目前Oralce已经停止对Stream的更新了。

 

Stream用于Oralce数据库之间的数据复制,包括database,schema,table,数据仓库加载等,它也能支持异构平台(需要oracle gateway支持),参与复制的每个数据库可以读写,提供数据保护,但是Stream在容灾方面相对于OGG而言要弱一点,适合用于作为数据共享的应用方式,可以利用Stream复制几个从库,从库可用于查询、报表等。


二、STREAM REPLICATION实验


环境:    11.2.0.3 + OEL5.7

源端:    主机名:zlm 192.168.1.55 SID:zlm11gGLOBAL NAME:zlm11g

目标端:主机名:stream192.168.1.65 SID:strmtargetGLOBAL NAME:strmtarget

 

1.StreamsReplication准备阶段

1.1 在源端和目标端配置STREAM管理员用户

SQL> create tablespace streams_tbsdatafile '/u01/app/oracle/oradata/zlm11g/streams_tbs.dbf'size 25mreuse autoextend on maxsize unlimited;

SQL> create user strmadmin identified bystrmadmin default tablespace streams_tbsquotaunlimited on streams_tbs;

SQL> grant dba to strmadmin;

SQL> begin

  dbms_streams_auth.grant_admin_privilege(

   grantee          =>'strmadmin',   

   grant_privileges => TRUE);

end;

/


1.2 配置源端和目标端的listener.ora和tnsnames.ora(用netca自动生成)

--源端listener.ora

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = zlm)(PORT = 1521))

     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )

 

ADR_BASE_LISTENER= /u01/app/oracle

 

--目标端listener.ora

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = stream)(PORT = 1521))

     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )

 

ADR_BASE_LISTENER= /u01/app/oracle

 

--源端和目标端的tnsnames.ora内容一致,如下

STRMTARGET =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = stream)(PORT = 1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = strmtarget)

    )

  )

 

ZLM11G =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = zlm)(PORT = 1521))

    )

   (CONNECT_DATA =

     (SERVICE_NAME = zlm11g)

    )

  )


1.3 配置网络连接和DatabaseLink

SQL> conn strmadmin/strmadmin@zlm11g

SQL> create database link strmtarget connect to strmadmin identified by strmadminusing 'strmtarget';

 

注意:如果db_domain值为空,并且global names设置为true的情况下,那么这里connect to关键词前面的这个“strmtarget”必须写目标端global_name的值,而using关键词后面的“strmtarget”表示的是连接目标端的SERVICE NET NAME

 

查询数据库中已有哪些DBLINK可以查询:

SQL> col owner for a15

SQL> col db_link for a15

SQL> col host for a15

SQL> select owner,db_link,host from all_db_links;


1.4 源端确认启用归档模式

SQL> conn /as sysdba

SQL> archive log list

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;


1.5 设置与STREAM相关的初始化参数

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

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

SQL> alter system set streams_pool_size=25Mscope=spfile;


1.5.1 关于global_name参数:

To use Oracle Streams to share informationbetween databases, set this parameter to true at each database that isparticipating in your Oracle Streams environment.

官方建议设置为true,并且建立DATABASE LINK的时候名字必须为目标端数据库的GLOBALE NAME,如:create database linkstrmtarget connnect to strmadmin identified bystrmadmin using 'strmtarget';

前一个"strmtarget"为目标端数据库的globalname,后一个"strmtarget"为目标端数据库的net service name,这里创建目标端数据库时用了同一个名称,要注意,可以不同

 

    查询数据库的global name,可以执行:select * from global_name;但global_name只是一个视图,源自系统表sys.props$的global_db_name的value值,如果用alter database rename global_name to orcl;修改并无效果的话,可以尝试修改系统的sys.props$基表global_db_name属性值,语句如下:

SQL> conn /as sysdba

SQL> update sys.props$t set t.value='orcl' where t.name='global_db_name';

SQL> commit;


1.5.2 关于undo_retesion参数:

If you run one or more capture processesand you are unsure about the proper setting, then try setting this parameter toat least 3600. If you encounter "snapshottoo old" errors, then increase the setting for this parameter until theseerrors cease. Ensure that the undo tablespace has enough space to accommodate theUNDO_RETENTION setting.

如果使用stream,undo_retention至少达到3600以上,并且保证有足够的undo表空间


1.5.3 关于streams_pool_size参数:

Specifies (in bytes) the size of the OracleStreams pool. The Oracle Streams pool contains buffered queue messages. Inaddition, the Oracle Streams pool is used for internal communications duringparallel capture and apply.

    该参数默认值为0,如果MEMORY_TARGET或MEMORY_MAX_TARGET设置为非零,那么由AMM设置具体的值,该参数决定最小值;如果SGA_TARGET设置为非零,那么由ASMM设置具体的值,该参数决定最小值

 

15 MB for each capture process parallelism

250 MB or more for eachbuffered queue. The buffered queue is where the buffered messages arestored.

1 MB for each applyprocess parallelism

1 MB for each XStream outbound server

1 MB for each XStream inbound serverparallelism

For example, if parallelism is set to 3 fora capture process, then at least 45 MB is required for the capture process. Ifa database hastwo buffered queues, thenat least 20 MB is required for the buffered queues. Ifparallelism is set to 4 for an apply process, then at least 4 MB is requiredfor the apply process.

You can use the V$STREAMS_POOL_ADVICEdynamic performance view to determine an appropriate setting for thisparameter.

 

根据官方给的建议,这里给了最低的配置15M+10M=25M,不过有趣的是,当我设置为25M时,默认还是分配到了28M,相当于15+10+1+1+1=28M,不知道是否按照这样的规律。

 

NAME                                 TYPE        VALUE

----------------------------------------------- ------------------------------

streams_pool_size                    big integer 28M

 

另外,这里的“250 MBor more for each buffered queue.”我怀疑是写错了,因为根据后面的example里写的“two buffered queues, then at least 20 MB”,所以我判断,"250M"应该是"10M",如果一个buffer queue就要250M,那SGA内存就消耗太大了,不符合实际情况。需要注意的是,在生产环境中,如果该参数的值设置得太小,可能会造成进程都正常启动,但是无法同步


1.5.4 其他参数说明

以下3个参数只有在使用在downstream capture的情况下才需要配置,具体用法可以参考官方文档:

StreamsReplication Administrator's Guide——E10705-10

http://docs.oracle.com/cd/E11882_01/server.112/e10705/prep_rep.htm#i1007573

LOG_ARCHIVE_CONFIG

LOG_ARCHIVE_DEST_n

LOG_ARCHIVE_DEST_STATE_n

 

关于compatible参数,要注意的是,目标端的版本一定要大于源端的

 

另外,像很多需要在10g中配置的参数,11g中都不要求配置了,或者只用默认值就可以

alter system set aq_tm_processes=1scope=both;

alter system set job_queue_processes=10scope=both;

alter system set open_links=4scope=spfile;

alter system set statistics_level='TYPICAL'scope=both;

alter system set logmnr_max_persistent_sessions=1scope=spfile;

alter system set parallel_max_servers=20scope=both;

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

alter system set "_job_queue_interval"=1scope=spfile; --10g隐含参数,控制对job队列的检查频率,默认5


1.6 开启附加日志SUPPLEMENTALLOG

--表级添加

--无条件

ALTER TABLE hr.regions ADD SUPPLEMENTAL LOGDATA (PRIMARY KEY) COLUMNS;

ALTER TABLE hr.regions ADD SUPPLEMENTAL LOGDATA (ALL) COLUMNS;

ALTER TABLEhr.departments ADD SUPPLEMENTAL LOG GROUP log_group_dep_pk

 (department_id, manager_id) ALWAYS;

--有条件

ALTER TABLEhr.employees ADD SUPPLEMENTAL LOG DATA

 (UNIQUE, FOREIGN KEY) COLUMNS;

ALTER TABLEhr.jobs ADD SUPPLEMENTAL LOG GROUP log_group_jobs_cr

 (min_salary, max_salary);

--删除辅助日志

ALTER TABLE hr.jobs DROP SUPPLEMENTAL LOGGROUP log_group_jobs_cr;

 

--数据库级添加

ALTER DATABASEADD SUPPLEMENTAL LOG DATA

  (PRIMARY KEY, UNIQUE, FOREIGN KEY) COLUMNS;

ALTER DATABASEADD SUPPLEMENTAL LOG DATA

  (PRIMARY KEY, UNIQUE) COLUMNS;

AL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值