Oracle英文版培訓(xùn)課件之Implement Streams:les13_第1頁
Oracle英文版培訓(xùn)課件之Implement Streams:les13_第2頁
Oracle英文版培訓(xùn)課件之Implement Streams:les13_第3頁
Oracle英文版培訓(xùn)課件之Implement Streams:les13_第4頁
Oracle英文版培訓(xùn)課件之Implement Streams:les13_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ApplyHandlersObjectivesAftercompletingthislesson,youshouldbeabletodothefollowing:DescribethepurposeofanapplyhandlerListthedifferenttypesofapplyhandlersDescribethepurposeofanerrorhandlerCreateanduseanapplyhandlerManageapplyhandlersforadatabaseApplyAnapplyprocessdequeuesLCRsandusermessagesfromaspecificqueueanddoeseitherofthefollowing:HandleseachLCRindividuallythoughpartofthesametransactionPassestheeventasaparametertoauser-definedprocedureCommitsatransactionaftersuccessfulcompletionofallLCRswithinthetransaction.MessageProcessingMessagehandlerDMLhandlerDDLhandlerLCRsUser-enqueued

messagesApplychangesDDLLCRsDMLLCRsDMLhandlerDMLLCRsA001LCRsA002A003QueueLCRLCRUsermessageUsermessageLCRLCRUsermessageLCRLCR…PrecommithandlerApplyHandlersUser-writtencustomapplyproceduresWritteninPL/SQL,Java,C,orC++Java,C,andC++proceduresmustbewrappedinPL/SQLbeforetheycanbeused.Canbeusedfor:CustomtransformationsColumnsubsettingorrenamingNormalizingordenormalizingdataPopulatingrelatedfieldsortablesImplementingeventprocessing

logicthatcannotbeprogrammed

usingrulesApplyHandlersforLCRMessagesSingleDDLhandlerallowedMultipleDMLhandlerssupportedforeachtableandforeachapplyprocessPrecommithandlerworkswithaDMLormessagehandlerExecuteLCRDMLhandlerDDLhandlerDMLhandlerTargettableLCRPrecommithandlerCreatinganApplyHandlerProcedureADML,DDL,ormessagehandlermusttakethefollowingform:YoucanspecifyaseparateDMLhandlerforasharedtableforeachofthefollowingoperations:INSERTUPDATEDELETELOB_UPDATEPROCEDUREuser_procedure(

parameter_nameINSYS.AnyData);DMLHandler:ExampleCREATEORREPLACEPROCEDUREconv_order_totals(lcr_anydataINSYS.AnyData)ISvalSYS.AnyData;...BEGINt:=lcr_anydata.getObject(lcr);val:=(lcr.get_value('new','ORDER_TOTAL'));t:=val.getNumber(ordtotal);val:=(lcr.get_value('new','CUSTOMER_ID'));t:=val.getChar(custid);SELECTus_exchange_rateINTOcurr_exFROMoe.currency_exchangesex,oe.customerscWHEREc.customer_id=custidANDc.country=ex.cid;ordtotal:=ordtotal*curr_ex;lcr.set_value('new','ORDER_TOTAL',SYS.AnyData.ConvertNUMBER(ordtotal));lcr.execute(true);END;DMLHandler:ExampleCREATEORREPLACEPROCEDUREconv_order_totals(lcr_anydataINSYS.AnyData)ISvalSYS.AnyData;...BEGINt:=lcr_anydata.getObject(lcr);val:=(lcr.get_value('new','ORDER_TOTAL'));t:=val.getNumber(ordtotal);val:=(lcr.get_value('new','CUSTOMER_ID'));t:=val.getChar(custid);SELECTus_exchange_rateINTOcurr_exFROMoe.currency_exchangesex,oe.customerscWHEREc.customer_id=custidANDc.country=ex.cid;ordtotal:=ordtotal*curr_ex;lcr.set_value('new','ORDER_TOTAL',SYS.AnyData.ConvertNUMBER(ordtotal));lcr.execute(true);END;ImplementingaDMLHandlerSpecifyaDMLhandlerwiththeDBMS_APPLY_ADM.SET_DML_HANDLERprocedure.BEGINDBMS_APPLY_ADM.SET_DML_HANDLER(object_name=>'OE.ORDERS',object_type=>'TABLE',operation_name=>'INSERT',user_procedure=>'OE.CONV_ORDER_TOTALS',apply_name=>'APPLY_SITE1_LCRS'assemble_lobs=>true);END;/DDLHandler:ExampleCREATEORREPLACEPROCEDUREaudit_ddl_actions

(evtINSYS.ANYDATA)ISlcrSYS.LCR$_DDL_RECORD;rcPLS_INTEGER;ddl_textCLOB;BEGINrc:=evt.getObject(lcr);DBMS_LOB.CreateTemporary(ddl_text,TRUE);lcr.GET_DDL_TEXT(ddl_text);INSERTINTOstrmadmin.ddl_historyVALUES(SYSDATE,lcr.GET_SOURCE_DATABASE_NAME(),lcr.GET_COMMAND_TYPE(),lcr.GET_OBJECT_OWNER(),lcr.GET_OBJECT_NAME(),lcr.GET_OBJECT_TYPE(),ddl_text,lcr.GET_EXTRA_ATTRIBUTE('USERNAME'));lcr.EXECUTE();DBMS_LOB.FreeTemporary(ddl_text);END;ImplementingaDDLHandlerUsetheddl_handlerparameterineitherofthefollowingtwoprocedures:DBMS_APPLY_ADM.CREATE_APPLY

