StoryCode

UDF 만들기

Database 관리/Maria DB
반응형

 

 

 

참고) DROP FUNCTION 을 여러번 명령날려야 하는 듯 하다. 여러 번 DROP FUNCTION 을 하다보면 데이타베이스가 내려갔다가 다시 올라온다. 작업시 매우 주의할 것.

 

반응형

Ubuntu 20.04.02, MariaDB 10.5 설치, UDF 설치, System Call Udf

Database 관리/Maria DB
반응형
mysql -u root -p

* 참조 : computingforgeeks.com/how-to-install-mariadb-on-ubuntu-focal-fossa/

sudo apt update && sudo apt upgrade
sudo apt -y install software-properties-common
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main'
sudo apt update
sudo apt install mariadb-server mariadb-client
sudo mysql_secure_installation
# 대답은 전부 Y 로 함.
systemctl status mysql
# mysql5.7 / mariadb10.1 이상의 root 계정은 터미널에서만 사용만 가능.

CREATE USER '아이디'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%';

# root 권한 부여
UPDATE mysql.user SET GRANT_PRIV = 'Y', SUPER_PRIV = 'Y' WHERE USER = '아이디';
FLUSH PRIVILEGES;

 

 

 

 

* UDF.system call

sudo apt-get install make gcc
sudo apt-get install libmysqlclient-dev 
sudo apt install libmariadb-dev
sudo apt install default-libmysqlclient-dev
# libmysqlclient15-dev 는 안됨.



mysql_config --include
>> -I/usr/include/mariadb -I/usr/include/mariadb/mysql : 여기에 my_global.h, m_ctype.h 등이 있어야 함.

# "lib_mysqludf_sys.c" 에서, 

아래 삭제후 저장
    #include <my_global.h>
    #include <my_sys.h>
    #include <m_ctype.h>
    #include <m_string.h>

#include <mysql.h> 가 include 되는 게 중요.

sudo ./install.sh # so 생성을 위해서



mysql> SHOW VARIABLES LIKE 'plugin_dir';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.001 sec)

# /usr/lib/mysql/plugin/ 에 so 가 있어야 함.
sudo cp /usr/lib/lib_mysqludf_sys.so /usr/lib/mysql/plugin/

sudo ./install.sh # so 를 function 에 등록을 위해서

 

반응형

'Database 관리 > Maria DB' 카테고리의 다른 글

[편법] CVS Parsing, 파싱  (0) 2021.09.23
UDF 만들기  (0) 2021.05.06
maria10.zip.windows10 64bit.설치  (0) 2020.04.23
MySQL.무인스톨설치  (0) 2020.04.23
JSON 처리  (0) 2019.12.03

maria10.zip.windows10 64bit.설치

Database 관리/Maria DB
반응형

참조 ) https://jbongsu.blogspot.com/2018/07/mysqlmariadbsql-mariadb-10216-zip.html

참조 ) 

 

 

1) zip 을 다운로드하여 특정 디렉토리에 푼후, PATH 에 bin 추가

Ex> e:\DATABASE\mariadb-10.4.12-winx64

 

 

2) 관리자모드.DOS 창을 오픈

bin\mysql_install_db --datadir=e:\DATABASE\mariadb-10.4.12-winx64\data --service="MariaDB" --port=3306 --password=비번

 

3) service 에서 start 시키기

 

4) 이미 2) 에서 비번은 설정했으나, 변경시 아래 실행

mysql -u root -p

use mysql;

select user, host from mysql.user;
alter user 'root'@'localhost' identified by '비번';
flush privileges;

 

5) 

 

반응형

'Database 관리 > Maria DB' 카테고리의 다른 글

UDF 만들기  (0) 2021.05.06
Ubuntu 20.04.02, MariaDB 10.5 설치, UDF 설치, System Call Udf  (0) 2021.02.16
MySQL.무인스톨설치  (0) 2020.04.23
JSON 처리  (0) 2019.12.03
설치 및 설정  (0) 2018.10.31

MySQL.무인스톨설치

Database 관리/Maria DB
반응형

참조)

https://m.blog.naver.com/PostView.nhn?blogId=tweakerz&logNo=220947651834&proxyReferer=https:%2F%2Fwww.google.com%2F

 

1) c:\mysql 폴더에 zip 파일 풀기

 

2) path 에 c:\mysql\bin 추가하기

 

3) my-default.ini 를 my.ini 로 복사

 

4) my.ini

[mysqldump]
default-character-set = utf8

