




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 引言Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现数据库之间的同步。这种技术可以将整个数据库、数据库中的对象复制到另一数据库中,通过使用Stream的技术,对归档日志的挖掘,可以在对主系统没有任何压力的情况下,实现对数据库对象级甚至整个数据库的同步。解析归档日志这种技术现在应用的比较广泛,Quest公司的shareplex软件及DSG公司的realsync都是这样的产品,一些公司利用这样的产品做应用级的容灾。但shareplex或是realsync都是十分昂贵的,因此你可以尝试用Stream这个Oracle提供的不用额外花钱的功能。Oracle Stream对生产库的影响是非常小的,从库可以是与主库不同的操作系统平台,你可以利用Oracle Stream复制几个从库,从库可用于查询、报表、容灾等不同的功能。本文不谈技术细节,只是以手把手的方式一步一步的带你把Stream的环境搭建起来,细节内容可以查联机文档。2 概述主数据库:操作系统:Solaris 9IP地址:5数据库:Oracle ORACLE_SID:prodGlobal_name:prod从数据库:操作系统:AIX 5.2IP地址:3数据库:Oracle ORACLE_SID:h10gGlobal_name:h10g3 环境准备3.1 设定初始化参数使用pfile的修改init.ora文件,使用spfile的通过alter system命令修改spile文件。主、从数据库分别执行如下的语句:Sqlplus / as sysdbaalter 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 sysdbaalter 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 listDatabase log mode Archive ModeAutomatic archival EnabledArchive destination /yang/archOldest online log sequence 534Next log sequence to archive 536Current 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.dbfsize 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 strmadmindefault tablespace tbs_stream temporary tablespace temp;#授权Stream管理用户grant connect,resource,dba,aq_administrator_role to strmadmin;begindbms_streams_auth.grant_admin_privilege(grantee = strmadmin,grant_privileges = true);end;/3.3.2 创建从环境stream管理用户#以sysdba身份登录connect / as sysdba#创建Stream专用表空间,我的从库用了ASM,这一步也可以参见3.3.1create tablespace tbs_stream datafile +VGDATA/h10g/datafile/tbs_stream01.dbfsize 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 strmadmindefault tablespace tbs_stream temporary tablespace temp;#授权Stream管理用户grant connect,resource,dba,aq_administrator_role to strmadmin;begindbms_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 = 3)(PORT = 1521)(CONNECT_DATA =(SID = h10g)(SERVER = DEDICATED)3.4.2配置从环境tnsnames.ora从数据库(tnsnames.ora)中添加主数据库的配置。PROD =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 5)(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/strmadminbegindbms_streams_adm.set_up_queue(queue_table = prod_queue_table,queue_name = prod_queue);end;/3.7.2创建Backup流队列#以strmadmin身份,登录从数据库。connect strmadmin/strmadminbegindbms_streams_adm.set_up_queue(queue_table = h10g_queue_table,queue_name = h10g_queue);end;/3.8 创建捕获进程#以strmadmin身份,登录主数据库。提醒一下,本文档以hr用户做示例。connect strmadmin/strmadminbegindbms_streams_adm.add_schema_rules(schema_name = hr,streams_type = capture,streams_name = capture_prod,queue_name = d_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/hrprod file=/tmp/hr.dmp object_consistent=y rows=yimp userid=system/managerh10g file=/tmp/hr.dmp ignore=y commit=y log=/tmp/hr.log streams_instantiation=y fromuser=hr touser=hr3.10 创建传播进程#以strmadmin身份,登录主数据库。connect strmadmin/strmadminbegindbms_streams_adm.add_schema_propagation_rules(schema_name = hr,streams_name = prod_to_h10g,source_queue_name = d_queue,destination_queue_name = strmadmin.h10g_queueh10g,include_dml = true,include_ddl = true,include_tagged_lcr = false,source_database = prod,inclusion_rule = true);end;/#修改propagation休眠时间为0,表示实时传播LCR。begindbms_aqadm.alter_propagation_schedule(queue_name = prod_queue,destination = h10g,latency = 0);end;/3.11 创建应用进程#以strmadmin身份,登录从数据库。connect strmadmin/strmadminbegindbms_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进程begindbms_apply_adm.start_apply(apply_name = apply_h10g);end;/#以strmadmin身份,登录主数据库。connect strmadmin/strmadmin#启动Capture进程begindbms_capture_adm.start_capture(capture_name = capture_prod);end;/3.13 停止STREAM#以strmadmin身份,登录主数据库。connect strmadmin/strmadmin#停止Capture进程begindbms_capture_adm.stop_capture(capture_name = capture_prod);end;/#以strmadmin身份,登录从数据库。connect strmadmin/strmadmin#停止Apply进程begindbms_apply_adm.stop_apply(apply_name = apply_h10g);end;/3.14 清除所有配置信息要清楚Stream配置信息,需要先执行3.13,停止Stream进程。#以strmadmin身份,登录主数据库。connect strmadmin/strmadminexec DBMS_STREAMS_ADM.remove_streams_configuration();#以strmadmin身份,登录从数据库。connect strmadmin/strmadminexec DBMS_STREAMS_ADM.remove_streams_configuration();4 测试场景本文档建立了针对hr用户的Stream 复制环境,如果没有特别声明,以下测试场景均以hr用户身份执行。4.1 建一张表测试主数据库SQL CREATE TABLE TTT(id NUMBER PRIMARY KEY,2 name VARCHAR2(50)3 )4 /Table created.从数据库SQL desc TTTName Null? Type- - -ID NOT NULL NUMBERNAME 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 sdfsdfsdfsdf4.3 变更一下表的结构,添加一列主数据库SQL ALTER TABLE TTT ADD(age NUMBER(2);Table altered从数据库SQL desc TTTName Null? Type- - -ID NOT NULL NUMBERNAME VARCHAR2(50)AGE NUMBER(2)4.4 将表换一个表空间主数据库SQL SELECT table_name,tablespace_name FROM user_tables2 WHERE table_name=TTT;TABLE_NAME TABLESPACE_NAME- -TTT USERSSQL ALTER TABLE TTT MOVE TABLESPACE tbs_stream;Table alteredSQL SELECT table_name,tablespace_name FROM user_tables WHERE table_name=TTT;TABLE_NAME TABLESPACE_NAME- -TTT TBS_STREAM从数据库SQL SELECT table_name,tablespace_name FROM user_tables WHERE table_name=TTT;TABLE_NAME TABLESPACE_NAME- -TTT TBS_STREAM4.5 表上Name列建一索引主数据库SQL CREATE INDEX ttt_name_idx ON TTT(name);Index created从数据库SQL SELECT table_name, index_name FROM user_indexes WHERE table_name = TTT;TABLE_NAME INDEX_NAME- -TTT TTT_NAME_IDXTTT SYS_C0057214.6 Rebuild索引测试主数据库SQL ALTER INDEX ttt_name_idx REBUILD;Index altered从数据库SQL SELECT table_name, index_name FROM user_indexes WHERE table_name = TTT;TABLE_NAME INDEX_NAME- -TTT TTT_NAME_IDXTTT SYS_C0057214.7 索引换一个表空间测试主数据库SQL ALTER INDEX ttt_name_idx REBUILD TABLESPACE tbs_stream;Index altered从数据库SQL SELECT table_name,index_name,tablespace_name FROM user_indexes WHERE table_name = TTT;TABLE_NAME INDEX_NAME TABLESPACE_NAME- - -TTT TTT_NAME_IDX TBS_STREAMTTT SYS_C005721 USERS4.8 删除索引测试主数据库SQL DROP INDEX ttt_name_idx;Index dropped从数据库SQL SELECT table_name,index_name,tablespace_name FROM user_indexes WHERE table_name = TTT;TABLE_NAME INDEX_NAME TABLESPACE_NAME- - -TTT SYS_C005721 USERS4.9 删除表测试主数据库SQL DROP TABLE ttt;Table dropped从数据库SQL DESC ttt;Object ttt does not exist.4.10 建一张带有LOB类型字段的表测试主数据库SQL CREATE TABLE tttclob(id NUMBER PRIMARY KEY, memo CLOB);Table created从数据库SQL DESC tttclob;Name Null? Type- - -ID NOT NULL NUMBERMEMO CLOB4.11 表中插入一行数据主数据库SQL INSERT INTO tttclob VALUES(1,clob_test);1 row insertedSQL commit;Commit complete从数据库SQL SELECT * FROM tttclob;ID MEMO- -1 clob_test4.12 创建Type测试主数据库SQL CREATE or REPLACE TYPE ttttype;2 /Type created从数据库SQL SELECT * FROM user_types WHERE type_name=TTTTYPE;TYPE_NAME TYPE_OID TYPECODE ATTRIBUTES METHODS PREDEFINED INCOMPLETE FINAL INSTANTIABLE SUPERTYPE_OWNER SUPERTYPE_NAME LOCAL_ATTRIBUTES LOCAL_METHODS TYPEID- - - - - - - - - - - - - -TTTTYPE 1B36AAF10DA8301DE040A8C0289A77B4 OBJECT 0 0 NO YES YES YES4.13 删除Type测试主数据库SQL DROP TYPE ttttype;Type dropped从数据库SQL SELECT * FROM user_types WHERE type_name=TTTTYPE;TYPE_NAME TYPE_OID TYPECODE ATTRIBUTES METHODS PREDEFINED INCOMPLETE FINAL INSTANTIABLE SUPERTYPE_OWNER SUPERTYPE_NAME LOCAL_ATTRIBUTES LOCAL_METHODS TYPEID- - -5 问题诊断5.1 如何知道捕捉(Capture)进程是否运行正常?以strmadmin身份,登录主数据库,执行如下语句:SQL SELECT CAPTURE_NAME,2 QUEUE_NAME,3 RULE_SET_NAME,4 NEGATIVE_RULE_SET_NAME,5 STATUS6 FROM DBA_CAPTURE;结果显示如下:CAPTURE_NAME Q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城管理论考试试题及答案
- 食品安全法规解读讲解
- 新质生产力的面试问题
- 纺织业:新质生产力的转型路径
- 新质生产力引领汕头文旅
- 新质生产力利好银行吗
- 2025年药理学基础知识考察答案及解析
- 2025年康复医学康复评定及干预策略考核答案及解析
- 2025年全科医学综合能力素质评价答案及解析
- 2025年核医学临床应用实践答案及解析
- 竣工结算审计服务投标方案(技术方案)
- 医师定期考核题库-公卫
- 护理个案分享一例急性缺血性脑卒中患者抢救
- (高清版)JTGT 3650-01-2022 公路桥梁施工监控技术规程
- DZ∕T 0213-2020 矿产地质勘查规范 石灰岩、水泥配料类(正式版)
- 《建筑施工安全检查标准》JGJ59-20248
- 水利水电工程单元工程施工质量验收表、安装埋设考证表样、施工期观测精度和限差
- 2024年泰州海陵区数产集团所属泰州城发数字科技有限公司招聘笔试参考题库附带答案详解
- 患者走失的护理措施
- 【音乐】七年级开学第一课音乐课件
- 防火防烟分区检查
评论
0/150
提交评论