arrow-left

All pages
1 of 1

Loading...

C External Procedure ์ƒ์„ฑ

C External Procedure๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๊ธฐ๋ณธ ํ™˜๊ฒฝ ์„ค์ •๊ณผ ์ƒ์„ฑ ์ ˆ์ฐจ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

hashtag
๊ธฐ๋ณธ ํ™˜๊ฒฝ ์„ค์ •

C External Procedure๋Š” ์ด์ „ ์žฅ์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด tbEPA ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. tbEPA ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์€ $TB_HOME/client/bin ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ณธ ์ ˆ์—์„œ๋Š” C External Procedure๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ์— ์•ž์„œ ๋จผ์ € tbEPA ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

hashtag
์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ

tbEPA ํ”„๋กœ์„ธ์Šค๋Š” ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ ๋Š” $TB_HOME/client/tbepa ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ tbepa.cfg ํŒŒ์ผ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งŒ์•ฝ ์„ค์ •ํ•œ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธ ํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๋””ํดํŠธ๋กœ ์ •์˜๋œ ์†์„ฑ์„ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

tbEPA ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰๊ณผ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<<tbepa.cfg>>

์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ
์„ค๋ช…

tbepa.cfg ํŒŒ์ผ์—์„œ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ LOG_LVL์€ 1๋ถ€ํ„ฐ 5 ์‚ฌ์ด์˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์˜ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋กœ๊ทธ ๋ ˆ๋ฒจ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ๋ ˆ๋ฒจ
๋กœ๊ทธ ๋ ˆ๋ฒจ๋ช…
์„ค๋ช…

hashtag
์ƒ์„ฑ ์ ˆ์ฐจ

C External Procedure๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ๋ถ€ ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ

  2. Library Object ๋“ฑ๋ก

  3. ์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋ฅผ PSM์— ๋Œ€์‘

  4. ์‚ฌ์šฉ์ž ํ•จ์ˆ˜ ์‹คํ–‰

hashtag
์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ

C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋™์ ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑํ•˜๋Š” ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. C ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

<<extproc.c>>

  1. ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ UNIX ๊ณ„์—ด(LINUX ํฌํ•จ)์—์„œ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

  1. ์ปดํŒŒ์ผ์ด ์™„๋ฃŒ๋˜๋ฉด, libextproc.so๋ผ๋Š” ์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

hashtag
Library Object ๋“ฑ๋ก

Library Object๋Š” ์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์„ Tibero์— ๋Œ€์‘์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ์ผ์ข…์˜ ์Šคํ‚ค๋งˆ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค.

Library Object๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ
์„ค๋ช…
circle-info

์ฐธ๊ณ  CREATE LIBRARY ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด, CREATE LIBRARY๋ผ๋Š” ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ 'extproc'์ด๋ผ๋Š” Library Object๋ฅผ Tibero์— ๋“ฑ๋ก ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

hashtag
์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋ฅผ PSM์— ๋Œ€์‘

Library Object๋ฅผ ๋“ฑ๋กํ•œ ํ›„ ํ•ด๋‹น Library Object ๋‚ด์˜ ํŠน์ • ํ•จ์ˆ˜๋ฅผ PSM ๊ฐœ์ฒด๋กœ ๋“ฑ๋กํ•˜๋ฉด C External Proce dure๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜์ ์ธ PSM๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ทธ๋Œ€๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ผ๋ฐ˜์ ์ธ PSM๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ
์„ค๋ช…

๋‹ค์Œ์€ Library Object ๋‚ด์˜ ํŠน์ • ํ•จ์ˆ˜(find_max)๋ฅผ PSM์— ๋Œ€์‘ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

hashtag
์‚ฌ์šฉ์ž ํ•จ์ˆ˜ ์‹คํ–‰

์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋Š” Tibero์ƒ์˜ ํ•˜๋‚˜์˜ PSM์— ๋Œ€์‘๋˜๋ฏ€๋กœ, PSM์˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ PSM์˜ ๋ฌธ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ C External Procedure๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

5

TRACE

๋งค์šฐ ์ž์„ธํ•œ ํŠธ๋ ˆ์ด์Šค ์ด๋ฒคํŠธ

LOG_DIR

tbEPA ๋กœ๊ทธ ํŒŒ์ผ์„ ์ €์žฅํ•  ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: $TB_HOME/client/tbepa)

LOG_LVL

๋กœ๊ทธ ํŒŒ์ผ์— ๋‚จ๊ธธ ๋กœ๊ทธ์˜ ๋ ˆ๋ฒจ (๊ธฐ๋ณธ๊ฐ’: 2)

