[MacOS] OracleDB 도커 컨테이너 실습

단이·2024년 4월 17일

데이터베이스

목록 보기
2/2

오라클에서는 멀티테넌트 아키텍처라는 개념을 사용하기 때문에 계정 유형에 대한 이해가 필요하다.

멀티테넌트 개념은 오라클 멀티테넌트 DB 기본개념 정리 (Oracle Multi-Tenant DB Basics)를 읽어보는 것을 추천한다.


오라클 데이터베이스 계정 유형

1. 슈퍼 사용자 계정

예시: SYS, SYSTEM
목적: 데이터베이스 전체를 관리하는 데 사용되는 계정으로, 데이터베이스 인스턴스의 생성과 설정, 모든 유저의 관리, 중요 시스템 테이블 및 뷰의 접근과 수정이 가능
권한: 가장 높은 수준의 권한을 가지며, 데이터베이스 관련 거의 모든 작업을 수행 가능

2. 공통 사용자 계정

예시: C##USERNAME
목적: 멀티테넌트 아키텍처에서 사용되며, 하나의 공통 사용자가 여러 플러그 가능 데이터베이스(PDB)에 접근하여 작업을 수행 가능
권한: CONTAINER=ALL을 사용하면 CDB 전체에 걸쳐 권한을 가질 수 있으며, 이는 다수의 PDB에서 작업이 가능

3. 일반 사용자 계정

목적: 특정 데이터베이스 또는 애플리케이션의 데이터 관리를 위해 생성되며, 이 사용자들은 자신들의 데이터베이스 객체(테이블, 뷰 등)에 대한 작업만 수행
권한: 생성 시 지정된 권한에 따라 제한됩니다. 일반적으로 자신이 소유하거나 접근 권한이 부여된 객체에만 작업이 가능


전 글에서 작성했던 오라클 컨테이너 설치에서는 슈퍼유저 계정으로 로그인하고 테이블을 출력하는 것 까지 했다. 슈퍼유저 계정은 오라클 데이터베이스의 운영과 관리를 위해 시스템이 자동으로 생성하고 관리하는 시스템 테이블까지 건드릴 수 있기 때문에 관리 및 개발 작업에서 실수로 중요한 시스템 테이블을 수정하거나 삭제할 위험이 있어서 실습이나 개발을 진행할 때에 로그인해서 데이터베이스를 생성할 때 권장되는 방법이 아니라고 한다.

따라서, 우리는 사용자가 특정 데이터를 저장하기 위해 생성한 테이블인 사용자 정의 테이블을 안전하게 생성하려면 따로 유저 계정을 만들어 줘야 한다. 교육이나 실습 환경에서 멀티테넌트 아키텍처의 이해와 활용을 위해 공통 사용자 계정으로 만드는 것이 권장된다고 한다.

공통 사용자 계정 생성

1. 슈퍼유저 계정 접속

도커 오라클 컨테이너를 실행하고, 먼저 system 슈퍼 유저 계정에 로그인 해서 sqlplus를 터미널에 띄운다.

2. 공통 사용자 계정 생성

CREATE USER C##danee IDENTIFIED BY password CONTAINER=ALL;

User created. 가 뜨면 성공

  • C##은 공통사용자를 나타내는 접두사
  • IDENTIFIED BY는 비밀번호 설정 시 필요한 옵션
  • CONTAINER=ALL은 이 사용자에게 CDB 전체에서 권한을 부여해서 사용자가 모든 PDB에 대해 관리할 수 있도록 함
  • 위는 공통 사용자 계정 C##danee를 생성하고 비밀번호를 password로 설정한 것

3. 권한 부여

GRANT CONNECT, RESOURCE TO C##danee CONTAINER=ALL;
GRANT DROP ANY TABLE TO C##danee CONTAINER=ALL;
GRANT CREATE VIEW TO C##danee;

Grant succeeded. 가 뜨면 성공

  • CONNECT 는 사용자가 데이터베이스에 연결 및 로그인 할 수 있는 권한을 제공
  • RESOURCE 는 사용자가 테이블, 인덱스, 시퀀스 등을 생성할 수 있는 권한을 제공
  • DROP ANY TABLE은 사용자가 자신이 만든 모든 테이블을 삭제할 수 있는 권한을 제공

4. 쿼터 설정

ALTER USER C##danee QUOTA UNLIMITED ON USERS;
  • 테이블스페이스 (Tablespace): 테이블스페이스는 데이터 저장공간이라고 생각하면 되며, USERS 테이블스페이스는 일반적으로 사용자 데이터를 위해 사용되고 데이터베이스 설치 시 기본적으로 생성
  • 쿼터 (Quota): 테이블스페이스에 저장될 수 있는 데이터의 양을 제한하기 위해 사용자별로 설정할 수 있으며, 데이터베이스 관리자에 의해 ALTER USER 명령을 사용하여 설정 된다. 위는 제한 없이 데이터를 저장할 수 있는 UNLIMITED를 사용함

