1 1 5 3,884

by 복회장 [PL/SQL] [2013.06.05 09:42:37]


안녕하세요.

잡업처리 때문에 조언을 얻을수 있을까 하여 눈팅만 하던 곳에 질문을 드립니다..

현재 매일매일 쿼리를 조회한 값을 (현재날짜).txt 파일로 저장하여 외부 FTP에 접속하여 전달하고 있습니다.

그러다보니 .. 간단한 업무지만 작업을 더 최소화 혹은 자동화 할수 있을지 .. 의견좀 모아주시면 감사하겠습니다 ㅜ


ex_) 1.select * from a where sale_date = '20130501' -- 어제날짜   를 조회한다.
   2.쿼리 조회결과를 notepad를 실행시켜 붙혀넣는다.
   3.바탕화면에 저장한다.
   4.윈도우탐색기로 ftp주소로 접속하여 이동시킨다.
   완료~

 해당작업을 완전히 자동화 하는 방법이 없는건지 .. 궁금합니다.있다면 참고할 자료나 혹은 .. 프로시저를 만들어주시면 .. ㅠ

 oracle 11g 입니다. 답변 답변 ~~ 플리즈
by 아발란체 [2013.06.05 10:02:18]
========== 방법1 ===============
관련 강좌 http://oracleclub.com/lecture/1700
원격지 폴더를 공유(쌈바 등) 쉐어링하고
PL/SQL 수행시 텍스트 파일 강좌 내용처럼 만들게 하고
ORACLE JOB 등록해주는 방법

========== 방법2 ===============
1. 원격지에서 JDBC 프로그래밍하여 조회와 동시에 파일로 기록.
2. 1번 잡 등록(리눅스 crontab 이용, 윈도우 데몬 생성)

========== 방법3 ===============
1.
파이썬이나 자바로 JDBC드리이버를 이용해 DB를 조회하여 결과를 텍스트로 저장하고
(이 방법은 리눅스, 윈도우 다 적용 가능)

2-1.
리눅스 경우 원격지로 파일 복사하는 명령어로 파일 복사
(예, scp -r ./fileName.dmp sybase@192.168.102.238:/tmp)

2-2.
리눅스 contab으로 위 1번 잡 등록(일정 주기로 수행 처리)


*윈도우 경우라면,
윈도우 경우도 원격지 파일 복사하는 명령어가 있을 것 같은데,
없다면 웹서버(아파치 같은) 하나 설치하여 http 프로토콜로 접근 할 수 있는 경로에
텍스트 파일 이동(move or copy dos command use).
그리고 원격지에서 역시 자바나 파이썬으로 데몬 하나 만들어서 일정 시간 간격으로
웹서버 접근 해당 파일 읽기 처리.


*방법은 무지 많은 것 같습니다. 주변에 SE(서버 엔지니어)가 있다면
스크립트 하나 짜 달라고 하세요.

*리눅스 sync 명령어로 원격지 파일 동기화 하는 방법도 괜찮을 것 같네요,
아님 윈도우에서 소켓으로 간단하게 하나 만들어서 파일 있는 곳에서 던저도 될 것 같고요,
이 방법은 자바 소켓이라고 검색하면 만드는 방법 많이 나옵니다.




by 디케이 [2013.06.05 11:15:03]
 
-- 좀 지전분하게 설명달았는데 참고사이트 이용하면 어렵지 않게 구현 할 수 있을겁니다.
-- 또한, 프로시저로 만들어서 JOB 등록해 놓으시면 매일 작업해야되는 일도 없겠죠.^^
declare 
 V_HANDLE UTL_FILE.FILE_TYPE;
 
 V_DIR_NM VARCHAR2(50) := '디렉토리명'; --텍스트파일이 저장될 디렉토리명(select * from ALL_DIRECTORIES 에 등록된이름사용)
 V_FILE_NM VARCHAR2(50);
 V_DESC VARCHAR2(32767);
 
 V_CONN UTL_TCP.CONNECTION;
 
 CURSOR cur IS
 SELECT * FROM SCOTT.EMP;
begin
 -- Test statements here
 
 --FILE NAME 
 V_FILE_NM := TO_CHAR(SYSDATE, 'YYYYMMDD')||'.txt';

 --TEXT 파일로 저장
 V_HANDLE := UTL_FILE.FOPEN(V_DIR_NM, V_FILE_NM, 'w', 32767);
 FOR c IN cur LOOP
 V_DESC := NULL;
 V_DESC := C.EMPNO||','||C.EMPNM||CHR(13); --텍스트내용
 
 UTL_FILE.PUT_LINE(V_HANDLE, V_DESC);
 UTL_FILE.FFLUSH(V_HANDLE); 
 END LOOP;
 UTL_FILE.FCLOSE(V_HANDLE);

 --FTP 전송(아래 URL의 FTP 패키지 필요)
 --http://www.oracle-base.com/articles/misc/ftp-from-plsql.php#shell-script
 --FTP API(ftp.pks, ftp.pkb) 다운받아서 패키지를 생성한다.
 V_CONN := FTP.LOGIN('FTP주소', '21', '사용자ID', '패스워드');
 
 ftp.binary(V_CONN);
 ftp.put(v_conn, V_DIR_NM, V_FILE_NM, '/업로드 디렉토리경로/'||V_FILE_NM);
 ftp.logout(V_CONN);
 
end;

by 아발란체 [2013.06.05 11:48:40]
우왕 킹왕짱 ~

by 복회장 [2013.07.16 09:31:40]

안녕하세요 디케이님 혹시

ORA-24248: XML DB 확장 가능한 보안이 설치되지 않았습니다.
ORA-06512: "SYS.UTL_TCP", 줄 17에서
ORA-06512: "SYS.UTL_TCP", 줄 246에서
ORA-06512: "BSKTS.FTP", 줄 76에서
ORA-06512: 줄 32에서

이런에러가 나오는데 무엇이 문제인지 알수있을까요..?? TCP관련된 패키지가 설치가 안된건지...
답변 좀 부탁드립니다.ㅠㅠ


by 복회장 [2013.06.07 07:41:32]
ㅜㅜ 답글달아주신 고수님들.감사합니다 ㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입