DBMS_APPLY_ADM.ALTER_APPLY

BEGINDBMS_APPLY_ADM.ALTER_APPLY(apply_name=>'APPLY_SITE1_LCRS',ddl_handler=>'STRMADMIN.AUDIT_DDL_ACTIONS');END;/PrecommitHandlerCanbeusedwithuser-enqueuedeventsorcapturedeventsReceivesasinputthecommitSCNgeneratedatthesourcedatabaseEnablesyoutoperformactionsattheendofatransaction,beforeitiscommittedCommitSCNPrecommithandlerPrecommitHandler:ExampleCREATEORREPLACEPROCEDUREstrmadmin.audit_commit(cscnINNUMBER)ISBEGIN--Insertcommitinformationintodml_historyINSERTINTOstrmadmin.dml_history(timestamp,commit_scn)VALUES(SYSDATE,cscn);END;/ImplementingaPrecommitHandlerUsetheprecommit_handlerparameterineitherofthefollowingtwoprocedures:DBMS_APPLY_ADM.CREATE_APPLY

DBMS_APPLY_ADM.ALTER_APPLY

BEGINDBMS_APPLY_ADM.ALTER_APPLY(apply_name=>'apply_site1_lcrs',precommit_handler=>'strmadmin.audit_commit');END;/ErrorHandlerUser-writtencustomapplyprocedureWritteninPL/SQL,Java,C,orC++Java,C,andC++proceduresmustbewrappedinPL/SQLbeforetheycanbeused.AssociatedwithaspecificDMLoperationonatableExecutedwhenarowLCRraisesanapplyprocesserrorOnepertableDefaultApplywithErrorHandlerAttempttoapplyLCR.Checkforconflictsorapplyerrors.Iferrorsoccur,callauser-specifiederrorhandlingprocedure.Afterresolvingtheerror,applythechange.Forunresolvederrors,allLCRsassociatedwiththetransactionareplacedintotheerrorqueue.TheentiretransactionisrolledbackandplacedintheerrorqueueApplychangesAnnnErrorhandlerLCRConflict

handlerExampleofErrorHandlerCREATEORREPLACEPROCEDUREregions_pk_error(messageINANYDATA,…)ISreg_idNUMBER;…BEGINIFerror_numbers(1)IN(1,2290)THENad:=DBMS_STREAMS.GET_INFORMATION('CONSTRAINT_NAME');ret:=ad.GetVarchar2(errlog_rec.text);ELSEerrlog_rec.text:=NULL;ENDIF;ad:=DBMS_STREAMS.GET_INFORMATION('SENDER');ret:=ad.GETVARCHAR2(errlog_rec.sender);apply_name:=DBMS_STREAMS.GET_STREAMS_NAME();ret:=message.GETOBJECT(lcr);errlog_rec.object_name:=lcr.GET_OBJECT_NAME();errlog_mand_type:=lcr.GET_COMMAND_TYPE();errlog_rec.errnum:=error_numbers(1);errlog_rec.errmsg:=error_messages(1);…ENDregions_pk_error;ImplementinganErrorHandlerSpecifyanerrorhandlerbysettingtheuser_procedureanderror_handlerparametersoftheSET_DML_HANDLERprocedureinDBMS_APPLY_ADM.ForaspecificdatabaseobjectForaspecificDMLoperationAnerrorhandlermustbeofthefollowingform:PROCEDUREuser_procedure(evt INSYS.AnyData,error_stack_depthINNUMBER,error_numbersINDBMS_UTILITY.NUMBER_ARRAY,error_messagesINemsg_array);RestrictionsforApplyHandlerProceduresDonotCOMMITorROLLBACKintheapplyhandlerprocedure.IfyouaremodifyingtheLCRandthenusingtheEXECUTEmemberprocedureintheapplyhandlerprocedure:Donotmanipulatemorethanonerowinarowoperation.ForUPDATEorDELETE,includetheentirekeyofthetargettableinthelistofoldvalues.ForINSERT,includetheentirekeyofthetargettableinthelistofnewvalues.DonotmodifyLONG,LONGRAW,orLOBcolumndatainanLCR.CustomizingApplyHandlerActionsUtilitiesintheDBMS_STREAMSpackageenableyoutofurthercustomizetheactionstakenbyapplyhandlers,rules,ortransformations:GET_INFORMATIONGET_STREAMS_NAMEGET_STREAMS_TYPEMemberfunctionsoftheLCRrecordtypesalsoprovideinformationforcustomizingactions:GET_COMMAND_TYPEGET_COMMIT_SCNGET_COMPATIBLELOBAssemblyINSERTLOB_UPDATELOB_UPDATELOB_TRIMUPDATELCRsINSERTLOB

locatorLCRsImplementingLOBAssemblyDBMS_APPLY_ADM.SET_DML_HANDLER(object_name=>'PM.AD_DATA',object_type=>'TABLE',operation_name=>'UPDATE',error_handler=>false,user_procedure=>'PM.STAMP_AD_IMAGES',assemble_lobs=>TRUE);LOB

assemblyLOB

locatorAD_DATAManagingApplyHandlersByusingtheDBMS_APPLY_ADM.ALTER_APPLYprocedure,youcan:SpecifyorremoveamessageorDDLhandlerforanapplyprocessSpecifyorremoveaprecommithandlerforanapplyprocessWiththeDBMS_APPLY_ADM.SET_DML_HANDLERprocedure,youcan:SpecifyorremoveaDMLhandlerforashareddatabaseobjectSpecifyorremoveanerror

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論