sqlplus를 사용하기 위해서는 오라클 리눅스 환경이 필요하고, 설치 등 복잡한 일들이 많이 있다. 그래서 docker를 이용하여 sqlplus를 사용하는 방법을 정리해본다.
1. Docker 설치
이전에 포스트 한 오라클 리눅스의 docker설치를 참조하자
2. OracleInstantClient
오라클에서 제공하는 client를 설치한다. Docker file은 아래 github에서 제공한다.
https://github.com/oracle/docker-images/tree/master/OracleInstantClient
3. Dockerfile
위의 dockerfile을 가지고 빌드를 해야 한다. 참고로 dockerfile은 아래와 같다
build는 아래 명령어를 사용한다. 여기에서는 18버전을 사용해본다.
docker build -t oracle/instantclient:18 .
빌드가 완료되고 나면 아래와 같이 이미지를 로컬에 생성하게 된다.
4. Database 접속하기
오라클 데이터베이스 접속은 이러한 방식으로 docker를 수행하면 접속이 된다.
docker run -ti --rm oracle/instantclient:18 sqlplus hr/welcome@example.com/pdborcl
5. ADW Database 접속하기
Oracle Autonomous 데이터베이스인 ADW로 접속하기 위해서는 Wallet파일이 필요하다.
Wallet은 ADW Console에서 다운을 받을 수 있고 압축을 풀면 tnsnames.ora파일이 존재한다.
그리고 Dockerfile에 아래 wallet의 파일들을 넣어서 빌드하던지, 아니면 Wallet파일이 있는 곳을 마운트 한다.
COPY ./Wallet_db0526 /Wallet_db0526
그리고 WALLET을 통해 접속을 하기 위해서는 아래와 같이 sqlnet.ora파일을 변경한다.
mv $TNS_ADMIN/sqlnet.ora $TNS_ADMIN/sqlnet.ora.bak
echo ‘WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY=”월렛위치”)))’ >> ./sqlnet.ora
echo 'SSL_SERVER_DN_MATCH=yes' >> ./sqlnet.ora
그리고 나서 COPY를 사용할 경우 docker를 다시 빌드해야 한다.
마지막으로 수행하기 위해서는 아래와 같이 환경변수와 tnsname을 넣어서 sqlplus를 실행한다.
sudo docker run -ti --rm -e "TNS_ADMIN=/Wallet_db0526" oracle/instantclient:18 sqlplus admin/비번@db0526_high
이렇게 볼륨을 attach 할 수 있다.
혹은 docker run -ti --rm -v /경로/Wallet/Wallet_db0526/:/Wallet oracle/instantclient:18 sqlplus db0526_high
만약 procedure를 실행하기 위해서는 파일로 저장한다음(filename.sql) sqlplus로 접속한 뒤 아래와 같이 수행하면 된다.
SQL> @/Wallet_db0526/import.sql