먼저 docker altibase images를 먼저 pull 받는다.
VM상에서는 altibase 6점대를 사용하지만 images는 7.1.0를 사용한다.
기존의 VM상의 license를 그대로 도커 컨테이너에 넣으면 라이센스 문제가 뜬다
이를 해결하기 위해서 http://support.altibase.com/kr 알티베이스 사이트에서 새로
라이센스를 발급 받아야한다. (키를 받기 위해 회원가입, MAC Address 필요)
docker run -i -d --name altibase -e ALTIBASE_HOME=/home/altibase/altibase_home -p 20300:20300 -v "C:/path/license.dat:/home/altibase/altibase_home/conf/license" altibase/altibase /bin/bash -c "/home/altibase/altibase_home/bin/server start && tail -f /dev/null"
-i와 -d 옵션을 붙여 컨테이너의 입력을 열고 백그라운드에서 실행시킨다.
license파일의 경로는 Altibase 문서상에서 conf하위에 놓으라고 써져있다.
고급 설정 → 인바운드 규칙(새 규칙) → altibase port인 20300 포트 허용
해당 설정으로 인해 클라이언트와 Altibase 서버 간 통신 가능
(20300port를 사용 중일 경우 altibase 기본 port 변경)
해당 작업까지 완료할 경우 컨테이너가 정상적으로 실행될 것이다.
컨테이너 내부에 접속하여 셸을 실행하려면 아래의 코드를 사용하면 된다.
docker exec -it altibase /bin/bash
필자는 altibase에서 DB를 먼저 dump시켰다.
altibase에서 DB를 import 또는 export를 할 경우 aexport와 iloader를 사용한다.
(필자의 경우 aexport 사용)
https://a07274.tistory.com/110 (참고 사이트)
export 이후 필자는 altibase_home 하위에 dump파일을 옮길 폴더를 생성하였다.
mkdir을 사용하여 디렉토리를 생성하면 된다.
이후 dump를 뜬 파일 폴더를 아래의 명령어로 컨테이너내에 이동시켰다.
docker cp C:\altibase_dump altibase:/home/altibase/altibase_home/dump
- server 및 altibase.properties (DB_NAME = DB명 입력)
- 서버 종료 (/bin 폴더에서 ./server stop)
- 서버 생성 (/bin 폴더에서 ./server create UTF8 UTF16)
-오류 발생 시 /dbs 폴더내의 파일 전체 삭제 및 /logs하위의 loganchor,logfile 전체 삭제- 이후 서버 실행 (/bin 폴더에서 ./server start)
disk tablespace나 user 생성이 필요한 경우
./isql -s localhost -u sys -p MANAGER
SYS계정으로 접속 후 생성해주면 된다.
만약 isql이 작동 안할 경우 export path를 수정해주면 된다.
이후 dump뜬 파일을 import를 하고싶으면
export PATH=$PATH:$ALTIBASE_HOME/bin
1번 ./run_is.bat
2번 ./run_il_in.bat
3번 ./run_is_index.bat
4번 ./run_is_fk.bat
해당 명령어를 입력하고 bat가 아닌 sh면 sh로 실행
.dat, .fmt파일 import(데이터 이동)
#!/bin/sh
# 데이터와 포맷 파일이 있는 디렉토리 설정
DATA_DIR="/home/altibase/altibase_home/dump"
CONTAINER_NAME="컨테이너 이름" # 컨테이너 이름 수정
# Altibase 접속 정보 설정
USER_NAME="user" # 사용자 이름
PASSWORD="password" # 비밀번호
# 모든 .fmt 파일을 반복 처리
for fmt_file in "$DATA_DIR"/*.fmt; do
dat_file="${fmt_file%.fmt}.dat"
if [ -f "$dat_file" ]; then
filename=$(basename "$dat_file" .dat)
echo "Importing $filename..."
iloader -s 127.0.0.1 -u $USER_NAME -p $PASSWORD in -f "$fmt_file" -d "$dat_file"
else
echo "Warning: $dat_file not found for $fmt_file"
fi
done
echo "Import completed."
Dump뜬 폴더내에 쉘 스크립트 위치후 권한 부여
docker exec -u root -it acaltibase bash
chmod +x /home/altibase/altibase_home/dump/import_all.sh
chown altibase:altibase /home/altibase/altibase_home/dump/import_all.sh
윈도우에서 쉘 스크립트 작성했을 경우 (줄 바꿈 문자 변환)
sed -i 's/\r$//' /home/altibase/altibase_home/dump/import_all.sh
컨테이너 접속 후 해당 import_all.sh 스크립트 실행 (data import 완료)


정상적으로 connection 및 import된걸 확인 가능하다.
소스 적용 및 DB 연결 이후
Mybatis Query Error가 발생하였는데
java.sql.SQLException: [0]:Invalid use of host variables
해당 에러는 Altibase에서 타겟 절에 호스트 변수 사용을 지원하지 않아서 생긴 문제다.
필자의 경우
USING (SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') AS DATE
, #{user_id} AS USER_ID
FROM DUAL
) B
해당 쿼리에서 user_id 변수에서 오류가 발생하였는데
USING (SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') AS DATE
, CAST(#{user_id} AS VARCHAR2(20)) AS USER_ID
FROM DUAL
) B
CAST로 parameter를 감싸여 해결하였다.