Wednesday, July 8, 2009

Generate database structure by SQL Server Management Studio Express

สร้างสคริปสำหรับแบ็คอัพโครงสร้างฐานข้อมูล (trigger เอามาไม่ได้หว่า ทำไม่เป็น)












ประเด็น
  • ปกติถ้าต้องการนำ db บน server ลงมาที่เครื่องตัวเองสิ่งที่ตัวเองชอบทำประจำก็คือ เข้าไปที่ server ผ่าน remote desktop
  • แล้วจัดการสร้างไฟล์ bak แล้ว ่ftp เอาเองแต่คิดไว้นานแหละนะว่าไม่อยากจะไปยุ่งเกี่ยวอาไรกะ server มากนัก ลองหาวิธีย้ายข้อมูล ทั้งโครงสร้างทั้ง ข้อมูล เลยจะทำไงดี
  • สิ่งที่เคยลองทำคือ หา program อาไรหว่าจำชื่อไม่ได้แหละ ที่ไม่ฟรีที่มีความสามารถสร้าง script ได้โครงสร้างและ insert statement ได้ซึ่งก็โอเคนะ แต่มันไม่ฟรีอ่ะดิ หรือ แต่คิดว่าน่าจะมีของฟรีตัวอื่นๆ อีกเยอะที่ทำได้นะ แต่ไม่รู้หว่า
  • อีกอย่าง คือ สร้างสคริปโครงสร้าง db ด้วย SQL Server Management Studio Express แล้วก็ย้ายข้อมูลด้วย DTS
ปัญหา
  • ที่เคยทำมาก็ไม่มีปัญหาอาไรอ่ะนะ แต่วันนี้ มีปัญหาเรื่องการ execute สคริปโครงสร้าง db (ไฟล์เดียวรวม table store function view) ที่ได้จาก SSMSE มีปัญหาหว่า มันเป่งๆ execute ไม่ได้ซะงั้น
  • ลองแกะรอย error ที่แสดงก็พบว่า ปํญหาอยู่ที่โปรแกรมเมอร์แก้ column ใน table แล้วไม่ได้แก้ store procedure ตาม (คิดว่า procedure ที่เกิดปัญหา exec ไม่ได้เค้าน่าจะไม่ใช้แล้วแหละ ไม่งั้นคงไม่ปล่อยให้มันแป่งๆ แบบนี้)
  • อีกอย่างคือ exec view ไม่ได้หว่า ดู error ก็พบว่า view เรียกใช้ function ซึ่งในสคริปไฟล์ function อยู่ด้านล่าง view สคริปหว่า เลยทำให้ execute view ไม่ผ่าน แต่คิดว่าถ้าเรา execute อีกรอบคงผ่านเพราะ ตอนที่ error exec view
  • รอบแรก fucntion คงจะ exec ผ่านแหละ กด exec อีกรอบ view คงจะไม่มีปัญหาอาไรน่าจะผ่าน แต่ไม่ค่อยชัวร์ เพราะ เห็น error สีแดงแล้วไม่ค่อยชอบหว่า
  • เลย drop db แล้วสร้างใหม่ และ สร้าง script แบบแยกไฟล์เลย table, function, view, store procedure ออกคนละไฟล์เลย
  • exec ใหม่ตามลำดับ table ตามด้วย function แล้วก็ view สุดท้ายก็ store procedure ทุกอย่าง
  • อันตรายเหมือนกันนะ การเรียกใช้ อันนี้ใน อันนั้น อันนั้นในอันนี้ ถ้าไม่ได้ย้ายอาไรก็ไม่มีปัญหาหรอก แต่จะเจอก็ตอน ทำประมาณนี้
สรุป
  • ทางออกที่ดีที่สุดก็ ทำเหมือนเดิมๆ เข้าไปที่ server สร้าง bak แล้ว ftp ตามด้วย restore แต่มันก็ไม่ใช่ทางแก้ปัญหา สำหรับคนที่ไม่สามารถเข้าไปที่ server และ เราที่ไม่ค่อยอยากไปยุ่งกะ server นี่น่า
  • สิ่งที่พอจะทำได้ก็แค่ ถ้า execute สคริปโครงสร้าง db แบบ single file แล้วมี error ตัวแดง ก็ให้เราสร้างสคริปแยก แล้ว
  • execute ที่ละไฟล์อันนี้ล่ะ น่าจะโอเคกว่า จากนั้นค่อยตามด้วย DTS แต่อย่าลืม uncheck view นะตอนย้าย data ด้วย DTS อ่ะ
  • อีกทางคือ ตอนเขียนโปรแกรมฝั่ง db ก็อย่าเรียกข้ามไปข้ามมามั่วไปหมด เช่น ใน function มีการเรียก store เป็นต้น เกี่ยวกันป่าวเนี๋ยมั่วไปเรื่อยเรา ^^'

ทิป
  • เราสามารถสร้าง insert script ของ แต่ละ table ได้ผ่าน store procedure ที่เค้าโพสไว้บนเน็ต
  • ทำไมไม่ได้ trigger ด้วยอ่ะ ทำไงหว่า
  • ได้ trigger ตอน generate script แล้ว option นี้แก้เป็น true นี่เอง
  • trigger ไม่เหมาะสำหรับคนขี้หลงขี้ลืม ควรเขียนใน datadict ด้วยว่ามี trigger




No comments:

Post a Comment