오라클의 Job Schedule과 동일하게 MariaDB에서도 Procedure가 있다면 별도의 언어를 사용하여 배치 프로그램을 생성하지 않고 MariaDB 이벤트 스케줄러를 사용하여 배치 처리를 할 수 있습니다.

 

Procedure를 사용해야 하기 때문에 JDBC 방식처럼 복잡한 작업이 동반되는 업무에는 적합하지 않고 단순히 DB들을 이용하여 작업하는 경우에는 작업 속도가 빠릅니다.

 

먼저 Event Scheduler를 사용하려면 DB에 기능이 활성화 되어있는지 쿼리를 이용하여 확인을 해야합니다.

 

SHOW VARIABLES WHERE VARIABLE_NAME = 'event_scheduler';

 

 

 

만약 위에 보이는 것처럼 OFF 상태라면 다음 쿼리로 활성화시켜줍니다.

 

SET GLOBAL event_scheduler = ON;

 

다시 한번 쿼리가 잘 적용되어 활성화 되었는지 확인합니다.

 

SHOW VARIABLES WHERE VARIABLE_NAME = 'event_scheduler';

 

 

 

이상 없이 적용 되었네요.

 

이제 DBEvent를 생성합니다.

쿼리는 아래와 같이 CREATE 명령을 사용하며 마지막에 실행되어야 하는 Procedure를 호출합니다.

 

CREATE EVENT EV_STATISTIC
    ON SCHEDULE every 1 MINUTE
    STARTS '2023-11-01 00:05:00'
    COMMENT '매분 1 이벤트가 실행된다.'
    DO
      call SP_STATISTICS(null);

 

테스트를 위해 1분에 한번씩 작동하도록 하였는데(every 1 MINUTE)

반복 주기는 아래와 같이 다양하게 선택해서 설정이 가능 합니다.

 