MAX_LOG_SIZE

๋กœ๊ทธ ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ’: 0, ๋‹จ์œ„: Byte)

  • ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ : ๋กœ๊ทธ ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์ œํ•œ์—†์Œ

  • ๊ฐ’์„ ๋ช…์‹œํ•œ ๊ฒฝ์šฐ : ๋กœ๊ทธ ํŒŒ์ผ์ด ์„ค์ •๋œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ฐฑ์—…

MAX_LOG_BACKUP_SIZE

๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋กœ๊ทธ ํŒŒ์ผ๋“ค์˜ ์ตœ๋Œ€ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ’: 0, ๋‹จ์œ„: Byte)

  • ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ : ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋กœ๊ทธ ํŒŒ์ผ๋“ค์˜ ํฌ๊ธฐ์˜ ํ•ฉ์„ ์„ค์ • ํ•˜๋Š” ๋ฐ ์ œํ•œ์ด ์—†์Œ

  • ๊ฐ’์„ ๋ช…์‹œํ•œ ๊ฒฝ์šฐ : ๋ฐฑ์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋กœ๊ทธ ํŒŒ์ผ๋“ค์˜ ํฌ๊ธฐ์˜ ํ•ฉ์ด ์„ค ์ •๋œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋กœ๊ทธํŒŒ์ผ 1/3์„ ์‚ญ์ œ

1

ERROR

์—๋Ÿฌ์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ

2

WARNING

๊ฒฝ๊ณ ์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ

3

INFO

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ์ ์ธ ํŠธ๋ ˆ์ด์Šค ์ด๋ฒคํŠธ

4

DEBUG

๋””๋ฒ„๊น…์„ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ํŠธ๋ ˆ์ด์Šค ์ด๋ฒคํŠธ

schema_name

์Šคํ‚ค๋งˆ ๊ฐ์ฒด์˜ ์ด๋ฆ„

library_name

Library Object์˜ ์ด๋ฆ„

file_path

์‚ฌ์šฉ์ž ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ

library_name

Library Object์˜ ์ด๋ฆ„

c_string_literal_name

ํ˜„์žฌ PSM๊ณผ ๋Œ€์‘ํ•  ์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋ช…

WITH CONTEXT

  • C External Procedure ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ๋ช…์‹œํ•  ๋•Œ ์‚ฌ์šฉ

  • ์ž์„ธํ•œ ๋‚ด์šฉ์€ โ€œ์ œ5์žฅ C External Procedure ์œ ํ‹ธ๋ฆฌํ‹ฐโ€, โ€œ4.2. Callback Serviceโ€๋ฅผ ์ฐธ๊ณ 

PARAMETERS (external_parameter)

  • ์‚ฌ์šฉ์ž ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ PSM ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋Œ€์‘์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ

  • external_parameter์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ โ€œ4.1. ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘โ€ ์„ ์ฐธ๊ณ 

LOG_DIR=/tmp/epa_log 
LOG_LVL=2 
MAX_LOG_SIZE=20k
long find_max(long x, long y)
{
    if (x >= y) return x;
    else return y;
}
cc -g -fpic -shared -o libextproc.so extproc.c
CREATE LIBRARY [schema_name.]library_name
{IS | AS} 'file_path';
CREATE LIBRARY extproc
IS '/usr/mylib/libextproc.so';
/
CREATE OR REPLACE {FUCTION | PROCEDURE | PACKAGE}
โ€ฆ
{IS | AS}
LANGUAGE C
LIBRARY library_name
[NAME c_string_literal_name] 
[WITH CONTEXT]
[PARAMETERS (external_parameter[, external_parameter]...)];
CREATE OR REPLACE FUNCTION ext_find_max(num1 BINARY_INTEGER, num2 BINARY_INTEGER)
  RETURN BINARY_INTEGER 
  AS LANGUAGE C
  LIBRARY extproc
  NAME "find_max"
  PARAMETERS(num1 int, num2 int);
/
SQL> CREATE TABLE TBL (COL1 NUMBER, COL2 NUMBER);
Table 'TBL' created.

SQL> INSERT INTO TBL VALUES(1, 2);
1 row inserted.

SQL> INSERT INTO TBL VALUES(5, 3);
1 row inserted.

SQL> INSERT INTO TBL VALUES(7, 9);
1 row inserted.

SQL> select col1, col2, ext_find_max(col1, col2) as max from tbl; 
      col1	  col2	       max
-----------  ---------- -----------
         1           2           2
         5           3           5
         7           9           9