ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:22.13KB ,
资源ID:11510546      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11510546.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Oracle 高级复制配置步骤详细说明.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Oracle 高级复制配置步骤详细说明.docx

1、Oracle 高级复制配置步骤详细说明Oracle 高级复制配置步骤详细说明首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持)一.数据库基本情况数据库A版本oracle 10.2.0.3 数据库名sid:shenzhen数据库B版本oracle 10.2.0.3 数据库名sid:beijing主体定义站点:A shenzhen主体站点:B shenzhen注:主体定义站点指配置复制工作的站点本例涉及的用户. 复制管理员:repadmin 应用用户:cqm本例复制的对

2、象:reptest 数据表 本例的先决条件:你需要设置好相应的参数,job_queue_processes需要大于0,global_name=true,并且建立相应的db link.alter system set global_names=true scope=both;二.在两个数据库上分别创建应用用户CQMCREATE USER CQM IDENTIFIED BY CQM DEFAULT TABLESPACE users TEMPORARY TABLESPACE TEMP;GRANT DBA TO CQM;三.在两个数据库上分别创建复制管事员用户REPADMIN-创建repadmin用户

3、管理复制环境CREATE USER REPADMIN IDENTIFIED BY REPADMIN;ALTER USER REPADMIN DEFAULT TABLESPACE USERS;ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP;GRANT connect, resource TO REPADMIN;-授予repadmin用户权限可以管理当前站点中任何主体组EXECUTE dbms_repcat_admin.grant_admin_any_schema(REPADMIN);-授予repadmin用户权限可以为任何表创建snapshot log

4、sGRANT comment any table TO REPADMIN;GRANT lock any table TO REPADMIN;-指定repadmin用户为propagator,并授予执行任何procedure的权限EXECUTE dbms_defer_sys.register_propagator(REPADMIN);GRANT execute any procedure TO REPADMIN;四.更改两个数据库的全局名称alter database rename global_name to beijing.TEST.COM.CN;alter database rename

5、global_name to shenzhen.TEST.COM.CN;五.在两个数据库上建立数据库链接create public database link beijing.TEST.COM.CN connect to REPADMIN identified by REPADMIN using beijing;create public database link shenzhen.TEST.COM.CN connect to REPADMIN identified by REPADMIN using shenzhen;六.在两个数据库的应用用户CQM下创建表在数据库shenzhen上用户C

6、QM下:注意,要进行复制的表必须有主键CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID);在数据库beijing上用户CQM下:CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID);七.在主体定义站点开始操作(数据库A:she

7、nzhen)以REPADMIN登录数据库shenzhen创建复制组:execute dbms_repcat.create_master_repgroup(rep_hh); 多余的execute dbms_repcat.create_master_repgroup(repg);在复制组里加入复制对象:execute dbms_repcat.create_master_repobject(sname=cqm,oname=test,type=table,use_existing_object=true,gname=repg,copy_rows=false);对复制对象产生复制支持:execute d

8、bms_repcat.generate_replication_support(cqm,test,table);execute dbms_repcat.drop_master_repobject (scott,dept,table);取消同步添加主体复制节点:execute dbms_repcat.add_master_database(gname=repg,master=,use_existing_objects=true,copy_rows=false, propagation_mode = asynchronous);* 参数说明: gname 主复制组名 master 加入主复制节点的

9、另一个数据库use_existing_object true表示用主复制节点已经存在的数据库对象 copy_rows false表示第一次开始复制时不用和主复制节点保持一致 propagation_mode 同步地执行 synchronous(上边配置异步复制)*在主体定义站点启动复制:execute dbms_repcat.resume_master_activity(repg,true);execute dbms_repcat.resume_master_activity(repg,false);execute dbms_repcat.suspend_master_activity(rep

10、g)停止复制八.至此配置完成附:使用异步复制要运行以下的过程!exec dbms_defer_sys.schedule_push (destination = ,interval = sysdate + 1/1440,next_date = sysdate);exec dbms_defer_sys.schedule_purge (next_date = sysdate,interval = sysdate + 1/1440,delay_seconds = 0,rollback_segment = );*exec dbms_defer_sys.schedule_push (destination

11、 = ,interval = sysdate + 1/1440,next_date = sysdate);exec dbms_defer_sys.schedule_purge (next_date = sysdate,interval = sysdate + 1/1440,delay_seconds = 0,rollback_segment = );这种配置方式对网络的影响比较小!管理也比较简单1)模拟小数据量测试:OK2)模拟大数据量测试:OKCREATE OR REPLACE procedure insert_into_testasi number;m NUMBER;n NUMBER;BE

