서버에서 배치파일을 돌려서 오라클 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
배치파일은 아래처럼
@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
해당날짜로 파일이 만들어지는데 안에 내용을 보면 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