1. 기능 : Dababase 의 메타 정보를 이용하여 테이블별 로우의 값을 추출하여 insert쿼리로 완성된 sql 파일과 xls 파일로 저장을 합니다.
# sql 파일로 직접 데이타를 insert 할수 있고, xls 파일은 엑셀로 활용하거나,
   엑셀로더가 지원되는 DB툴에서 데이타를 업로드 할수 있습니다.
   - 기존 euc-kr로 인코딩이 설정된 Database에서 utf-8 또는 기타 인코딩이 변경된 Database로 데이타 이동시에  (한글,한자깨짐)사용해도 될거 같습니다.

2. 현재 구현된 추출 가능한 Database는 Oracle, Mysql 입니다.
    기타 다른 Database도 각각의 설정만 추가로 해준다면 가능할걸로 생각됩니다.

3. 테스트 사항
   # sql 파일로 저장시에는 테이블당 로우 수가 100만건 이상의 데이타까지 정상적으로 생성이 됐습니다.
   # xls 파일로 저장시에는 JVM의 메모리를 많이 사용한 관계로 50만건 정도 이상의 데이타를 만들경우,
      java.lang.OutOfMemoryError 발생 했습니다.
      JVM 메모리 설정으로 어느정도까지는 더 생성할수 있을걸로 생각 됩니다.

4. 특이 사항
   # xls 파일로 저장시 엑셀에서 하나의 Sheet 에 쓸수있는 로우 갯수가 65,536개로 제한된 문제를 해결하기 위해
      하나의 시트에 65,536개의 데이타를 쓰기전에 약 65,530 개쯤에
      다음 시트에 데이타를 저장하도록 구현 했습니다.

# 사용법 :
     1. Config.properties 파일에서 Database와 저장위치 방식등을 설정합니다.
     2.
     - Eclipse 사용시 : meta 패키지 안에 Main.java 를 실행하면 됩니다.

     - Command 창에서 실행시 : 압축을 푼디렉토리의 경로를 확인하여 start_getData.cmd 의 파일을
        에디터로 연후에 해당하는 경로를 설정해준후에 start_getData.cmd 파일을 실행해주면 됩니다.

# 추가 내용 :
  - 2009.11.29
  1. DB의 컬럼 속성에서 DATE 타입의 데이타를 엑셀로 저장할때 '2009-11-29 18:31:38.0'와 같이
    마지막에 '.0' 이 포함되어 저장되는 이유로 DB툴을 이용하여 엑셀파일 로드시에
    DATE타입 에러가 발생하는 문제 처리.
  2. Command 실행 파일 작성(start_getData.cmd).
  3. 엑셀 파일명에 생성된 시트의 갯수 등록.  

 - 2010.06.25
  1. JVM 메모리 부족으로 프로세스가 종료되는경우. 그로인해 엑셀파일이 정상적으로 생성되지 않아 열리지 않는경우 start_getData.cmd 파일에 아래 옵션을 추가 해줍니다.
 -server -Xms256m -Xmx1024m
예) java -server -Xms256m -Xmx1024m -classpath "" Main



# 필요할때가 있을것 같아서, 일 하면서 틈틈히 만들었습니다.
  공개한 소스를 보시고 조언이나 지적을 해주시면 많은 도움이 될것 같습니다.^^;

11 5, 2009 18:37 11 5, 2009 18:37

Trackback URL : http://develop.sunshiny.co.kr/trackback/326

Leave a comment



# 작업 내용
 - 서버상에 생성한 일일 백업및 시스템로그 파일을, JAVA 프로세스를 이용하여 사용자의 로컬 PC에 다운로드 합니다.

# 필요 작업
1) 서버에 일일 백업및 시스템 로그 파일을 생성하는 스크립트를 작성하여 crontab 로 일정시간에 실행되도록 등록 합니다.

2) 서버상의 존재하는 백업 파일및 시스템 로그를 FTP로 접속하여 지정된 로컬 PC에 다운로드 합니다.
    # 서버에서 FTP 프로세스가 실행되고 있어야 합니다.


# 작업 내용
1) 일일 백업 스크립트 - 적용 OS : Linux

- 파일명 : daily_backup.sh
[backup@localhost ~]$ cat daily_backup.sh
TODAY=`date +%Y%m%d`
OLDDATE=`date --date '5 days ago' +%Y%m%d`

echo "$TODAY daily report" >> /home/backup/logs/$TODAY.log
echo "$OLDDATE old date" >> /home/backup/logs/$TODAY.log

DELETE_OLD_FILE="/home/backup/$OLDDATE.tar"
DELETE_OLD_LOG="/home/backup/logs/$OLDDATE.log"

echo "Date Backup Start~!" >> /home/backup/logs/$TODAY.log
tar -cvf - /home/free/webapps/WebContent/WEB-INF/ >  /home/data_backup/$TODAY.tar
echo "Date Backup End~!" >> /home/backup/logs/$TODAY.log

echo "" >> /home/data_backup/logs/$TODAY.log
echo "Old Data Delete Start~!" >> /home/backup/logs/$TODAY.log
rm $DELETE_OLD_FILE
rm $DELETE_OLD_LOG
echo "Old Data Delete End~!" >> /home/backup/logs/$TODAY.log

- 파일명 : daily_system_log.sh

