MariaDB에서 Oracle로 DBLINK 적용 및 기타(unixODBC, jdbc)_1

2024. 2. 13. 11:09개발

반응형

 

현재 회사에서 다른곳에서 서비스하는 데이터를 취합하여 사용하거나 하는 경우가 필요해서 속도가 좀 느리더라도 데이터 조회가 가능하게 연결해줘야 하는 이슈가 발생했다.

 

인터넷이나 기타 다른 블로그 글들에서 확인 해 본 결과와 내가 테스트 해 본것들에 대해서 정리하려고 한다.

 

실질적인 환경은 다음과 같다.

대상서버 : 윈도우서버에 설치된 오라클 11g
내가 운영중인 서버 : 리눅스에 설치된 MariaDB 10.6.14 

 

오라클서버에서는 별다른걸 해줄 건 없어보이고 모든 방화벽이 열려있다는 가정하에 진행된다.

 

프로세스 진행 순서

ODBC 설치

yum install unixODBC unixODBC-devel -y​

 

ODBC 설정파일위치

odbc설정은 2개의 파일을 편집하여 설정 합니다.(odbc.ini, odbcinst.ini)

vim /etc/odbc.ini
vim /etc/odbcinst.ini​

 

obcdinst.ini의 경우 드라이버에 대한 설정을 한다.
아래 정보에서는 드라이버 이름은 []에 적힌 OracleODBC-12.1이 된다.

[OracleODBC-12.1]
Description = Oracle ODBC driver for Oracle
Driver = /usr/lib/oracle/12.2/client64/lib/libsqora.so.12.1
FileUsage = 1
Driver Logging = 7


odbc.ini는 그 드라이버를 사용하여 실질적인 OracleDB에 접근하는 정보들을 입력한다.
실제로 접근할때 사용하는 이름은 []에 명시된 myoracle이 된다.

[myoracle]
Description = myoracledb database
Driver = OracleODBC-12.1
Trace = yes
TraceFile = /tmp/odbc_oracle.log
ServerName = //ip:1521/orcl
UserID = id
Password = password
Port = 1521

 

 oracle 11g에 접근하기 위해서 client를 설치해야한다.

실제 다운로드의 경우에는 오라클 홈페이지에서 로그인 후 진행해야한다.
Instant Client for Linux x86-64 (64-bit)

 

Instant Client for Linux x86-64 (64-bit)

Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages

www.oracle.com

 

내 경우에는 12.2 버전을 다운받아서 사용했다. 다른 블로그에서 11g버전이지만 12.2로 연동하는 예시가 몇개 존재 했었고 호환이 된다는 것을 확인했다.

yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
yum install oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
yum install oracle-instantclient12.2-odbc-12.2.0.1.0-2.x86_64.rpm

 

bash_profile에 기본적인 경로들에 대한 지정을 반드시 해줘야한다.

export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

코드반영

source .bash_profile

 

정상적으로 라이브러리나 연결이 다 된건지 확인 하는법

ldd /usr/lib/oracle/12.2/client64/lib/libsqora.so.12.1

다음과 같이 모든 파일들이 다 제대로 연결되어 있어야 한다.

 

isql -v myoracle로 접근 한 모습(-v 옵션을 줘야지 접근 실패시 에러가 확인이 된다.)

외부 서버에서 Oracle 테이블 조회 시 모습

 

MariaDB 콘솔로 접근해서 connect 엔진이 적용되어 있는지 확인한다

show engines;

초기 MariaDB에는 해당 엔진이 없음

 

mariadb connect 엔진 설치일단 mariadb용 connect엔진을 설치 해야한다

yum install mariadb-connect-engine

rocky 8.8에서는 위 명령어로 엔진 설치가 안되더라.. centos는되는듯함.

다행히 MariaDB가 거의 최신버전이라 내부적으로 connect 엔진을 가지고 있는것 같았다.

 

mysql에서 그냥 connect설치 수행.

mysql -u root -p
INSTALL SONAME 'ha_connect';

엔진설치모습

 

MariaDB 재시작 후 위에서 명시한 myoracle 정보를 사용하여 DBLINK 테이블을 생성한다.

CREATE TABLE oracle_test
ENGINE=CONNECT 
CONNECTION='DSN=myoracle;' `TABLE_TYPE`=ODBC `tabname`='DTKB_BORD';

select * from oracle_test;

대상 테이블은 DTKB_BORD였고 생성하는 테이블은 oracle_test 라는 테이블이다.

테이블을 생성시에는 문제가 없이 잘 되었지만 한글깨짐 현상이 발생한다.

 

 

이슈사항들 정리

 

unixODBC 한글깨짐 이슈

오라클 client에서 받을 때 출력시 문제가 된다고 해서 .bash_profile에 설정했더니 일단 제대로 한글이 출력되더라.

export NLS_LANG=AMERICAN_AMERICA.UTF8

isql 로 직접 oracle db에 접근하는 경우 제대로 값이 보이는 모습

 

LD_LIBRARY not found 이슈

root 계정에는 ld_library 경로가 지정되어있지만(bash_profile) DB를 실행시키는 계정은 없기때문에 에러가 발생했다.

아래와같이 설정파일을 추가해서 만들어주었다.

/etc/ld.so.conf.d/ 디렉토리에 파일(*.conf)을 만들어 추가

cd  /etc/ld.so.conf.d
vi oracle.conf
/usr/lib/oracle/12.2/client64/lib


##추가확인 및 캐시날리기 해당 명령어를 하면 추가된 리스트가 다 보여짐
sudo ldconfig -v

 

위 방법이 아니라면 MariaDB를 실행하는 계정이 mysql이라고 할 때 해당 계정의 .bash_profile에도 동일하게 적용해줘야 한다.

mysql 계정으로 .bash_profile 생성

sudo su - mysql  # MySQL 사용자로 전환
touch ~/.bash_profile  # 빈 .bash_profile 파일 생성
chmod 600 ~/.bash_profile  # 파일 권한 설정 (선택 사항)
exit  # MySQL 사용자에서 로그아웃

파일내용 넣기

# .bash_profile
  
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

#PATH=$PATH:$HOME/bin
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH

 

 

크리티컬 이슈

unixODBC 한글깨짐 이슈

DB툴(Dbeaver와 같은)에서 접근시에는 동일하게 한글이 깨지는 현상이 발생했다

위 현상을 해결 못해서 jdbc방식으로 변경해서 수행했다 ㅠㅠ

반응형