Oracle XE Database 설치 - Windows

Oracle XE Database 설치를 알아본다.

  1. Oracle XE 설치
  2. Uninstall

1. 오라클 XE 설치

XE 는 Express Edition 의 약어입니다.

오라클 18c 버전은 설치 파일이 용량이 2G가 넘기 때문에 다운로드부터 설치까지 수분~수십분 이상이 소요

설치에 문제가 생기는 원인들

  • 컴퓨터 이름이 한글로 되어 있을 떄
  • 오라클을 한번 설치한 적이 있을 경우
    • oracle home 에서
      • ./deinstall/deinstall
      • regedit를 이용하여 기록을 삭제
      • 방법 명령창에서 sc delete OracleServiceXE 를 수행)

XE 라이센스

Download

최신 버전은 다운로드 페이지에서 직접 다운로드 할 수 있다.

  • 2022/3월 현재 21c 버전을 다운로드 할 수 있다.

https://www.oracle.com/kr/database/technologies/xe-downloads.html

이전 버전은 로그인후 다운로드 할 수 있다. 회원가입후 로그인한다.

회원가입

무료 Oracle 계정은 이메일 인증을 통해서 계정 생성이 가능하다.

XE 시스템 제약

  • 운영체제: Windows 10, Linux (우분투, 레드햇, CentOS 등)
  • 최대 12GB 사용자 데이터
  • 최대 2GB 데이터베이스 RAM
  • 최대 CPU 스레드 2개
  • 최대 3개의 PDB (Up to 3 Pluggable Databases)

Oracle XE 21c 설치

다운로드한 설치 파일을 실행한다.

라이센스

설치 위치

SYS, SYSTEM, PDBADMIN 계정 비밀번호입력: 관리자 계정 비밀번호를 정하여 주는 것으로 오라클 관리자 계정 아이디는 ‘SYSTEM’ 이다.

  • 혼란을 방지하기 위해 Manager1 으로 입력하자.

설치 시작

윈도우 보안 경고에서 Java 허용

구성요소 구성

설치 완료

오라클 XE 설치후 시작메뉴

설치후 확인

서비스 상태 확인

  1. Oracle XE 설치 완료되면, 윈도우 cmd 창에서 sc query 명령어를 통해 설치를 확인할 수 있다.
  1. 윈도우 메뉴 중 ‘앱 및 기능’ 목록 확인

데이터베이스 연결 확인

tnslistener 사용

  • Oracle XE 설치후 DB 연결을 위해 꼭 필요한 서비스인 ‘TNSListener’가 자동설치 되는데, cmd 창에서 연결 상태 확인이 가능하다.
  1. tnsping
  • cmd 창에서 tnsping 명령어 이용.
  • ‘tnsping 127.0.0.1’을 실행하면 아래와 같이 TNSListener, 연결 상태를 확인할 수 있다.
  1. lsnrctl

접속 에러

  1. 접속에러 : TNS-12541 TNS 리스너 에러

윈도우 컴퓨터 이름 에러일 가능성이 크다.
1. 내 컴퓨터 -> 속성 에서 컴퓨터 이름 확인
2. listener.ora 에서 HOST 이름 변경

  1. 오라클 서비스 재시작
    • 윈도우 서비스 Oracle TNS Listener 실행 확인
    • 윈도우의 서비스에서 OracleServiceXE 서비스 재시작

작업관리자 혹은 서비스 매니져에서 사용 가능.

  • 작업관리자 : Ctrl+Shift+ESC
  • 서비스 매니져 : Win + R 에서 services.msc

listener.ora, tnsnames.ora

tnsnames.ora 와 listener.ora 파일의 HOST 를 localhost 로 변경한다.

tnsnames.ora

listener.ora

2 Uninstall


참고

mysqladmin CLI 주요 사용

mysqladmin, mysqldump 명령 사용

