UNIX 스크립트를 Windows *.bat 파일로 변환 구현 도움 부탁 드립니다.
글쓴이: 비트12 / 작성시간: 화, 2017/01/10 - 3:18오후
안녕하세요.
ORACLE DB서버의 tablespace 모니터링 구현을 위해 하기와 같은 ksh 스크립트를 사용하고 있습니다.
문제는 스크립트가 UNIX 전용(ksh) 이라서 ORACLE이 설치 된 Windows 서버에는 적용이 불가능 합니다.
해당 스크립트 내용을 보시고, Windows에서 사용할 수 있게 *.bat 파일로 구현이 가능할까요?
스크립트도 잘 모를뿐더러, windows 사용은 많이 하지 않아 어려움에 있습니다. 고수님들 도와주세요ㅠㅠ
신규 도입되는 모니터링 솔루션에 없는 기능을 구현하려니 맨땅에 헤딩중입니다...꼭 도움부탁드립니다..
[ksh 스크립트 내용]
1) oracle 계정으로 스크립트를 실행하면 sqlplus로 접속을 합니다.
2) 접속 후 tablespalce 조회 쿼리를 실행하여 > tbspall.out 이라는 파일을 떨굽니다.
3) tbspall.out 이라는 파일 내의 정보 중에서 80% 이상 사용중인 tablespace 들에 대해서 tbspchk.out 파일로 떨굽니다(테이블스페이스명 + 사용률 + 단계[info, major, critical 등) 스크립트 보시면알아요)
위의 단계 처럼 해당 스크립트를 windows bat 파일로 만들어 주실 수 있는 고수님 찾습니다.
한번만 도와주십시오.........
스크립트 원문
#!/bin/ksh . ~/.profile #========================================================================= # Defile Oracle SID #ORACLE_SID=`ps -ef | grep ora_pmon | grep -v grep | cut -f 3- -d _` ORACLE_SID=DEVKSC TBSP_DIR=/tbsp_mon # Define Threshold _TH5=97 _TH4=95 _TH3=90 _TH2=85 _TH1=80 _LV5='[CRITICAL]' _LV4='[MAJOR]' _LV3='[MINOR]' _LV2='[WARNING]' _LV1='[INFORMATION]' # Define Check Time _DT=`date "+%Y/%m/%d %H:%M:%S"` # Define SQL output file _OUTFILE=$TBSP_DIR/$ORACLE_SID/tbspall.out # Define Tablespace Check result output file _LOGFILE=$TBSP_DIR/$ORACLE_SID/tbspchk.out #======================================================================== export $ORACLE_SID { sqlplus -s '/as sysdba' << EOF SET LINESIZE 145 SET PAGESIZE 9999 SET VERIFY off COLUMN A.TABLESPACE_NAME FORMAT A15 SELECT A.TABLESPACE_NAME, ROUND(A.BYTES_ALLOC / 1024 / 1024, 2) CURRENT_SIZE, ROUND(NVL(B.BYTES_FREE, 0) / 1024 / 1024, 2) FREE_SIZE, ROUND((A.BYTES_ALLOC - NVL(B.BYTES_FREE, 0)) / 1024 / 1024, 2) USED_SIZE, ROUND((NVL(B.BYTES_FREE, 0) / A.BYTES_ALLOC) * 100,2) FREE_RATE, 100 - ROUND((NVL(B.BYTES_FREE, 0) / A.BYTES_ALLOC) * 100,2) USED_RATE, ROUND(MAXBYTES/1048576,2) MAX_SIZE FROM ( SELECT F.TABLESPACE_NAME, SUM(F.BYTES) BYTES_ALLOC, SUM(DECODE(F.AUTOEXTENSIBLE, 'YES',F.MAXBYTES,'NO', F.BYTES)) MAXBYTES FROM DBA_DATA_FILES F GROUP BY TABLESPACE_NAME) A, ( SELECT F.TABLESPACE_NAME, SUM(F.BYTES) BYTES_FREE FROM DBA_FREE_SPACE F GROUP BY TABLESPACE_NAME) B WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME (+) UNION SELECT TABLESPACE_NAME, ROUND(SUM(BYTES_USED + BYTES_FREE) / 1048576, 2), ROUND(SUM(BYTES_FREE) / 1048576,2), ROUND(SUM(BYTES_USED) / 1048576,2), ROUND((SUM(BYTES_FREE) / SUM(BYTES_USED + BYTES_FREE)) * 100,2) FREE_RATE, 100 - ROUND((SUM(BYTES_FREE) / SUM(BYTES_USED + BYTES_FREE)) * 100,2) USED_RATE, ROUND(MAX(BYTES_USED + BYTES_FREE) / 1048576, 2) FROM SYS.V_\$TEMP_SPACE_HEADER GROUP BY TABLESPACE_NAME ORDER BY 1; EXIT; EOF } > $_OUTFILE grep -v '^$' $_OUTFILE | egrep -v "^TABLESPACE_NAME|^-|selected" | awk '{print $1, $6}' | cut -d . -f 1 | while read _tn _us do if [ "$_us" -ge "$_TH5" ] then echo $_tn ":" $_us "% ( >= "$_TH5"% ) "$_LV5 >> $_LOGFILE elif [ "$_us" -lt "$_TH5" ] && [ "$_us" -ge "$_TH4" ] then echo $_tn ":" $_us "% ( >= "$_TH4"% ) "$_LV4 >> $_LOGFILE elif [ "$_us" -lt "$_TH4" ] && [ "$_us" -ge "$_TH3" ] then echo $_tn ":" $_us "% ( >= "$_TH3"% ) "$_LV3 >> $_LOGFILE elif [ "$_us" -lt "$_TH3" ] && [ "$_us" -ge "$_TH2" ] then echo $_tn ":" $_us "% ( >= "$_TH2"% ) "$_LV2 >> $_LOGFILE elif [ "$_us" -lt "$_TH2" ] && [ "$_us" -ge "$_TH1" ] then echo $_tn ":" $_us "% ( >= "$_TH1"% ) "$_LV1 >> $_LOGFILE fi done
Forums:
저라면.
배치로 통채로 바꾸려면 여러 가지 귀찮은 일이 생길테니, 다음과 같은 방법을 먼저 시도해볼 듯.
- 윈도10에서 지원하는 bash shell
- Cygwin, uwin, mingw 등등등..
- 위 방법들이 정 안 되면 파워셸 스크립트로. 기능이 매우 제한적인 배치보다는 그나마 수월할 겁니다.
--
우선 윈도우즈 10이 아닌 서버들이 많습니다.
bash의 기능이 된다고는 하지만 해당 방법은 안될 것 같고
파워쉘스크립트는 아예 사용할 줄 모르네요. 무지한 제 자신이..송구합니다.
윈도우즈도 운영 경험의 없는데다가 파워쉘은 더더욱이....경험이없네요. 혹 파워쉘로 스크립트로 작성이 가능하신지요...?
간단히 변환할 수 있는 경우는 아니로군요.
간단히 변환할 수 있는 경우는 아니로군요.
windows bat으로 구현할 수 없을 거라고 단언하지는 않겠습니다. 세상에 고수 참 많더라고요.
기다리다 보면 그런 고수께서 나타나셔서 문제를 해결해주실지도 모르는 일이겠습니다만, 기약이 없군요.
저도 차선책을 택하는 걸 추천해 드립니다. Windows 10에 bash가 들어온다는 얘긴 저도 들었는데, 어느 정도까지 들어온다는 건지 잘 몰라서요. 특히나 이 경우에는 bash뿐만 아니라 grep, egrep, awk, cut 등등이 전부 필요한데요.
cygwin 등의 환경을 구축하고 사용하는 것도 좋은 방법이지만, 조금 무거운 감이 없지 않아 있습니다. 저는 오히려 윈도우즈용 python을 사용하는 걸 추천하고 싶은데요.
python에 적절히 숙련된 사람이라면 Windows에서 동작하는, 제시된 코드와 동등한 python script를 그다지 어렵지 않게 작성할 수 있을 것 같습니다.
하지만 그런 수고를 감수하기 전에, 오라클을 올리셨다는 그 윈도우즈 서버에 python을 설치할 수 있는지를 먼저 알려주시는 게 순서인 것 같군요. 그건 그렇게 간단한 문제가 아닐 테니까요.
파이썬 설치는 무료 인가요? 라이센스가 필요 없다면 다운 후 설치는 가능할 것 같습니다.
우선 이런 난감한 숙제를 해결하려고 글을 올린점 송구스럽습니다. 파이썬이 오픈소스이고 라이센스가 필요 없다면 설치는 가능할 것 같습니다. 다만, Oracle DB와 충돌? 이나 그런게 없다면요...
Quote:Python is developed
https://docs.python.org/3/license.html
라이센스 문제는 없습니다. Oracle DB와 충돌한다던가 할 가능성이 완전히 없다고 보장할 수는 없지만, 그런 문제가 발생할 가능성은 낮다고 봐요.
다만 제가 우려하는 바는, 윈도우즈 서버나 오라클 DB, 서버가 다수 있다는 등의 말씀으로 미루어 볼 때, 개인 취미나 공부목적으로 구축하시는 게 아닌 것 같아서 말이죠.
상업적이거나 기타 중요한 목적으로 운영되는 서버라면 보안이나 기타 운영 정책상 아무 프로그램이나 설치하면 안 되는 것 아닌가 해서 여쭤봤습니다.
같은 맥락에서 말씀드리는 겁니다만, 그런 목적으로 운영할 서비스에 들어갈 코드를 이런 웹사이트에서 구하시는 건 조금 곤란하지 않을까요.
스크립트가 그렇게 복잡한 건 아니라서 시간만 좀 있으면 금방 옮길텐데, 이후의 유지보수에 대한 책임 같은 것까지 무료로 맡으실 분은 많지 않을겁니다.
직접 윈도우즈 .bat 작성하시길
한두시간내에 해결해야 할 일이라면 몰라도, 직접 '맨땅에 헤딩하듯' 만들어보실것을 권하겠습니다. 처음부터 잘하는 사람 없습니다, 배우면서 알게되는것이지요. (제글이 속 뒤집어 놓는 댓글로 비쳐졌다면 죄송합니다.)
(제가 경험한) 최악의 경우는, 몇달 걸려 완성한 어플리케이션 소프트웨어 업그레이드 중에 예상치 않은 일이 벌어져 이와같은 변환 (한 시스템의 스크립트에서 전혀 다른 시스템의 스크립트로)을 두세 시간내에 하지 않을경우 와장창 다른 어플리케이션까지 떨어지는 경우가 있었는데, 여기저기 찾아보고, 물어보고 해서 간신히 바꿔치기 해 올린적도 있습니다.
여기 올리시고 '쉬운' 답을 구하시기 보다 직접 해 보실것을 강력히 권합니다.
(쉘스크립트를 윈도우즈 배치로 바꾸는 방법 등) 찾아보면 몇시간내에 답을 얻으실 수 있을것 같은데요.
다시한번 - 즉답이 되는 댓글대신 이런 글을 써서 죄송합니다.
여의도자바
.
https://kldp.org/node/156746
답을 찾으면 또 질문을 지우겠네요.
그럼 뭐하러 답을 올릴까요?
흠.
흠.
미리 양해를 구하지 않는 한, 답변이 달린 후에 질문글 내용을 임의로 삭제하는 건 답변자에 대한 예의가 아니라고 생각합니다. 커뮤니티 QnA의 취지에도 어긋나는 것이고요.
질문자님께서 일부러 그런 상황을 의도하셨으리라고 생각하고 싶진 않지만, 대비할 필요는 있겠군요.
http://archive.is/CrRJp
죄송합니다.
제가 실수 한 것 같습니다. 조심하도록할게요!
댓글 달기