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)
내 경우에는 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방식으로 변경해서 수행했다 ㅠㅠ
'개발' 카테고리의 다른 글
인텔리제이(Intellij) HTTP 파일을 통한 API 관리와 고민. (3) | 2024.03.12 |
---|---|
MariaDB에서 Oracle로 DBLINK 적용 및 기타(unixODBC, jdbc)_2 (0) | 2024.02.13 |
네트워크 트래픽 체크.. 그 이후(UDP Flooding) (1) | 2023.12.11 |
Nethogs 설치 그리고 클라우드 네트워크 트래픽 체크... (1) | 2023.12.07 |
템플릿 메서드 패턴, 전략패턴(스프링 핵심원리 고급편) (0) | 2023.04.25 |