mysqladmin 명령 사용하기

  • MYSQL의 root 패스워드 변경하기
  • MYSQL의 일반계정 사용자 패스워드 변경하기
  • 새로운 데이터베이스 생성하기
  • 사용중인 데이터베이스 삭제하기
  • MYSQL의 현재상황 살펴보기
  • MYSQL에 접속한 클라이언트(threads)리스트 확인하기
  • MYSQL 캐쉬 데이터 동기화하기
  • MYSQL 종료하기
  • MYSQL 실행 환경변수 확인하기
  • MYSQL에 접속한 사용자 접속끊기
  • MYSQL의 버전 및 여러가지 실행 정보들 확인하기
  • MYSQL이 정상적으로 살아있는지 죽었는지 확인하기
  • 기타 MYSQL관리에 필요한 유용한 설정 및 정보확인

사용법

1
2
3
4
mysqladmin [-h서버] -u아이디 -p 데이터베이스명 <명령어>

<명령어>: reload, shutdown, create, status등

- MYSQL의 root 패스워드 변경하기

- MYSQL의 일반계정 사용자 패스워드 변경하기

- 새로운 데이터베이스 생성 / 사용중인 데이터베이스 삭제하기

새로운 스키마를 생성할 때 create 명령을 사용한다.

1
mysqladmin -u root -p create 새로운데이터베이스명

기존 스키마를 삭제 할 때 drop 명령을 사용한다.

1
mysqladmin -u root -p drop  데이터베이스명

- MYSQL의 현재상황 살펴보기

status 명령으로 MySQL의 상태를 확인할 수 있다.

  • MYSQL의 총 실행시간
  • 현재 처리중인 스레드(Threads)수
  • 오픈된 데이터베이스 및 테이블 수
  • 초당 평균 처리속도
  • Slow query, Flush tables등
1
mysqladmin -u root -p status

i 인자에 상태 확인 간격을 주어 계속 관찰이 가능하다.

1
2
# 5초 간격
mysqladmin -i5 status -u root -p

- MYSQL의 현재상황 자세히 살펴보기

extended-status라는 명령어는 SQL 명령의 SHOW STATUS 로 보는 시스템 상태와 거의 동일.

1
mysqladmin -u root -p extended-status

- MYSQL에 접속한 클라이언트(threads)리스트 확인하기

- MYSQL 캐쉬 데이터 동기화하기

reload, flush-privileges 를 사용해서 테이블 및 권한 테이블의 캐시를 갱신한다.

MYSQL의 모든 실제 데이터들은 각각의 데이터베이스 내에 존재하는 테이블(table)에 저장되므로 MYSQL의 테이블(table)을 reload 혹은 priviliges 테이블을 flush 해서 갱신한다.

1
2
mysqladmin -u root -p reload
mysqladmin -u root -p flush-privileges

- MYSQL 실행 환경변수 확인하기

mysql client 로 접속해 show variables; 명령을 mysqladmin 명령으로 사용이 가능하다.

1
mysqladmin -u root -p variables

- MYSQL 실행 프로세스 확인하기

mysql client 로 접속해 processlist; 로 mysqladmin 명령으로 사용이 가능하다.

1
mysqladmin -u root -p processlist

- MYSQL에 접속한 사용자 접속끊기

보통 processlist 로 실행중인 ID 를 끊을 수 있다.

1
2
3
4
+----+-----------+------------------+-----------+---------+------+----------+-----------------+----------+
| Id | User | Host | db | Command | Time | State | Info
+----+-----------+-----------------+-----------+---------+------+----------+------------------+----------+
| 31 | stockmart | 192.168.0.2:564 | fedb | Sleep | 18 |

processlist 의 Id컬럼에 있는 접속 Id를 끊는다.

1
mysqladmin -u root -p kill 사용자ID

- MYSQL의 버전 및 여러가지 실행 정보들 확인하기

  • MYSQL의 버전

사용형식 : mysqladmin -u root -p version

  1. MYSQL이 죽었는지 살았는지 확인하기

사용형식 : mysqladmin -u root -p ping

  • MYSQL 소켓파일 위치정보

  • MYSQL의 총 실행시간 정보

- 기타 MYSQL관리에 필요한 유용한 설정 및 정보확인

  • MYSQL의 총 스레드(threads)수

  • MYSQL의 오픈된 데이터베이스와 테이블 수

  • MYSQL의 초당 응답완료 시간

