wisePocket

Mac OS(Intel Chipset +M1, M2)에서 Oracle, SQL 설치 관련 오류 해결 메모(보다 자세하게 하나씩 정리 예정) 본문

(old)Java Backend study

Mac OS(Intel Chipset +M1, M2)에서 Oracle, SQL 설치 관련 오류 해결 메모(보다 자세하게 하나씩 정리 예정)

ohnyong 2023. 6. 26. 20:59

intel chip 맥os Oracle, SQL 설치 전반
https://devotto.github.io/articles/2019-03/macosx-docker-oracle
https://velog.io/@chaos663/Database-Oracle-SQL-Developer-install-for-mac

전반적인 순서
도커mac os 설치 -> 도커 계정 로그인 -> Oracle xe 11g 이미지 검색 -> 이미지 풀 -> 이미지의 --name ohnyong 이름 변경, 포트 변경 -> 이미지를 도커 컨테이너로 활성화=가상 서버 가동(run) -> SQL Developer 설치 -> 도커에서 실행중인 Oracle과 연결(포트 일치시켜야 함)  


**에러코드
 Error response from daemon: pull access denied for wnameless/oracle-xe-11g, repository does not exist or may require ‘docker login
풀 할 이미지를 찾지못하는 경우다. 해당 이미지가 작성자에 의해 수정,삭제되었거나 이름에 오타가있는 경우도 있다.

 https://hub.docker.com/search?q=oracle 
도커 허브에서 oracle 을 검색해서 다양한 이미지를 검색 할 수 있다.
각 이미지로 들어가면 풀 명령어를 직접 볼 수도 있다. 지원 OS를 확인하는 것이 좋다.

*
docker pull deepdiver/docker-oracle-xe-11g
deepdiver작성자의 오라클xe11g 이미지를 풀
도커 이미지에서 해당 풀된 이미지를 확인 할 수 있다.

*
docker run --name ohnyong -d -p 49160:22 -p 49161:1521 deepdiver/docker-oracle-xe-11g
(ohnyong에는 컨테이너 이름 자유입력)
도커 컨테이너의 1521 포트를 로컬 호스트 49161 포트로 포트 포워딩 했다는 뜻이다.




https://m.blog.naver.com/dpfkd23/221451816519

**에러코드
IO 오류: The Network Adapter could not establish the connection 업체코드 17002

*
docker ps --all
도커의 모든 컨테이너 목록(정지된 컨테이너까지 모두!!)을 확인한다. 
NAMES 바로 컨테이너 이름이다.

*
docker restart ohnyong
컨테이너를 재시작해보자.


3.이래도 안되면 도커에서 해당 컨테이너의 포트와 SQLDeveloper의 포트 확인




**에러코드
Error response from daemon: Ports are not available: listen tcp 0.0.0.0:49161 bind: address already in use

해당 포트가 다른 프로그램 또는 서버에서 사용중인 경우이다.

*
sudo lsof -i:49161
49161포트를 사용중인 프로세스를 찾아낸다.
*
sudo lsof -i:49160
49160포트를 사용중인 프로세스를 찾아낸다.

둘중 하나라도 사용중이라면
해당 프로세스의  PID 를 기억해둔다.

*
sudo kill -9 114
PID가 114인 프로세스가 사용중이었기 때문에 해당 프로세스를 정지시켰다.
이후 다시 오라클 서버를 실행하면 된다.



**에러코드
denied: requested access to the resource is denied
로그인하지 않아서 발생한 경우
이미지의 user name과 docker hub에 가입된 ID가 일치하지 않을 경우
출처:https://nirsa.tistory.com/53[Nirsa:티스토리]





terminal에서 oracle xe-11g실행하기
{ohnyong=컨테이너명}

docker start ohnyong
docker exec -it ohnyong sqlplus
system아이디
oracle비번
host 하면 sql>에서 쉘로 빠져나가기
docker stop ohnyong




terminal에서 oracle 새계정 만들기
먼저 system 계정으로 sql> 접속
//유저 확인;
show user

//계정 생성; id : scott/ pass : tiger로 만들기 
create user scott identified by tiger;
(User created. scott 계정이 생성됨.)

//scott 계정으로 접속해보자.
conn scott/tiger

ERROR:
ORA-01045: user SCOTT lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.
권한이 부족하다는 오류발생할것이다.