[backup@localhost ~]$ cat daily_system_log.sh
#!/bin/sh
TODAY=`date '+%Y-%m-%d'`
OLDDATE=`date --date '30 days ago' +%Y-%m-%d`

# 현재 날자의 이름을 가진 txt 파일을 생성합니다.
echo "$TODAY daily report" >> /home/backup/report/report_$TODAY.txt
echo "$OLDDATE old date" >> /home/backup/report/report_$TODAY.txt

# 현재 날자로부터 30일 전의 파일을 삭제합니다.
DELETE_OLD_TXT="/home/backup/report/report_$OLDDATE.txt"
rm $DELETE_OLD_TXT

# NETWORK STATUS
# 생성된 파일에 용량확인 로그를 저장합니다.
echo " " >> /home/backup/report/report_$TODAY.txt
df -h >> /home/backup/report/report_$TODAY.txt
echo " " >> /home/backup/report/report_$TODAY.txt


- 파일명 : /etc/crontab
[backup@localhost ~]$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

#  매일 새벽 1시에 backup 계정으로  daily_backup.sh를 실행
01 1 * * * backup /home/backup/daily_backup.sh

#  매일 새벽 1시에 backup 계정으로  daily_system_log.sh를 실행
01 1 * * * backup /home/backup/daily_system_log.sh


2) FTPClient 를 이용하여 파일 다운로드
 - Commons Net 라이브러리를 다운로드
 경로 : http://jakarta.apache.org/site/downloads/downloads_oro.cgi

Commons Net 라이브러리 사용법 펌글 :
http://develop.sunshiny.co.kr/266?category=8


 - 설정파일 정의 : Config.properties
############################################################################
#    FTP 서버및 로컬 환경 설정
#    2009.08.06 최초작성 - sunshiny
############################################################################

# 서버 URL, IP
server.ip = 192.168.1.123

# FTP 서버 접속 계정 정보
server.user = backup
server.passwd = 1234

# 서버상의 파일이 있는 위치
server.path = /

# 다운 파일 저장위치
local.path = D:/02.TEMP/

# 로그 파일 저장 위치
log.path = D:/02.TEMP/log/

# 원격 서버에서 백업할 파일명은 기본 "yyyyMMdd" 형식을 지켜야 하며,
# 확장자는 변경하여 사용 가능.
# 다운로드시 파일명 변경. 저장 예) day_20090806.tar
download.file.name = day_

# 다운로드할 파일 확장자 설정(원격 서버와 동일)
download.file.type = tar

# 다운로드한 파일삭제 주기 (입력형식 1~100 숫자)
# 공백일경우 삭제 없음.
download.file.delete = 6

############ 서버 용량확인 텍스트 파일 설정 ###############

# 서버상의 로그 파일이 있는 위치
system.log.path = report/

# 저장(다운로드) 위치
local.log.path = D:/02.TEMP/daily_log/

# 삭제 주기 (입력형식 1~100 숫자)
# 공백일경우 삭제 없음.
local.log.delete = 30


# 로컬 PC 에 다운로드 예약을 실행시에
cmd 파일또는 bat 파일을 생성하여 아래와 같이 commons-net, Main 클래스 파일 위치를 설정 해줍니다.
그 후에 윈도우에 있는 예약설정을 이용하여 해당 cmd 또는 bat 파일을 선택 해줍니다.

 - 파일명 : start_backup.cmd
java -classpath "D:\temp\backup\lib\commons-net-2.0.jar;D:\temp\backup\bin" Main


# 이후 JAVA 파일은 소스를 참고.

 - 전체 소스 다운로드 -





09 1, 2009 10:17 09 1, 2009 10:17

Trackback URL : http://develop.sunshiny.co.kr/trackback/293

Leave a comment


Recent Posts

  1. Linux - Telnet 서비스 비활성및 실행
  2. NT - 서버 원격데스크탑 연결
  3. NT - http와 https간에 세션 공유가...
  4. Unix - 대량 파일 이동, 삭제시 Argu...
  5. Oracle - SYS_CONTEXT 함수를 이용하...

Recent Comments

  1. 네. 고맙습니다^^ 행복한 한해 보... sunshiny 01 16,
  2. sunshiny님. 안녕하세요... 올려 주... yihans 01 16,
  3. 답글 주셔서 고맙습니다^^ 소스 복... sunshiny 01 11,
  4. 관리자만 볼 수 있는 댓글입니다. 비밀방문자 01 11,
  5. 넵 답변감사합니다^^ 좋은 하루 되... 노로링

Recent Trackbacks

  1. 윈도우 cmd 명령어 팁 월풍도원(月風道院) - Delight on th... %M
  2. 파일 압축 Like RadioHead %M
  3. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   02 2012   »
      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      

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. Oracle All Documentation
  4. 엑셈
  5. 오라클 클럽
  6. 네이버개발자센터
  7. API - Java
  8. API - Spring
  9. Java Community
  10. Reference - Spring
  11. 스프링사용자
  12. 자바지기
  13. Ready System
  14. Solaris Freeware
  15. Linux-Site
  16. RedHat Korea
  17. 윈디하나의 솔라나라

Site Stats

TOTAL 217714 HIT
TODAY 16 HIT
YESTERDAY 115 HIT