- MYSQL 종료하기



mysqldump 명령

예: 문자셋 latin1 데이터 덤프

문자셋을 mysql> show variables like 'c%' 등으로 확인해서 적절히 덤프를 한다.

1
mysql> mysqldump -u [username] –p[password] --default-character-set=utf8 -N --routines --skip-triggers --databases [database_name] > [dump_file.sql]

덤플 사례: https://itzone.tistory.com/711

MySqLI CLI 주요 명령

mysql CLI 에서 MySQL/MariaDB 관리자로서 사용할 수 있는 명령을 요약한다.

  • create user, grant, drop, delete, remove …

MySqLI CLI Client 로 접속하기

1
mysql [-h서버] -u아이디 -p 데이터베이스명

데이터베이스 스키마

1
mysql> SHOW DATABASES;

use 명령을 사용하여 사용할 데이터베이스/스키마를 선택

1
mysql> USE TESTDB;

선택된 데이터베이스 안의 테이블 확인

1
2
mysql> SHOW TABLES;
mysql> SHOW TABLES LIKE 't%'; # t로 시작하는 테이블

특정 스키마 혹은 테이블의 생성 쿼리를 출력

1
2
mysql> SHOW CREATE DATABSE SAKILA;
mysql> SHOW CREATE TABLE STUDENTS;

데이터베이스의 생성 및 삭제

1
mysql> CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_general_ci;
  • utf8_general_ci 는 대소문자를 구분하지 않는다.
  • 대소문자를 구분하려면 binary 타입으로 지정. 예) “utf8_bin”

캐릭터셋과 COLLATE 를 생략하면 서버 설치시 지정한 기본 값으로 설정

1
mysql> CREATE DATABASE testdb;

스키마 제거

1
mysql> DROP [SCHEMA]DATABASE testdb;

시스템 환경 확인

서버의 환경 변수

1
2
# 모든 변수
mysql> SHOW VARIABLES;

DBMS 버전

1
2
3
mysql> select @@version;       -- DBMS version

mysql> SHOW VARIABLES LIKE 'version';
1
mysql> SHOW VARIABLES LIKE 'innodb_%';

지원하는 문자세트 구성

1
2
3
mysql> SHOW CHARACTER SET;

mysql> SHOW CHARACTER SET LIKE 'utf%';

문자세트 확인

1
2
-- 환경변수에서 확인
mysql> SHOW VARIABLES LIKE 'c%';

지원하는 콜레이션

1
2
3
mysql> SHOW COLLATION;

mysql> SHOW COLLATION WHERE Charset = 'utf8mb4';

외부 파일 실행하기

첫 번째는 mysql cli 에 지정하여 실행하는 방법

1
2
3
$ mysql -u dbuser -p testdb < insert.sql

Enter password: ****

두 번째 방법을 mysql cli에서 source 명령을 사용

1
mysql> SOURCE C:\Users\USERID\insert.sql;


User & Privileges

사용자 db

mysql 스키마의 user 테이블을 사용한다.

SELECT Host,User,plugin,authentication_string FROM mysql.user;

사용자 추가

사용자를 생성시 호스트 주소에 ‘%’, ‘localhost’로 호스트 범위를 지정한다

1
2
3
mysql> CREATE USER 'USERID'@'localhost' IDENTIFIED BY 'password';
mysql> CREATE USER 'USERID'@'%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

grant 명령: [권한 부여]

사용자가 특정 자원에 접근하기 위해서 grant 명령 사용.

1
2
3
4
5
6
GRANT ALL PRIVILEGES ON DB이름.테이블이름 TO 아이디@호스트 IDENTIFIED BY '비밀번호' with grant option;