+ 유저 삭제

잘못 만들었을 때만 사용, 이미 만들어진 데이터베이스가 있으면 잘 처리하고 삭제해야 함

DROP USER C##danee CASCADE;

User dropped. 가 뜨면 성공


첫 실습

1. 로그인

이제 exit을 통해 슈퍼유저 계정에서 로그아웃 하고 다시 위에 생성한 공통 사용자 계정으로 로그인한다.

docker exec -it oracle sqlplus #sqlplus 실행

2. 테이블 확인

select * from tab; 

모든 테이블 출력을 했을 때 이제 슈퍼유저 계정으로 출력했을 때와 달리 no rows selected가 뜰 것이다. 실습 준비 끝!

3. SQL Developer 사용

sqlplus는 명령 인터페이스지 편집기가 아니다. 따라서 스크립트 파일 생성은 불가하다. 따라서 우리는 SQL명령어를 SQL Developr라는 오라클에서 만든 IDE에서 사용하고, 출력 파일을 만들 것이다.

우리는 arm64 아키텍처라 JAVA기반으로 만든 SQL Developer를 사용하기 위해선 JDK라는 패키지를 먼저 설치해주고 SQL Developer를 사용하는 것이 좋다고 한다.

  1. JDK 패키지 다운로드 여기서 DMG파일로 다운받은 후 패키지 클릭 후 설치
  2. Oracle SQL Developer 다운로드

만약 무한로딩이 생기면 [Mac OS] SQL Developer 무한 로딩 이 포스트를 참고

이름, 아까 생성했던 공용계정을 이용해 로그인한다.

4. 테이블 생성

CREATE TABLE firstTable
	(id 	CHAR(10) primery key,
    name	VARCHAR(30),
    height	NUMRIC(4,1)
 );

위의 테이블은 번호, 이름, 키를 받는 테이블이다.

  • SQL명령어는 대소문자의 영향을 받지 않으나 확실한 구별을 위해 관습적으로 대문자를 사용
  • char: 고정 길이 문자 데이터 유형으로 지정된 길이에 도달하지 않는 데이터를 저장할 때, 나머지 공간은 공백으로 채워짐. 위는 primery key를 '1'로 받으면 1과 함께 나머지 공백9개와 함께 저장 됨
  • VARCHAR: 가변 길이 문자 데이터 유형으로 저장된 데이터는 실제 길이만큼만 공간을 차지하고, 나머지 공간은 사용하지 않음. 위는 VARCHAR(30)에 'Kim'을 저장하면, 실제 저장 공간은 'Kim'만 사용하고 추가 공간은 낭비하지 않음
  • CHAR는 데이터 길이가 일정하고 작은 크기의 데이터에 적합하며, VARCHAR는 공간 효율성이 더 중요하거나 데이터 길이가 변동적일 때 더 적합
  • numric: 고정 및 부동 소수점 숫자를 저장하며, 위의 NUMRIC(4,1)은 최대 4자리 숫자를 저장할 수 있으며 그 중 한 자리는 소수점 이하 자릿수로 사용

5. 인스턴스 입력

INSERT INTO firstTable VALUES ('1', 'Kim', 185.3);
INSERT INTO firstTable VALUES ('2', 'Lee', 190.5);
INSERT INTO firstTable VALUES ('3', 'Park', 200.2);

6. 데이터 확인

SELECT * FROM firstTable;
  • *는 보통 '모든'을 뜻함
  • firstTable의 모든 데이터 출력을 뜻하는 명령어
SQL> SELECT * FROM firstTable;

ID	      NAME				 HEIGHT
------------- ------------------------------ ----------
1	      Kim				  185.3
2	      Lee				  190.5
3	      Park				  200.2

7. 스크립트 파일 및 출력 파일 저장

SQL Developer에서 스크립트 칸의 저장과 좌측 상단의 저장을 누르면 스크립트와 출력 파일 저장이 가능하다.

8. 테이블 삭제하기

객체 삭제

-- fistTable을 휴지통으로 이동
DROP TABLE fistTable;
-- 휴지통 완전히 비우기
PURGE RECYCLEBIN;

SQL developer 종료하기

1. 파일 저장

막대 메뉴에서 하고있던 작업을 모두 저장한다.

2. 접속 해제

우클릭 시 접속 해제가 뜨므로 클릭한다.

3. SQL Developer 종료

0개의 댓글