[DB2] BAT Script สำหรับ Restore DB

ช่วงนี้มี UAT และต้องการนำ DB จาก SITE งานมาขึ้นที่ Environment ของบริษัทครับ โดยผมได้เขียนโครง BAT Script ง่ายๆ และก็ให้พี่ที่ทำงานปรับปรุงต่อนิดหน่อย โดยมีสาระสำคัญ ดังนี้

  • ขั้นแรก โครงสร้างโฟลเดอร์ทีมี
    • WAITING เอาไว้ใส่ไฟล์ DB ในรูปแบบ Zip ไฟล์ โดยข้างในมีไฟล์ Script ที่จำเป็นในการสร้างฐานข้อมูล และมีโฟลเดอร์ย่อย DBDATA ที่เก็บข้อมูล Back ของฐานข้อมูลในรูปแบบ .ixf ที่ Export มาจากเครื่อง AS400
    • ARCHIVE เอาไว้เก็บไฟล์ .Zip Restore เข้า DB เสร็จแล้ว
  • ขั้นที่สอง กำหนด Step การทำงาน ดังนี้
    • กวาดหาไฟล์ .Zip ที่วางไว้ในโฟลเดอร์ WAITING
    • เตรียมค่า Setting สำหรับส่ง E-mail
    • ตรวจสอบว่ามีไฟล์ในโฟลเดอร์ WAITING  ว่ามี หรือไม่ ถ้าไม่มีก็ไม่จำเป็นต้องทำงานต่อ
    • แค่ถ้ามีข้อมูล จะมี Step การทำงาน ดังนี้
      • ลบไฟล์ Result ที่เอาไว้เก็บผลลัพธ์ของการ Restore DB
      • แตกไฟล์ .Zip ออกมา โดยของผมใช้ 7Zip เพราะมันฟรี
      • Run Script และ Import ข้อมูล
      • ย้ายไฟล์ที่ทำงานเสร็จ จากไฟล์ที่ Process อยู่ ไปยังโฟลเดอร์ ARCHIVE
      • ทำการส่ง E-Mail ผ่านจาก STMP โดยใช้ Stunnel และ Blat ครับ
    • ไฟล์ BAT Script ที่ได้มี ดังนี้ครับ (อย่าลืมเอา Comment ภาษาไทยออกก่อนนะครับ)
::GET LASTTEST ZIP FILE AND STORE IN VARIABLE
FOR /F %%I IN ('DIR WAITING\*.zip /B /OD') DO SET LATESTFILENAME=%%I
 
::STORE E-MAIL PARAMETER VALUE IN VARIABLE
::runscript@gmail.com
::DS123
set SERVER="127.0.0.1:25"
set USER="runscript"
set PW="DS123"
set FROMNAME="runscript@gmail.com"
set TO="pingResult@gmail.com"
set CC="chatri@debuggingsoft.com"
set SUBJECT="AUTO DEPLOY DB RESULT"
set BODY="Deploy DB Success"
 
IF [%LATESTFILENAME%]==[] (
    ECHO NO FILE
) ELSE (
    IF EXIST %CD%\WAITING\%LATESTFILENAME% (
        ::ลบไฟล์ที่มีชื่อขึ้นต้นด้วย result ออก
        DEL result*.txt
        ::ย้ายไฟล์ไปยังโพลเดอร์ WAITING
        MOVE /Y %CD%\WAITING\%LATESTFILENAME% .
 
        ECHO %CD%\WAITING\%LATESTFILENAME%
 
        ::UNZIP IT
        "C:\Program Files\7-Zip\7z.exe" x %CD%\%LATESTFILENAME% -y
 
        ::PROCESS DROP & CREATE
        db2 "connect to BFMUATC user invest using invest"
 
        db2 -tvf "0_DROP_CREATE_DB.txt" -z result0.txt 
 
        ::หน่วงเวลาให้สร้าง Database เสร็จ
        TIMEOUT /T 700
 
        db2 "connect to BFMUATC user invest using invest"
 
        db2 -tvf "2_DB2INST1_CREATE_DB_PERMISSION.txt" -z result2.txt
        db2 -tvf "3_INVEST_CREATE_TABLE.txt" -z result3.txt
        db2 -tvf "31_GRANT_USER_ON_TABLE.txt" -z result31.txt 
 
        cd DBDATA
        db2move BFMUATC import -u invest -p invest
        cd ..
 
        db2 "UPDATE SYSTEMINFORMATION SET SYSTEMPWD = SYSTEMUSER"
 
        db2 -tvf "5_INVEST_INDEX_VIEW_TRIGGER_FUNC.txt" -z result5.txt
        db2 -td@ -vf "51_FUNC_SHIFTDATE.txt" -z result51.txt 
 
        db2 -tvf "7_CHECK_SCRIPT.txt" -z result7.txt 
 
        db2 -tvf "8_ADD_DEPLOYTIME.txt" -z result8.txt 
 
        db2 COMMIT WORK
        db2 CONNECT RESET
        db2 TERMINATE
 
        ::Kill Process 7zip ถ้ามันยังทำงานอยู่
        taskkill /im 7z.exe /T /F
        ::ย้ายงานที่ทำเสร็จแล้วไปยัง โพลเดอร์ ARCHIVE
        MOVE /Y %CD%\"%LATESTFILENAME%" %CD%\ARCHIVE
 
        ::SEND E-MAIL RESULT
        blat -server %SERVER% -f %FROMNAME% -u %USER% -pw %PW% -to %TO% -cc %CC% -subject %SUBJECT% -body %BODY%    
 
    )
)
  • ขั้นที่สาม เอาไฟล์ BAT ที่ได้ไปฝาก Schedule ของ Windows ให้รันครับ โดยของผม Set ให้มันทำงานทุกวันตอน 3 ทุ่ม และตี 4.30 ครับ
  • สุดท้ายและ สำหรับ Script นี้ สิ่งที่ควรปรับปรุง
    • เปลี่ยนเป็น Power Shell
      • แก้ไข Code ให้รองรับการกวาดข้อมูลตั้งแต่ใน E-mail เลย จะได้ไม่ต้อง VPN เอาไฟล์มาหยอดครับ
      • แก้ไข Code ให้ตรวจสอบสถานะการ Restore DB ว่าสำเร็จ หรือไม่ และให้ส่ง E-mail ครับ

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.