12、GINn:=0;FOR i IN 1.10000 LOOPm:=i;INSERT INTO test(id)VALUES (m);n:=n+1;IF n=1000 THENCOMMIT;n:=0;END IF;END LOOP;COMMIT;END;添加复制对象的四个步骤!execute dbms_repcat.suspend_master_activity(repg)execute dbms_repcat.create_master_repobject(sname=cqm,oname=test1,type=table,use_existing_object=true,gname=repg,c

13、opy_rows=false);execute dbms_repcat.generate_replication_support(cqm,test1,table);execute dbms_repcat.resume_master_activity(repg,false)execute dbms_repcat.resume_master_activity(repg,true)附:做完的时候开始插入数据有问题SQL insert into test(id) values(1);insert into test(id) values(1)*ERROR at line 1:ORA-04067: no

14、t executed, stored procedure CQM.TEST$RP does not existORA-01085: preceding errors in deferred rpc to CQM.TEST$RP.REP_INSERTORA-02063: preceding 2 lines from BEIJING后来就可以拉1, 创建前数据要统一2, 运行execute dbms_repcat.suspend_master_activity(repg)后源数据库的表不可以再进行数据的插入!3, Job 可以停到 并不影响数据的复制(表怀疑与搞笑)4, 现在是同样的操作系统同样的

15、数据库版本5, 以上是在同一操作系统下测试AIX52076, 高级复制如果目的站点有问题或者网络有问题!源站点的数据操作将会出错!7, 如果数据不同步的情况下,对源站点的数据操作会产生ORA-01403: no data found的问题!8, 以上是数据的传输方式为同步的,如果修改成异步的传输方式上边的问题将不会出现的!9, 不可以使用truncate table 清理数据常用问题解答:Q:如何计算延迟事务将占用多少的资源?A:Deferred TransactionsOracle forwards data replication information by propagating (t

16、hat is, sending and executing) the RPCs that are generated by the internal triggers described previously. These RPCs are stored in the deferred transaction queue. In addition to containing the execution command for the internal procedure at the destination site, each RPC also contains the data to be

17、 replicated to the target site. Oracle uses distributed transaction protocols to protect global database integrity automatically and ensure data survivability.Deferred Transaction QueueThis queue stores the transactions (for example, DML) that are bound for another destination in the master group. O

18、racle stores RPCs produced by the internal triggers in the deferred transaction queue of a site for later propagation. Oracle also records information about initiating transactions so that all RPCs from a transaction can be propagated and applied remotely as a transaction. Oracles replication facili

19、ty implements the deferred transaction queue using Oracles advanced queuing mechanism.上面是Oracle联机文档中对于延迟事务和延迟事务队列的描述。开始的时候一直以为延迟事务应该是存在Oracle的一个内存结构中,所以总是担心如果复制环境中的网络长时间出现问题,那么会不会导致延迟事务队列占用大量的内存而使数据库的其它操作变慢,或者说超出了延迟事务可以使用的内存大小而产生错误。因为上面提到延迟事务队列使用的是Oracle的高级队列(Advanced Queue)算法,所以又查找了高级队列的文档,发现多处提到Ta

20、ble这个词,所以忽然明白所谓延迟事务的队列应该是存储在磁盘上的某些表中,这样陡然就解决了心中很多疑问,首先事务多只是占用硬盘空间,其次要想计算事务占用的资源可以通过表的block数来计算。于是通过SQL Trace,找到了延迟事务相关视图的基表。deftran对应DEF$_AQCALL表,通过执行计划也发现在统计大量延迟事务总数时候速度极为缓慢的原因,因为在作TABLE ACCESS FULL DEF$_AQCALL,同时还会作TABLE ACCESS FULL DEF$_AQERROR,还有UNION ALL的操作。deferror对应DEF$_ERROR表。defcall对应的也是DEF

21、$_AQCALL和DEF$_AQERROR表。现在我们检查一下DEF$_AQCALL表的信息。SQL; col owner for a10SQL; col object_name for a20SQL; select owner,object_name,object_id,data_object_id,object_type from dba_objects where object_name=DEF$_AQCALL;OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE- - - - -SYS DEF$_AQCALL 3913 SYNON

22、YMSYSTEM DEF$_AQCALL 3861 3861 TABLESYSTEM DEF$_AQCALL 3869 QUEUEExecuted in 0.06 seconds从上面的结果可以看到这个表是属于SYSTEM的,在SYS下有一个同义词。再检查一下segment的情况,我们可以从dba_segments或者dba_extents视图中查看。SQL; col tablespace_name for a20SQL; select owner,tablespace_name,bytes,blocks from dba_segments where segment_name=DEF$_AQ

