Oracle 데이터베이스 어댑터를 사용하여 데이터베이스 변경 알림 받기에 대한 고려 사항
이 항목에서는 Oracle 데이터베이스 어댑터를 사용하여 Oracle 데이터베이스에서 데이터베이스 알림을 받는 동안 유의해야 하는 몇 가지 고려 사항 및 모범 사례를 제공합니다.
어댑터를 사용하여 알림을 받는 동안 고려 사항
쿼리 알림을 받으려면 Oracle Database 어댑터를 사용하는 동안 다음을 고려해야 합니다.
Oracle 데이터베이스 어댑터는 Oracle 데이터베이스에서 수신하는 알림을 어댑터 클라이언트에 전달하기만 합니다. 어댑터는 다른 작업에 대한 알림을 구분하지 않습니다. 즉, 어댑터에 삽입 작업 또는 업데이트 작업에 대한 특정 알림인지에 대한 정보가 없습니다.
작업에 대한 알림 메시지는 해당 작업의 영향을 받는 레코드 수의 영향을 받지 않습니다. 예를 들어 Oracle 데이터베이스 테이블에 삽입된 레코드 수에 관계없이 어댑터 클라이언트는 하나의 알림 메시지만 수신합니다.
어댑터 클라이언트 애플리케이션에는 Oracle 데이터베이스에서 받은 알림의 종류를 해석하는 논리가 포함되어 있는 것이 좋습니다. 어댑터 클라이언트 애플리케이션은 수신된 알림 메시지의 Info> 요소에서< 정보를 추출하여 이 작업을 수행할 수 있습니다. 다음은 삽입 작업에 대해 받은 알림 메시지의 예입니다.
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://Microsoft.LobServices.OracleDB/2007/03/Notification/"> <Details> <NotificationDetails> <ResourceName>SCOTT.ACCOUNTACTIVITY</ResourceName> <Info>1</Info> <QueryId>0</QueryId> </NotificationDetails> </Details> <Info>Insert</Info> <ResourceNames> <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">SCOTT.ACCOUNTACTIVITY</string> </ResourceNames> <Source>Data</Source> <Type>Change</Type> </Notification>
Info 요소 내의 값을 확인<합니다.> 이 값은 알림 메시지가 수신된 작업에 대한 정보를 제공합니다. 애플리케이션에는 Info> 요소 내에서< 값을 추출한 다음 값에 따라 후속 작업을 수행하는 기능이 있어야 합니다. Oracle Database에서 특정 작업을 완료하기 위한 알림 메시지 처리 항목에는 Info> 요소 내에서 값을 추출하는 방법에 대한 지침이< 있습니다.
이상적으로는 클라이언트 애플리케이션이 알림을 받은 후 이후 알림이 동일한 레코드에 대해 수신되지 않도록 알림이 이미 수신된 레코드를 업데이트해야 합니다. 예를 들어 처리된 열이 있는 ACCOUNTACTIVITY 테이블을 생각해 보세요. ACCOUNTACTIVITY 테이블에 삽입된 모든 새 레코드의 경우 처리된 열의 값은 항상 'n'입니다. 예를 들어 삽입 작업 후에 ACCOUNTACTIVITY 테이블의 레코드는 다음과 같습니다.
계정 트랜잭션 ID 처리됨 10001 n 새로 삽입된 레코드에 대한 알림을 받으려면 어댑터 클라이언트가 NotificationStatement 바인딩 속성을 다음과 같이 설정합니다.
SELECT * FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’
알림을 받은 후 클라이언트 애플리케이션은 알림 문이 이미 알림을 받은 레코드에서 작동하지 않도록 처리된 열의 값을 'y'로 설정해야 합니다. 따라서 이를 위해 클라이언트 애플리케이션은 ACCOUNTACTIVITY 테이블에서 업데이트 작업을 수행해야 합니다. 업데이트 작업 후에 ACCOUNTACTIVITY 테이블의 동일한 레코드는 다음과 같습니다.
계정 트랜잭션 ID 처리됨 10001 y 흥미롭게도 업데이트 작업은 다시 어댑터 클라이언트에 알림을 보내고 전체 프로세스가 다시 반복됩니다. 따라서 클라이언트 애플리케이션에는 이러한 원치 않는 알림을 삭제하는 데 필요한 논리가 있어야 합니다.
NotifyOnListenerStart 바인딩 속성이 true이면 어댑터는 수신 위치가 시작될 때마다 어댑터 클라이언트에 알림을 보냅니다. 바인딩 속성을 사용하고 알림 메시지를 해석하는 방법에 대한 자세한 내용은 수신 위치 분석 후 Oracle 데이터베이스 변경 알림 받기를 참조하세요.
알림을 받기 위한 일반적인 오케스트레이션
이 섹션에서는 Oracle 데이터베이스 어댑터를 사용하여 알림을 받기 위한 일반적인 오케스트레이션 흐름을 간략하게 설명합니다.
오케스트레이션에서 가장 먼저 해야 할 일은 수신된 알림 종류를 검사 것입니다. 검사 작업은 다음과 같습니다.
수신 위치 다시 시작에 대한 알림을 받았는지 여부입니다.
삽입, 업데이트 또는 삭제와 같은 데이터베이스 테이블에 대한 작업에 대한 알림을 받았는지 여부입니다.
오케스트레이션은 수신되는 메시지 종류를 결정하려면 식 셰이프와 해당 xpath 쿼리를 포함해야 합니다.
알림 유형을 사용할 수 있으면 오케스트레이션에 수신된 알림 유형에 따라 특정 작업을 수행하기 위한 의사 결정 블록이 포함되어야 합니다. 이렇게 하려면 오케스트레이션에 결정 셰이프가 포함되어야 합니다. 결정 셰이프는 규칙 블록과 Else 블록으로 구성됩니다. 규칙 블록 내에서 조건을 지정한 다음, 조건이 충족되는 경우 특정 작업을 수행하도록 오케스트레이션 셰이프를 포함해야 합니다. Else 블록 내에서 조건이 충족되지 않는 경우 특정 작업을 수행하려면 오케스트레이션 셰이프를 포함해야 합니다.
위의 권장 사항은 BizTalk Server 사용하여 Oracle Database의 특정 작업을 완료하기 위한 알림 메시지 처리에 자세히 설명되어 있습니다.