Oracle Stream 深入探讨

一、Oracle 高可用性(high Availability)的几种技术架构
从oracle9i开始,出现在oracle高可用性上的几种技术架构分别是:
1) 高级复制(Advanced Replication)
2) 数据保护(Data Guard)Oracle Standby Database
3) RAC(Oracle Real Application Clusters)
4) Oracle Parallel Server
5) Oracle Server HA
6) Oracle 流(Oracle Stream)
7) MV/RMAN/Log Miner/Flashback query


其中Oracle Stream在9iR2中开始提供,在10gR1和R2中得到很大的强化和扩展。从oracle的技术路线中可以看出,Stream将会是Oracle以后主推的一个技术热点,因为Stream有以下的优势。
A. 实现的技术框架较高级复制(advanced Replication)更先进,不是基于数据库级的触发器,而是采用对日志(Redo Log)的挖掘能力。
B. 对数据库资源利用比较少,这个特性在10g支持DownStream后更明显。
C. 远程备份,特别是Internet级的远程备份成为可能。
D. 由于Stream的Capture可以是Table/Rule/Database三种级别,使得Stream可以扩展出很多应用出来。甚至作为一个ETL的可选方案,也是非常不错的。
E. 当采用Table级的Stream时,可在rule上配置应用的DDL和DML,比起Data guard必须全库同步,就有了很大的优势。(其实Data Guard的logical standby Database在底层的实现技术细节上和Real-Time DownStream是非常相似的)


Oracle Stream可能派生出来的应用。
A. 最传统的应用,当然是作为远程的数据库备机。Stream的高效、实时、低耗的特点非常适用于这种应用。唯一不足的是其稳定性比起Standby Database来说还是要差一些,但作为Oracle主推的技术来说,我们可以看到在每一个Release版本中都有很大的改进。
B. 在Slave Database上,可以将应用系统的查询、统计、报表等非写操作移植过来,以分担Master机器的性能。
C. 将应用分布到多个数据库中。这种应用中,Master Database负责基础数据的读写数据库(例如机构信息、人员信息等各个业务都需要的数据),通过Stream Database将数据实时同步到多个Slave Database上,每个Slave Database上进行其它业务的数据读写操作。
D. ETL过程,将数据从业务数据库上迁移到ODS上。
二、Simple Oracle Stream
Simple Oracle Stream 是在9iR2中开始提供的技术,在10g中,其性能、配置、稳定性等得到很大的提高。
1.Simple Oracle Stream的框架
整体框架如下图所示:
 
Stream过程包括三个主要的环节,如图所示
 
² Capture:是指对数据库的DDL 和DML的变化捕获的环节。
² Staging:数据准备过程,这个环境还包括了一个重要的过程,Propagation数据传播过程。
² Consumption:数据消费过程。
Capture过程

Capture过程的底层原理如图所示。


 
用户提交的数据变化应用到数据库对象上,同时引起了Redo Log的变化(首先是Online Redo Log,对于归档模式运行的数据库,随后这些变化写入Archived Redo Log中。),然后Capture 进程捕获重做日志的变化,形成LCR记录,进入到高级队列(AQ)对象中。
Staging 过程和Propagation过程
LCR记录进入AQ后,其实就完成了Staging的过程,更为重要的是Propagation传播过程。
 
Propagation过程其实就是从源高级队列到目标高级队列的传播。这里需要注意的是,可以是一个源到多个目标的传播。
Consumption过程
 
Consumption过程其实是目标AQ中接收到的LCR记录被还原成为各种数据库操作动作,然后应用于目标数据库中,以达到目标数据库与源数据库执行同样操作的目的。
2.Simple Oracle Stream配置实例
源数据库:Master Database 目标数据库:Slave Database
操作系统环境及数据库环境
Master:
Slave:
三、DownStream
DownStream 是在10gR2中提供的一种新型的Stream配置,其实可以看作是Local Capture到Remote Capture和Remote Propagation到DownStream Capture的转变(当然,在技术细节上,local 到Remote的转变绝不是一个单词改变那么简单了。)。采用DownStream可以解决在Simple Stream中出现的一些问题,并大大提高了Stream的部署灵活性。
DownStream的优势:
a) 通过DownStream Database来完成Capture和Propagation,大大减轻了源数据库的资源消耗。
b) 部署更加灵活,在大型环境中可设置一个DownStream Database的专用数据库服务器,来承担上诉的两个过程,向多个源数据库传播LCR记录。在资源比较少的应用中,则可将DownStream Database和Slave Database部署在同一个服务器上。
c) 减少了由于Master Database故障导致的AQ阻塞情况。


DownStream 同样分为两种模式,分别是:
*Archive-Log DownStream(仅归档日志的DownStream)
 
