UNIX 스크립트를 Windows *.bat 파일로 변환 구현 도움 부탁 드립니다.

비트12의 이미지

안녕하세요.

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

mirheekl의 이미지

배치로 통채로 바꾸려면 여러 가지 귀찮은 일이 생길테니, 다음과 같은 방법을 먼저 시도해볼 듯.
- 윈도10에서 지원하는 bash shell
- Cygwin, uwin, mingw 등등등..
- 위 방법들이 정 안 되면 파워셸 스크립트로. 기능이 매우 제한적인 배치보다는 그나마 수월할 겁니다.

--

비트12의 이미지

bash의 기능이 된다고는 하지만 해당 방법은 안될 것 같고
파워쉘스크립트는 아예 사용할 줄 모르네요. 무지한 제 자신이..송구합니다.
윈도우즈도 운영 경험의 없는데다가 파워쉘은 더더욱이....경험이없네요. 혹 파워쉘로 스크립트로 작성이 가능하신지요...?

 의 이미지

간단히 변환할 수 있는 경우는 아니로군요.

windows bat으로 구현할 수 없을 거라고 단언하지는 않겠습니다. 세상에 고수 참 많더라고요.
기다리다 보면 그런 고수께서 나타나셔서 문제를 해결해주실지도 모르는 일이겠습니다만, 기약이 없군요.

저도 차선책을 택하는 걸 추천해 드립니다. Windows 10에 bash가 들어온다는 얘긴 저도 들었는데, 어느 정도까지 들어온다는 건지 잘 몰라서요. 특히나 이 경우에는 bash뿐만 아니라 grep, egrep, awk, cut 등등이 전부 필요한데요.

cygwin 등의 환경을 구축하고 사용하는 것도 좋은 방법이지만, 조금 무거운 감이 없지 않아 있습니다. 저는 오히려 윈도우즈용 python을 사용하는 걸 추천하고 싶은데요.

python에 적절히 숙련된 사람이라면 Windows에서 동작하는, 제시된 코드와 동등한 python script를 그다지 어렵지 않게 작성할 수 있을 것 같습니다.

하지만 그런 수고를 감수하기 전에, 오라클을 올리셨다는 그 윈도우즈 서버에 python을 설치할 수 있는지를 먼저 알려주시는 게 순서인 것 같군요. 그건 그렇게 간단한 문제가 아닐 테니까요.

비트12의 이미지

우선 이런 난감한 숙제를 해결하려고 글을 올린점 송구스럽습니다. 파이썬이 오픈소스이고 라이센스가 필요 없다면 설치는 가능할 것 같습니다. 다만, Oracle DB와 충돌? 이나 그런게 없다면요...

 의 이미지

Quote:
Python is developed under an OSI-approved open source license, making it freely usable and distributable, even for commercial use.

https://docs.python.org/3/license.html

라이센스 문제는 없습니다. Oracle DB와 충돌한다던가 할 가능성이 완전히 없다고 보장할 수는 없지만, 그런 문제가 발생할 가능성은 낮다고 봐요.

다만 제가 우려하는 바는, 윈도우즈 서버나 오라클 DB, 서버가 다수 있다는 등의 말씀으로 미루어 볼 때, 개인 취미나 공부목적으로 구축하시는 게 아닌 것 같아서 말이죠.

상업적이거나 기타 중요한 목적으로 운영되는 서버라면 보안이나 기타 운영 정책상 아무 프로그램이나 설치하면 안 되는 것 아닌가 해서 여쭤봤습니다.

같은 맥락에서 말씀드리는 겁니다만, 그런 목적으로 운영할 서비스에 들어갈 코드를 이런 웹사이트에서 구하시는 건 조금 곤란하지 않을까요.
스크립트가 그렇게 복잡한 건 아니라서 시간만 좀 있으면 금방 옮길텐데, 이후의 유지보수에 대한 책임 같은 것까지 무료로 맡으실 분은 많지 않을겁니다.

vagabond20의 이미지

한두시간내에 해결해야 할 일이라면 몰라도, 직접 '맨땅에 헤딩하듯' 만들어보실것을 권하겠습니다. 처음부터 잘하는 사람 없습니다, 배우면서 알게되는것이지요. (제글이 속 뒤집어 놓는 댓글로 비쳐졌다면 죄송합니다.)

(제가 경험한) 최악의 경우는, 몇달 걸려 완성한 어플리케이션 소프트웨어 업그레이드 중에 예상치 않은 일이 벌어져 이와같은 변환 (한 시스템의 스크립트에서 전혀 다른 시스템의 스크립트로)을 두세 시간내에 하지 않을경우 와장창 다른 어플리케이션까지 떨어지는 경우가 있었는데, 여기저기 찾아보고, 물어보고 해서 간신히 바꿔치기 해 올린적도 있습니다.

여기 올리시고 '쉬운' 답을 구하시기 보다 직접 해 보실것을 강력히 권합니다.
(쉘스크립트를 윈도우즈 배치로 바꾸는 방법 등) 찾아보면 몇시간내에 답을 얻으실 수 있을것 같은데요.

다시한번 - 즉답이 되는 댓글대신 이런 글을 써서 죄송합니다.

여의도자바

qiiiiiiiip의 이미지

https://kldp.org/node/156746

답을 찾으면 또 질문을 지우겠네요.
그럼 뭐하러 답을 올릴까요?

 의 이미지

흠.
미리 양해를 구하지 않는 한, 답변이 달린 후에 질문글 내용을 임의로 삭제하는 건 답변자에 대한 예의가 아니라고 생각합니다. 커뮤니티 QnA의 취지에도 어긋나는 것이고요.

질문자님께서 일부러 그런 상황을 의도하셨으리라고 생각하고 싶진 않지만, 대비할 필요는 있겠군요.

http://archive.is/CrRJp

비트12의 이미지

제가 실수 한 것 같습니다. 조심하도록할게요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.