Oracle+Stream+配置实验.docx

上传人:b****2 文档编号:24544172 上传时间:2023-05-28 格式:DOCX 页数:16 大小:20.09KB
下载 相关 举报
Oracle+Stream+配置实验.docx_第1页
第1页 / 共16页
Oracle+Stream+配置实验.docx_第2页
第2页 / 共16页
Oracle+Stream+配置实验.docx_第3页
第3页 / 共16页
Oracle+Stream+配置实验.docx_第4页
第4页 / 共16页
Oracle+Stream+配置实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Oracle+Stream+配置实验.docx

《Oracle+Stream+配置实验.docx》由会员分享,可在线阅读,更多相关《Oracle+Stream+配置实验.docx(16页珍藏版)》请在冰豆网上搜索。

Oracle+Stream+配置实验.docx

Oracle+Stream+配置实验

一步一步配置OracleStream

1引言

   OracleStream功能是为提高数据库的高可用性而设计的,在Oracle9i及之前的版本这个功能被称为AdvanceReplication。

OracleStream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现数据库之间的同步。

这种技术可以将整个数据库、数据库中的对象复制到另一数据库中,通过使用Stream的技术,对归档日志的挖掘,可以在对主系统没有任何压力的情况下,实现对数据库对象级甚至整个数据库的同步。

   解析归档日志这种技术现在应用的比较广泛,Quest公司的shareplex软件及DSG公司的realsync都是这样的产品,一些公司利用这样的产品做应用级的容灾。

但shareplex或是realsync都是十分昂贵的,因此你可以尝试用Stream这个Oracle提供的不用额外花钱的功能。

OracleStream对生产库的影响是非常小的,从库可以是与主库不同的操作系统平台,你可以利用OracleStream复制几个从库,从库可用于查询、报表、容灾等不同的功能。

本文不谈技术细节,只是以手把手的方式一步一步的带你把Stream的环境搭建起来,细节内容可以查联机文档。

2概述

主数据库:

操作系统:

Solaris9

IP地址:

192.168.10.35

数据库:

Oracle10.2.0.2

ORACLE_SID:

prod

Global_name:

prod

从数据库:

操作系统:

AIX5.2

IP地址:

192.168.10.43

数据库:

Oracle10.2.0.3

ORACLE_SID:

h10g

Global_name:

h10g

3环境准备

3.1设定初始化参数

使用pfile的修改init.ora文件,使用spfile的通过altersystem命令修改spile文件。

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

Sqlplus‘/assysdba’

altersystemsetaq_tm_processes=2scope=both;

altersystemsetglobal_names=truescope=both;

altersystemsetjob_queue_processes=10scope=both;

altersystemsetparallel_max_servers=20scope=both;

altersystemsetundo_retention=3600scope=both;

altersystemsetnls_date_format='YYYY-MM-DDHH24:

MI:

SS'scope=spfile;

altersystemsetstreams_pool_size=25Mscope=spfile;

altersystemsetutl_file_dir='*'scope=spfile;

altersystemsetopen_links=4scope=spfile;

执行完毕后重启数据库。

3.2将数据库置为归档模式

设置log_archive_dest_1到相应的位置;设定log_archive_start为TRUE,即启用自动归档功能;设定log_archive_format指定归档日志的命令格式。

举例:

sqlplus‘/assysdba’

altersystemsetlog_archive_dest_1=’location=/yang/arch’scope=spfile;

altersystemsetlog_archive_start=TRUEscope=spfile;

altersystemsetlog_archive_format=’arch%t_%s_%r.arc’scope=spfile;

shutdownimmediate;

startupmount;

alterdatabasearchivelog;

alterdatabaseopen;

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

SQL>archiveloglist

DatabaselogmodeArchiveMode

AutomaticarchivalEnabled

Archivedestination/yang/arch

Oldestonlinelogsequence534

Nextlogsequencetoarchive536

Currentlogsequence536

观注标红的部分。

3.3创建stream管理用户

3.3.1创建主环境stream管理用户

#以sysdba身份登录

connect/assysdba

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

createtablespacetbs_streamdatafile'/yang/oradata/prod/tbs_stream01.dbf'

size100mautoextendonmaxsizeunlimitedsegmentspacemanagementauto;

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

executedbms_logmnr_d.set_tablespace('tbs_stream');

#创建Stream管理用户

createuserstrmadminidentifiedbystrmadmin

defaulttablespacetbs_streamtemporarytablespacetemp;

#授权Stream管理用户

grantconnect,resource,dba,aq_administrator_roletostrmadmin;

begin

dbms_streams_auth.grant_admin_privilege(

grantee=>'strmadmin',

grant_privileges=>true);

end;

/

3.3.2创建从环境stream管理用户

#以sysdba身份登录

connect/assysdba

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

createtablespacetbs_streamdatafile'+VGDATA/h10g/datafile/tbs_stream01.dbf'

size100mautoextendonmaxsizeunlimitedsegmentspacemanagementauto;

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

executedbms_logmnr_d.set_tablespace('tbs_stream');

#创建Stream管理用户

createuserstrmadminidentifiedbystrmadmin

defaulttablespacetbs_streamtemporarytablespacetemp;

#授权Stream管理用户

grantconnect,resource,dba,aq_administrator_roletostrmadmin;

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级别,启用追加日志(SupplementalLog)。

在建立根据Schema粒度进行复制的OracleStream环境中,如果确认Schema下所有Table都有合理的主键(PrimaryKey),则不再需要启用追加日志。