用户改变写入数据对象,LGWR进程将改变写入Online Redo Log。ARCn写入归档日志,归档日志传入DownStream Database,然后在DownStream Database上进行Capture过程。

*Real-time DownStream(实时的DownStream)
 
用户改变写入数据对象,LGWR进程将改变写入Online Redo Log。同时将变化传入DownStream Database的Standby Redo log,然后在DownStream Database上进行Capture过程。

两种模式的区别在于前者向DownStream Database传递的是archived Redo log(这就难免有数据延迟),而后者则是传递的Online Redo log(最大程度的保障了数据实时,使用的底层技术其实和Logical Standby Database其实是非常相象的。)
DownStream配置实例
源数据库:Master Database DownStream数据库和目标数据库(一体):DownStream Database
1.操作系统环境及数据库环境
Master: Oracle 10g 10.2.0.3
DownStream : Oracle 10g 10.2.0.3
2.创建专用用户/表空间/授权
在 Simple Stream模式中,需要在Master和Slave Database上完成同样的动作,在DownStream模式中需要在Stream Database和Slave Database上完成这些动作,因在测试环境中将Stream Database和Slave Database放在一台机器上,因此只需要配置一次即可。


create tablespace stream_ts datafile ' D:\database\oracle\product\10.2.0\oradata\orcl\stream_ts.dbf'
size 100m autoextend on maxsize unlimited segment space management auto;


execute dbms_logmnr_d.set_tablespace('stream_ts');


create user strmadmin identified by strmadmin default tablespace stream_ts temporary tablespace temp;


grant connect,resource,dba,aq_administrator_role to strmadmin;


begin
dbms_streams_auth.grant_admin_privilege(
grantee => 'strmadmin',
grant_privileges => true);
end;
/
3.配置网络 (tnsnames.ora)
4.创建Database link
在Master Database和Slave Database分别用 sys 和 strmadmin身份创建Database link,这里需要注意的是,由于在init parameter中设置了global_names=true因此,因此在dblink中,名称一定要和global_name一致。
设置global_name的语句如下:


alter database rename global_name to master.sagacityhr.com


alter database rename global_name to downstream.sagacityhr.com


创建database link的语句如下
create database link downstream.sagacityhr.com connect to sys identified by sys using 'downstream';


create database link master.sagacityhr.com connect to strmadmin identified by strmadmin using 'master';
创建完毕后可以使用下面的语句来测试连通。Select * from dual@master
5.初始化参数配置
这部分配置主要包括对Oracle Parameter的调整,具体调整的参数如下:

alter system set aq_tm_processes=2 scope=both;
alter system set global_names=true scope=both;
alter system set undo_retention=3600 scope=both;
alter system set job_queue_processes=10 scope=both;
alter system set parallel_max_servers=20 scope=both;
alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;
alter system set streams_pool_size=100M scope=spfile;
alter system set open_links=4 scope=spfile;


还有下面几个参数,只在DownStream下才会用到,但是非常重要,分别是
LOG_ARCHIVE_CONFIG 
其中,Master Database修改为 send, DownStream Database修改为receive
alter system set LOG_ARCHIVE_CONFIG ='send' scope=both;
alter system set LOG_ARCHIVE_CONFIG ='receive' scope=both;
LOG_ARCHIVE_DEST_n  
这个参数设置最为复杂,对于archive-log模式和real-time模式均不相同,而且Master Database 服务器和DownStream Database设置均不相同。
archive-log模式


real-time模式
Master Database:
Alter system set LOG_ARCHIVE_DEST_2='SERVICE=DOWNSTREAM LGWR ASYNC OPTIONAL NOREGISTER VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)' scope=both;


DownStream Database:
Alter system set LOG_ARCHIVE_DEST_2='LOCATION=D:\database\oracle\product\10.2.0\arc_dest  MANDATORY VALID_FOR=(STANDBY_LOGFILE,PRIMARY_ROLE)' scope=both;
LOG_ARCHIVE_DEST_STATE_n
均设置为enable
Alter system set LOG_ARCHIVE_DEST_STATE_2=enable scope=both;
6.修改系统为归档模式
对于Real-time DownStream来说,Master Database和DownStream Database都必须运行在archive log mode下。如果仅仅是配置Archive-log DownStream,则DownStream Database可以不用运行在archived log mode。参见以下的原文:
For downstream capture processes, the downstream database also must run in ARCHIVELOG mode if you plan to configure a real-time downstream capture process. The downstream database does not need to run in ARCHIVELOG mode if you plan to run only archived-log downstream capture process on it.
切换为Archive log mode的方式如下:
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
7.在DownStream Database上增加 Standby Log组
在DownStream Database上增加standby log组。需要注意的是,Standby log组的文件大小应该>=Master Database上的online Redo log组的文件大小,同时,组的数量应该至少多于Master Database 的online redo log组数量。创建standby log组的时候,group n其中n计数从系统中已有的online redo log group的最大值+1开始。查询系统中现有的online redo log组
select * from v$log;
新的group ID大于字典中查询出来的最大ID。新增standby redo log组