23、CALL;OWNER TABLESPACE_NAME BYTES BLOCKS- - - -SYSTEM SYSTEM 65536 8Executed in 0.11 seconds由此我们已经可以知道作为高级复制中延迟事务存储所占用的资源,同时由于这是普通的表,那么当插入记录的时候当然也是会缓存在buffer cache中。这里不作讨论。也不再讨论DEF$_AQERROR表,因为只有在延迟事务产生错误时才会插入,如果高级复制环境中没有太多错误,这个表的资源占用可以不考虑。为了继续验证,现在测试环境中有REP_HOME复制组,其中的复制对象是SCOTT.EMP_2003表。断开网络连接的情况下

24、,我们插入10000条记录。再次检索DEF$_AQCALL表现在的情况。SQL; select owner,tablespace_name,bytes,blocks from dba_segments where segment_name=DEF$_AQCALL;OWNER TABLESPACE_NAME BYTES BLOCKS- - - -SYSTEM SYSTEM 2097152 256Executed in 0.08 seconds现在该表的大小已经扩大到2M,可以认为所有的复制数据和队列信息都存储在这张表中。SQL; select count(*) from DEF$_AQCALL;

25、COUNT(*)-10000Executed in 0.04 seconds再次证明确实是10000条数据。如果此时我们用repadmin用户检索defcall和deftran视图SQL; select count(*) from defcall;COUNT(*)-10000已用时间: 00: 00: 02.04SQL; select count(*) from deftran;COUNT(*)-1已用时间: 00: 00: 00.00可以看到deftran视图中只有一条记录,因为上面的10000条数据的插入是一个事务中完成的,所以在复制环境中作为一个延迟事务处理。而defcall中则是100

26、00条记录,详细查看内容,知道所有的cal事务号都相同,而callno不同,同时我们发现直接检索DEF$_AQCALL只需要0.04秒,而检索defcall视图却需要2秒,所以如果想要计算到底有多少数据需要处理的时候,我们可以直接从DEF$_AQCALL检索,这样可以缩短查询时间。Q:如果一张表没有主键,又确实需要复制,怎么办?A:不建议在高级复制的环境中出现这样的情况,应该确保每张表都有主键。如果确实存在这种情况,那么需要用DBMS_REPCAT.SET_COLUMNS来生成代用主键。execute DBMS_REPCAT.SET_COLUMNS(sname =; test, oname =

27、; tabel, column_list =; col1,col2,col3,col4);其中column_list是用逗号隔开的字段列表,不能有空格。注意:不要在执行set_columns之前生成对于没有主键的对象的复制支持,也就是不要运行generate_replication_support,否则会导致all_repobject视图中该对象状态变为ERROR,而无法再次set_columns。如果误运行了复制支持而又没有成功,那么需要删除掉这个复制对象再重新生成。也就是在对没有主键的表生成复制的时候,必须遵循以下顺序:create_master_repobject -; set_colu

28、mns -; generate_replication_supportQ:高级复制环境中出现长时间的网络问题会出现什么情况?A:由于高级复制的传播都是通过JOB来实现的,而大家知道Oracle对于JOB的执行有个限制,就是如果一个JOB执行失败了16次,那么这个JOB将会被标志为BROKEN,以后这个JOB再也不会被自动执行,除非是手动设置BROKEN为FALSE或者手动成功地运行一次JOB。这个特性给我们的实际应用中带来了一些麻烦,假设我们的PUSH JOB定义的时间间隔是一分钟,那么如果主体站点之间的网络出现长时间的问题,比如说超过了16分钟,也就是此时JOB已经失败了16次,那么PUSH

29、的JOB就被标志为BROKEN了,这样等到网络问题修复,会发现堆积的延迟事务也不会被PUSH到其它的主体站点上。如果不注意这个问题,往往就会出现严重的问题。解决方案是另外作一个JOB,这个JOB里面每隔一定时间自动检查那个PUSH JOB的状态,如果是BROKEN的,那么自动将其BROKEN状态重新设置为FALSE,这样下次又可以重新执行了。这个JOB中执行的存储过程基本上如下:DECLARECURSOR my_broken_jobs ISSELECT job FROM user_jobs WHERE broken = Y;BEGINFOR broken_job IN my_broken_jo

30、bs LOOPBEGINdbms_job.broken(broken_job.job, FALSE);EXCEPTIONWHEN OTHERS THENNULL;END;END LOOP;END;Q:如果高级复制环境中的主体定义站点损坏,如何将主体定义站点切换到另外的主体站点上?A:分为两种情况。备注:每次运行完repcat包以后都应该执行一次commit,因为某些rep的存储过程是不会自动commit的,同时这也是一个troubleshooting,一般的rep脚本都会较快的返回结果,如果一条命令之后长时间没有结果返回,那么很可能是上面的命令没有commit,取消掉当前的命令,然后作一次commit,再重新执行,一般都能够解决问题。一是只有主体定义站点损坏。假设站点A是主体定义站点,已经损坏,在复制环境中还有站点B,想作为新的主体定义

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

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