oracle data into mysql

sangwoo noh·2023년 7월 12일
0

Docker

목록 보기
22/22

Oracle 데이터베이스에서 데이터 추출

  • 환경
    oracle 10g(외부 망)
    docker mysql container

  • Oracle 데이터베이스에서 데이터를 CSV 파일로 추출한다. 이를 위해 SQLPlus 또는 SQL Developer와 같은 도구를 사용한다..
    아래는 SQLPlus를 사용하여 데이터를 CSV 파일로 추출하는 예시
    (shell script 작성)

#!/bin/bash

# Oracle DB credentials
USERNAME="your_username"
PASSWORD="your_password"
HOST="localhost"
PORT="1521"
SID="orcl"

# Output file
OUTPUT_FILE="output.csv"

# SQL query
SQL_QUERY="SELECT EMPNO, NAME, MAILNO FROM your_table"

# Run sqlplus and execute the query
echo "SET HEADING OFF
SET COLSEP ','
SET LINESIZE 32767
SET FEEDBACK OFF
SET PAGESIZE 0
SET TRIMSPOOL ON
SPOOL $OUTPUT_FILE
$SQL_QUERY;
SPOOL OFF
EXIT" | sqlplus -s $USERNAME/$PASSWORD@$HOST:$PORT/$SID

echo "Data exported to $OUTPUT_FILE"
  1. 스크립트를 파일에 저장. 예를 들어, export_data.sh라는 이름의 파일에 저장한다.
  2. 파일에 실행 권한을 부여한다: chmod +x export_data.sh
  3. 스크립트를 실행한다: ./export_data.sh

추출된 output.csv파일 docker container로 옮기기

테이블에 넣기 위해서 몇가지 사전 준비작업이 필요하다.
1. 옮기려고하는 mysql docker container에서 secure_file_priv 경로를 확인한다.

SHOW VARIABLES LIKE 'secure_file_priv';
  1. 나온 경로로 output.csv파일 옮기기.
// host에서 실행하는 명령어 (to docker container)
docker cp /output.csv파일이 있는 host경로/output.csv container_name:/secure_file_priv경로/
  1. 권한및 사용자 설정
  • 권한 변경
chmod 644 /secure-file-priv경로/output.csv

이 명령은 소유자에게 읽기/쓰기 권한을 부여하고, 그룹 및 기타 사용자에게 읽기 권한만 부여합니다.

  • 소유자 변경: 파일의 소유자가 MySQL이 아닌 경우 문제가 된다.(root유저 아님 my.cnf에 기본사용자가 mysql로 등록이 되어있다. 그러니mysql에서 이 파일을 건드려야하니깐 고민하지 않고mysql로 지정하면된다)
chown mysql:mysql /secure-file-priv경로/output.csv

load_data.sql작성(host)

  • 헷갈리겠지만 다시 host로 돌아와서
    아래 내용을 맞춰주면된다.
LOAD DATA INFILE '/secure_file_priv 경로/output.csv'
INTO TABLE USER_TBL
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, EMPNO, NAME, MAILNO, createdAt, updatedAt, isApproval, DEPT_NAME, PHONENO, POSITIONId);
  • 주의사항 1: LOAD DATA INFILE의 경로는 mysql docker continer안의 output.csv가 존재하는 경로다.(host 경로가 아님)
  • 이때 주의할점은 맨 하단의 컬럼 리스트와 load data infile의 갯수가 맞아야한다(타입이 달라도 안됨)

MySQL Docker 컨테이너로 데이터 로드

  • 이제 생성된 CSV 파일을 MySQL Docker 컨테이너로 로드한다.
  • 아래는 mysql 명령어를 사용하여 데이터를 로드하는 예
docker exec -i your_mysql_container mysql -uyour_username -pyour_password han < load_data.sql
profile
하기로 했으면 하자

0개의 댓글