ITPub博客

首页 > Linux操作系统 > Linux操作系统 > stream测试

stream测试

原创 Linux操作系统 作者:foxmile 时间:2008-08-23 21:18:48 0 删除 编辑
主数据库:
操作系统:windows xp pf sp2
IP地址:192.168.52.32
数据库:Oracle 10.2.0.3
ORACLE_SID:zero
Global_name:zero

从数据库:
操作系统:windows xp pf sp2
IP地址: 192.168.52.11
数据库:Oracle 10.2.0.3
ORACLE_SID:stream
Global_name: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 'D:\oracle\product\10.2.0\oradata\zero\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 'D:\oracle\product\10.1.0\oradata\stream\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)中添加从数据库的配置。
stream =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.11)(PORT = 1521))
)
(CONNECT_DATA =
(SID = stream)
(SERVER = DEDICATED)
)
)


3.4.2配置从环境tnsnames.ora
从数据库(tnsnames.ora)中添加主数据库的配置。
zero =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.32)(PORT = 1521))
)
(CONNECT_DATA =
(SID = zero)
(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 stream connect to strmadmin identified by strmadmin using 'stream';
3.6.2创建从数据库数据库链
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
#建立数据库链
create database link zero connect to strmadmin identified by strmadmin using 'zero';



3.7 创建流队列
3.7.1创建Master流队列
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.set_up_queue(
queue_table => 'zero_queue_table',
queue_name => 'zero_queue');
end;
/
3.7.2创建Backup流队列
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.set_up_queue(
queue_table => 'stream_queue_table',
queue_name => 'stream_queue');
end;
/


3.8 创建捕获进程
#以strmadmin身份,登录主数据库。提醒一下,本文档以test用户做示例。
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'test',
streams_type => 'capture',
streams_name => 'capture_zero',
queue_name => 'strmadmin.zero_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/


3.9 实例化复制数据库
在主数据库环境中,执行如下Shell 语句。如果从库的test 用户不存在,建立一个test 的空用
户。
exp userid=test/test@zero file=c:\test.dmp object_consistent=y rows=y
imp userid=system/sys@stream file=c:\test.dmp ignore=y commit=y log=c:\test.log streams_instantiation=y fromuser=test touser=test


3.10 创建传播进程
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'test',
streams_name => 'zero_to_stream',
source_queue_name => 'strmadmin.zero_queue',
destination_queue_name => 'strmadmin.stream_queue@stream',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'zero',
inclusion_rule => true);
end;
/


#修改propagation休眠时间为0,表示实时传播LCR。
begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'zero_queue',
destination => 'stream',
latency => 0);
end;
/


3.11 创建应用进程
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'test',
streams_type => 'apply',
streams_name => 'apply_stream',
queue_name => 'strmadmin.stream_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'zero',
inclusion_rule => true);
end;
/


3.12 启动STREAM
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
#启动Apply进程
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_stream');
end;
/


#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
#启动Capture进程
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_zero');
end;
/



3.13 停止STREAM
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
#停止Capture进程
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_zero');
end;
/
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
#停止Apply进程
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_stream');
end;
/


4 测试场景
本文档建立了针对test 用户的Stream 复制环境,如果没有特别声明,以下测试场景均以test
用户身份执行。
4.1 建一张表测试
主数据库
SQL> CREATE TABLE TTT(id NUMBER PRIMARY KEY,name VARCHAR2(50))
2
4 /
Table created.
从数据库
SQL> desc TTT
Name Null? Type
---------- -------- -------------
ID NOT NULL NUMBER
NAME VARCHAR2(50)
4.2 表中插入一行数据
主数据库
SQL> insert into ttt values (1,'sdfsdfsdfsdf');
1 row created.
SQL> commit;
Commit complete.
SQL>
从数据库
SQL> select * from TTT;
ID NAME
---------- --------------------
1 sdfsdfsdfsdf

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/79499/viewspace-433135/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 个人学习
请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    106
  • 访问量
    203781