[client]
default-character-set = utf8

 

[mysql]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = set collation_connection = utf8_general_ci
init_connect = set names utf8
character-set-client-handshake = FALSE
skip-character-set-client-handshake

 

basedir = C:/mysql 와 같이 mysql 설치경로를 입력
datadir = C:/mysql/data 와 mysql 설치경로 하위의 DB폴더명
port = 3306 와 같이 기본3306포트를 지정합니다.

 

5) 설치 초기화

mysqld --install

mysqld --initialize

 

6) 서비스 시작

net start mysql

 

7) root 암호

data/*.err 파일안에서 password 로 검색해보면 임의 암호가 보임.

 

8) 접속 후 비밀번호 변경

mysql -uroot -p

show databasesalter user `root`@`localhost` identified by 'abc123'

 

9) 

 

 

 

 

반응형

'Database 관리 > Maria DB' 카테고리의 다른 글

UDF 만들기  (0) 2021.05.06
Ubuntu 20.04.02, MariaDB 10.5 설치, UDF 설치, System Call Udf  (0) 2021.02.16
maria10.zip.windows10 64bit.설치  (0) 2020.04.23
JSON 처리  (0) 2019.12.03
설치 및 설정  (0) 2018.10.31

sql to csv

Database 관리/Oracle
반응형

참조 : https://stackoverflow.com/questions/30357272/export-from-oracle-sql-to-csv-from-command

참조 : https://community.oracle.com/thread/2357292

 

file.sql:

spool "/home/username/file.csv";
SELECT /*csv*/ '"'||COLUMN_1||'"',
'"'||COLUMN_2||'"',
'"'||DBMS_LOB.substr(COLUMN_3,3000)||'"',
        ...
'"'||COLUMN_N||'"'
FROM TABLE; 
spool off; 

 

file.sh:

export ORACLE_SID=MYSID
sqlplus / as sysdba <conn myUser/myPass 
set heading off
set termout off 
set trimout off
set newpage none
set pages 0
set feedback off
set echo off
set verify off
set trimspool on
set sqlprompt "" 
set colsep ","
set linesize 32767      
@/home/username/file.sql
exit
EOF

 

 

 

반응형

'Database 관리 > Oracle' 카테고리의 다른 글

SQL Developer 설치  (0) 2020.02.27
IOT (Indexed Organized Table)  (0) 2020.02.11
NESTED TABLE Column  (0) 2020.02.11
Oracle.Client.SQLPlus.Ubuntu21 설치 ( window, linux 방식 동일 )  (0) 2020.01.17

SQL Developer 설치

Database 관리/Oracle
반응형

1) https://www.oracle.com/tools/downloads/sqldev-v192-downloads.html

 

 

반응형

'Database 관리 > Oracle' 카테고리의 다른 글

sql to csv  (0) 2020.04.07
IOT (Indexed Organized Table)  (0) 2020.02.11
NESTED TABLE Column  (0) 2020.02.11
Oracle.Client.SQLPlus.Ubuntu21 설치 ( window, linux 방식 동일 )  (0) 2020.01.17

IOT (Indexed Organized Table)

Database 관리/Oracle
반응형
  IOT Table
행구분 PK. ROWID 가 없다. ROWID
FULL SCAN 시 리턴 순서 PK 순에 따라 출력 없다.
Unique Constraint 불가  
Cluster 불가  
저장공간 Table 보다 감소  
Primary Key 필수  
Secondary Index PK + UROWID ( Universal Rowid based pk )  
장점 Auto Ordering  
반응형

'Database 관리 > Oracle' 카테고리의 다른 글

sql to csv  (0) 2020.04.07
SQL Developer 설치  (0) 2020.02.27
NESTED TABLE Column  (0) 2020.02.11
Oracle.Client.SQLPlus.Ubuntu21 설치 ( window, linux 방식 동일 )  (0) 2020.01.17

NESTED TABLE Column

Database 관리/Oracle
반응형

참조) https://m.blog.naver.com/geartec82/220954927715

 

테이블 안에 특정 컬럼 값이 테이블 구조처럼 관리하고 사용되어 지는 방식을 말한다.
자동적으로 group by 형태로 저장하는 방식중에 하나이다.
 

 CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
/
CREATE TABLE nested_table (id NUMBER, col1 my_tab_t)
       NESTED TABLE col1 STORE AS col1_tab;
      
SQL> desc nested_table
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 COL1                                               MY_TAB_T

Insert data into table:

INSERT INTO nested_table VALUES (1, my_tab_t('A'));
INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C'));
INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F'));
COMMIT;

 



Select from nested table:
 

 SQL> SELECT * FROM nested_table;
        ID COL1
---------- ------------------------
         1 MY_TAB_T('A')
         2 MY_TAB_T('B', 'C')
         3 MY_TAB_T('D', 'E', 'F')

 



Unnesting the subtable:
 

 SQL> SELECT id, COLUMN_VALUE FROM nested_table t1, TABLE(t1.col1) t2;
        ID COLUMN_VALUE
---------- ------------------------
         1 A
         2 B
         2 C
         3 D
         3 E
         3 F
6 rows selected.

 



실예제>

nested table column을 통하여 한명의 고객이 주소값으로 여러개의 컬럼 값을 가질수 있게 관리합니다.
 

 CREATE TYPE address_t AS OBJECT (
   street  VARCHAR2(30),
   city    VARCHAR2(20),
   state   CHAR(2),
   zip     CHAR(5) );
/

CREATE TYPE address_tab IS TABLE OF address_t;
/

CREATE TABLE customers (
   custid  NUMBER,
   address address_tab )
NESTED TABLE address STORE AS customer_addresses;


INSERT INTO customers VALUES (1,
            address_tab(
              address_t('101 First', 'Redwood Shores', 'CA', '94065'),
              address_t('123 Maple', 'Mill Valley',    'CA', '90952')
            )                );

 



데이터 확인
 

 SQL> select c.custid, u.*
  2  from customers c, table (c.address) u
  3  ;

    CUSTID STREET                         CITY                 ST ZIP
---------- ------------------------------ -------------------- -- -----
         1 101 First                      Redwood Shores       CA 94065
         1 123 Maple                      Mill Valley          CA 90952

 


뷰에서 확인하는 방법

NESTED TABLE column 을 생성하면 USER_NESTED_TABLES and USER_NESTED_TABLE_COLS 두개의 뷰에서 확인할 수 있습니다.

뷰에서 NESTED TABLE,NESTED TABLE column 확인하는 방법
 

 SQL> select TABLE_NAME from USER_NESTED_TABLES;

TABLE_NAME
------------------------------
COL1_TAB

SQL> select TABLE_NAME,COLUMN_NAME from USER_NESTED_TABLE_COLS;

TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------
COL1_TAB                       NESTED_TABLE_ID
COL1_TAB                       COLUMN_VALUE

반응형

'Database 관리 > Oracle' 카테고리의 다른 글

sql to csv  (0) 2020.04.07
SQL Developer 설치  (0) 2020.02.27
IOT (Indexed Organized Table)  (0) 2020.02.11
Oracle.Client.SQLPlus.Ubuntu21 설치 ( window, linux 방식 동일 )  (0) 2020.01.17

Oracle.Client.SQLPlus.Ubuntu21 설치 ( window, linux 방식 동일 )

Database 관리/Oracle
반응형

[ ZIP 방식 ]

1. https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

 

 

 

2. 먼저 Instant Client Package - Basic 을 다운로드한다.

 

3. Instanct Client Package - SQL*Plus (Instant Client Package - Basic 와 같은 버전) 를 다운로드한다.

 

# 참조 : http://egloos.zum.com/xxwony/v/74280

4. 다운로드한 2개의 zip 파일을 하나의 디렉토리에 압축 해제한다. 예를 들어, D:\oracle_instantclient_11_2에 압축해제 한다.

6. 몇가지 환경변수를 추가한다.
ORACLE_HOME=d:\oracle_instantclient_11_2
TNS_ADMIN=d:\oracle_instantclient_11_2\network\admin --> tnsnames.ora 파일이 위치할 디렉토리
PATH=d:\oracle_instantclient_11_2
NLS_LANG=AMERICAN_AMERICA.KO16KSC5601

LD_LIBRARY_PATH=d:\oracle_instantclient_11_2

 

export ORACLE_HOME TNS_ADMIN NLS_LANG LD_LIBRARY_PATH

 

* 리눅스의 경우 /etc/profile 에 추가후 재 접속



7. d:\oracle_instantclient_11_2\network\admin 디렉토리를 생성한다. tnsnames.ora는 ORACLE_HOME에 두어도 상관없지만 통상 oracle 설치될 때 ORACLE_HOME\network\admin에 존재하므로 비슷하게 만들었다.

