배치파일로 디비 접근하여 명령어 때리는방법이 뭔가요..? 1 10 9,243

by 다크팬더 [Oracle 기초] [2016.03.17 15:58:51]


서버에서 배치파일을 돌려서 오라클 DB에 실행된 쿼리(select.sql)를 텍스트파일(test.txt)로 뽑아내고 싶은데

.bat 파일로 저장해서 실행하면 오라클 접속하고 그 다음 명령어가 수행이 안되네요.. 

요거 어떻게 하는지 고수님들 알려주세요..ㅠㅠ

그리구 검색된 내용을 텍스트파일로 저장하는데 실행한 날짜랑 시간으로 저장하는 방법이 있을까요?

아무리 구글링을 해도 나오질 않아 답답해서 글 올려요...

 

 

배치파일 내용

@echo off

sqlplus id/passwd@name

SET HEADING OFF 
SET PAGESIZE 1000 
SET LINESIZE 300 
SET ECHO OFF 
SET TERM OFF 
SPOOL C:\test.txt 
@C:\select.sql
SPOOL Off
exit

 

by 창조의날개 [2016.03.17 16:18:06]

배치파일은 아래처럼


@echo off

C:
CD \

echo wscript.echo ^(Date^(^))>today.vbs
for /f %%a in ('cscript //nologo today.vbs') do set today=%%a
del today.vbs

sqlplus id/passwd@name @select.sql >> %today%.txt

echo 작업완료

 

select.sql은 아래처럼

SET HEADING OFF ;
SET PAGESIZE 1000 ;
SET LINESIZE 300 ;
SELECT 1 FROM DUAL; -- 필요한 SELECT 문 작성
exit

 


by 다크팬더 [2016.03.17 16:21:27]

바로 테스트해볼께요!!!

정말 감사합니다!!!


by 창조의날개 [2016.03.17 16:24:03]

참고로 sqlplus id/passwd@name @select.sql >> %today%.txt에서 

>>가 2개면 TXT 파일에 계속 더해져서 파일이 만들어지고

>가 하나면 같은 이름으로 새로 파일을 만들어 줍니다.


by 다크팬더 [2016.03.17 16:35:53]

해당날짜로 파일이 만들어지는데 안에 내용을 보면 c:\에 있는 select.sql 쿼리가 이건데

안에 내용을 보면 오류가 떠있어요..

Oracle Database 11g Release 11.2.0.4.0 - 64bit Production

SP2-0310: 파일 "Spool.sql"을 열 수 없습니다.

 

select.sql 쿼리에는 이렇게 들어가있는데 쿼리 문에 문제가 있나요..?

직접 돌리면 아무이상없이 잘 돌아가거든요...

 

SET HEADING OFF
SET PAGESIZE 1000 
SET LINESIZE 300 
SELECT  
       (select to_char(sysdate,'MM-DD-HH24MISS')||'_'||instance_name from v$instance) "캡쳐시간",
       last_call_et "수행시간_초",
       event "current wait event",
       sess.sql_id,
       SUBSTR(vsql.sql_text, 1, 300) "sql_text",
       vsql.PLAN_HASH_VALUE,
       sess.sql_child_number "CL",
       sid,     
       serial# ,
       machine,
       sess.module ,
       executions "수행횟수" ,
       to_char(rows_processed/decode(executions, 0, 1, executions), '999,999') "ROWS(평)" ,
       to_char(decode(buffer_gets, 0, 1, buffer_gets)/decode(executions, 0, 1, executions), '999,999,999') "버퍼읽기(평)" ,
       to_char(decode(disk_reads, 0, 1, disk_reads)/decode(executions, 0, 1, executions), '999,999,999') "디스크읽기(평)" ,
       trunc(elapsed_time/decode(executions, 0, 1, executions)/1000000) "시간(평)" ,
       trunc(cpu_time/decode(executions, 0, 1, executions)/1000000) "CPU대기(평)" ,
       trunc(user_io_wait_time/decode(executions, 0, 1, executions)/1000000) "IO대기(평)" ,
       status
  from v$session sess, 
       v$sql vsql
 where sess.sql_id=vsql.sql_id(+)
   and sess.sql_child_number=vsql.child_number(+)
   and type = 'USER'
   and status = 'ACTIVE'
order by last_call_et desc;
exit


by 창조의날개 [2016.03.17 16:40:05]
SET HEADING OFF ;
SET PAGESIZE 1000 ;
SET LINESIZE 300 ;
 
;를 빼 먹었네요..

by 다크팬더 [2016.03.17 17:02:49]

위 3줄 뒤에 ; 추가하고 안되서 혹시 몰라 마지막 exit 빼고 실행해도 동일한 애러가 발생해요..

ㅠㅠ


by 창조의날개 [2016.03.17 17:05:05]

혹시 배치파일에 spool 명령어를 넣으셨나요?

넣지 말아야 할텐데요..

제가 테스트 할때는 잘되는데요.. 이상하네요..


by 다크팬더 [2016.03.17 17:12:07]

오류메세지 확인후에 exit 위에 ; 사라져서 실행이 안되는 거였네요!

도움주신 창조의날개 고수님 진심으로 감사드립니다!!!


by 마농 [2016.03.17 17:06:35]

에러메시지 확인하세요. 에러메시지 속에 답이 있을 것입니다.

해당 Select 구문은 직접 따로 돌려 확인해 보셨나요?

아마도 권한 문제가 아닐까 생각되네요.


by 다크팬더 [2016.03.17 17:12:34]

오류메시지 확인하여 처리하였습니다.

도움주셔서 진심으로 감사드립니다 : )

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입