반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 米沢、팽이
- 여름
- 돈까스
- 전철
- Shimajirou
- 명령어
- youtuber
- 토익
- 원탭바이
- 돼지갈비
- TOY
- 점심
- 시스템관리
- しまじろう
- fish
- 일본
- 시마지로
- 자동차
- one tab buy
- 동경 모터쇼
- 리눅스
- 스테이크
- 칸칸
- 사이타마
- paypay
- 신쥬쿠
- 코라쿠엔
- 영단어
- 라면
- Sekai Entertainment
Archives
- Today
- Total
IT Japan
Connect sotrage engine 본문
반응형
Connect storage engine은 xml이나 엑셀 파일 그리고 오라클이나 MSSQL과 같은 DBMS들의 테이블을 MariaDB에서 직접 쿼리할 수 있도록 연결기능을 제공
connect 스토리지 엔진은 실제 이 이외에도 많은 MariaDB서버외부의 테이블들을 손쉽게 접근해서 참조할수 있도록 한다.여기에서는 간단하게 오라클 RDBMS의 테이블을 ODBC인터페이스를 통해서 MariaDB가 접근하는 예제와 MariaDB의 설정파일을 Connect 스토리지 엔진으로 조회하는 방법을 살펴보도록 하자
connect 스토리지 엔진에서 drop table명령을 사용하면 단순히 connect 스토리지 엔진을 사용하는 테이블의 정의만 삭제한다는 것에 주의하자. 얘를 들어서 원격서버의 오라클 RDBMS에 존재하는 테이블을 connect 스토리지 엔진 테이블로 생성했다가 MariaDB 서버에서 이 connect 스토리지 엔진 테이블을 drop table로 삭제하면 실제 원격지의 오라클 테이블은 삭제되지않고 MariaDB 서버의 테이블만 삭제된다는 것이다. 하지만 update나 delete 그리고 truncate 명령은 실제 원격지 서버에 있는 테이블의 내용을 변경한다.
connect 스토리지 엔진은 실제 이 이외에도 많은 MariaDB서버외부의 테이블들을 손쉽게 접근해서 참조할수 있도록 한다.여기에서는 간단하게 오라클 RDBMS의 테이블을 ODBC인터페이스를 통해서 MariaDB가 접근하는 예제와 MariaDB의 설정파일을 Connect 스토리지 엔진으로 조회하는 방법을 살펴보도록 하자
connect 스토리지 엔진에서 drop table명령을 사용하면 단순히 connect 스토리지 엔진을 사용하는 테이블의 정의만 삭제한다는 것에 주의하자. 얘를 들어서 원격서버의 오라클 RDBMS에 존재하는 테이블을 connect 스토리지 엔진 테이블로 생성했다가 MariaDB 서버에서 이 connect 스토리지 엔진 테이블을 drop table로 삭제하면 실제 원격지의 오라클 테이블은 삭제되지않고 MariaDB 서버의 테이블만 삭제된다는 것이다. 하지만 update나 delete 그리고 truncate 명령은 실제 원격지 서버에 있는 테이블의 내용을 변경한다.
connect 스토리지 엔진 설치
마리아DB에서 일부 필수적이지 않은 스토리지 엔진은 설치되어 있지 않다. MySQL이나 MariaDB에 서 스토리지 엔진은 모두 플러그인 형태로 사용가능한데, 설치되어 있지 않은 스토리지 엔진을 사용하기 위해서는 INSTALL PLUGIN 명령으로 해당 플러그인의 라이브러리만 등록해주면 된다.
다음은 connect 스토리지 엔진을 MariaDB에서 사용할수 있도록 설치하는 명령이다. 실제 connect 스토리지 엔진은 *.so(리눅스나 유닉스 계열)파일이나 *.dll(윈도우)파일 형태로 MariaDB 홈 디렉토리의 "lib/plugin/" 디렉토리에 존재한다. 다음의 명령으로 connect 스토리지 엔진을 설치하기 위해서는 "lib/plugin/" 디렉토리에 ha_connect.so(유닉스나 리눅스)파일이나 ha_connect.dll(윈도우)파일이 존재해야 한다.
MariaDB>INSTALL PLUGIN connect SONAME 'ha_connect.so';
Connect 스토리지 엔진설치가 완료되면 다음과 같이 SHOW ENGINES명령이나 SHOW PLUGINS명령을 이용해서 적재된 스토리지 엔진의 목록을 확인해볼수 있다.
MariaDB>SHOW ENGINES;
MariaDB> SHOW PLUGINS;
6.7.2 오라클 RDBMS 테이블 연결
MariaDB의 CONNECT 스토리지 엔진을 이용하면 MariaDB 서버 외부 RDBMS서버의 테이블을 참조할수 있다. 대부분의 RDBMS 서버는 ODBC를 이용해서 접근할 수 있는 인터페이스를 제공하고 있다.
MariaDB에서 ODBC테이블 타입의 connect 스토리지 엔진 테이블을 생성하면 ODBC를 지원하는 모든 원격 데이터베이스의 테이블을 참조할수 있다. 다음과 같이 오라클 RDBMS에 emp라는 테이블이 있다고 가정해보자.
oracle> CREATE TABLE emp(
empno number(4,0),
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0),
CONSTRAINT pk_emp PRIMARY KEY (empno)
이제 다음과 같이 마리아DB 서버에서 ora_emp테이블을 connect 스토리지 엔진으로 생성하면 모든 준비가 완료된다
물론 ora_emp 테이블을 생성하기 전에 "orcl"이라는 DSN으로 ODBC 드라이버를 등록해야 한다. 윈도우에서는 어렵지 않게 등록할수 있으며, 만약 MariaDB 서버가 리눅스나 유닉스 계열의 운영체제에서 작동중이라면 Unix ODBC(http://www.unixodbc.org/)드라이버 프로젝트의 웹사이트를 참조하도록 하자.
MariaDB> CREATE TABLE ora_emp
ENGINE=CONNECT
TABLE_TYPE=ODBC TABNAME='EMP' CONNECTION='DSN=orcl;UID=scott;PWD=tiger'
SRCDEF='SELECT empno, ename, mgr, LEVEL FROM emp CONNECT BY PRIOR empno=mgr;';
ora_emp 테이블이 준비되면 이제 MariaDB에서 SELECT쿼리로 참조해볼수 있다. ora_emp 테이블을 생성할때 SRCDEF옵션에 CONNECT BY 절을 이용했다. SRCDEF옵션에는 ora_emp테이블이 생성되는 MariaDB서버에서실행되는 쿼리가 아니라 원격 오라클 RDBMS에서 데이터를 조회할 때 사용되는 쿼리를 명시하는 것이므로 오라클 RDBMS문법의 쿼리를 입력해야 한다.
MariaDB> SELECT * FROM ora_emp;
MariaDB의 ㅊCONNECT 스토리지 엔진은 원격지의 오라클 RDBMS와 클라이언트 사이에서 단순히 중간 저장 공간만을 제공하는 것이다. 이때 한가지 주의해야 할 것은 engine_condition_pushdown 옵티마이저 스위치를 반드시 ON으로 활성화하는 것이 좋다는 것이다.
engine_condition_pushdown 옵티마이저 스위치의 기본값은 OFF인데, engine_condition_pushdown /스위치가 비활성화된 상태에서는 WHERE 조건절의 내용이 리모트 RDBMS 서버로 전송되지 않기 때문에 원격지의 RDBMS서버뿐만아니라 MariaDB서버까지 성능을 저하시킬수 있다.
MariaDB> SET optimizer_switch='engine_condition_pushdown=ON';
6.7.3 my.cnf 설정 파일 연결
MariaDB 서버를 운영하면서 간단한 유틸리티를 만들때마다 느끼는 불편함 가운데 대표적인 것이 MariaDB서버의 설정파일을 솝쉽게 가져올수 있으면 하는 것이다. 리눅스의 쉘 스키립트의 GREP과 같은 명령으로 쉽게 될것 같지만 MariaDB서버의 설정파일에는"[mysqld]"와 같은 섹션 개념이 있으며 섹션별로 중복된 옵션들을 나열할수 있어서 생각보다 번거로운 작업이다. 물론 MariaDB서버에서 "SHOW GLOBAL VAARIABLES"명령을 이용해도 되지만 글로벌 변수만으로는 부족한 겨우도 있다. C/C++에서도 my.cnf 설정파일을 읽어내리면 함수 한두 개로는 절대 해결되지 않는다. 이런 어려움을 해결하기 위해서 MariaDB의 설정파일을 MariaDB의 Connect스토리지 엔진을 이요해서 하나의 테이블로 접근할수 있도록 해보자.
우선 MariaDB서버에서 다음과 같이 CONNECT스토리지 엔진을 사용하는 테이블을 생성하자. 여기에서 한가지 주의해야 할점은 반드시 my.cnf설정파일의 위치를 MariaDB서버(MariaDB서버 프로세스가 기동하는 운영체제 유저)가 접근할 수 있도록 권한이 허용되어 있어야 한다는 것이다.
MariaDB> CREATE TABLE mysql_config (
section VARCHAR(64) flag=1,
keyname VARCHAR(64) flag=2,
value VARCHAR(256))
ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='/tmp/my.cnf'
OPTION_LIST='Layout=Row;seclen=90000';
위의 예제에선는 mysql_config라는 테이블을 생성했다. 3개의 칼럼을가지고 있으며 TABLE_TYPE옵션이 INI라고 명시되었다. MariaDB서버의 my.cnf파일은 확장자는 좀 틀리긴 하지만 내부적으로 는 ini Key/Value 포맷을 하고 있다. 그래서 FILE_NAME옵션에는 연결하려는 my.cnf파일의 경로를 적었다. TABLE_TYPE이 INI인 경우에는 OPTION_LIST에 Layout옵션을 Row와 Column중에서 선택할수 있다. Layout이 Column인 경우에는 INI파일에서 하나의 섹션을 하나의 테이블로 해석할 때 사용한다.
일반적으로 Key/Value형태를 하나의 테이블레코드로 접근할때는 Layout을 Row로설정하면 된다.
srclen 옵션은 INI설정파일에서 하나의 섹션에 포함된 모든 내용이 저장될 정도의 크기로 내부 버퍼 크기를 설정해준다.
이제 mysql_config 테이블을 SQL로 조회해보자
MariaDB> SELECT * FROM mysql_config;
MariaDB> SELECT * FROM mysql_config WHERE section='mysqld' AND keyname='port';
이제 MariaDB서버의 설정파일을 아주 손쉽게 읽을수 있게 되었다. 이제 간단하게 MariaDB서버에서 my.cnf설정파일의 내용과 실제 MariaDB서버가 가지고 있는 글로벌 변수(SHOW GLOBAL VARIABLES)와의 차이도 한번의 쿼리 실행으로 알아낼수 있다.
6.7.4 운영체제의 디렉토리 연결
MariaDB 서버의 CONNECT스토리지 엔진을 이용하면 운영체제가 가지고 있는 디렉토리의 서브 디렉토리와 파일 목로도 조회할수 있다 간단히 예제를 살펴보자
MariaDB> CREATE TABLE temp_dir (
PATH varchar(256) not null flag=1,
FNAME varchar(256) not null,
FTYPE char(4) not null,
SIZE double(12,0) not null flag=5)
ENGINE=CONNECT TABLE_TYPE=DIR FILE_NAME='/data/*'
option_list='subdir=1';
TABLE_TYPE은 DIR로 설정해서 운영체제의 디렉토리를 연결하는 테이블이라는것을 명시한다.
option_list에서 "subir"옵션을 1로 설정했는데, 이는 해당 디렉토리의 서브 디렉토리까지 모두 조회한다는것을 의미한다.
이제 MariaDB서버에서 SQL문장으로 디렉토리의 내용을 살펴보자
마리아DB에서 일부 필수적이지 않은 스토리지 엔진은 설치되어 있지 않다. MySQL이나 MariaDB에 서 스토리지 엔진은 모두 플러그인 형태로 사용가능한데, 설치되어 있지 않은 스토리지 엔진을 사용하기 위해서는 INSTALL PLUGIN 명령으로 해당 플러그인의 라이브러리만 등록해주면 된다.
다음은 connect 스토리지 엔진을 MariaDB에서 사용할수 있도록 설치하는 명령이다. 실제 connect 스토리지 엔진은 *.so(리눅스나 유닉스 계열)파일이나 *.dll(윈도우)파일 형태로 MariaDB 홈 디렉토리의 "lib/plugin/" 디렉토리에 존재한다. 다음의 명령으로 connect 스토리지 엔진을 설치하기 위해서는 "lib/plugin/" 디렉토리에 ha_connect.so(유닉스나 리눅스)파일이나 ha_connect.dll(윈도우)파일이 존재해야 한다.
MariaDB>INSTALL PLUGIN connect SONAME 'ha_connect.so';
Connect 스토리지 엔진설치가 완료되면 다음과 같이 SHOW ENGINES명령이나 SHOW PLUGINS명령을 이용해서 적재된 스토리지 엔진의 목록을 확인해볼수 있다.
MariaDB>SHOW ENGINES;
MariaDB> SHOW PLUGINS;
6.7.2 오라클 RDBMS 테이블 연결
MariaDB의 CONNECT 스토리지 엔진을 이용하면 MariaDB 서버 외부 RDBMS서버의 테이블을 참조할수 있다. 대부분의 RDBMS 서버는 ODBC를 이용해서 접근할 수 있는 인터페이스를 제공하고 있다.
MariaDB에서 ODBC테이블 타입의 connect 스토리지 엔진 테이블을 생성하면 ODBC를 지원하는 모든 원격 데이터베이스의 테이블을 참조할수 있다. 다음과 같이 오라클 RDBMS에 emp라는 테이블이 있다고 가정해보자.
oracle> CREATE TABLE emp(
empno number(4,0),
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0),
CONSTRAINT pk_emp PRIMARY KEY (empno)
이제 다음과 같이 마리아DB 서버에서 ora_emp테이블을 connect 스토리지 엔진으로 생성하면 모든 준비가 완료된다
물론 ora_emp 테이블을 생성하기 전에 "orcl"이라는 DSN으로 ODBC 드라이버를 등록해야 한다. 윈도우에서는 어렵지 않게 등록할수 있으며, 만약 MariaDB 서버가 리눅스나 유닉스 계열의 운영체제에서 작동중이라면 Unix ODBC(http://www.unixodbc.org/)드라이버 프로젝트의 웹사이트를 참조하도록 하자.
MariaDB> CREATE TABLE ora_emp
ENGINE=CONNECT
TABLE_TYPE=ODBC TABNAME='EMP' CONNECTION='DSN=orcl;UID=scott;PWD=tiger'
SRCDEF='SELECT empno, ename, mgr, LEVEL FROM emp CONNECT BY PRIOR empno=mgr;';
ora_emp 테이블이 준비되면 이제 MariaDB에서 SELECT쿼리로 참조해볼수 있다. ora_emp 테이블을 생성할때 SRCDEF옵션에 CONNECT BY 절을 이용했다. SRCDEF옵션에는 ora_emp테이블이 생성되는 MariaDB서버에서실행되는 쿼리가 아니라 원격 오라클 RDBMS에서 데이터를 조회할 때 사용되는 쿼리를 명시하는 것이므로 오라클 RDBMS문법의 쿼리를 입력해야 한다.
MariaDB> SELECT * FROM ora_emp;
MariaDB의 ㅊCONNECT 스토리지 엔진은 원격지의 오라클 RDBMS와 클라이언트 사이에서 단순히 중간 저장 공간만을 제공하는 것이다. 이때 한가지 주의해야 할 것은 engine_condition_pushdown 옵티마이저 스위치를 반드시 ON으로 활성화하는 것이 좋다는 것이다.
engine_condition_pushdown 옵티마이저 스위치의 기본값은 OFF인데, engine_condition_pushdown /스위치가 비활성화된 상태에서는 WHERE 조건절의 내용이 리모트 RDBMS 서버로 전송되지 않기 때문에 원격지의 RDBMS서버뿐만아니라 MariaDB서버까지 성능을 저하시킬수 있다.
MariaDB> SET optimizer_switch='engine_condition_pushdown=ON';
6.7.3 my.cnf 설정 파일 연결
MariaDB 서버를 운영하면서 간단한 유틸리티를 만들때마다 느끼는 불편함 가운데 대표적인 것이 MariaDB서버의 설정파일을 솝쉽게 가져올수 있으면 하는 것이다. 리눅스의 쉘 스키립트의 GREP과 같은 명령으로 쉽게 될것 같지만 MariaDB서버의 설정파일에는"[mysqld]"와 같은 섹션 개념이 있으며 섹션별로 중복된 옵션들을 나열할수 있어서 생각보다 번거로운 작업이다. 물론 MariaDB서버에서 "SHOW GLOBAL VAARIABLES"명령을 이용해도 되지만 글로벌 변수만으로는 부족한 겨우도 있다. C/C++에서도 my.cnf 설정파일을 읽어내리면 함수 한두 개로는 절대 해결되지 않는다. 이런 어려움을 해결하기 위해서 MariaDB의 설정파일을 MariaDB의 Connect스토리지 엔진을 이요해서 하나의 테이블로 접근할수 있도록 해보자.
우선 MariaDB서버에서 다음과 같이 CONNECT스토리지 엔진을 사용하는 테이블을 생성하자. 여기에서 한가지 주의해야 할점은 반드시 my.cnf설정파일의 위치를 MariaDB서버(MariaDB서버 프로세스가 기동하는 운영체제 유저)가 접근할 수 있도록 권한이 허용되어 있어야 한다는 것이다.
MariaDB> CREATE TABLE mysql_config (
section VARCHAR(64) flag=1,
keyname VARCHAR(64) flag=2,
value VARCHAR(256))
ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='/tmp/my.cnf'
OPTION_LIST='Layout=Row;seclen=90000';
위의 예제에선는 mysql_config라는 테이블을 생성했다. 3개의 칼럼을가지고 있으며 TABLE_TYPE옵션이 INI라고 명시되었다. MariaDB서버의 my.cnf파일은 확장자는 좀 틀리긴 하지만 내부적으로 는 ini Key/Value 포맷을 하고 있다. 그래서 FILE_NAME옵션에는 연결하려는 my.cnf파일의 경로를 적었다. TABLE_TYPE이 INI인 경우에는 OPTION_LIST에 Layout옵션을 Row와 Column중에서 선택할수 있다. Layout이 Column인 경우에는 INI파일에서 하나의 섹션을 하나의 테이블로 해석할 때 사용한다.
일반적으로 Key/Value형태를 하나의 테이블레코드로 접근할때는 Layout을 Row로설정하면 된다.
srclen 옵션은 INI설정파일에서 하나의 섹션에 포함된 모든 내용이 저장될 정도의 크기로 내부 버퍼 크기를 설정해준다.
이제 mysql_config 테이블을 SQL로 조회해보자
MariaDB> SELECT * FROM mysql_config;
MariaDB> SELECT * FROM mysql_config WHERE section='mysqld' AND keyname='port';
이제 MariaDB서버의 설정파일을 아주 손쉽게 읽을수 있게 되었다. 이제 간단하게 MariaDB서버에서 my.cnf설정파일의 내용과 실제 MariaDB서버가 가지고 있는 글로벌 변수(SHOW GLOBAL VARIABLES)와의 차이도 한번의 쿼리 실행으로 알아낼수 있다.
6.7.4 운영체제의 디렉토리 연결
MariaDB 서버의 CONNECT스토리지 엔진을 이용하면 운영체제가 가지고 있는 디렉토리의 서브 디렉토리와 파일 목로도 조회할수 있다 간단히 예제를 살펴보자
MariaDB> CREATE TABLE temp_dir (
PATH varchar(256) not null flag=1,
FNAME varchar(256) not null,
FTYPE char(4) not null,
SIZE double(12,0) not null flag=5)
ENGINE=CONNECT TABLE_TYPE=DIR FILE_NAME='/data/*'
option_list='subdir=1';
TABLE_TYPE은 DIR로 설정해서 운영체제의 디렉토리를 연결하는 테이블이라는것을 명시한다.
option_list에서 "subir"옵션을 1로 설정했는데, 이는 해당 디렉토리의 서브 디렉토리까지 모두 조회한다는것을 의미한다.
이제 MariaDB서버에서 SQL문장으로 디렉토리의 내용을 살펴보자
반응형
Comments