8. TNS_ADMIN 디렉토리에 tnsnames.ora 파일을 생성하고 아래와 같은 형식으로 입력한다.
ORCL =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521))
        (CONNECT_DATA = (SID = ORCL))
    )

 

혹은

ORCL = 

    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP) (HOST = xxx.xxx.xxx.xxx) (PORT = 1521))
        (CONNECT_DATA =

            (SERVER = DEDICATED)

            (SERVICE_NAME = ORCL.domain.com) # RAC 인 경우에는 SID 대신 SERVICE_NAME 을 쓰자.

        )
    )

 

9.tnsping 이 있으면 접속 테스트 해볼 수 있다. 단, 설치는 Oracle Universal 이 있어야 가능한듯하다. 직접설치하는 방법은 못 찾았다.


10. sqlplus 접속방법

방법 1) 접속 테스트를 위해 명령 프롬프트를 실행한 후, sqlplus id/pwd@tnsnames.ora의 서버_이름

방법 2) ./sqlplus id/pwd@211.123.234.456:1521/SID

방법 3) ./sqlplus id/pwd@(DESCRIPTION=(ADDRESS=(PROTOCOL....# tnsname.ora 내용을 직접 입력

 

[ rpm 방식 ]

1) sudo apt-get update

2) sudo apt-get install alien

3) sudo apt search libaio1

4) rpm 3종 instantclient-basic, instantclient-devel, instantclient-sqlplus download

5.Sample) sudo alien -i 로 설치

sudo alien -i oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm

sudo alien -i oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

sudo alien -i oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm

6) /etc/profile에 환경변수 설정은 할 것

ORACLE_HOME=d:\oracle_instantclient_11_2
TNS_ADMIN=d:\oracle_instantclient_11_2\network\admin --> tnsnames.ora 파일이 위치할 디렉토리
PATH=d:\oracle_instantclient_11_2
NLS_LANG=AMERICAN_AMERICA.KO16KSC5601

LD_LIBRARY_PATH=d:\oracle_instantclient_11_2

7) cd /usr/lib/oracle/버전/bin

8) sqlplus 실행

반응형

'Database 관리 > Oracle' 카테고리의 다른 글

sql to csv  (0) 2020.04.07
SQL Developer 설치  (0) 2020.02.27
IOT (Indexed Organized Table)  (0) 2020.02.11
NESTED TABLE Column  (0) 2020.02.11

디비별 SQL 비교

Database 관리
반응형

 

  Maria (RDB) MongoDB

Redis (메모리, NoSQL/Cache, 오픈 소스)

* 명령어 참조 : 

http://www.redisgate.com/redis/command/sets.php

 

* 기타 참조 :

https://codingmania.tistory.com/18

https://codingmania.tistory.com/25?category=563274

DJango

 

* 참조

https://brownbears.tistory.com/63

특징    

1. 리스트, 배열 데이터 처리

2. value 값으로 문자열, 리스트, Set, Sorted set, Hash 등  

3. 리스트형 데이터 입력과 삭제가 MySQL 대비 10배

( 초당 2만 ~ 10만회 수행 성능 )

4. 여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, Atomic 처리로 데이터 부정합 방지 Atomic처리 함수를 제공

5. 메모리를 활용하면서 영속적인 데이터 보존

- 명령어로 명시적으로 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.

 - 스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.

6. Redis Server는 1개의 싱글 쓰레드로 수행되며, 따라서 서버 하나에 여러개의 서버를  띄우는 것이 가능하다.

- Master - Slave 형식으로 구성이 가능함

 

Server 실행     redis-server  
Clien 실행     redis-cli  
Server Alive Check     ping  
DATATYPE.String    

- String은 일반적인 Text문자열이며, key와 value가 각각 하나씩인 일대일 관계(유일)

- Text형태만 저장할 수 있는것이 아니라, binary safe string 이다.

- 이것이 의미하는 것은 JPEG 이미지나 숫자 알파벳 등을 사용할 수도 있다는 것이다.

- key와 value 모두 넣을 수 있는 최대 길이는 512MB이다.

- key는 너무 길면 찾기 어렵고, 불필요한 메모리 소모가 일어난다.

- key는 너무 짧으면 뭔지 해독하기 쉽지 않으므로 알맞게 하도록 하자.

- key를 구성할때 단어 사이에 구분자를 사용하는 것이 좋습니다. 

예를 들어 ':', '-' 등을 사용해서 key를 구성하면 쉽게 알아볼 수 있습니다. 

 

- set, get command

 

DATATYPE.Lists    

- 일반적인 배열로 생각하면 된다.

