技术开发 频道

Step by step 配置Oracle Stream

  3 环境准备

  3.1 设定初始化参数

  使用pfile的修改init.ora 文件,使用spfile的通过alter system命令修改spile文件。主、

  从数据库分别执行如下的语句:

  Sqlplus ‘/ as sysdba’

  alter system set aq_tm_processes=2 scope=both;

  alter system set global_names=true scope=both;

  alter system set job_queue_processes=10 scope=both;

  alter system set parallel_max_servers=20 scope=both;

  alter system set undo_retention=3600 scope=both;

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

  alter system set streams_pool_size=25M scope=spfile;

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

  alter system set open_links=4 scope=spfile;

  执行完毕后重启数据库。

  3.2 将数据库置为归档模式

  设置log_archive_dest_1 到相应的位置;设定log_archive_start为TRUE,即启用自动归档功

  能;设定log_archive_format指定归档日志的命令格式。

  举例:

  sqlplus ‘/ as sysdba’

  alter system set log_archive_dest_1=’location=/yang/arch’ scope=spfile;

  alter system set log_archive_start=TRUE scope=spfile;

  alter system set log_archive_format=’ arch%t_%s_%r.arc’ scope=spfile;

  shutdown immediate;

  startup mount;

  alter database archivelog;

  alter database open;

  数据库置为归档模式后,可以按如下方式检验一下:

  SQL> archive log list

  Database log mode Archive Mode

  Automatic archival Enabled

  Archive destination /yang/arch

  Oldest online log sequence 534

  Next log sequence to archive 536

  Current log sequence 536

  观注标红的部分。

  3.3 创建stream 管理用户

  3.3.1 创建主环境stream管理用户

  #以sysdba 身份登录

  connect / as sysdba

  #创建主环境的Stream专用表空间

  create tablespace tbs_stream datafile '/yang/oradata/prod/tbs_stream01.dbf'

  size 100m autoextend on maxsize unlimited segment space management auto;

  #将logminer 的数据字典从system表空间转移到新建的表空间,防止撑满system表空间

  execute dbms_logmnr_d.set_tablespace('tbs_stream');

  #创建Stream管理用户

  create user strmadmin identified by strmadmin

  default tablespace tbs_stream temporary tablespace temp;

  #授权Stream管理用户

  grant connect,resource,dba,aq_administrator_role to strmadmin;

  begin

  dbms_streams_auth.grant_admin_privilege(

  grantee => 'strmadmin',

  grant_privileges => true);

  end;

  /

  3.3.2 创建从环境stream管理用户

  #以sysdba 身份登录

  connect / as sysdba

  #创建Stream专用表空间,我的从库用了ASM,这一步也可以参见3.3.1

  create tablespace tbs_stream datafile '+VGDATA/h10g/datafile/tbs_stream01.dbf'

  size 100m autoextend on maxsize unlimited segment space management auto;

  #同样,将logminer 的数据字典从system 表空间转移到新建的表空间,防止撑满system 表

  空间

  execute dbms_logmnr_d.set_tablespace('tbs_stream');

  #创建Stream管理用户

  create user strmadmin identified by strmadmin

  default tablespace tbs_stream temporary tablespace temp;

  #授权Stream管理用户

  grant connect,resource,dba,aq_administrator_role to strmadmin;

  begin

  dbms_streams_auth.grant_admin_privilege(

  grantee => 'strmadmin',

  grant_privileges => true);

  end;

  /

  3.4 配置网络连接

  3.4.1配置主环境tnsnames.ora

  主数据库(tnsnames.ora)中添加从数据库的配置。

  H10G =

  (DESCRIPTION =

  (ADDRESS_LIST =

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

  )

  (CONNECT_DATA =

  (SID = h10g)

  (SERVER = DEDICATED)

  )

  )

  3.4.2配置从环境tnsnames.ora

  从数据库(tnsnames.ora)中添加主数据库的配置。

  PROD =

  (DESCRIPTION =

  (ADDRESS_LIST =

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

  )

  (CONNECT_DATA =

  (SID = prod)

  (SERVER = DEDICATED)

  )

  )

  3.5 启用追加日志

  可以基于Database级别或Table级别,启用追加日志(Supplemental Log)。在建立根据Schema粒度进行复制的Oracle Stream 环境中,如果确认Schema 下所有Table 都有合理的主键(Primary Key),则不再需要启用追加日志。

  #启用Database 追加日志

  alter database add supplemental log data;

  #启用Table追加日志

  alter table add supplement log group log_group_name(table_column_name) always;

  3.6 创建DBlink

  根据Oracle 10gR2 Stream官方文档,针对主数据库建立的数据库链的名字必须和从数据库

  的global_name相同。

  如果需要修改global_name,执行“alter database rename global_name to xxx”。

  3.6.1创建主数据库数据库链

  #以strmadmin身份,登录主数据库。

  connect strmadmin/strmadmin

  #建立数据库链

  create database link h10g connect to strmadmin identified by strmadmin using 'h10g';

  3.6.2创建从数据库数据库链

  #以strmadmin身份,登录从数据库。

  connect strmadmin/strmadmin

  #建立数据库链

  create database link prod connect to strmadmin identified by strmadmin using 'prod';

  3.7 创建流队列

  3.7.1创建Master流队列

  #以strmadmin身份,登录主数据库。

  connect strmadmin/strmadmin

  begin

  dbms_streams_adm.set_up_queue(

  queue_table => 'prod_queue_table',

  queue_name => 'prod_queue');

  end;

  /

  3.7.2创建Backup流队列

  #以strmadmin身份,登录从数据库。

  connect strmadmin/strmadmin

  begin

  dbms_streams_adm.set_up_queue(

  queue_table => 'h10g_queue_table',

  queue_name => 'h10g_queue');

  end;

  /

  3.8 创建捕获进程

  #以strmadmin身份,登录主数据库。提醒一下,本文档以hr 用户做示例。

  connect strmadmin/strmadmin

  begin

  dbms_streams_adm.add_schema_rules(

  schema_name => 'hr',

  streams_type => 'capture',

  streams_name => 'capture_prod',

  queue_name => 'strmadmin.prod_queue',

  include_dml => true,

  include_ddl => true,

  include_tagged_lcr => false,

  source_database => null,

  inclusion_rule => true);

  end;

  /

  3.9 实例化复制数据库

  在主数据库环境中,执行如下Shell 语句。如果从库的hr 用户不存在,建立一个hr 的空用户。

  exp userid=hr/hr@prod file='/tmp/hr.dmp' object_consistent=y rows=y

  imp userid=system/manager@h10g file='/tmp/hr.dmp' ignore=y commit=y log='/tmp/hr.log'

  streams_instantiation=y fromuser=hr touser=hr

  3.10 创建传播进程

  #以strmadmin身份,登录主数据库。

  connect strmadmin/strmadmin

  begin

  dbms_streams_adm.add_schema_propagation_rules(

  schema_name => 'hr',

  streams_name => 'prod_to_h10g',

  source_queue_name => 'strmadmin.prod_queue',

  destination_queue_name => 'strmadmin.h10g_queue@h10g',

  include_dml => true,

  include_ddl => true,

  include_tagged_lcr => false,

  source_database => 'prod',

  inclusion_rule => true);

  end;

  /

  #修改propagation休眠时间为0,表示实时传播LCR。

  begin

  dbms_aqadm.alter_propagation_schedule(

  queue_name => 'prod_queue',

  destination => 'h10g',

  latency => 0);

  end;

  /

  3.11 创建应用进程

  #以strmadmin身份,登录从数据库。

  connect strmadmin/strmadmin

  begin

  dbms_streams_adm.add_schema_rules(

  schema_name => 'hr',

  streams_type => 'apply',

  streams_name => 'apply_h10g',

  queue_name => 'strmadmin.h10g_queue',

  include_dml => true,

  include_ddl => true,

  include_tagged_lcr => false,

  source_database => 'prod',

  inclusion_rule => true);

  end;

  /

  3.12 启动STREAM

  #以strmadmin身份,登录从数据库。

  connect strmadmin/strmadmin

  #启动Apply进程

  begin

  dbms_apply_adm.start_apply(

  apply_name => 'apply_h10g');

  end;

  /

  #以strmadmin身份,登录主数据库。

  connect strmadmin/strmadmin

  #启动Capture进程

  begin

  dbms_capture_adm.start_capture(

  capture_name => 'capture_prod');

  end;

  /

  3.13 停止STREAM

  #以strmadmin身份,登录主数据库。

  connect strmadmin/strmadmin

  #停止Capture进程

  begin

  dbms_capture_adm.stop_capture(

  capture_name => 'capture_prod');

  end;

  /

  #以strmadmin身份,登录从数据库。

  connect strmadmin/strmadmin

  #停止Apply进程

  begin

  dbms_apply_adm.stop_apply(

  apply_name => 'apply_h10g');

  end;

  /

  3.14 清除所有配置信息

  要清楚Stream配置信息,需要先执行3.13,停止Stream进程。

  #以strmadmin身份,登录主数据库。

  connect strmadmin/strmadmin

  exec DBMS_STREAMS_ADM.remove_streams_configuration();

  #以strmadmin身份,登录从数据库。

  connect strmadmin/strmadmin

  exec DBMS_STREAMS_ADM.remove_streams_configuration();

0
相关文章