11.23.(수) OracleDB(16): Docker 컨테이너 파일 접속

DB는 어디에?
M1 Mac에서 오라클을 실행시키는 방법은 docker를 colima로 실행시킨 후, oracle-11g-xe 컨테이너를 띄워서 그 위에 DB를 설치했다.
쉽게 말해서 우리는 가상 서버에 DB를 설치했고, 우리가 만든 테이블은 모두 가상 서버(컨테이너)에 저장되어있다고 보면 된다.
수업 중 실습할때 수행이 안 됐던 명령어들 몇 개를 복기해보자면:
로컬 폴더의 .sql파일을 import하여 바로 실행시키는 것과,
터미널에서 작성한 sql문을 spool을 이용해 .sql 혹은 .txt로 export하는 실습이 있겠다.
이에 대한 해결책을 드디어 찾았고, 이 과정을 이해하는데에 시간이 조금 걸렸다.
우리가 항상 숙지해야할 중요한 사실은 우리의 DB의 현재 위치는 가상 컴퓨터에 있다는 점이다.
Docker를 이용한 컨테이너 접속
우리가 터미널에서 로컬 폴더를 넘나들때 쓰는 명령어들을 컨테이너의 shell에서도 사용할 수 있다.
우선은 평소에 하던대로 sqlplus로 실습 계정으로 접속하자.
docker exec -it oracleDB sqlplus
SQL> 이 나타나면서 제대로 컨테이너에서 sqlplus를 실행시킨 후, !를 입력하고 엔터를 쳐보자.

처음 보는 상태가 될 텐데, 사실 이것은 우리에게 아주 익숙한 상태이다.
맥에서 터미널을 처음 켰을때, 홈 디렉토리로 열리는데, 현재 저 상태는 우리 컨테이너의 홈 디렉토리로 연결된 것이라고 보면 된다.
pwd로 현재 디렉토리 경로를 확인해보자.

/opt/oracle 이것이 우리 컨테이너의 홈 디렉토리라는 것을 잘 기억하자.
이제 우리에게 익숙한 명령어들을 사용해보자.
- ls : 현재 폴더에 있는 파일 목록
- pwd : 현재 폴더 경로 확인
- mkdir {folder_name} : 폴더 생성
- cd {path} : 현재 위치 변경
- exit : 쉘 종료
원하는 이름의 폴더를 만들고 ls로 잘 생성되었는지 확인해본 후 exit를 눌러 쉘 종료시킨 후, sqlplus도 종료시키자.

로컬 파일을 컨테이너로 복사
docker cp 복사_파일경로 붙여넣을_위치
우리가 실습 중 import하지 못 했던 demo.sql을 로컬 폴더에서 복사하여 아까 컨테이너 내에 생성했던 폴더로 넣어주자.
컨테이너의 경로는 컨테이너이름:/opt/oracle/scott 이 되겠다.

demo.sql이 잘 옮겨졌나 확인해보자.

scott폴더 안에 demo.sql이 생성된 것을 확인할 수 있다.
이제 이 파일을 실행시키려면 sqlplus에서,
@/opt/oracle/scott/demo.sql
이렇게 실행하면 .sql파일에 있는 쿼리문을 실행시킬 것이다.
SPOOL
위에서 설명했듯이, sqlplus에서 작성하는 쿼리문을 파일로 추출하는 명령어다.
SPOOL /opt/oracle/scott/test.sql -- test.txt도 가능하다
이렇게 원하는 경로에 생성할 파일명과 확장자를 적어주면 파일이 생성되면서 편집이 시작된다.
이후에 작성하는 SELECT문 및 실행결과는 모두 저 파일 안에 기록된다.
만약 기록이 끝났다면,
SPOOL off
이렇게 종료시킬 수 있다.

이렇게 spool과 생성된 test.sql이 컨테이너 안에 잘 들어있는걸 확인했다.
이번엔 반대로 컨테이너에서 로컬 폴더로 복사해보자.

이렇게 컨테이너와 로컬 폴더간의 파일 이동(복사)에 대해 알아봤다.