스클렉세츠
유효 기간
추출 및 복제
설명
SQLEXEC 매개변수를 사용하여 Oracle GoldenGate 처리 컨텍스트 내에서 내장 프로시저, 질의 또는 데이터베이스 명령을 실행할 수 있습니다. SQLEXEC Oracle GoldenGate는 데이터베이스와 직접 통신하여 데이터베이스에서 지원하는 작업을 수행할 수 있습니다. 이 작업은 열 변환에 대한 값 검색과 같은 동기화 프로세스의 일부일 수도 있고, 데이터베이스 내에서 작업을 실행하는 내장 프로시저 실행과 같은 데이터 추출 또는 복제와 무관할 수도 있습니다.
주: SQLEXEC는 최소한의 세계화 지원을 제공합니다. 소스 캡처의 캡처 매개변수 파일에 SQLEXEC를 사용하려면 소스 .prm 파일의 클라이언트 문자 집합이 소스 데이터베이스 문자 집합의 동일하거나 상위 집합인지 확인하십시오.
SQLEXEC는 다음과 같이 작동합니다.
-
SQL 내장 프로시저를 실행하거나 query하거나 데이터베이스 명령을 실행하는 파라미터 파일의 루트 레벨에 있는 독립형 명령문으로 사용 독립형 명령문인
SQLEXEC는 Oracle GoldenGate 처리 중TABLE또는MAP문과 독립적으로 실행됩니다. 독립형SQLEXEC매개변수에 사용되는 경우 질의 또는 프로시저에 매개변수를 포함할 수 없습니다. "독립형SQLEXEC"을 참조하십시오. -
TABLE또는MAP매개변수의 일부로 내장 프로시저를 실행하거나 매개변수를 사용하거나 사용하지 않고 질의를 실행합니다. 파라미터와 함께 사용할 경우 실행되는 프로시저나 query는 소스 또는 대상 행의 입력 파라미터를 받아들이고 출력 파라미터를 전달할 수 있습니다. "TABLE또는MAP매개변수의SQLEXEC"을 참조하십시오. -
원격 캡처 사용 사례에서
SQLEXEC를 사용하면 Extract가 처리하는 각 레코드에 대해 순차적으로SQLEXEC작업을 수행해야 하므로 추가 대기 시간이 발생할 수 있습니다.SQLEXEC가 필요한 특수 필터링이 원격 허브 Extract에 의해 수행되고 성능에 미치는 영향이 너무 심각한 경우 Extract 프로세스를 소스 데이터베이스에 더 가깝게 이동해야 할 수 있습니다. 주의: 데이터베이스에 대해SQLEXEC프로시저를 실행할 때는 특히 운용 중인 데이터베이스에 대해 주의하십시오. 프로시저가 커밋한 변경 사항은 기존 데이터를 덮어쓸 수 있습니다.
주: SQLEXECONBEFOREIMAGE 매개변수는 이전 이미지 레코드에서 SQLEXEC 실행을 지원합니다.
주: EXEC 유형이 TRANSACTION, SOURCEROW 또는 ONCE인 경우 PK 업데이트 또는 통합 업데이트 레코드에서 SQLEXECONBEFOREIMAGE 매개변수가 무시됩니다.
독립형 SQLEXEC
독립형 SQLEXEC 매개변수는 매개변수 파일의 루트 레벨에서 사용되며 TABLE 또는 MAP 매개변수와 독립적으로 작동합니다. 다음은 독립형 SQLEXEC 매개변수 사용에 대한 지침입니다.
-
독립형
SQLEXEC문은 다른 매개변수를 기준으로 매개변수 파일에 나타나는 순서대로 실행됩니다. -
SQLEXEC프로시저 또는 질의는 모든 예외 처리를 포함해야 합니다. -
SQLEXEC문을 실행할 때는 데이터베이스에 대한 올바른 SQL 구문을 사용하여 질의 또는 프로시저를 올바르게 구성해야 합니다. 그렇지 않으면 제자리에 있는 오류 처리 규칙에 관계없이 Replicat가 비정상 종료됩니다. 허용 가능한 SQL 구문은 데이터베이스 공급업체가 제공한 SQL 참조 설명서를 참조하십시오. -
Oracle GoldenGate 사용자에 대한 데이터베이스 인증서가
SQLEXEC절 앞에 와야 합니다. Extract의 경우 데이터베이스에 적합한USERIDALIAS매개변수를 사용합니다. Replicat의 경우USERIDALIAS매개변수를 적절하게 사용합니다. -
Oracle GoldenGate 프로세스에서 사용하는 데이터베이스 인증서는 SQL을 실행하는 인증서입니다. 이 자격 증명에는 명령 및 내장 프로시저를 실행하고 데이터베이스 제공 프로시저를 호출할 수 있는 권한이 있어야 합니다.
-
독립형
SQLEXEC문은 레코드에서 입력 매개변수를 가져오거나 출력 매개변수를 전달하는 데 사용할 수 없습니다.TABLE또는MAP문 내에서SQLEXEC문을 사용하여 내장 프로시저와 질의에 매개변수를 사용할 수 있습니다. "TABLE또는MAP매개변수의SQLEXEC"을 참조하십시오. -
독립형
SQLEXEC문의 영향을 받는 모든 객체는 Oracle GoldenGate 프로세스를 시작하기 전에 존재해야 합니다. 이 때문에 해당 객체에 대해DDL지원을 사용 안함으로 설정해야 합니다. 그렇지 않으면SQLEXEC프로시저 또는 질의가 실행되기 전에DDL작업이 객체의 구조를 변경하거나 삭제할 수 있습니다. -
객체 이름은 두 부분 또는 세 부분 이름 형식으로 정규화되어야 합니다.
-
z/OS의 Db2의 경우 Oracle GoldenGate는 ODBC
SQLExecDirect함수를 사용하여 SQL 문을 동적으로 실행합니다. ODBC는 SQL 문이 실행될 때마다 지정된 간격으로 SQL 문을 준비합니다. 이 함수를 지원하려면 SQL을 동적으로 준비하도록 연결된 데이터베이스 서버를 구성해야 합니다. 자세한 내용은 Db2에서 z/OS 설명서를 참조하십시오.
독립형 SQLEXEC 사용에 대한 추가 정보 얻기
SQLEXEC 사용 방법에 대한 자세한 내용은 SQLEXEC를 사용하여 명령, 내장 프로시저 및 질의 실행을 참조하십시오.
독립형 SQLEXEC 구문
SQLEXEC
{'call <procedure_name>()' | '<SQL_query>' | '<database_command>'}
[EVERY <n> {SECONDS | MINUTES | HOURS | DAYS}]
[ONEXIT]
[, THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])]
'호출 <procedure_name ()'>
실행할 내장 프로시저의 이름을 지정합니다. 명령문을 작은 따옴표로 묶습니다. call 키워드는 필수입니다. 다음은 독립형 SQLEXEC를 사용하여 프로시저를 실행하는 방법의 예입니다.
SQLEXEC 'call prc_job_count ()'
<'SQL_query'>
실행할 질의의 이름을 지정합니다. query를 작은 따옴표로 묶습니다. 데이터베이스에 필요한 것과 동일한 형식으로 대소문자를 구분하는 객체 이름을 지정합니다. 다음은 독립형 SQLEXEC를 사용하여 질의를 실행하는 방법의 예입니다.
SQLEXEC ' select x from dual '
다중 행 쿼리의 경우 각 행에 작은 따옴표를 사용합니다. 최상의 결과를 얻으려면 각 시작 따옴표 다음에 각 끝 따옴표 앞에 공백을 입력하거나 적어도 각 끝 따옴표 앞에 공백을 입력하십시오.
<'database_command'>
데이터베이스 명령을 실행합니다. 다음은 독립형 SQLEXEC로 데이터베이스 명령을 실행하는 방법의 예입니다.
SQLEXEC 'SET TRIGGERS OFF'
EVERY <n> {SECONDS | MINUTES | HOURS | DAYS}
독립형 내장 프로시저나 질의가 정의된 간격으로 실행됩니다(예:
SQLEXEC 'call prc_job_count ()' EVERY 30 SECONDS
간격은 양의 정수여야 합니다.
ONEXIT
Extract 또는 Replicat 프로세스가 정상적으로 정지할 때 SQL을 실행합니다. 예:
SQLEXEC 'call prc_job_count ()' ONEXIT
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
조정 Replicat의 지정된 스레드에만 SQLEXEC를 실행합니다.
<threadID>[, <threadID>][, ...]
스레드 ID 또는 threadID, threadID, threadID 형식의 콤마로 구분된 스레드 목록을 지정합니다.
[, <thread_range>[, <thread_range>][, ...]
threadIDlow-threadIDhigh 형식의 스레드 범위 또는 threadIDlow-threadIDhigh, threadIDlow-threadIDhigh 형식의 콤마로 구분된 범위 목록을 지정합니다.
threadID, threadID, threadIDlow-threadIDhigh 등의 형식 조합이 허용됩니다.
THREADS 절을 사용하지 않을 경우 ADD REPLICAT 명령으로 이 Replicat 그룹에 대해 구성된 모든 스레드에서 SQL이 실행됩니다. 그러나 SQL이 장벽 트랜잭션 기준을 충족하면 실제 스레드 매핑에 관계없이 전체 SQLEXEC 문이 스레드 0에 의해 처리됩니다.
TABLE 또는 MAP 파라미터의 SQLEXEC
TABLE 또는 MAP 매개변수의 SQLEXEC 매개변수를 사용하여 매개변수를 허용하거나 허용하지 않는 내장 프로시저 또는 질의를 실행할 수 있습니다. 다음은 MAP 또는 TABLE 문에서 사용될 때의 SQLEXEC 종속성 및 제한 사항입니다.
-
SQL은 Oracle GoldenGate 프로세스가 실행 중인 데이터베이스 사용자에 의해 실행됩니다. 이 유저는 내장 프로시저를 실행하고 데이터베이스 제공 프로시저를 호출할 수 있는 권한이 있어야 합니다.
-
SQLEXEC문을 실행할 때 질의 또는 프로시저가 올바르게 구성되어야 합니다. Replicat가 질의 또는 프로시저에 문제가 발생하면 오류가 발생한 처리 규칙에도 불구하고 프로세스가 즉시 종료됩니다. 허용 가능한 SQL 구문은 데이터베이스 공급업체가 제공한 SQL 참조 설명서를 참조하십시오. -
대상 데이터베이스에 대한 Replicat 트랜잭션의
COMMIT작업도 원래 소스 트랜잭션의 경계 내에서SQLEXEC문에서 수행된DML변경사항을 커밋합니다. Extract가 SQL 트랜잭션을 수행하지 않기 때문에 Extract에 대해서는 그렇지 않습니다. Extract에SQLEXEC를 사용하는 경우 암시적 커밋을 사용으로 설정하거나SQLEXEC프로시저 내에서 명시적 커밋을 실행할 수 있습니다. -
작은 따옴표로 리터럴을 지정합니다. 데이터베이스에서 지정된 것과 동일한 방식으로 대소문자를 구분하는 객체 이름을 지정합니다.
-
기본 키 열의 값을 변경하는 데
SQLEXEC를 사용하지 마십시오. 기본 키 값이 Extract에서 Replicat로 전달됩니다. 없으면 Replicat 작업을 완료할 수 없습니다. 기본 키 값을SQLEXEC로 변경해야 하는 경우 원래 키 값을 다른 열에 매핑한 다음 해당 열을TABLE및MAP매개변수의KEYCOLS옵션을 사용하여 대체 키로 정의하여 오류를 방지할 수 있습니다. -
z/OS의 Db2의 경우 Oracle GoldenGate는 ODBC
SQLExecDirect함수를 사용하여 SQL 문을 동적으로 실행합니다. ODBC는 SQL 문이 실행될 때마다 지정된 간격으로 SQL 문을 준비합니다. 이 함수를 지원하려면 SQL을 동적으로 준비하도록 연결된 데이터베이스 서버를 구성해야 합니다. 자세한 내용은 Db2에서 z/OS 설명서를 참조하십시오. -
Oracle GoldenGate를 사용하여
DDL를 복제하는 경우 SQL을 실행하기 전에 내장 프로시저 또는 질의의 영향을 받는 모든 객체가 올바른 구조로 존재해야 합니다. 따라서 구조에 영향을 주는 이러한 객체의DDL(예:CREATE또는ALTER)은SQLEXEC가 실행되기 전에 실행해야 합니다. -
SQLEXEC문의 모든 객체 이름은 데이터베이스에 적합한 두 부분 또는 세 부분 이름으로 정규화되어야 합니다. -
데이터 펌프 Extract 그룹에서 통과 모드로 처리 중인 테이블에 대해서는
SQLEXEC를 사용하지 마십시오. -
다음 데이터 유형은 입력 및 출력 매개변수에 대해
SQLEXEC에서 지원됩니다.-
숫자 데이터 형식
-
날짜 데이터 형식
-
문자 데이터 유형
-
-
조정된 Replicat에 의해 실행되는 경우
SQLEXEC는MAP문의THREAD또는THREADRANGE옵션으로 지정된 스레드 또는 스레드에 의해 실행됩니다. 그러나SQLEXEC가COORDINATED키워드를 포함하는MAP매개변수에 지정된 경우 실제 스레드 매핑에 관계없이ID번호가 가장 낮은 스레드에 의해 자동으로 장벽 트랜잭션으로 실행됩니다.
TABLE 또는 MAP의 SQLEXEC 구문
SQLEXEC (
{SPNAME <procedure_name>[, ID <logical_name>] |
ID <logical_name>, QUERY ' <SQL_query> '}
{, PARAMS [OPTIONAL | REQUIRED] <parameter_name> = {<source_column> | <OGG_function>} |
NOPARAMS}
[, AFTERFILTER | BEFOREFILTER]
[, ALLPARAMS {OPTIONAL | REQUIRED}]
[, ERROR {IGNORE | REPORT | RAISE | FINAL | FATAL}]
[, EXEC {MAP | ONCE | TRANSACTION | SOURCEROW}][, MAXVARCHARLEN <bytes>]
[, PARAMBUFSIZE <bytes>]
[, TRACE]
[, ...]
[, BEFORE_col1 = @BEFORE(col1),
)
SPNAME <procedure_name>[, ID <logical_name>]
내장 프로시저를 실행합니다.
SPNAME <procedure_name>
실행할 프로시저의 이름을 지정합니다.
다음 예제는 lookup라는 내장 프로시저의 단일 실행을 보여줍니다. 이 경우 프로시저의 실제 이름이 사용됩니다. 논리적 이름은 필요하지 않습니다.
SQLEXEC (SPNAME lookup), PARAMS (param1 = srccol)), &
COLMAP (targcol = lookup.param1);
ID <logical_name>
프로시저에 대한 선택적 논리적 이름을 정의합니다. 예를 들어, lookup라는 프로시저의 논리적 이름은 lookup1, lookup2 등일 수 있습니다. 이 옵션을 사용하여 MAP 문 내에서 프로시저를 여러 번 실행합니다. 프로시저는 MAP 문당 최대 20회 실행할 수 있습니다. 프로시저를 한 번 실행할 때는 ID가 필요하지 않습니다.
다음 예에서는 ID 옵션을 사용하여 조회 테이블에서 값을 가져오는 내장 프로시저의 다중 실행을 사용으로 설정하는 방법을 보여줍니다. 값은 대상 열에 매핑됩니다.
SQLEXEC (SPNAME lookup, ID lookup1, &
PARAMS (long_name = current_residence_state)), &
SQLEXEC (SPNAME lookup, ID lookup2, &
PARAMS (long_name = birth_state)), &
COLMAP (custid = custid, current_residence_state_long = lookup
1.long_name, & birth_state_long = lookup2.long_name);
`ID
질의를 실행합니다.
ID <logical_name>
질의에 대한 논리적 이름을 정의합니다. 질의 결과에서 값을 추출하려면 논리적 이름이 필요합니다. <ID logical_name>는 질의에서 반환된 열 값을 참조합니다.
QUERY '<SQL_query>'
데이터베이스에 대해 실행할 SQL 질의 구문을 지정합니다. 질의는 SELECT 문으로 결과를 반환하거나, INSERT, UPDATE 또는 DELETE 문을 실행할 수 있습니다. SELECT 문은 하나의 행만 반환해야 합니다. 다중 행이 반환되면 첫번째 행만 처리됩니다. SELECT statements.The 질의에 대해 INTO ... 절을 지정하지 마십시오. 질의가 실행 중인 데이터베이스에 대해 적합한 표준 질의 언어여야 합니다. 대부분의 질의에는 입력 매개변수에 대한 위치 표시자가 필요합니다. query 내에서 파라미터를 지정하는 방법은 다음과 같이 데이터베이스 유형에 따라 다릅니다.
- Oracle의 경우 입력 매개변수는 다음 예와 같이 콜론(:)과 매개변수 이름을 차례로 사용하여 지정됩니다.
'SELECT NAME FROM ACCOUNT WHERE SSN = :SSN AND ACCOUNT = :ACCT'
- 다른 데이터베이스의 경우 다음 예제와 같이 물음표를 사용하여 입력 매개변수를 지정합니다.
'SELECT NAME FROM ACCOUNT WHERE SSN = ? AND ACCOUNT = ?'
질의는 작은 따옴표 안에 한 행에 포함되어야 합니다. 데이터베이스의 파라미터 이름에는 따옴표가 필요하지 않습니다.
다음 예에서는 Oracle 및 SQL Server 쿼리에 대해 각각 SQLEXEC 쿼리를 사용하는 방법을 보여 줍니다.
Oracle 예제:
MAP sales.account, TARGET sales.newacct, &
SQLEXEC (ID lookup, &
QUERY 'select desc_col into desc_param from lookup_table &
where code_col = :code_param', &
PARAMS (code_param = account_code)), &
COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);
SQL Server 예제:
MAP sales.account, TARGET sales.newacct, &
SQLEXEC (ID lookup, &
QUERY 'select desc_col into desc_param from lookup_table &
where code_col = ?', &
PARAMS (p1 = account_code)), &
COLMAP (newacct_id = account_id, &
newacct_val = lookup.desc_param);
PARAMS [OPTIONAL | REQUIRED] <parameter_name> = {<source_column> | <OGG_function>} | NOPARAMS
프로시저 또는 질의가 매개변수를 수락할지 여부를 정의하고, 예인 경우 매개변수를 입력 소스에 매핑합니다. PARAMS 절 또는 NOPARAMS를 사용해야 합니다.
OPTIONAL |
REQUIRED |
매개변수 값이 누락된 경우 프로시저 또는 질의가 실행되는지 여부를 결정합니다.
OPTIONAL는 SQL 실행에 매개변수 값이 필요하지 않음을 나타냅니다. 데이터베이스 작업에서 필수 소스 열이 누락되었거나 소스 열이 누락되어 열 변환 함수를 성공적으로 완료할 수 없는 경우 SQL이 실행됩니다. OPTIONAL는 Oracle을 제외한 모든 데이터베이스에 대한 기본값입니다. Oracle의 경우 매개변수가 선택 사항인지 여부는 내장 프로시저 정의를 검색할 때 자동으로 결정됩니다.
REQUIRED는 매개변수 값이 있어야 함을 나타냅니다. 매개변수 값이 없으면 SQL이 실행되지 않습니다.
<parameter_name> = {<source_column> | <OGG_function>}
매개변수 이름을 입력을 제공하는 열 또는 함수에 매핑합니다. 다음 데이터 유형은 입력 및 출력 매개변수에 대해 SQLEXEC에서 지원됩니다.
-
숫자 데이터 형식
-
날짜 데이터 형식
-
문자 데이터 유형
<parameter_name>는 다음 중 하나임:
-
내장 프로시저의 경우 입력을 받아들일 수 있는 프로시저의 모든 파라미터 이름입니다.
-
Oracle 질의의 경우 선행 콜론을 제외한 질의의 입력 매개변수 이름입니다. 예를 들어,
:vemplid는PARAMS절에서vemplid로 지정됩니다. Oracle에서는 입력 파라미터의 논리적 이름을 지정할 수 있습니다.
SQLEXEC (ID appphone, QUERY ' select per_type from ps_personal_data '
' where emplid = :vemplid '
' and per_status = 'N' and per_type = 'A' ',
PARAMS (vemplid = emplid)),
TOKENS (applid = @GETVAL(appphone.per_type));
- 비Oracle 질의의 경우
P <n>입니다. 여기서<n>는 1부터 시작하여 명령문 내의 매개변수 번호입니다. 예를 들어, 두 개의 매개변수가 있는 질의에서<parameter_name>항목은p1 and p2입니다. 데이터베이스에p가 대문자여야 하는지 아니면 소문자여야 하는지 고려합니다.
SQLEXEC (ID appphone, QUERY ' select per_type from ps_personal_data '
' where emplid = ? '
' and per_status = 'N' and per_type = 'A' ',
PARAMS (p1 = emplid)),
TOKENS (applid = @GETVAL(appphone.per_type));
<source_column>는 입력을 제공하는 소스 열의 이름입니다. 기본적으로 지정된 열이 로그에 없는 경우(레코드에는 갱신된 열의 값만 포함됨) 이 매개변수는 프로시저 또는 매개변수 질의에 의해 지정된 기본값을 가정합니다.
<OGG_function>은 입력을 제공하기 위해 실행되는 Oracle GoldenGate 열 변환 함수의 이름입니다. "테이블 및 열 매핑 함수"를 참조하십시오.
내장 프로시저 또는 query의 출력 값을 입력으로 FILTER 또는 COLMAP 절에 전달하려면 다음 구문을 사용합니다.
{<procedure_name> | <logical_name>}.<parameter>
설명:
-
<procedure_name>는SQLEXEC문에서SPNAME에 대해 제공된 값과 일치해야 하는 내장 프로시저의 실제 이름입니다. Oracle GoldenGate 실행 과정에서 프로시저를 한 번 실행하는 경우에만 이 인수를 사용합니다. -
<logical_name>는SQLEXEC의ID옵션으로 지정된 논리적 이름입니다. 프로시저가MAP문 내에서 여러 번 실행되는 경우 이 인수를 사용하여 질의 또는 내장 프로시저의 인스턴스에서 입력 값을 전달합니다. -
<parameter>는 반환된 값을 추출하는 경우 매개변수 이름 또는RETURN_VALUE입니다. 기본적으로 출력 값은 매개변수당 255바이트로 잘립니다. 출력 매개변수가 더 길어야 하는 경우MAXVARCHARLEN옵션을 사용합니다. 주: 위 구문 대신@GETVAL함수를 사용할 수 있습니다.
다음 예제는 Oracle 소스 및 대상 테이블 집합과 조회 테이블에 적용됩니다. 이 예제는 내장 프로시저의 단일 인스턴스 및 내장 프로시저의 다중 인스턴스에 대해 테이블 매개변수가 전달되는 방법을 보여줍니다.
소스 테이블 고객:
custid Number
current_residence_state Char(2)
birth_state Char(2)
대상 테이블 cust_extended:
custid Number
current_residence_state_long Varchar(30)
birth_state_long Varchar(30)
룩업 테이블 state_lookup
abbreviation Char(2)
long_name Varchar(30)
다음 예제는 한 번 실행하여 조회 테이블에서 값을 가져오는 내장 프로시저의 사용을 보여줍니다. cust 테이블의 레코드를 처리할 때 Oracle GoldenGate는 열 맵을 실행하기 전에 lookup 내장 프로시저를 실행합니다. 프로시저의 long_name 매개변수는 birth_state 소스 column.The 값의 입력을 COLMAP 문의 대상 열 birth_state_long에 매핑합니다.
MAP sales.cust, TARGET sales.cust_extended, &
SQLEXEC (SPNAME lookup, &
PARAMS (long_name = birth_state)), &
COLMAP (custid = custid, &
birth_state_long = lookup.long_name);
다음 예에서는 ID 옵션을 사용하여 조회 테이블에서 값을 가져오는 내장 프로시저의 다중 실행을 사용으로 설정하는 방법을 보여줍니다. 값은 대상 열에 매핑됩니다.
MAP sales.cust, TARGET sales.cust_extended, &
SQLEXEC (SPNAME lookup, ID lookup1, &
PARAMS (long_name = current_residence_state)), &
SQLEXEC (SPNAME lookup, ID lookup2, &
PARAMS (long_name = birth_state)), &
COLMAP (custid = custid, current_residence_state_long = lookup1.long_name, & birth_state_long = lookup2.long_name);
AFTERFILTER |
BEFOREFILTER |
AFTERFILTER 및 BEFOREFILTER를 사용하여 MAP 문의 FILTER 절과 관련하여 내장 프로시저 또는 질의를 실행할 시기를 지정합니다.
AFTERFILTER
FILTER 문 뒤에 SQL이 실행되도록 합니다. 이렇게 하면 필터가 성공하지 못할 경우 SQL 실행 오버헤드를 건너뛸 수 있습니다. 이는 기본값입니다.
BEFOREFILTER
필터에서 결과를 사용할 수 있도록 FILTER 문 앞에 SQL이 실행되도록 합니다.
다음은 BEFOREFILTER를 사용하는 예제입니다.
SQLEXEC (SPNAME check, NOPARAMS, BEFOREFILTER)
ALLPARAMS [OPTIONAL |
REQUIRED] |
ALLPARAMS를 내장 프로시저 또는 질의를 실행하기 위해 지정된 모든 매개변수가 존재해야 하는지 여부를 결정하는 전역 규칙으로 사용합니다. PARAMS 절 내에 설정된 개별 매개변수에 대한 규칙은 전역 규칙 집합을 ALLPARAMS로 대체합니다.
OPTIONAL
SQL에서 모든 파라미터가 있는지 여부를 실행할 수 있습니다. 이는 기본값입니다.
REQUIRED
SQL을 실행하려면 모든 파라미터가 있어야 합니다.
다음은 OPTIONAL를 사용하는 예제입니다.
SQLEXEC (SPNAME lookup,
PARAMS (long_name = birth_state, short_name = state),
ALLPARAMS OPTIONAL)
ERROR {IGNORE |
REPORT |
RAISE |
FINAL |
FATAL} |
ERROR를 사용하여 내장 프로시저 또는 질의와 연관된 오류에 대한 응답을 정의합니다. 명시적 오류 처리가 없으면 Oracle GoldenGate 프로세스가 오류 시 비정상 종료됩니다. 프로시저에서 오류를 반환하는지 확인하고 ERROR를 사용하여 응답을 지정합니다.
Oracle GoldenGate 21c를 사용하면 SQL 유형 오류에 따라 다양한 동작을 지정할 수 있습니다.
다음 예제는 내장 프로시저 조회를 실행할 때 SQL 오류 코드 1403 또는 1405가 감지될 때 비정상 종료 ER 프로세스를 보여줍니다. 다른 모든 오류가 보고되고 복제가 계속됩니다.
SQLEXEC ( SPNAME lookup,
PARAMS( long_name = birth_state, short_name = state),
ERROR REPORT, ERROR FATAL (1403, 1405) );
IGNORE
Oracle GoldenGate가 내장 프로시저 또는 질의와 연관된 모든 오류를 무시하고 처리를 계속하도록 합니다. 결과 매개변수 추출로 인해 "열 누락" 조건이 발생합니다. 이는 기본값입니다.
REPORT
내장 프로시저 또는 query와 연관된 모든 오류가 폐기 파일에 보고되도록 합니다. 보고서는 오류의 원인을 추적하는 데 유용합니다. 여기에는 오류 설명과 프로시저 또는 query에 전달되는 파라미터의 값이 모두 포함됩니다. Oracle GoldenGate는 오류를 보고한 후 처리를 계속합니다.
RAISE
REPERROR 매개변수로 설정된 규칙에 따라 오류를 처리합니다. Oracle GoldenGate는 오류를 처리하기 전에 현재 MAP 문과 연관된 다른 내장 프로시저 또는 질의를 계속 처리합니다.
FINAL
프로시저 또는 질의와 연관된 오류가 발생하면 나머지 내장 프로시저 및 질의가 생략된다는 점을 제외하면 RAISE와 유사합니다. 오류 처리가 오류 직후 호출됩니다.
FATAL
프로시저 또는 질의와 연관된 오류가 발생하는 즉시 Oracle GoldenGate가 비정상 종료되도록 합니다.
EXEC {MAP |
ONCE |
TRANSACTION |
SOURCEROW} |
출력 매개변수를 추출하는 경우 EXEC를 사용하여 MAP 문의 내장 프로시저 또는 질의가 실행되는 빈도 및 결과가 적합한 것으로 간주되는 기간을 제어합니다.
MAP
지정된 각 소스-대상 테이블 맵에 대해 프로시저 또는 질의를 한 번 실행합니다. MAP를 사용하면 소스 테이블이 동일한 후속 맵에 대해 부적합한 결과가 렌더링됩니다. MAP가 기본값입니다.
다음 예에서는 기본값 MAP의 잘못된 사용을 보여줍니다. MAP가 기본값이므로 SQLEXEC 문에 명시적으로 나열할 필요가 없습니다. 이 예제에서 소스 테이블은 별도의 MAP 매개변수로 서로 다른 두 대상 테이블에 매핑됩니다. 이 경우 결과는 첫번째 매핑에 대해서만 유효합니다. lookup 프로시저의 결과는 두번째 MAP 매개변수가 실행될 때까지 만료되며, 두번째 MAP는 "열 누락" 조건을 생성합니다. 각 MAP가 적합한 결과를 반환하도록 올바르게 구현하려면 SOURCEROW를 사용해야 합니다.
MAP sales.srctab, TARGET sales.targtab, &
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)), &
COLMAP (targcol = lookup.param2);
MAP sales.srctab, TARGET sales.targtab2, &
COLMAP (targcol2 = lookup.param2);
ONCE
연관된 MAP 문을 처음 호출할 때 Oracle GoldenGate 실행 과정에서 프로시저 또는 질의를 한 번 실행합니다. 결과는 프로세스가 실행 중인 동안 유효합니다.
다음은 ONCE 사용 예제입니다.
MAP sales.cust, TARGET sales.cust_extended, &
SQLEXEC (SPNAME lookup, PARAMS (long_name = birth_state), EXEC ONCE), &
COLMAP (custid = custid, &
birth_state_long = lookup.long_name);
TRANSACTION
소스 트랜잭션당 프로시저 또는 질의를 한 번 실행합니다. 결과는 트랜잭션의 모든 작업에 대해 유효합니다.
다음은 TRANSACTION 사용 예제입니다.
MAP sales.cust, TARGET sales.cust_extended, &
SQLEXEC (SPNAME lookup, PARAMS (long_name = birth_state), EXEC TRANSACTION), &
COLMAP (custid = custid, &
birth_state_long = lookup.long_name);
SOURCEROW
소스 행 작업당 한 번씩 프로시저 또는 질의를 실행합니다. 소스 테이블을 둘 이상의 대상 테이블과 동기화하는 경우 각 소스-대상 매핑에 대해 프로시저 또는 질의 결과가 호출되도록 이 옵션을 사용합니다.
다음은 SOURCEROW 사용 예제입니다. 이 경우 프로시저는 모든 소스 행 작업에서 실행되므로 두번째 맵은 유효한 값을 반환합니다.
MAP sales.srctab, TARGET sales.targtab, &
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol), EXEC SOURCEROW), &
COLMAP (targcol = lookup.param2);
MAP sales.srctab, TARGET sales.targtab2, &
COLMAP (targcol2 = lookup.param2);
MAXVARCHARLEN <bytes>
MAXVARCHARLEN를 사용하여 내장 프로시저 또는 질의에 있는 매개변수의 출력 값에 대해 할당되는 최대 바이트 길이를 지정합니다. 이 최대값을 초과하면 출력 값이 잘립니다. 기본값은 명시적 MAXVARCHARLEN 절이 없는 255바이트입니다. 유효한 값 범위는 50-32767바이트입니다.
다음 예에서는 출력 값의 바이트 길이를 100으로 제한합니다.
MAXVARCHARLEN 100
PARAMBUFSIZE <bytes>
PARAMBUFSIZE를 사용하여 입력 및 출력 매개변수를 포함하여 SQLEXEC 매개변수 정보를 저장하는 메모리 버퍼에 허용되는 최대 바이트 수를 지정합니다. 기본값은 명시적 PARAMBUFSIZE 절이 없는 10,000바이트입니다. 유효한 값 범위는 1000 ~ 2000000바이트입니다. Oracle GoldenGate는 매개변수에 할당된 메모리가 최대값의 500바이트 이내일 때마다 경고를 표시합니다.
다음 예에서는 버퍼를 15,000바이트로 늘립니다.
PARAMBUFSIZE 15000
TRACE {ALL |
ERROR} |
TRACE를 사용하여 SQLEXEC 입력 및 출력 매개변수를 보고서 파일에 기록합니다.
다음은 SQLEXEC 추적이 사용으로 설정된 샘플 보고서 파일입니다.
Input parameter values...
LMS_TABLE: INTERACTION_ATTR_VALUES
KEY1: 2818249
KEY2: 1
Report File:
From Table MASTER.INTERACTION_ATTR_VALUES to MASTER.INTERACTION_ATTR_VALUES:
# inserts: 0
# updates: 0
# deletes: 0
# discards: 1
Stored procedure GGS_INTERACTION_ATTR_VALUES:
attempts: 2
successful: 0
ALL
프로시저 또는 질의의 각 호출에 대한 입력 및 출력 매개변수를 보고서 파일에 기록합니다. 이는 기본값입니다.
ERROR
SQL 오류가 발생한 후에만 프로시저 또는 질의의 각 호출에 대한 입력 및 출력 매개변수를 보고서 파일에 기록합니다.