//권한 부여를 해보자;
//일단 관리자(system/oracle)로 들어가야 한다
conn system/oracle
//접속, 리소스 권한을 scott에게 부여
grant connect, resource to scott; 
(Grant succeeded. scott에게 접속 리소스 권한이 부여됨)

//권한이 부여된 scott 계정으로 다시 접속해보자.
conn scott/tiger
(Connected. scott으로 접속되었다.)
show user
(USER is "SCOTT" 접속계정 확인해보니 scott으로 접속되었다.)




terminal에서 scott계정으로 테이블을 만들어보자.
//권한이 부여된 scott 계정으로 로그인 되었는지 확인하자.
show user
(USER is "SCOTT" 접속계정 확인해보니 scott으로 접속되었다.)

//테이블을 생성하자
create table test(no number(4), msg varchar2(100));
(Table created. 생성되었다.)

//테이블의 구조를 확인하자
desc test
(테이블 형태의 구조가 출력된다.)

//데이터를 입력해보자.
insert into test(no, msg) values(1, 'first massage for SQL');
(1 row created. 입력되었다.)

//입력된 데이터를 확인해보자
select no, msg from test;
( NO
----------
MSG
--------------------------------------------------------------------------------
 1
??first massage for SQL
)같은 것이 출력된다.

**아직 DB로 저장된 것이 아니라 메모리 버퍼에 올라간 상태인 것이다.
**DB에 영구히 저장하려면 commit을 해야 한다.

//scott으로 재접속해서 테이블을 확인해보자. 값이 없다.
select no, msg from test;
(no rows selected)

//commit하자
commit;
(Commit complete.) 이제 재실행해도 DB에 저장되어 다시 출력 가능하다.

//만약 취소하려면
rollback;









(아직 해결 안됨. 컨트롤 키가 계속 눌린 상태 해결해야함..)
****** insert 값이 물음표 ????로 나온다
NO
----------
MSG
--------------------------------------------------------------------------------
 1
f???????????????

ALTER TABLE [TABLE명] CONVERT TO CHARACTER SET UTF8;
으로 해결해보자.
ALTER TABLE test CONVERT TO CHARACTER SET UTF8;



맥에서 SQL developer 실행 시 유의사항
알수 없는 앱으로 뜨기 때문에 ctrl + 열기로 실행한다.

실행이 되지 않는 경우 자바 버전을 확인해야 한다.
CMD에서 자바 버전과 경로 확인하는 방법
1. /usr/libexec/java_home -V
2. ls /Library/Java/JavaVirtualMachines jdk1.8.0_281.jdk
3. echo $(/usr/libexec/java_home -F -v 1.8.0_281)

버전 확인 후 SQLDeveloper.app 우클릭 > 패키지 내용 보기

Connects > MacOS > sqldeveloper.sh 파일 열기

2번째 라인 TMP_PATH에서 자바 버전 변경하기(1.8.0_281)

데이터베이스 접속 또는 생성시 오류를 막기 위해 language와 contry를 kr로 변경해준다.
SQLDeveloper.app 우클릭 > 패키지 내용 보기
Contents > Resources > sqldeveloper > sqldeveloper > bin > sqldeveloper.conf 파일 열기

sqldeveloper.conf 파일에 추가해야 할 내용
1. AddVMOption -Duser.language=ko
2. AddVMOption -Duser.country=KR

 https://velog.io/@been/Oracle-%EC%84%A4%EC%B9%98-mac%EC%97%90-Oracle-SQL-developer-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0 





****오류코드****
도커에 oracle-xe-11g가 런되고있지않을때 문제인듯

haenalee@ihaenaui-MacBookAir ~ % docker exec -it oracle /bin/bash
root@ec2baece7f5c:/# su - oracle
oracle@ec2baece7f5c:~$ sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on Tue Oct 25 23:56:16 2022

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter user-name:system
Enter password: 
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0


Enter user-name:





M1,M2 설치방법 
도커+colima 라는걸 같이사용하는건데 전에 재시작하고 사라지는 문제까지 모두 해결한사례가있네요. 그나마 최신글이라 주말시간나실때 한번 시도해보셔도 될거같아요. 천천히 따라하시면될듯합니다.

https://shanepark.tistory.com/400