Wednesday, April 9, 2014

SQLCMD ด้วย Scheduled Tasks ปัญหาเล็กๆ ที่ไม่ควรมองข้าม

  • ประเด็นมีอยู่ว่าจะทำ backup db ใน SQL Server 2005 บน Windows Server 2003 R2
  • โดยใช้ bat file ด้วยคำสั่ง sqlcmd ดังนี้
sqlcmd -Q "backup database mydb to disk='E:\db_bak\%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_mydb.bak'"
  • เมื่อเราเปิด cmd ขึ้นมาแล้วพิมพ์คำสั่งแบบด้านบนนี้ ผลคือ คำสั่งทำงานได้ผลลัพธ์ที่ต้องการ
  • ที่นี้เราก็ทำการสร้าง file.bat โดยใช้คำสั่งดังนี้
@echo off
sqlcmd -Q "backup database mydb to disk='E:\db_bak\%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_mydb.bak'"
  • แล้ว add task เข้าไปใน scheduled tasks ของระบบ ตั้งเวลาเรียบร้อยทดสอบ 
  • อืม พอถึงเวลาเรียก task ทำงาน มันก็เปิด file.bat ขึ้นมาอยู่นะ แล้วก็รันคำสั่ง แต่ผลที่ได้คือ หน้า console มันแสดงคำสั่งนี้ แบบ loop เหมือนประมาณเรา echo คำสั่งนี้แล้ววนลูปแสดงไปเรื่อยๆ แบบนั้นเลย
  • งง ทำไมตอนทดสอบก่อนหน้ามันใช้ได้ หว่า แต่พอเพิ่มเข้าไปใน scheduled tasks แล้วมันใช้ไม่ได้หว่า
Solved
  • ลองเปลี่ยน sqlcmd => sqlcmd.exe ใน bat file เรา แล้วมันได้เฉยเลยแฮะ
@echo off
sqlcmd.exe -Q "backup database mydb to disk='E:\db_bak\%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_mydb.bak'"
Related
  • http://juuier.blogspot.com/2009/06/sqlcmd-utility-in-sql-server.html
  • http://juuier.blogspot.com/2009/07/backup-and-restore-mssql-database-by.html
  • http://juuier.blogspot.com/2009/05/restore-mssql-database-with-bak-file.html
  • http://juuier.blogspot.com/2009/01/backup-all-ms-sql-server-databases.html

อ้างอิง
  • มั่วเอา อืมยังไม่ค่อยเข้าใจเหตุและผล หว่า ทำไม การใช้งานใน scheduled tasks ต้องพิมพ์ ชื่อ process แล้วต้องเติม extension .exe ด้วยนะ

No comments:

Post a Comment

Popular Posts