GOLDENGATE9.50关于DDL复制读书笔记1、DDLmarkertable该表的缺省名称为:GGS_MARKER,用来存储数据库表中的DDL变化,该表只能插入INSERT;2、Sequenceonmarkertable用以标识表GGS_MARKER的列数据,类似于数据库的sequence数据;3、DDLhistorytableDDL历史记录表;4、ObjectIDhistorytable用以记录DDL语句操作的数据库对象;5、DDLtriggerDDL操作引发的操作,把DDL语句写入GGS_MARKER、以及history表;6、DDLSHEMA需要用来复制DDL操作的数据库用户名,必须在参数文件GLOBALS中声明;7、USERROLE用户用以复制DDL操作的规则8、Internalsetuptable;内部安装表,用以记录内部数据使用;9、DUMPDLLTABLES代表一系列表,用以存储DUMPDLL命令查询的数据库状态数据—元数据;10、DDL_PIN用以跟踪DDL操作的标记,以及性能提高的参数;11、ddl_cleartrace.sql清空DDL跟踪文件脚本;12、ddl_status.sql用来查询DDL安装包的安装情况;13、Marker_status.sql用以查询MARKER表的安装情况;14、Ddl_tracelevel.sql设置DDL跟踪文件的等级;15、ObjectIDhistorytable用以记录DDL语句操作的数据库对象;二、安装DDL的顺序1、首先确认安装使用的数据库用户,必须有SYSDBA权限;2、编写全局参数文件GLOBALSGGSSCHEMADATABASE_SYSDBA;3、一些参数和对象的名称改变必须在安装过程中修改,在运行过程中修改必须使用固定的脚本文件;并且参数名称的修改必须在GLOBALS文件中声明;4、关闭ORACLERECYCLE—9I中没有,否则将无法安装;5、安装目录必须和GOLDENGATE是同一个目录;6、三、数据库与DDL同步相关的指南1、GOLDENGATE支持DDL复制的目标和操作范围Clusters----集群Functions---函数Indexes---索引Packages---数据包Procedures—过程Roles---规则Sequences---序列号Synonyms---同义词---GOLDENGATE关于Synonyms复制,不复制Synonyms里面的数据;Tables---数据表Tablespaces---表空间Triggers---触发器Types---类型Views—视图materializedviews(alsoknownas--snapshots)物化视图users---用户2、ORACLE有些保留的SCHEMA是不允许使用的(注意)四、TABLEDEFINE---表的定义;当DDL数据被复制的时候,相关的表的数据转换,GOLDENGATE是不允许一些特殊的数据类型的转换的;参考详细可以支持的数据类型转换;DDL数据复制时候,目标和源数据库操作的对象必须是一致的;ASSUMETARGETDEFS参数在REPLICAT参数文件的使用,而SOURCEDEFS参数在源端使用,一旦数据库对象产生了DDL操作那必然,REP进程会ABEND;五、TRUNCATE操作GOLDENGATE支持TRUNCATE操作是独立与DDL同步的一部分内容;在9。5以前就有;目前9。5的DDL包支持所有包括TRUNCATE以及其它表操作的数据库表记录;在9。5以前的版本中专门用了GETTRUNCATES参数来控制;ThestandaloneTRUNCATEfeaturesupportsthereplicationofTRUNCATETABLE,butnootherDDL.ThefullDDLfeaturesupportsTRUNCATETABLE,ALTERTABLETRUNCATEPARTITION,andotherDDL六、ALTERTABLENAME和RENAMEGOLDENGATE处理两个DDL操作是将RENAME转换为了ALTERTABLENAME,但是RENAME并不需要使用SCHEMA,但是ALTERTABLENAME却需要SCHEMA;新表的名称不能超过18个字符;七、OPERATIONONLOBSCOLUMNS---大对象数据列复制的操作;DDL操作不会被复制,当指定的目标表正在执行DML操作的时候;EXT从数据库日志中读取到记录后,会自动按顺序产生事务的记录,所以数据库的状态数据—元数据用来被使用来解决这个问题,用以提示是否有DML操作出现;异常发生在大对象数据上,EXT抓取一个大对象数据的值通过回闪查询,但是ORACLE并不支持象除了DROP以外的DDL操作提供这样一个值的功能;当大对象数据列被操作的时候,大对象列的数据结构需要反射目前的元数据,但是在日志中,大队列的数据记录反映的是旧的数据库元数据;但是GOLDENGATE为了从结构上解决这个问题,GOLDENGATE通过名称、类型、长度、编译成一些的小列数据;这样大数据的读取就变成了从小列数据中取得了;但是由于DDL的出现,可能导致在小列数据DROP或则没有及时刷新,这样事务日志中记录的数据与实际的数据可能无法保证一致性;例如如果存在DDL将某一列删除后,重新建设了一个同名但是数据类型不同的列,这样复制进程REP在目标端可能导致错误;为了解决这个问题,注意:A、保证抓取时间的延迟必须在一个限度;B、或则保证DDL在DML后面被复制;C、如果让包含大对象数据列的表仅仅执行DM操作,表可以使用一个唯一的小数据字段作为主键,或则建设一个复合的主键,或则通过全字段组合识别,如果一定要使用DDL复制,必须注意的是“1、暂停源数据的DML的EXT;2、确保REP队列中的DML数据已经完成;3、然后执行DDL;4、恢复DML;八、OPERATIONONUDTS---DDL用于用户定义DDL复制操作需要注意的I、DDL可能包含了部分用户自己定义的DML应用范围内,导致应用错误;比如数据修改数据类型,而DML无法实现被复制;II、九、没有使用的字段UNUSERDCOLUMNS通常情况下,GOLDENGATE不支持通过表中没有使用的字段进行数据复制,但是9。5通过“DBOPTIONSALLOWUNUSEDCOLUMN“实现了这个功能;首先,两端都必须有这样一个没有使用的字段,这样在REP的参数文件中,使用“IncludeALTERTABLE...SETUNUSEDstatementsinyourDDLreplicationconfiguration.“十、CommentsinSQL如果DDL语句中保留了数据对象,那复制的语句也必然回保留那个数据对象;比如CREATESCHEMA1。TABLENAME1目标端自然也是CREATESCHEMA。TABLENAME1十一、Specialcharacters—特殊字符!,$,and#.字符被限制使用在参数文件中的mappedwithTABLEorMAP中;十二、Compilationerrors如果一个存储过程、功能、函数、功能包中的CREATE出错,但是GOLDENGATE还是会继续执行DDL复制的;十三、ALTERTABLEMOVETABLESPACE修改表空间大小必须要确认数据是否出现丢失或者改变的问题;十四、GoldenGate-relatedguidelinesforDDLsupport一些部署DDL同步的限制和知道考虑的地方;1、EnsuringdatacontinuityafterDDL—保证数据在复制DDL后的持续复制;例如,复制一个DML操作到一个源端数据库中由CREATE或则RENAME的表,EXT以及REP的配置文件中都必须在TABLE,和MAP参数中包含住,否则将出现DML错误;创建了一个新的用户,将新的数据表移动到新的用户名下,这样同样需要在配置文件里面增加制定的相关参数,否则将出现DML复制被丢失的情况;2、初始化导入initialload3、Wildcardresolution—通配符解决方案通过“*”与标准的配置语句结合,来实现DDL的同步,为了保证通配符的正常使用,通常参数WILDCARDRESOLVEparameterissettoDYNAMICbydefault;4、SQLEXEC在实现DDL复制功能的时候,使用SQLEXEC功能必须考虑到调用的存储过程或则SQL语句的函数可能和复制DDL操作所影响的对象可能一致,这样就必须保证在执行SQL时候,被DDL修改的数据库对象能够正确的实现所谓的SQLEXEC的调用;所以,DDL的操作必然是有相对的优先级的;而SQLEXEC调用的过程或则函数中包含的对象,在MGR启动以前,也就是DDL复制以前就是必须已经存在的;因此,DDL的复制操作的对象是和EXEC的对象是不可能一致的,所以必须给DDL的过滤条件给过滤开;否则DDL将很可能修改了某些数据对象的结构,导致SQLEXEC无法实现调用;5、UserExitsGoldenGateuserexitsarenotsupportedforusewithDDLsynchronization6、IdentifyingGoldenGateDDLoperations区分GOLDENGATEDDL操作,ToidentifyGoldenGateDDLoperations,thefollowingcommentispartofeachExtractandReplicatDDLstatement:/*GOLDENGATE_DDL_REPLICATION*/7、ControllingthepropagationofReplicatDDL缺省的情况下,EXT忽略本地REP的DDL复制操作;通过DDL语句中的/*GOLDENGATE_DDL_REPLICATION*/来实现;DDLOPTIONS下的参数GETREPLICATES、IGNOREREPLICATES来控制本地的REP的DDL复制操作是否被EXT进程捕获或则忽略;DDLOPTIONS的参数GETAPPLOPS、IGNOREAPPLOPS除了控制REP外的DDL还包括控制从数据库事务的DDL是否被EXT进程抓取或则忽略;通常意义上来说,在配置双向的时候,我们通常使用DDLOPTIONSIGNOREREPLICATES,GETAPPLOPS;这样EXT只抓取事物交易中的DDL,而忽略来自REP的操作;在一个级联配置中,使用DDLOPTIONS参数GETREPLICATES,IGNOREAPPLOPS.ExtractmustcapturetheDDLfromReplicatoneachintermediarysystemandcascadeittothenextsystemdownstream.8、DDLanddatapumps---数据泵AdatapumpdoesnotprocessDDL.Itcanonlypassittothenextprocess.WithoutDDLsupport,adatapumpcannotfilter—过滤ormanipulate—操作控制DMLonobjectsaffectedbyDDLoperations.Thepumpmustbeconfiguredinpass-through—传递mode.9、configurepass-throughmode---如何配置传递模式1在datapump的参数文件中引如.PASSTHRU参数,如果遇到DLL操作,而没有设置PASSTHRU,datapump会abend2.不要为datapump配置任何DLL的参数:DDLOPTIONS,DDLSUBST,DDLERROR,PURGEDDLHISTORY,PURGEMARKERHISTORY或则其它的跟踪使用DDL的参数,这些参数都将导致datapumpabend.10