- 浏览: 1499666 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
Stream 是Oracle 的消息队列(也叫Oracle Advanced Queue)技术的一种扩展应用。 Oracle 的消息队列是通过发布/订阅的方式来解决事件管理。流复制(Stream replication)只是基于它的一个数据共享技术,也可以被用作一个可灵活定制的高可用性方案。它可以实现两个数据库之间数据库级,schema级,Table级的数据同步,并且这种同步可以是双向的。 Oracle Stream也是通过数据冗余来提高可用性,这一点和Data Guard 类型。 Oracle 高级复制(Oracle advanced Replication) 和流复制(Stream Replication) 是从名称和功能上都相似的两种技术。但前者是基于触发器的,后者是基于日志挖掘(Logminer)技术。 1. Stream 的工作原理 Stream 是Oracle Advanced Queue技术的一种扩展应用,这种技术最基本的原理就是收集事件,把时间保存在队列中,然后把这些事件发布给不同的订阅者。 从DBA的角度来说,就是把捕获Oracle数据库产生的Redo日志,然后把这些日志通过网络传播到多个数据库,其他数据库通过应用这些日志,达到复制变化的作用。 在Stream 环境下, 复制的起点数据库叫作Source Database, 复制的终点数据库叫作Target Database。 在这两个数据库上都要创建一个队列,其中的Source Database上的是发送队列,而Target Database上的是接收队列。 数据库的所有操作都会被记录在日志中。 配好Stream环境后, 在Source Database上会有一个捕获进程(Capture Process), 该进程利用Logminer技术从日志中提取DDL,DML语句,这些语句用一种特殊的格式表达,叫作逻辑变更记录(Logical Change Record, LCR). 一个LCR对应一个原子的行变更,因此源数据库上的一个DML语句,可能对应若干个LCR记录。这些LCR会保存到Sourece Database的本地发送队列中。然后传播进程(Propagation Process)把这些记录通过网络发送到Target Database的接收队列。 在Target Database上会有一个应用进程(Apply Process),这个进程从本地的接收队列中取出LCR记录,然后在本地应用,实现数据同步 2. Data Guard 和Stream 区别 Date Guard有两种类型:physical standby 和 logical standby。 这两中standby 都有3个功能模块:日志传送;日志接收,日志恢复。两种standby在前两个模块中是一样的,都是通过LGWR或者ARCn进程发送日志,通过RFS进程接受日志。区别在第三个模块: Physical Standby 使用的是Media Recovery技术直接在数据块级别进行恢复, 因此Physical Standby 能够做到两个数据库的完全同步, 没有数据类型限制。 Logical Standby实际是通过Logminer技术,把日志中的记录还原成SQL语句,然后通过Apply Engine 执行这些语句实现数据同步, 因此Logical Standby不能保证数据的完全一致。 比如Logical Standby 不支持某些数据类型,这一点在选择Logical Standby时必须要考虑. Logical Standby 不支持的数据类型可以从DBA_LOGSTDBY_UNSUPPORTED是不里查看. SQL>SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED; Stream 使用的是Logical Standby 第三个模块,也就是在Source Database一端,Capture 进程利用Logminer 技术把日志内容还原成LCR, 然后发送到Target Database, 而在Target database 一端, 也是通过Apply Engine 执行这些LCR。因此Stream在使用上也有些限制条件。这些可以从视图ALL/DBA_STREAMS_NEWLY_SUPPORTED, ALL/DBA_STREAMS_UNSUPPORTED 查看stream复制不支持的数据类型。 SQL>SELECT table_name, reason FROM ALL_STREAMS_NEWLY_SUPPORTED; SQL>SELECT table_name, reason FROM DBA_STREAMS_NEWLY_SUPPORTED; SQL>SELECT table_name, reason FROM DBA_STREAMS_UNSUPPORTED; SQL>SELECT table_name, reason FROM ALL_STREAMS_UNSUPPORTED; 下面以图表的形式列举他们的区别: Streams Data Guard 主要目的是数据共享 主要目的是灾难恢复和高可用性 可以多方向同步 只能是单向,从Primary--> Standby 数据粒度可以是数据库,Schema,Table三个级别 只有数据库级别 支持异种平台的同步(Heterogeneous Platforms) 必须同种平台 (Homogeneous Platforms) 参与复制的每个数据库可以读写 只有Primary可以读写,Standby 只读 支持Oracle 和非Oracle 数据库间的同步 只能是Oracle数据库间 3. 前期规划的几点: 1). 确定复制集:如是数据库级还是表级 2). 决定复制站点 3). 决定LCR是本地捕获还是下游捕获 本地捕获: 在源数据库进行,从联机日志和归档日志获得LCR 下游捕获:在目标数据库进行,从归档日志获得LCR. 本地捕获可以保护更多的数据,但是会占用源数据库的资源。 4). 决定复制拓扑结构:这时要决定复制数据库的用途,是只用于预防灾难,还是平时保持空闲,或允许用户使用。 4. Streams Replication 实例 4.1 准备工作: DBA是源数据库, DBA2是目标数据库 4.1.1 源数据库和目标数据库必须是归档的 SQL> startup mount; SQL> alter database archivelog; SQL> alter database open; SQL> archive log list 归档与非归档的切换请参考: http://blog.csdn.net/tianlesoftware/archive/2009/10/18/4693470.aspx 或者 http://user.qzone.qq.com/251097186/blog/1236924069 4.1.2. 源数据库和目的数据库均需要设置的参数: alter system set global_names=true scope = both; 默认为false, Database Link 使用的是数据库的global_name。 alter system set aq_tm_processes=2 scope=both; 以下参数都是10G的默认值, 检查下就可以了. 无需设置 如:Show parameter job_queue_processes alter system set job_queue_processes = 10 scope=both; alter system set sga_target = 300m scope=spfile; alter system set open_links=4 scope=spfile; alter system set statistics_level='TYPICAL' scope=both; 10g 默认为Typical, 性能统计模式 alter system set logmnr_max_persistent_sessions=1 scope=spfile; 10g 默认为1,持久的日志挖掘会话数。 alter system set "_job_queue_interval"=1 scope=spfile; alter system set aq_tm_processes=1; alter system set streams_pool_size=200m scope=both; 注意streams_pool_size一定要够大,因为如果启用了SGA_TARGET,ORACLE可能分配很少内存给stream导致大量信息被spill到磁盘导致查询DBA_APPLY,DBA_CAPTURE,DBA_PROPGATION全部状态ENABLED但就是没有数据被同步。 同时设置_job_queue_interval也是为了提高队列检查时间,防止apply出问题。 注意:与复制有关的2个参数: 如果等了足够长的时间发现数据没有复制过来,仔细检查了capture/propagation/apply各进程的状态都是正常的,并检查参数. alter system set "_job_queue_interval"=1 scope=spfile; 并且将aq_tm_processes参数改为1(我原来这是为10) alter system set aq_tm_processes=1; 改完后重启,发现数据就可以去了。这个隐含参数只是控制对job队列的检查频率,默认5秒。 4.1.3 . 在源数据库上启用追加日志 可以基于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; 4.1.4 . 源数据库和目的数据库创建相同表空间和用户并赋权 创建表空间: CREATE TABLESPACE streams_tbs DATAFILE 'D:\ORACLE\ORADATA\DBA\streams_tbs.dbf' SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED; CREATE TABLESPACE streams_tbs DATAFILE 'D:\ORACLE\ORADATA\DBA2\streams_tbs.dbf' SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED; 创建用户: CREATE USER strmadmin IDENTIFIED BY strmadmin DEFAULT TABLESPACE streams_tbs QUOTA UNLIMITED ON streams_tbs; 赋权: GRANT DBA to strmadmin; exec DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE('strmadmin'); 4.1.5 配置listener.ora和tnsnames.Ora DBA2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.10.80)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DBA2.anqingren.org) ) ) 4.1.6 创建DBLink 先用strmadmin登陆,在创建dblink 4.1.6.1在源端建到目库的db link SQL> conn strmadmin/strmadmin; 已连接。 SQL> create database link DBA2 connect to strmadmin identified by strmadmin using 'dba2'; 数据库链接已创建。 测试: SQL> select * from global_name@dba2; GLOBAL_NAME ------------------- DBA2.ANQINGREN.ORG 4.1.6.2 在目端建到源库的db link SQL> conn strmadmin/strmadmin; 已连接。 SQL> create database link dba connect to strmadmin identified by strmadmin using 'dba'; 数据库链接已创建。 4.2 用户级的复制(不支持sys和system用户) 4.2.1 最初的用户复制 分别在源库和目标数据库上创建测试用户 SQL>create user dave identified by dave; SQL>grant dba to dave; 4.2.1 在源数据库上创建Source 队列 connect strmadmin/strmadmin@dba; BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'SOURCE_QUEUE_TABLE', --队列表 queue_name => 'SOURCE_QUEUE', --队列 queue_user => 'strmadmin'); --队列用户 END; / 或者: SQL> EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE(); PL/SQL procedure successfully completed. 该命令会创建一个队列缺省名:streams_queue,队列表缺省是:STREAMS_QUEUE_TABLE 队列存储的object类型是anaydata 移除队列: exec dbms_streams_adm.remove_queue( queue_name => 'streams_queue', cascade => true, drop_unused_queue_table => true);. 可以用查询dba_queues,dba_queue_tables来检查: SQL> select owner,queue_table,name from dba_queues where owner='STRMADMIN'; OWNER QUEUE_TABLE NAME ----------------- ------------------------- ------------------ STRMADMIN SOURCES_QUEUE_TABLE SOURCES_QUEUE STRMADMIN SOURCES_QUEUE_TABLE AQ$_SOURCES_QUEUE_TABLE_E SQL>select owner,queue_table,object_type from dba_queue_tables where owner='STRMADMIN'; OWNER QUEUE_TABLE OBJECT_TYPE -------------- --------------------- ------------------ STRMADMIN SOURCES_QUEUE_TABLE SYS.ANYDATA 4.2.2 在目标数据库DBA2上创建接收队列 connect strmadmin/strmadmin@dba2; BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'TARGET_QUEUE_TABLE', --队列表 queue_name => 'TARGET_QUEUE', --队列 queue_user => 'strmadmin'); --队列用户 END; / 可以用查询dba_queues,dba_queue_tables来检查: SQL> select owner,queue_table,name from dba_queues where owner='STRMADMIN'; OWNER QUEUE_TABLE NAME ------------------ --------------------- ---------------- STRMADMIN TARGET_QUEUE_TABLE TARGET_QUEUE STRMADMIN TARGET_QUEUE_TABLE AQ$_TARGET_QUEUE_TABLE_E 4.2.3 在源数据库上创建capture 进程 SQL>conn strmadmin/strmadmin@DBA; SQL> BEGIN DBMS_STREAMS_ADM.ADD_SCHEMA_RULES( schema_name => 'dave', -- 用户名,如dave, 非sys或者system streams_type => 'capture', streams_name => 'capture_stream', queue_name => 'strmadmin.SOURCE_QUEUE', include_dml => true, include_ddl => true, source_database => 'DBA', include_tagged_lcr => false, inclusion_rule => true); END; / PL/SQL procedure successfully completed. 可以通过dba_capture查看: SQL> select CAPTURE_NAME,QUEUE_NAME,START_SCN,STATUS,CAPTURE_TYPE from dba_capture; CAPTURE_NAME QUEUE_NAME START_SCN STATUS CAPTURE_TY ------------------------- ---------------------------- ---------- -------------- ---------------- CAPTURE_STREAM1 SOURCES_QUEUE 1294052 DISABLED LOCAL SQL> select * from ALL_CAPTURE_PREPARED_SCHEMAS; SCHEMA_NAME TIMESTAMP SUPPLEME SUPPLEME SUPPLEME SUPPLEME -------------------- -------------- -------- -------- -------- -------- SYSTEM 20-10月-09 IMPLICIT IMPLICIT IMPLICIT NO 4.2.4 在源数据库上创建传播进程 SQL>conn strmadmin/strmadmin@DBA; SQL> BEGIN DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES( schema_name => 'dave', streams_name => 'source_to_target', source_queue_name => 'strmadmin.SOURCE_QUEUE', destination_queue_name => 'strmadmin.TARGET_QUEUE@DBA2', --此队列待创建 include_dml => true, include_ddl => true, source_database => 'DBA', inclusion_rule => true, queue_to_queue => true); END; / PL/SQL procedure successfully completed. 重新启动propagation process --dbms_propagation_adm.start_propagation (propagation_name) --其中propagation_name可以从表all_propagation中取得 select * from all_propagation; SQL> exec dbms_propagation_adm.start_propagation('source_to_target'); exec dbms_propagation_adm.stop_propagation('source_to_target'); PL/SQL procedure successfully completed. select * from all_propagation; 可以通过dba_propagations查看结果: SQL> select PROPAGATION_NAME,SOURCE_QUEUE_NAME,DESTINATION_QUEUE_NAME,DESTINATION_DBLINK,STATUS from dba_propagation; PROPAGATION_NAME SOURCE_QUEUE_NA DESTINATION_QUE DESTINATION_DBLINK STATUS ------------------ --------------- --------------- ------------------ -------- STREAM1_TO_STREAM2 SOURCES_QUEUE TARGET_QUEUE DBA2.ANQINGREN.ORG ENABLED #修改propagation休眠时间为0,表示实时传播LCR。 begin dbms_aqadm.alter_propagation_schedule( queue_name => 'SOURCE_QUEUE', destination => 'DBA2', latency => 0); end; / 4.2.5 在目标数据库DBA2上创建Apply进程 SQL> BEGIN DBMS_STREAMS_ADM.ADD_SCHEMA_RULES( schema_name => 'SYSTEM', streams_type => 'apply', streams_name => 'target_apply_stream', queue_name => 'strmadmin.TARGET_QUEUE', include_dml => true, include_ddl => true, include_tagged_lcr => false, source_database => 'DBA', inclusion_rule => true); END; / 可以通过: dba_apply v$streams_apply_reader v$streams_apply_coordinator v$streams_apply_server 查看状态 SQL> select apply_name,queue_name,status from dba_apply; APPLY_NAME QUEUE_NAME STATUS ------------------------------ ------------------------------ -------- TARGET_APPLY_STREAM TARGET_QUEUE DISABLED 4.2.6 实例化复制数据库 4.2.6.1 用exp/imp 完成实例化 带数据完成源端exp和目端的import: Exp USERID=SYSTEM/ADMIN@DBA OWNER=SYSTEM FILE=D:\STRM.dmp LOG=STRM.log OBJECT_CONSISTENT=Y STATISTICS = NONE imp USERID=SYSTEM/ADMIN@DBA2 FULL=Y CONSTRAINTS=Y FILE=D:\STRM.dmp IGNORE=Y COMMIT=Y LOG=D:\import.log STREAMS_INSTANTIATION=Y 或仅作实例化(不带数据): exp USERID=SYSTEM/ADMIN@DBA OWNER=SYSTEM FILE=D:\STRM.dmp LOG=D:\export.log OBJECT_CONSISTENT=Y STATISTICS = NONE ROWS=NO imp USERID=SYSTEM/ADMIN@DBA2 FULL=Y CONSTRAINTS=Y FILE=D:\STRM.dmp COMMIT=Y LOG=D:\import.log STREAMS_INSTANTIATION=Y IGNORE=Y 4.2.6.2 直接设置SCN的方式进行实例化: ---获取源库互置用户的SCN connect strmadmin/strmadmin@DBA set serveroutput on DECLARE iscn NUMBER; -- Variable to hold instantiation SCN value BEGIN iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER(); DBMS_OUTPUT.PUT_LINE ('Instantiation SCN is: ' || iscn); END; / ---设置为目标库互置用户的SCN connect strmadmin/strmadmin@DBA2 BEGIN DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN( source_schema_name => 'SYSTEM', source_database_name => 'DBA', instantiation_scn => &iscn); END; / 4.2.7. 在目标数据库上启动Apply进程 connect strmadmin/strmadmin@DBA2 SQL> BEGIN DBMS_APPLY_ADM.SET_PARAMETER(apply_name => 'target_apply_stream', parameter => 'disable_on_error', VALUE => 'n'); END; / SQL> BEGIN DBMS_APPLY_ADM.START_APPLY( apply_name => 'target_apply_stream'); END; / #停止Apply进程 begin dbms_apply_adm.stop_apply( apply_name => 'target_apply_stream'); end; / 查看状态 SQL> select apply_name,queue_name,status from dba_apply; APPLY_NAME QUEUE_NAME STATUS ------------------------------ ------------------------------ -------- TARGET_APPLY_STREAM TARGET_QUEUE ENABLED 4.2.8 在源数据库上启动capture connect strmadmin/strmadmin@DBA SQL> BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'capture_stream'); END; / #停止Capture进程 begin dbms_capture_adm.stop_capture( capture_name => 'capture_stream'); end; / 查看状态: SQL> select capture_name,status from dba_capture; CAPTURE_NAME STATUS --------------- -------- CAPTURE_STREAM ENABLED 4.3 表级的复制 maintain_tts 表空间复制 maintain_schemas 用户复制 maintain_tables 表复制的 与dbms_streams_adm的maintain_global、maintain_tts、maintain_schemas等过程相比,maintain_tables过程使用则更灵活,可以为某些特殊的表拿出来单独配置,maintain_tables也象其它的过程一样,提供了一蓝子解决方案,如果要添加新的表到复制中,只需要再次执行maintain_tables过程即可。 4.3.1 在stream进行配置前,需要做些准备工作 A 源库与目标库初始化参数的设置 alter system set aq_tm_processes=1 scope=spfile; alter system set job_queue_processes=2 scope=spfile; alter system set global_names=true scope=spfile; alter system set streams_pool_size=20m scope=spfile; 说明streams_pool_size在生产环境中最好>200m B 源库与目标库tnsnames.ora配置 见4.1 C 源库与目标库复制管理员的创建 见4.1 D 在源库与目标库创建DBLINK 见4.1 E 源库与目标库必须处于归档模式 见4.1 F 源库与目标库必须创建directory connect strmadmin/strmadmin@DBA; create directory DIR_DBA as 'D:\Stream\DBA'; connect strmadmin/strmadmin@DBA2; create directory DIR_DBA2 as 'D:\Stream\DBA2'; 说明:在复制表空间时,创建directory需要指定该表空间所在的目录 G 创建测试用的表空间及表 CREATE TABLESPACE DAVE DATAFILE 'D:\ORACLE\ORADATA\DBA\DAVE.dbf' SIZE 100M; create user tianle identified by tianle default tablespace DAVE; grant dba to tianle; conn TIANLE/TIANLE create table test(id int,name varchar2(20)); create table test2(id int,name varchar2(20)); insert into test values(1,'dave'); insert into test values(2,'bl'); 不能使用默认的表空间. 4.3.2 在源库执行MAINTAIN_TTS过程 SQL>connect strmadmin/strmadminpw@DBA; declare v_tables dbms_utility.uncl_array; begin v_tables(1) := 'tianle.test; v_tables(2) := 'tianle.test2'; dbms_streams_adm.maintain_tables( table_names => v_tables, source_directory_object => null, destination_directory_object => null, source_database => 'DBA', destination_database => 'DBA2', perform_actions => true, bi_directional => false, include_ddl => true, instantiation => dbms_streams_adm.instantiation_table_network); end; / 说明:在源库执行maintain_tables时,目标库几乎什么都不用做,stream环境已经配置好啦, 如果想复制其它的表,只用再执行maintain_tables过程即可 4.3.3 如果在执行2的过程时失败,需要清除脚本 --select script_id from dba_recoverable_script; --exec dbms_streams_adm.RECOVER_OPERATION('&1','PURGE'); declare v_script_id varchar2(32); begin select script_id into v_script_id from dba_recoverable_script; dbms_streams_adm.RECOVER_OPERATION(v_script_id,'PURGE'); exception when no_data_found then DBMS_OUTPUT.PUT_LINe('no data found') ; when others then 4.5 全库级复制 以上主要为大家介绍了pre_instantiation_setup/post_instantiation_setup过程在配置全库复制的方法,以下介绍dbms_streams_adm的maintain_global过程如何配置stream全库复制方法,适用于10gR2及以后版本。 不支持sys/ system 用户的变更。 1.在stream进行配置前,需要做些准备工作 a 源库与目标库初始化参数的设置 alter system set aq_tm_processes=4 scope=spfile; alter system set job_queue_processes=5 scope=spfile; alter system set global_names=true scope=spfile; alter system set streams_pool_size=51m scope=spfile; 说明streams_pool_size在生产环境中最好>200m b 源库与目标库tnsnames.ora配置 见4.1 c 源库与目标库复制管理员的创建 见4.1 d 源库与目标库创建互连的DBLINK 见4.1 e 源库与目标库必须处于归档模式 见4.1 f 源库与目标库必须创建directory create directory dir_DBA as 'D:\Stream\DBA'; create directory dir_DBA2 as 'D:\Stream\DBA2'; 2.在源库执行MAINTAIN_GLOBAL过程 begin dbms_streams_adm.maintain_global( source_directory_object =>'dir_DBA', destination_directory_object =>'dir_DBA2', source_database=>'DBA', destination_database =>'DBA2', perform_actions=>true, include_ddl=>true, instantiation=>DBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORK ); end; 说明:在执行maintain_global时,源库与目标库必须创建directory,然后在源库执行, 目标库几乎什么都不用做,stream环境已经配置完毕
发表评论
-
SQL查询顺序处理
2011-09-15 11:29 1625select的解析执行顺序1. from语句 2. where ... -
概念模型、逻辑模型、物理模型区别
2011-09-08 10:48 1230http://wenku.baidu.com/view/9a6 ... -
规范化-数据库设计原则
2011-09-07 10:41 1451简介: 关系数据库设计的核心问题是关系模型的设计。本文将结合具 ... -
数据库设计准则(第一、第二、第三范式说明)
2011-09-07 10:17 1276I、关系数据库设计范式 ... -
oracle日志文件及归档日志模式
2011-09-01 10:18 1758oracle数据库中分为联机日志文件和归档日志文件两种日志文件 ... -
Oracle重做日志管理
2011-09-01 09:50 1434Oracle重做日志操作是为了记录数据的改变,提供数据库 ... -
Oracle复制技术的分布式系统同步应用
2011-08-28 17:41 1291本文将结合一个实际案例,讲解Oracle复制技术在分布 ... -
oracle数据同步
2011-08-28 14:34 993首先创建一个 dblink(dat ... -
表分区
2011-06-30 09:21 1678分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用 ... -
数据库大型应用解决方案总结(1)
2011-06-22 18:01 1391随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设 ... -
oracle_SQL中ROWID与ROWNUM的使用
2011-06-16 10:51 1424对于 Oracle 的 rownum 问题,很多资料都说不支持 ... -
oracle函数手册
2011-06-08 09:22 1183SQL中的单记录函数1.ASCII ... -
oracle基础文档
2011-06-03 09:10 1238oracle基础文档 -
ORACLE 找回误删的数据库
2011-06-02 14:14 1367同事找回时操作的数据库为oracle 10g , 之前删除方式 ... -
为什么Oracle有时会用索引来查找数据?--强制Oracle使用最优的“执行计划”
2011-06-01 09:04 1741[摘要] 在你运用SQL语言,向数据库发布一条查询语句时,O ... -
sql编程规范与性能
2011-05-31 08:40 1276sql编程规范与性能 -
Nested Loops Join(嵌套连接)
2011-04-13 16:21 11573说明:最近找到了一个 ... -
如何看Oracle执行计划
2011-01-14 15:43 2187oracle执行计划解释 ... -
oracle中分析sql语句执行计划的方法
2011-01-14 15:36 2229如何生成explain plan? 解答:运行utl ... -
oracle sql 语句(二)
2010-12-10 09:17 144227建立序列:(注意,这里并没有出现说是哪个表里面的序列 ...
相关推荐
Stream Replication 双向复制是一种高级的Oracle数据库复制技术,用于在两个数据库之间实现数据的实时同步。这种复制方式不仅可以确保数据的一致性,还能在主数据库出现问题时提供即时的故障转移能力。以下是对...
Oracle Stream Replication是Oracle数据库系统中一种高效的数据复制和同步技术,首次出现在9iR2版本中。这一技术旨在提供灵活、可靠的数据共享方案,适用于各种企业环境中的数据同步需求,包括灾难恢复、数据仓库...
通过Oracle的流复制实现数据库之间的同步,是一种高效的数据同步机制,尤其在企业级应用中,对于数据一致性和实时性有着极高的要求。Oracle Streams作为Oracle数据库的一项重要特性,自Oracle9i版本开始引入,取代了...
Stream Replication 是 Oracle 数据库的一种高级数据复制技术,旨在实现高效、灵活的数据共享和同步。在9iR2版本中,Oracle引入了Logical Standby Database和Stream Replication,与Advanced Replication一起,为...
Oracle Stream是一种高级数据库同步工具,它在Oracle 9i及后续版本中被引入,以前称为Advanced Replication。Streams利用了Oracle的高级队列技术,通过解析归档日志,将数据库的DDL(数据定义语言)和DML(数据操纵...
自Oracle 9i版本起,它替代了旧有的Advanced Replication,提供了更灵活、高效的数据流管理机制。Oracle Stream的核心在于解析数据库的归档日志,将其中的DDL(Data Definition Language)和DML(Data Manipulation ...
Oracle Stream是Oracle数据库中的一种复制技术,主要设计用于提高数据库的高可用性。在Oracle 9i及之前的版本中,该功能被称为Advance Replication。通过Oracle Stream技术,可以实现数据库间的同步,包括整个数据库...
与传统的复制技术相比,Oracle Stream具有较低的资源消耗,能够在几乎不影响主数据库性能的前提下,实现数据的实时同步。 #### 3. 环境准备 ##### 3.1 设定初始化参数 为了启用Oracle Stream,首先需要设置数据库...
4. **数据库复制(Database Replication)**:Oracle 9i提供了多种复制技术,包括逻辑复制(Logical Replication)、流复制(Stream Replication)和快照复制(Snapshot Replication),用于实现数据的实时同步和...
Oracle 9i是Oracle数据库的第9个主要版本,发布于2001年,引入了许多新特性,如自动存储管理(Automatic Storage Management, ASM)、流复制(Stream Replication)以及数据仓库优化等。尽管现在可能已经有更先进的...
2. **流复制(Stream Replication)**:Oracle10G引入了流复制技术,允许实时地、异步地复制DML操作。这种同步方式基于事务,保证了数据的一致性。 3. **GoldenGate**:虽然GoldenGate是在Oracle11G中正式推出的,...