Fix Oracle listener issue
문제 상황
- MacOS에서 SQL Developer를 사용해 Oracle Database에 접속하려고 했으나, 오류가 생겨 접속이 안됨. DB 접속 테스트를 시도하면 에러 팝업이 뜨고 연결에 실패함.
문제 원인
ORA-12541: Cannot connect. No listener at host localhost port 1521.
- Oracle DB의 listener가 동작하지 않음. 노트북 재부팅하면서 안된거 보면 Docker 컨테이너가 꺼진 것 같다. 이때 listener도 같이 꺼진 듯.
- MacOS에서 SQL Developer로 Oracle DB를 사용하려면 Docker가 필요함.
해결 방법
- Colima 시작
colima start --arch x86_64 --memory 4 --cpu 2
- Oracle 이미지는 대부분 x86_64 기반으로 빌드되어 있음. 내 노트북 칩은 ARM 아키텍처를 사용해서, Colima로 x86_64 VM을 실행해야함.
- Oracle XE Docker 이미지 설치
docker run -d \ --name <DB 이름> \ -p 1521:1521 \ -e ORACLE_PASSWORD=<비밀번호> \ gvenzl/oracle-xe
- 컨테이너에서 출력되는 로그 조회
docker logs -f oracle-db
#########################
DATABASE IS READY TO USE!
#########################
이 문구를 확인하면 이제 컨테이너 내부에서 데이터베이스가 완전히 기동되었고, SQL Developer 등 외부 클라이언트에서 접속 후 사용이 가능하다는 것을 알 수 있다.
성공~
- 다시 사용할 수 있게 되었다.
기타
📍 Docker 컨테이너 삭제하는 법
- 실행 중 컨테이너 중지
docker stop <컨테이너 이름 또는 ID>
- 중지한 컨테이너 삭제
docker rm <컨테이너 이름 또는 ID>
- 중지된 모든 컨테이너 한 번에 삭제
docker container prune
- 실행중인 컨테이너 전부 강제 삭제
docker rm -f $(docker ps -aq)
📍 컨테이너 재생성 및 실행을 했는데도 안된다면
- 건드린 적 없는 비밀번호가 틀렸다며 접속이 안된다고 함…
- 컨테이너 내부 진입
docker exec -it oracle-db bash sqlplus / as sysdba
- 사용자 생성 시도
ALTER USER <사용자이름> IDENTIFIED BY <비밀번호>;
- ORA-01918 실패 시 사용자 생성
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE; CREATE USER <사용자이름> IDENTIFIED BY <비밀번호>; GRANT CONNECT, RESOURCE TO <사용자이름>; ALTER USER <사용자이름> DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
→ 이렇게 했더니 접속에 성공했다.
Leave a comment