- List는 key 1개에 n개의 value를 갖는다. (단, 중복된 값 저장 가능함)

- 입력된 데이터값은 입력된 순서대로 순차적으로 저장 및 처리된다.

- 주로 큐(Queue)와 스택(Stack)으로 사용된다.

- 한 key에 담을 수 있는 최대 갯수는 4,294,967,295개(2^32 - 1개)
- LPUSH, LPOP, RPUSH, RPOP Command

 

DATATYPE.Sets      - Group 형태로 key 1개에 n개의 값을 갖는다. (단, 중복된 값 허용하지 않음)

 - 입력된 순서와 상관없이 저장되는 정렬되지 않은 집합형이다.

 - '집합'이기 때문에 한 key에 중복된 데이터는 존재할 수 없다.

 - 즉, 동일한 key에 같은 값 value A가 두 번 추가된다면 값은 하나만 존재하게 된다.

 - 한 key에 담을 수 있는 최대 갯수는 4,294,967,295개(2^32 - 1개)

 - Set의 경우 집합 연산을 제공한다. 합집합, 교집합, 차집합을 할 수 있다.

-  Sets에서는 집합이라는 의미에서 value를 member라 부른다.

   명령어 SADD : 데이터를 저장하기 위한 명령어.
 
DATATYPE.Sorted sets     - key 하나에 여러개의 score와 value로 구성된다.

- Sets과 마찮가지로 중복된 데이터는 허용하지 않는다.

  동일한 키에 값을 여러번 추가해도 하나만 존재하게 된다.

- Set에 'score'라는 필드가 추가된 데이터형이다.

- score로 데이터 값(value)의 순서를 정렬(sort)한다.

- score가 같다면 데이터 값(value)으로 정렬(sort)한다.

- 정렬된 데이터가 필요한 경우 Sorted Set 데이터형을 사용한다.

 
DATATYPE.Hashs    

- Hashes의 경우 key 하나에 여러개의 field와 value 쌍으로 구성된다.

Hashes VS Table 공통점
1. Hashes가 필드(field)와 값(value)로 구성된다는 점은 RDB의 table과 비슷하다.
2. Hash key는 table의 PK, field는 column, value는 value로 생각하면 비슷하다.
3. Key가 PK와 같은 역할을 하기떄문에 Key 하나는 table의 하나의 row와 같다.

Hashes VS Table차이점
1. Table의 column 수는 일반적으로 제한이 있다.
   하지만, Hashes의 field의 수는 40억개로 거의 무제한에 가깝다.

2. Table에서 column을 추가하려면 alter문으로 미리 table을 변경해야 하지만, 

   Hash에서는 그러한 사전 작업이 필요없다. 따라서, field의 추가/삭제가 자유롭다.

   field의 추가/삭제는 해당 key에서만 영향을 미친다.



출처: https://codingmania.tistory.com/25?category=563274 [괴발개발 개발새발 하는 개발자의 개발 블로그]

 

         
         
String set SET @KEY := VALUE   SET KEY = VALUE  
Value get SELECT @KEY   GET KEY  
CREATE TABLE        
SELECT 1 Row      

Syntax> model.objects.get(조건)

설명> 1 row 만 리턴해야 함.

Ex> key = model1.objects.get(pk=pk)

print(key.name)

SELECT Multi Row      

Syntax> model.objects.filter(조건)

설명> 조건에 맞는 Row 모두 가져옴

Ex> key= model.objects.filter(name='lee')

print(key[0]['name'])

SELECT ALL      

Syntax> model.objects.all()

Ex> key= model.objects.all()

print(key[0]['name']

INSERT        
UPDATE        
DELETE        
조건 키워드        
ORDER BY       Ex> value = model.objects.order_by('-pk') # 내림차순 정렬
value = model.objects.order_by('pk') # 오름차순 정렬
GROUP BY      

Syntax> Aggregate

Ex>

from django.db.models import Max
value = model.objects.aggregate(temp_name=Max('pk')) # temp_name은 사용자가 임의로 정할 수 있음
print(value['temp_name'])

 

 

 

 

Ex2>

from django.db.models import Max
from django.db.models.functions import Coalesce
value = model.objects.aggregate(temp_name=Coalesce(Max('pk'),10000)) # temp_name은 사용자가 임의로 정할 수 있음
print(value['temp_name'])

         
         
         
반응형

'Database 관리' 카테고리의 다른 글

데이타베이스 콘솔 기본 명령어 모음  (0) 2022.01.14