오라클 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'
'IT Engineer > Database' 카테고리의 다른 글
데이터베이스 비정상 종료 시, 클러스터 멤버를 통한 구동(복구) 구동 절차 (0) | 2018.09.19 |
---|---|
dd명령어를 통해 디스크 성능 측정 메모 (0) | 2018.09.19 |
[Database] cluster peer의 정체. goldilocksDB 인메모리 골디락스 (0) | 2018.03.02 |
[Database] goldilocks TRANSACTION_TIMEOUT 프로퍼티 정체 알아보기 (0) | 2018.02.28 |
[Database] global secondary index (cluster) , non-deterministic query (0) | 2018.02.28 |