{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

 

여기서 하나를 선택해서 반복 주기를 설정할 수 있습다.

 

이벤트 생성이 잘 되었는지 아래 명령을 이용하여 확인해봅니다.

 

SHOW EVENTS;

 

 

 

이벤트가 잘 생성 되었습니다.

 

만약 이벤트를 삭제하려면 Table 삭제와 비슷한 명령어를 사용합니다.

 

DROP EVENT EV_STATISTIC;

 

DB Tool을 이용하여 Event를 찾아보면 아래처럼 확인이 가능 합니다.

저는 DBeaver 사용중 입니다.

 

 

 

Interval Field 부분을 DAY로 변경하고 Comment를 수정하면 매일 1회 작동하는 배치로 변경이 가능 합니다.

 

- copy coding -

 

무료이면서 기능도 많고 가벼워서 많이 사용했는데 Oracle이 사가면서 다른 DB를 더 많이 사용했는데 간단한 테스트가 필요해서 설치를 하게 되었습니다.

간단한 테스트를 하려던 건데 설치 과정은 상당히 길게 진행이 됩니다.

 

https://dev.mysql.com/downloads/installer/

 

다운로드를 위해 사이트에 접속을 하면 오라클 사이트의 대표적인 먹지도 못하는 쿠키 허용 팝업이 나타납니다.

 

 

이럴 때는 그냥 [모두 거절] 버튼을 클릭하고 진행을 하면 됩니다.

 

 

 

[닫기] 버튼을 클릭 합니다.

 

 

 

아래에 있는 윈도우 버전을(mysql-installer-community-8.0.35.0.msi) 설치를 합니다.

Windows (x86, 32-bit), MSI Installer          8.0.35    288.6M 

우측에 있는 [Download] 버튼을 클릭하여 다음 단계로 이동합니다.

 

 

 

여러 도움을 받으려면 회원 가입을 하거나 로그인을 하라고 하는데 지금은 MySQL 설치만 진행하려고 하기 때문에 하단에 있는 [No thanks, just start my download.] 글씨를 클릭하여 파일을 다운로드 받습니다.

파일은 자동으로 다운로드가 진행되며 탐색기로 다운로드 폴더를 열어 파일을 확인합니다.

새로 탐색기를 열어야 한다면 단축 키( 윈도우버튼 + E )를 이용하여 실행합니다.

 

 

 

다운받은 파일을 더블 클릭하여 실행해주면 설치가 진행 됩니다.

 

 

 

 

 

기본적으로 [Server only]가 선택되어 있어 서버만 설치하도록 되어 있는데 추가로 설치할 수 있는 기능을 확인 하려면 [Custom]을 체크 하고 [Next] 버튼을 클릭해 줍니다.

각 라디오 버튼 별로 설치되는 항목을 확인하려면 하나씩 선택하고 [Next] 버튼을 클릭하여 확인한 후 다시 [Back] 버튼으로 돌아오면 됩니다.

 

 

 

Custom을 선택한 경우의 모습으로 각각의 메뉴를 확장해서 선택 옵션을 확인 하고 필요한 항목을 선택하고 우측 화살표를 클릭하면 우측 설치 예정 목록에 추가가 됩니다.

트리 메뉴의 마지막 단계를 선택해야 우측으로 이동하고 이동된 항목은 비활성화 됩니다.

모든 선택이 완료 되었으면 [Next] 버튼을 클릭 합니다.

 

 

 

기존에 Microsoft Visual C++이 설치되어 있지 않은 경우 설치를 진행하기위해 미리 설치를 해야하는 항목입니다.  하단에 있는 [Execute] 버튼을 클릭하여 설치합니다.

이런 팝업 화면이 안나온다면 사용하시는 컴퓨터에 이미 설치가 되어있다는 의미입니다.

 

 

 

Execute 버튼을 클릭하면 Microsoft Visual C++ 라이선스 항목이 나옵니다.  [동의함]에 체크하고 [설치] 버튼을 클릭해 줍니다.

 

 

 

Microsoft Visual C++ 설치가 완료되었습니다. [닫기] 버튼을 클릭 합니다.

 

 

 

MySQL ServerWorkbench가 모두 Microfost Visual C++ 동일한 프로그램이 필요한 경우로 한번만 설치하는 것으로 해결이 되었습니다.

[Next] 버튼을 클릭하여 다음 단계로 이동합니다.

 

 

 

MySQL WorkbenchGUI 환경의 DB 툴입니다.  오랜지, 토드, DBeaver등과 같다고는 할 수 없고 오라클의 SQL Developer 정도의 기능을 가진 MySQL을 사용하기위한 Windows용 툴입니다.

선택한 항목을 확인하고 이상이 없으면 [Execute] 버튼을 클릭하여 설치를 진행합니다.

아니면 [Back] 버튼을 이용하여 설정을 변경하면 됩니다.

 

 

 

위쪽부터 하나씩 설치가 진행 됩니다.

 

 

 

선택한 기능들에 대한 설치가 완료 되었습니다.  [Next] 버튼을 클릭 합니다.

 

 

 

설치 후 설정 작업을 진행하는 단계로 [Next] 버튼을 선택하여 두개의 제품에 대해 설정(configure)을 진행 합니다.

 

 

 

MySQL을 어떤 용도로 사용할 것인가를 선택하고 Server Port를 결정합니다.

Port3306으로 되어있지만 보안이나 기타 이유로 변경할 수 있습니다.

변경 작업이 완료되었으면 [Next] 버튼을 클릭 합니다.

 

 

 

사용자 인증은 첫번째 항목으로 기본설정 되어있습니다.  MySQL을 단독으로 사용하기에는 보안이 좋지만 다른 프로그램과 연동해서 사용하려면 아래에 있는 Legacy Authentication으로 설정을 합니다.

[Use Legacy Authentication Method]를 선택하고 [Next] 버튼을 클릭 합니다.

 

 

 

ROOT 비밀번호를 설정하며 나중에 DB에 로그인 하려면 필요하니 비밀번호는 꼭 기억해 둡니다.

필요하다면 아래에 있는 [User Accounts]에서 root 이외의 사용자 계정을 바로 생성할 수도 있습니다.

[Next] 버튼을 클릭합니다.

 

 

Windows에 서비스로 등록하는 명칭을 결정하는 화면으로 기본값은 버전이 붙어있습니다.

여러 버전을 운용하지 않는다면 통상적인 MySQL로 변경해주고 [Next] 버튼을 클릭합니다.

 

 

 

폴더에 저장되어있는 DB 데이터 파일에 접근할 수 있는 권한입니다.

MySQL이 설치되고 DB를 생성하면 파일로 만들어 지는데 이곳에 접근하는 권한입니다.

[Next] 버튼을 클릭합니다.

 

 

 

지금까지 진행한 설정[Configuration] 값을 적용하는 단계입니다.

[Execute]를 클릭하면 하나씩 설정이 실행됩니다.

 

 

 

설정 반영이 완료되었습니다.  [Finish] 버튼을 클릭합니다.

 

 

 

이제 제품에 대한 설정을 진행하는 단계입니다.

무슨 설치 단계를 이렇게 많이 해놓았을까 이상하네요.  [Next버튼을 클릭합니다.

 

 

 

DB 서버에 접속을 하는 테스트 단계로 앞에서 입력했던 root 비밀번호를 입력하고 [Check] 버튼을 클릭 합니다.

StatusConnection succeeded가 나오면 접속에 성공한 것입니다.  [Next] 버튼을 클릭합니다.

 

 

 

모든 설정작업이 잘 완료되었습니다.  [Next] 버튼을 클릭합니다.

 

 

 

모든 MySQL 설치과정이 완료된 단계로 [Finish] 버튼을 클릭하여 종료 하거나 Start MySQL Workbench after setup을 체크하여 workbench를 실행시켜볼 수 있습니다.  여기서는 한번 실행해 봅니다.

 

 

 

MySQLWindows GUI 툴이 실행 됩니다.  접속을 해보도록 하겠습니다.

 

 

 

MySQL Connections에 있는 회색 박스를 클릭하고 root 비밀번호를 입력하여 로그인 합니다.

 

 

 

설치된 MySQL DB에 접속이 되었고 이곳에서 DB상태등을 확인하며 DB작업을 할 수 있는 화면이 나타납니다.

길고도 지루한 설치과정이 완료되었습니다.

 

- copy coding -

 

Database를 사용할 때 조회 결과를 이용하여 프로그램을 분기해야 하는 상황이 발생합니다.

count를 계산하는 경우라면 당연히 걱정할 필요가 없는데 꼭 필드의 값을 받아와야만 하는 경우에는 편법을 이용해야 하는데 제일 간단한 방법을 기록해 둡니다.

 

Oracle DB는 오라클에서 제공하는 online 서비스를 이용해서 설명합니다.

Oracle 온라인 서비스는 예전에 한번 소개했는데 간단한 사용법은 아래 주소에 가면 됩니다.

 

https://copycoding.tistory.com/272

 

 

Job Table을 검색해서 데이터를 확인해 봅니다.

 

JOB_ID가 없는 row를 그냥 count 하는 작업이면 간단하게 “0” 값을 얻을 수 있습니다.

 

 

 

그러나 그냥 개수가 아닌 필드의 값을 받아와서 그 값을 가지고 계산을 하거나 조건절을 사용하려는 경우에는 난감합니다.

 

 

값을 넘겨받지 못하여 프로그램에서 에러가 발생합니다.

 

이런 경우 0 또는 본인이 받고 싶은 다른 값을 받아오는 방법입니다.

간단히 RIGHT OUTER JOIN DUAL을 해주면 됩니다.

 

 

 

where 절은 ON으로 변경해주면 결과를 얻을 수 있습니다.

 

테스트에 사용된 전체 쿼리 입니다.

 

 
select
    "JOB_ID",
    "JOB_TITLE",
    "MIN_SALARY",
    "MAX_SALARY"
from HR."JOBS";
 
 
select
    count(*)
from HR."JOBS"
where 1 = 1
  and MIN_SALARY > 1000 
  and MAX_SALARY < 50000
  and JOB_ID = 'aaaa';
 
 
select
    MIN_SALARY
from HR."JOBS"
where 1 = 1
  and MIN_SALARY > 1000 
  and MAX_SALARY < 50000
  and JOB_ID = 'aaaa';
 
 
select
    NVL(MIN_SALARY, 0) as MIN_SALARY
from HR."JOBS" RIGHT OUTER JOIN DUAL
 ON 1 = 1
  and MIN_SALARY > 1000 
  and MAX_SALARY < 50000
  and JOB_ID = 'aaaa';
 

 - copy coding -

 

PostgreSQL 데이터베이스를 dump 명령등을 사용해서 파일로 저장하면 이전에 insert 해놓은 자료들을 찾아보기가 어렵습니다. 이런 경우는 DB의 이름을 변경해서 그대로 복사해 놓으면 자료를 찾아보기도 쉽고 작업하기도 편리 합니다.  

postgresqldatabase를 복사하기 위한 작업을 해보겠습니다.

 

먼저 알고 있는 명령어를 사용해서 작업을 시작해 봅니다.

 

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 TestDB    | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 postgres  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 template0 | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

 

리스트에 나오는 TestDB를 다른 이름으로 복사하는 명령어는 아래와 같습니다.

 

CREATE DATABASE [new database] WITH TEMPLATE [old database] OWNER [owner];

 

TestDBTestDB2022라는 DB로 복사하려면

 

CREATE DATABASE TestDB2022 WITH TEMPLATE TestDB OWNER postgres;

 

이렇게 명령어를 입력하면 되겠네요.

 

 

postgres=# CREATE DATABASE TestDB2022 WITH TEMPLATE TestDB OWNER postgres;
오류:  "TestDB" 템플릿 데이터베이스 없음
postgres=#

 

그렇지만 대부분 오류가 발생하게 됩니다.

이유는 오류 내용과 같이 템플릿 데이터베이스가 아니기 때문 입니다.

 

postgres=# select datname, datistemplate from pg_database;
  datname  | datistemplate
-----------+---------------
 postgres  | f
 TestDB    | f
 template1 | t
 template0 | t
(4 rows)

 

TestDBdatistemplate 값이 f(false)입니다.

true로 변경을 합니다.

 

postgres=# ALTER DATABASE "TestDB" WITH IS_TEMPLATE = true;
ALTER DATABASE
postgres=#

 

이제 다시 TestDB를 복사해 봅니다.

 

postgres=# CREATE DATABASE "TestDB2022" WITH TEMPLATE "TestDB";
CREATE DATABASE
postgres=# \l
                                  List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
------------+----------+----------+-------------+-------------+-----------------------
 TestDB     | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 TestDB2022 | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 postgres   | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 template0  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
 template1  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
(5 rows)

 

 

복사가 잘 진행 되었습니다.

명령문에 CREATE DATABASE "TestDB2022" WITH TEMPLATE "TestDB";

쌍따옴표를 붙인 이유는 대소문자에 따라 Database 이름을 찾지 못하는 경우가 있습니다.

 

ALTER DATABASE "TestDB" WITH IS_TEMPLATE = false;

 

복사가 완료되면 기존 데이터베이스는 다시 templatefalse로 변경해 놓으면 작업은 완료 됩니다.

 

- copy coding -


1234···6

+ Recent posts