- ALL PRIVILEGES : 모든 권한 추가
- SELECT, INSERT, UPDATE, DELETE, ... : 권한을 일부분을 추가
- with grant option : GRANT를 사용할 수 있는 권한 추가
- Grant 로 주어지는 권한은 여기 [grant: privilege-levels](https://mariadb.com/kb/en/grant/#privilege-levels) 명령에서 찾을 수 있다.

아래는 userid 사용자가 특정 sampledb 에만 모든 권한을 부여하고 있다.

1
2
mysql> GRANT ALL PRIVILEGES ON sampledb.* TO 'USERID'@'localhost';
mysql> FLUSH PRIVILEGES;

다음 GRANT 명령에서 ALL PRIVILEGES ON *.* 는 모든 권한(ALL PRIVILEGES)을 모든 스카마의 모든 테이블 *.* 에 준다는 의미.

1
2
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERID'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
  • WITH GRANT OPTION 의 의미는 다른 사용자에게 자신이 가진 권한을 주거나 회수할 수 있다는 의미.
  • ALL PRIVILEGES 부분에는 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 등 권한 명칭을 콤마로 분리해서 나열하는 방식으로 특정 권한만을 줄 수도 있다.

[권한 제거]

권한을 없앨때는 REVOKE 명령을 사용한다. 두가지 형식을 사용한다.

1
2
3
REVOKE priv_type ON db.tables FROM user[,user]  ...

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

아래 명령으로 ‘localhost’ 에서 접속가능한 ‘testdbuser’ 에게서 모든 권한을 제외한다.

1
mysql> REVOKE ALL PRIVILEGES *.* FROM 'USERID'@'localhost';

GRANT 명령과는 달리 REVOKE 명령은 모든 권한을 제거해도 mysql.user 테이블 사용자 정보는 완전히 삭제되지 않는다.

사용자 정보의 완전한 제거를 원한다면 DROP USER 명령을 사용한다.

1
mysql> DROP USER 'USERID'@'localhost';

권한 조회

사용자별 권한 확인

1
mysql> SHOW GRANTS FOR 'USERID'@'HOST';

접속된 계정 권한 확인

1
mysql> SHOW GRANTS FOR CURRENT_USER;


실행 프로세스 확인

현재 접속자를 확인하고, lock 이 걸린 프로세스를 죽이거나 하는 작업

  • 프로세스 리스트보기
1
2
3
4
5
6
7
8
mysql> SHOW PROCESSLIST;
+------+-----------+----------------------+-----------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+----------+
| Id | User | Host | db | Command | Time | State | Info
| Progress |
+------+-----------+----------------------+-----------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+----------+
| 1371 | dbkmart | 205.22.168.143:29762 | yourdb | Sleep | 2673 | | NULL
| 0.000 |
|
  • 프로세스 죽이기(프로세스 아이디는 리스트에 나오는 Id.)
1
mysql> kill 프로세스아이디

ex: DB 생성해 사용자 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 1. mysql/mariadb 데이터베이스 생성
create database webdb;

-- 2. mysql/mariadb 계정 생성
create user 'webdb'@'192.168.1.%' identified by 'webdb';

-- 3. 권한주기
grant all privileges on webdb.* to 'webdb'@'192.168.1.%';

-- 4. flush privileges;

-- 5. 사용자 계정 삭제
drop user 'webdb'@'192.168.1.%';

-- 6. 데이터베이스 삭제
drop database webdb;

  1. grant: privilege-levels : https://mariadb.com/kb/en/grant/#privilege-levels

Docker 기반 mongodb

Docker 기반 mongodb

Official : https://hub.docker.com/_/mongo/
참조: https://github.com/dockerfile/mongodb

로컬에 “mongo_data” 라는 데이터 저장소가 있고 29817 포트로 실행하기를 한다면 다음 같다:

1
$ docker run -d -p 29817:27017 -v /home/its/mongo_data:/data/db --name mongodb mongo

그리고 docker로 시작한 mongodb 컨테이너에 있는 mongo 를 사용해서 데이터베이스에 접속할 수 있다.

1
$ docker exec -it mongodb mongo

인증 이용

1
$ docker run -d -p 29817:27017 -v /home/its/mongo_data:/data/db --name mongodb mongo --auth

admin 데이터에이스에서 사용자 관리 계정 등록

1
2
$ docker exec -it mongodb mongo admin
> db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });