회사 PC에 오라클을 설치해서 이것저것 테스트 해보려 하는데..
회사 PC 라서 그런지(보안프로그램 등등) 오라클 설치가 쉽지 않다..
물론 간단한 SQL 테스트라면 아래 LiveSQL에서도 충분하지만 이번엔 도커로 설치해보려 한다.
먼저 도커를 설치한다.
아래 주소에 설치 메뉴얼이 있으니 참고해서 설치하자.
https://docs.docker.com/desktop/install/windows-install/
WSL2과 기본 환경 설정을 하자.
도커 설치 및 환경설정 하기
아무 세팅 없이 지금 실행하면 아래 처럼 뜬다.
요건 윈도우 -> 서비스 -> Server 가 사용 안함으로 되어 있는 경우이다. 자동으로 변경하자.
✔️ Docker는 wsl2 기반에서 실행되기 때문에 wsl2를 설치를 해주어야 한다.
cmd 창을 실행해서 아래 명령어를 실행하자. (매우간단~)
wsl --install
그 다음.. 성능 - CPU 부분에서 "가상화: 사용" 되어 있는지 확인 하고!
그리고 Hyper-V 옵션 켜기!!
Windows 기능 켜기/끄기 에서 Hyper-V 옵션에 체크가 되어있어야 한다.
그럼 변경 사항 어쩌구 뜨면서 progress 바가 나온 후 재부팅 하라고 한다.
이제 껏다 켜보자.
껏다키면 아마 cmd 창이 뜨면서 "이 기능을 사용하도록 설정?" 뭐 어쩌구 이런 비슷한 멘트가 나올 것이다.
그리고 자동으로 꺼지니까 신경 쓰지 않아도 된다.
이제 다시 설치 파일을 실행해본다.
이제 실행!
도커 회원가입(난 구글계정으로 했다) 후에 로그인 하면!
도커 설치는 끝난다.
도커에서 오라클 이미지 PULL 하기
이제 도커에서 oracle 이미지를 Pull 할 것이다.
오라클 이미지중 이왕이면 가장 최신버전 받고 싶은데.. 아래 명령어로 오라클 이미지를 검색해보자
(https://hub.docker.com/ 에서 찾아도 된다)
난 검색하다가 23c 개발자용이 있다고 해서 아래와 같이 설치하였다.
(이미지만 따로따로 받는 방법은 MySQL 이중화 블로그에서 참고 또는 하단의 참고 블로그 가장 마지막 것 참고!)
docker run -dit --name oracle23c -p 1521:1521 container-registry.oracle.com/database/free
UI에서도 상태확인이 가능하다.
DB 접속
이제 먼저 도커로 오라클에 접속해보자.
docker exec -it oracle23c sqlplus sys as sysdba
-> 이후 비밀번호는 system (기본값)
아참.. 난 그냥 복붙하다가 컨테이너 명을 oracle23c로 했는데.. 이번에 23버전에서는 oracle23ai인가 보다.
(오라클 버전 후에 붙는 알파벳은 버전별 특징이라고 한다. 초창기 i는 internet, g는.. 까먹었고.. c는 cloud.. 이젠 ai는 당연히 우리가 아는 그 ai 겠다.)
+ 추가) 2024/05/02에 ai로 업데이트 된 거 였다.. 뭔 기능이 추가됬는지 한번 보는 포스팅도 만들어야겠다.
이제 DBeaver로 접속해보자.
먼저 database명이 뭔지 조회..
sys 계정 비밀번호도 바꿔주고..
포트는 1521로 했으니 기본으로 하고.. 이렇게..!
접속 테스트는 끝냈으니, SYS 계정을 쓰기보단.. 계정을 새로 만들어주고 쓰자.
--12C 이후 공통 계정 앞에 C## 키워드 안붙이게 하기
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;
-- 사용자 계정 생성
CREATE USER DBA_23AI IDENTIFIED BY 1234;
-- 사용자 계정 권한 부여
GRANT CONNECT, RESOURCE, DBA TO DBA_23AI;
-- 사용자 계정 테이블 공간 설정
ALTER USER DBA_23AI DEFAULT TABLESPACE USERS;
-- 테이블 공간 쿼터 할당
ALTER USER DBA_23AI QUOTA UNLIMITED ON USERS;
COMMIT;
접속 후에 23ai의 신기능,
Table Value Constructor(TVC)
를 한번 써보고 끝내자.
SELECT *
FROM (VALUES (1, '하이')
, (2, '두번째')
, (51, 'YDB')) AS TEMP_TABLE(NO, NAME)
;
PLAN_TABLE_OUTPUT |
---------------------------------------------------------------------+
SQL_ID gswt12n0hrgph, child number 0 |
------------------------------------- |
SELECT * FROM (VALUES (1, '하이') , (2, '두번째') |
, (51, 'YDB')) AS TEMP_TABLE(NO, NAME) |
|
Plan hash value: 1233125608 |
|
---------------------------------------------------------------- |
| Id | Operation | Name | Starts | A-Rows | A-Time | |
---------------------------------------------------------------- |
| 0 | SELECT STATEMENT | | 1 | 3 |00:00:00.01 | |
| 1 | VIEW | | 1 | 3 |00:00:00.01 | |
| 2 | VALUES SCAN | | 1 | 3 |00:00:00.01 | |
---------------------------------------------------------------- |
|
이제 select dual 문을 Union all 해서 여러개 붙이는 짓은 안해도 되긴 하겠다.
끝.
참고자료 :
'DB > ORACLE' 카테고리의 다른 글
[오라클] DB 관리 체크 항목 (0) | 2023.07.31 |
---|---|
[오라클] 해당 스키마에 존재하는 DB 링크를 조회 (0) | 2023.03.28 |
[Oracle - 에러] ORACLE INSERT FETCH ROWS 시 ORA-00918 오류 (0) | 2022.12.22 |
[Oracle - PL_SQL] 오라클 FUNCTION GOTO 사용하기 (0) | 2022.09.26 |
[Oracle - PL_SQL] 오라클 FUNCTION, PROCEDURE EXCEPTION 활용법 (0) | 2022.09.26 |