오라클 client 설정
하고자했던건 remote database(oracle)에 접속하고자 함

슈터장비에서 필요한건 클라이언트.

$ ls oracle*
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm  
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm  
oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
heni@tech9:~
$ ls github/instantclient_12_1.tar.gz
github/instantclient_12_1.tar.gz

압축을 풀거나 설치하면
아래와같이 라이브러리들이 생긴다.
(참고로 심볼릭링크를 건것은 컴파일때 잘 안되어서, 수동으로 해준것임... 동적라이브러리 링크할때는 makefile에서 다른 식으로 해야하나;;)
heni@tech9:~/sh/instantclient_12_1
$ ll
합계 202276
-rw-r--r-- 1 heni users       440  6월 12 15:15 BASIC_README
-r-xr-xr-x 1 heni users     18742  6월 12 15:15 ODBC_IC_Readme_Unix.html
-rwxr-xr-x 1 heni users     29404  6월 12 15:15 adrci
-rw------- 1 heni users   3510272  6월 12 15:15 core.15267
-rw------- 1 heni users   4333568  8월  7 12:51 core.45292
-rwxr-xr-x 1 heni users     43944  6월 12 15:15 genezi
drwxr-xr-x 4 heni users        26  6월 12 15:15 help
lrwxrwxrwx 1 heni users        17  8월  7 17:29 libclntsh.so -> libclntsh.so.12.1
-rwxr-xr-x 1 heni users  58793741  6월 12 15:15 libclntsh.so.12.1
lrwxrwxrwx 1 heni users        21  8월  7 17:29 libclntshcore.so -> libclntshcore.so.12.1
-rwxr-xr-x 1 heni users   6990875  6월 12 15:15 libclntshcore.so.12.1
-r-xr-xr-x 1 heni users   1768370  6월 12 15:15 libipc1.so
-r-xr-xr-x 1 heni users    544150  6월 12 15:15 libmql1.so
-r-xr-xr-x 1 heni users   6213011  6월 12 15:15 libnnz12.so
-rwxr-xr-x 1 heni users   2576030  6월 12 15:15 libocci.so.12.1
-rwxr-xr-x 1 heni users 109549133  6월 12 15:15 libociei.so
-r-xr-xr-x 1 heni users    156353  6월 12 15:15 libocijdbc12.so
-r-xr-xr-x 1 heni users    337137  6월 12 15:15 libons.so
-rwxr-xr-x 1 heni users    118491  6월 12 15:15 liboramysql12.so
lrwxrwxrwx 1 heni users        16  8월  7 17:29 libsqora.so -> libsqora.so.12.1
-rwxr-xr-x 1 heni users   4421284  6월 12 15:15 libsqora.so.12.1
-r-xr-xr-x 1 heni users      4236  6월 12 15:15 odbc_update_ini.sh
-r--r--r-- 1 heni users   3692096  6월 12 15:15 ojdbc6.jar
-r--r--r-- 1 heni users   3698857  6월 12 15:15 ojdbc7.jar
-rw-r--r-- 1 heni users       520  8월  7 18:20 tnsnames.ora
-rwxr-xr-x 1 heni users    227410  6월 12 15:15 uidrvci
-rw-r--r-- 1 heni users     71202  6월 12 15:15 xstreams.jar

이 상태에서 만져야하는건

이 라이브러리가 위치하는 경로 확인
heni@tech9:~/sh/instantclient_12_1
$ pwd
/home/heni/sh/instantclient_12_1

위 경로를 bash에 등록하기
# ORACLE
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/12.2/client64/lib
export ORACLE_CLIENT=$HOME/sh/instantclient_12_1
export TNS_ADMIN=$ORACLE_CLIENT
export LD_LIBRARY_PATH=$ORACLE_CLIENT:$LD_LIBRARY_PATH


.odbc.ini에 DSN 등록
[ORACLE]
DRIVER = /home/heni/sh/instantclient_12_1/libsqora.so.12.1
ServerName=ORCL2
UserID = C##TEST
Password = test

$ORACLE_CLIENT 위치의 tnsnames.ora에 .odbc.ini에 등록한 DSN명으로 접속정보 생성하기
$ cat /home/heni/sh/instantclient_12_1/tnsnames.ora
# tnsnames.ora Network Configuration File: /data/oracle/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.120)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )



일단 unixODBC로 확인
heni@tech9:~
$ isql -v ORACLE test/test
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

결과적으로 하고싶은건 C로 짠 성능프로그램을 oracle에서도 돌게 하는 것이였으므로 (PROC*C 말고)
필요한 해더파일과 라이브러리를 링크해줘야함

#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
#include <string.h>

기존과 동일
    SQL_TRY( SQLConnect( sDbc,
                         (SQLCHAR*)gDSN,
                         SQL_NTS,
                         (SQLCHAR*)"test",
                         SQL_NTS,
                         (SQLCHAR*)"test",
                         SQL_NTS) );
    gettimeofday(&sStartTv, NULL);

Makefile
계속 안되어서 해매었는데, -lodbc를 링크해주니 잘 돌아감..
$ cat Makefile
.SUFFIXES: .c .o

CC = gcc
CFLAGS = -g -Wall

LFLAGS = -L$(ORACLE_CLIENT)
LIB = -lodbc -lsqora -lociei -lclntshcore -lclntsh -lnnz12 -lons -lpthread -ldl -lm -lrt
#LIB = -locci -lpthread -ldl -lm -lrt

#INC = -I/u01/app/oracle/product/12.2.0/dbhome_1/rdbms/public

TARGET = single_dml
OBJECTS = $(TARGET).o
SRCS = $(TARGET).c

$(TARGET):    $(OBJECTS)
        $(CC) -o $(TARGET) $(OBJECTS) $(LFLAGS) $(LIB)

$(OBJECTS):    $(SRCS)
        $(CC) $(CFLAGS) -c $(INC) $(SRCS)

clean:
        rm $(TARGET).o $(TARGET)



remote장비에 insert까지 되는것 확인 OK
heni@tech9:~/github/single_dml_multithread_ora
$ ./single_dml  1 1 1 1 1 ORACLE
ARGS : Type(1), ID(1), START(1) END(1) COMMIT_INTERVAL(1)
...thread create[1]..OK... >>> 1 ~ 1
SUCCESS : connected session count =[1]
[0]Start Insert...
[0]Finished!
[0]Elapsed Time   : 0.004075 sec
[0]TPS            : 245.398773 tps
[0]SUCCESS

[ 1 Connection ] RESULT >>>>> TOTAL TPS = '245.398773'






+ Recent posts