ALTER DATABASE ADD STANDBY LOGFILE GROUP 5
   ('D:\database\oracle\product\10.2.0\dbs\slog5a.rdo', 'D:\database\oracle\product\10.2.0\dbs\slog5b.rdo') SIZE 100M;
8.检查日志传输服务是否成功
这一步配置完毕后,如果配置中没有出现问题,则日志传输服务应该可以正常运行了。检查downstream database的LOG_ARCHIVE_DEST _2中给出的文件路径中是否有远程数据库服务器写入的文件。


也可以在Master Database上执行  alter system archive log current;命令执行完后,如果在DownStream Database的接收目录中看到有同一时刻的新文件,并且standby redo log的修改时间也变了的话,证明日志传输服务没有问题,则可以开始后面的配置,后面的配置与simple stream的配置就是一致的了。
9.创建queue
需要创建一个捕获queue和一个apply queue
begin
  dbms_streams_adm.set_up_queue(
  queue_table => 'downstream_queue_table',
  queue_name => 'downstream_queue');
  end;
/


begin
  dbms_streams_adm.set_up_queue(
  queue_table => 'apply_queue_table',
  queue_name => 'apply_queue');
  end;
/




可用下面的语句删除queue
begin
  dbms_streams_adm.remove_queue(
  queue_name => 'downstream_queue');
end;
/
10.创建Capture进程
BEGIN
  DBMS_CAPTURE_ADM.CREATE_CAPTURE(
    queue_name         => 'strmadmin. downstream_queue ',
    capture_name       => ' real_time_capture ',
    rule_set_name      => NULL,
    start_scn          => NULL,
    source_database    => 'master',
    use_database_link  => true,
    first_scn          => NULL,
    logfile_assignment => 'implicit');
END;
/
设置进行设置Capture
BEGIN
  DBMS_CAPTURE_ADM.SET_PARAMETER(
    capture_name => 'real_time_capture',
    parameter    => 'downstream_real_time_mine',
    value        => 'y');
END;
/
11.创建捕获规则
这里可分别捕获table/schema/global。语法如下:add_table_rules/add_schema_rules/add_gloab_rules


BEGIN 
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name          =>  'hrms.hr_personbaseinfo',
    streams_type        =>  'capture',
    streams_name        =>  'real_time_capture',
    queue_name          =>  ' downstream_queue',
    include_dml         =>  true,
    include_ddl         =>  true,
    include_tagged_lcr  =>  false,
    source_database     =>  'master',
    inclusion_rule      =>  true);
END;
/
清除这些配置使用语句
BEGIN 
  DBMS_STREAMS_ADM.remove_streams_configuration();
END;
/
12.创建传播(propagation)进程
传播进程需要对应捕获规则分别创建table/schema/global的传播进程。
Begin
dbms_streams_adm.add_table_propagation_rules(
table_name            => 'hrms.hr_personbaseinfo',
streams_name           => ' propagation ',
source_queue_name      => ' downstream_queue',
destination_queue_name => 'apply_queue',
include_dml            => true,
include_ddl            => true,
include_tagged_lcr     => false,
source_database        => 'master',
inclusion_rule         => true);
end;
/
13.创建应用规则
begin
dbms_streams_adm.add_table_rules(
table_name        => ' hrms.hr_personbaseinfo',
streams_type       => 'apply',
streams_name       => 'apply_capture',
queue_name         => 'apply_queue',
include_dml        => true,
include_ddl        => true,
include_tagged_lcr => false,
source_database    => 'master',
inclusion_rule     => true);
end;
/
14.启动Stream
#启动Apply进程
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_linux');
end;
/




#启动Capture进程
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_aix');
end;
/




Alter database clear unarchived logfile group n


 

PREPARE_SCHEMA_INSTANTIATION

keys                

The procedure enables supplemental logging for primary key, unique key, bitmap index, and foreign key columns in the tables in the schema being prepared for instantiation and for any table added to this schema in the future. Primary key columns are logged unconditionally. Unique key, bitmap index, and foreign key columns are logged conditionally.

PREPARE_SCHEMA_INSTANTIATION

all

The procedure enables supplemental logging for all columns in the tables in the schema being prepared for instantiation and for any table added to this schema in the future. The columns are logged unconditionally.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值