#启用Database追加日志

alterdatabaseaddsupplementallogdata;

#启用Table追加日志

altertableaddsupplementloggrouplog_group_name(table_column_name)always;

3.6创建DBlink

根据Oracle10gR2Stream官方文档,针对主数据库建立的数据库链的名字必须和从数据库的global_name相同。

如果需要修改global_name,执行“alterdatabaserenameglobal_nametoxxx”。

3.6.1创建主数据库数据库链

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

connectstrmadmin/strmadmin

#建立数据库链

createdatabaselinkh10gconnecttostrmadminidentifiedbystrmadminusing'h10g';

3.6.2创建从数据库数据库链

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

connectstrmadmin/strmadmin

#建立数据库链

createdatabaselinkprodconnecttostrmadminidentifiedbystrmadminusing'prod';

3.7创建流队列

3.7.1创建Master流队列

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

connectstrmadmin/strmadmin

begin

dbms_streams_adm.set_up_queue(

queue_table=>'prod_queue_table',

queue_name=>'prod_queue');

end;

/

3.7.2创建Backup流队列

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

connectstrmadmin/strmadmin

begin

dbms_streams_adm.set_up_queue(

queue_table=>'h10g_queue_table',

queue_name=>'h10g_queue');

end;

/

3.8创建捕获进程

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

提醒一下,本文档以hr用户做示例。

connectstrmadmin/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的空用户。

expuserid=hr/hr@prodfile='/tmp/hr.dmp'object_consistent=yrows=y

impuserid=system/manager@h10gfile='/tmp/hr.dmp'ignore=ycommit=ylog='/tmp/hr.log'streams_instantiation=yfromuser=hrtouser=hr

3.10创建传播进程

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

connectstrmadmin/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身份,登录从数据库。

connectstrmadmin/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身份,登录从数据库。

connectstrmadmin/strmadmin

#启动Apply进程

begin

dbms_apply_adm.start_apply(

apply_name=>'apply_h10g');

end;

/

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

connectstrmadmin/strmadmin

#启动Capture进程

begin

dbms_capture_adm.start_capture(

capture_name=>'capture_prod');

end;

/

3.13停止STREAM

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

connectstrmadmin/strmadmin

#停止Capture进程

begin

dbms_capture_adm.stop_capture(

capture_name=>'capture_prod');

end;

/

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

connectstrmadmin/strmadmin

#停止Apply进程

begin

dbms_apply_adm.stop_apply(

apply_name=>'apply_h10g');

end;

/

3.14清除所有配置信息

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

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

connectstrmadmin/strmadmin

execDBMS_STREAMS_ADM.remove_streams_configuration();

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

connectstrmadmin/strmadmin

execDBMS_STREAMS_ADM.remove_streams_configuration();

4测试场景

   本文档建立了针对hr用户的Stream复制环境,如果没有特别声明,以下测试场景均以hr用户身份执行。

4.1建一张表测试

主数据库

SQL>CREATETABLETTT(idNUMBERPRIMARYKEY,

2nameVARCHAR2(50)

3)

4/

Tablecreated.

从数据库

SQL>descTTT

NameNull?

Type

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

IDNOTNULLNUMBER

NAMEVARCHAR2(50)

4.2表中插入一行数据

主数据库

SQL>insertintotttvalues(1,'sdfsdfsdfsdf');

1rowcreated.

SQL>commit;

Commitcomplete.

SQL>

从数据库

SQL>select*fromTTT;

IDNAME

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

1sdfsdfsdfsdf

4.3变更一下表的结构,添加一列

主数据库

SQL>ALTERTABLETTTADD(ageNUMBER

(2));

Tablealtered

从数据库

SQL>descTTT

NameNull?

Type

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

IDNOTNULLNUMBER

NAMEVARCHAR2(50)

AGENUMBER

(2)

4.4将表换一个表空间

主数据库

SQL>SELECTtable_name,tablespace_nameFROMuser_tables

2  WHEREtable_name='TTT';

TABLE_NAMETABLESPACE_NAME

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

TTTUSERS

SQL>ALTERTABLETTTMOVETABLESPACEtbs_stream;

Tablealtered

SQL>SELECTtable_name,tablespace_nameFROMuser_tables

  WHEREtable_name='TTT';

TABLE_NAMETABLESPACE_NAME

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

TTTTBS_STREAM

从数据库

SQL>SELECTtable_name,tablespace_nameFROMuser_tables

  WHEREtable_name='TTT';

TABLE_NAMETABLESPACE_NAME

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

TTTTBS_STREAM

4.5表上Name列建一索引

主数据库

SQL>CREATEINDEXttt_name_idxONTTT(name);

Indexcreated

从数据库

SQL>SELECTtable_name,index_nameFROMuser_indexesWHEREtable_name='TTT';

TABLE_NAMEINDEX_NAME

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

TTTTTT_NAME_IDX

TTTSYS_C005721

4.6Rebuild索引测试

主数据库

SQL>ALTERINDEXttt_name_idxREBUILD;

Indexaltered

从数据库

SQL>SELECTtable_name,index_nameFROMuser_indexesWHEREtable_name='TTT';

TABLE_NAMEINDEX_NAME

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

TTTTTT_NAME_IDX

TTTSYS_C005721

4.7索引换一个表空间测试

主数据库

SQL>ALTERINDEXttt_name_idxREBUILDTABLESPACEtbs_stream;

Indexaltered

从数据库

SQL>SELECTtable_name,index_name,tablespace_nameFRO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1