[MSSQL] Database log file คือ อะไร

Microsoft SQL Server

สำหรับฐานข้อมูลของทุกๆค่าย ตัวเนื้อของ Database มีไฟล์ที่สำคัญอยู่ 2 ตัว  ได้แก่ คราวนี้มาดูที่ตัวของ MS SQL บ้างดีกว่า ว่าไฟล์กลุ่มนี้มีอะไรบ้าง จากหัวเรื่อง Blog นี้จั่วหัวในเรื่องของ Database Log File ไว้ เรามาดูกันดีกว่ามันมีการทำงานอย่างไร เริ่ม Database ทำงาน รู้แล้วว่าอะไร ที่มันต้อง Log บ้าง คราวนี้ลองมาดูโครงสร้างแบบ Logical(Virtual Log) ของ Log กัน โดย Log แต่ละตัวมี ID ประจำของมัน ก็ คือ  Log Sequence Number (LSN) ซึ่งเรียงกันไปเรื่อยๆ ดังรูป โดย Log มันยังไม่ได้ลง Disk ที่เป็น Physical ทันทีนะครับ มันถูกเก็บลงใน Buffer เพื่อพักข้อมูลไว้ก่อน เพราะถ้าเอาลง Disk เลยจะเจอปัญหา I/O ได้ โดยจะรอจนถึง เงื่อนไขที่กำหนด ว่าควรย้ายจาก Buffer ลง Disk เราเรียกจุดนี้ว่าเป็น Check Point ครับ ซึ่ง Check Point ของเจ้าตัว SQL Server มีหลายแบบ ผมติต่างเป็นแบบ Automate Check Point (ง่ายดี) แล้ว Log พวกนี้มันช่วยเราในการ Recovery อย่างไรหละ ตอนนี้ต้องรู้คำศัพท์หลายคำเลย จากรูปนี้ เรามาลองไล่กันดีว่า ถ้ามีสถานการณ์ตัวอย่าง เอาจากรูปที่นะครับ อะไร คือ MinLSN ถ้าระบบมีปัญหา พบว่าระบบมีการทำ Check Point ที่…

ข้อควรสังเกตุ และระวังในการ Migrate ข้อมูลจาก Microsoft SQL Server ไป IBM DB2 10.5

IBM DB2

หลายคนๆ คงอ่านหัวข้อแล้ว อาจจะงง 55 เพราะว่าส่วนใหญ่มีแต่การ Migrate ข้อมูลจาก IBM DB2 ไป Microsoft SQL Server กัน แต่นี่ คือ Require ของลูกค้า (ลูกค้า คือ พระเจ้า) โดยผมขอสรุป สิ่งที่ต้องสังเกตุ และระวังในการย้ายข้อมูลจาก Microsoft SQL Server ไป IBM DB2 ซึ่งจะส่งผลให้ Application ที่กำลังพัฒนาอยู่เกิดผิดพลาดได้ ดังนี้

SELECT ซ้อน SELECT

Microsoft SQL Server

หลายครั้งที่เราได้โจทย์ หรือปัญหามาแก้โดยใช้วิธีการ Query จากฐานข้อมูลมา ซึ่งมีรูปแบบการ Query หลายแบบ ได้แก่ การเขียน JOIN ตาราง, UNION หรือ ทำเป็น Sub Query เป็นต้น ในวันนี้ผมขอนำเสนอวิธีการเขียน SELECT IN SELECT ซึ่งเป็นวิธีการเขียน Query แบบหนึ่งที่ช่วยแก้ปัญหาได้มากมาย และลดการเขียน Coding ที่ไม่จำเป็นได้อีก ตัวอย่างปัญหา เราต้องการดูข้อมูลการจ่ายดอกเบี้ยทั้งหมด เพื่อนำมาออกรายงาน โดยมีเงื่อนไขดังนี้ ข้อมูลที่ใช้กับตัวอย่างนี้ ขั้นตอนการแก้ปัญหา (ถ้ามีการเขียน SQL ผมขอใช้ SYNTAX ของ SQL Server นะครับ) โดยใช้ Query ที่มีการตรวจสอบเงื่อนไขของ DATE FROM กับ DATE TO ว่าเป็นเดือนเดียวกัน หรือต่างเดือนกัน ดังนี้ โดยจะ SELECT ซ้อนครอบอีกขั้นนึง เพื่อที่เอาผลลัพธ์ที่ได้จาก Query ก้อนด้านในมา SUM หาผลรวมอีกที ดังนี้ หมายเหตุ: โจทย์นี้อาจจะมีวิธีการอื่นๆในการเขียน Query เพื่อให้ได้ผลลัพธ์ที่เหมือนกัน แต่ที่ผมยกตัวอย่างนี้มา เพื่อที่จะสร้าง Idea และแนวทางให้การปรับประยุกต์ใช้ต่อไปนะครับ

SQL JOINS

ตอนแรกทำงานไป ทำงานมา ก็เกิดสงสัยว่า JOIN นี่มีกี่แบบ โดยมีคำถามหลายข้อเลย โดยผมขอสรุปเป็นข้อๆ ดังนี้คำถาม: LEFT JOIN กับ LEFT OUTER JOIN ต่างกันอย่างไรคำตอบ: ไม่ต่างกันเลย การทำงานเหมือนกัน คำถาม: INNER JOIN กับ OUTER JOIN ต่างๆกันอย่างไรคำตอบ: INNER JOIN  เอาข้อมูลมาที่เหมือนกันท้ังสองฝั่งมาเทรวมกัน(Intersect) กัน แต่ OUTER JOIN เป็นการเทข้อมูลทั้งฝั่งใดฝั่งหนึ่ง หรือทั้งสองฝั่งมารวมกัน(Union) คำถาม: แล้วมีการ JOIN แบบอื่นๆ หรือไม่คำตอบ: มี โดยผมขอเกริ่นสรุปรูปแบบการ JOIN ของ TABLE ก่อน เพื่อเป็นการท้าวความหลังก่อนนะครับ ตาราง A ตาราง B ผลลัพธ์ที่ได้จากการ CROSS JOIN (A, B) หมายเหตุ

Regsvr32.exe กับ Regasm.exe เหมือนกัน หรือ ต่างกันอย่างไร

ช่วงนี้ได้ลองวิจัยฝุ่น พัฒนาโปรแกรมเพื่อช่วยให้การทำงาน ง่ายและสะดวกขึ้น โดย Tool ที่ทำเพิ่มต้องมีความสามารถในการ Register / Unregister DLL ได้ จากการลองศึกษาข้อมูลมาพวกว่า Microsoft ได้ทำ Tools ขึ้นมาสองตัว ได้แก่ Regsvr32.exe  และ Regasm.exe โดยสองตัวนี้ มีหน้าที่ที่เหมือนกัน คือ จัดการกับ DLL แต่ส่วนที่ต่างกัน คือ Regsvr32.exe  เป็น command-line tool ที่เอาไฟล์จัดการกับไฟล์ ประเภท Dynamic-link libraries (DLLs) and ActiveX controls (COM LIBRARY) บน Registry โดยมองเป็น command components  Regasm.exe เป็น Assembly Registration Tool ที่มากับชุด .Net SDK ซึ่งจะอ่านข้อมูล metadata จากไฟล์ .Net Component และนำข้อมูลทีจำเป็นมาจัดเก็บลงใน Registry ซึ่ง Regasm.exe จะช่วยให้ COM Clients สามารถสร้าง .Net Framework Classes ได้ โดยที่ COM Clients เรียกใช้งานแบบ COM Class ได้เลย หมายเหตุ: ถ้าว่างๆผมจะมาเขียนบทความเกี่ยวกับการ Register / UnRegister DLL โดยใช้ภาษา C# กันนะครับ แหล่งอ้างอิง:

ทำให้ Chrome เร็วลื่นสุดๆ

หลายคนคงใช้ Google แล้วกินแรมสุดๆ เครื่งช้ามาๆ วันนี้ผมมีเทคนิคและน้อยๆมานำเสนอครับ โดยการเพิ่ม Parameter ใน Google Chrome เพื่อจัด Process การทำงาน โดยมีวิธีการ ดังนี้ คลิกขวาที่ Short Cut ของ Google Chrome ของ Google Chrome เลือก Properties ตรง Target ให้เพิ่ม Parameter –process-per-site เพิ่มต่อท้ายลงไป ดังรูป หลายคนคงสงสัยกันว่า parameter ที่ผมได้เพิ่มเข้าไป มัน คือ อะไร ?เดี๋ยวผมขออธิบายเลยและกัน ใน Google Chrome มีรูปแบบการจัดการ Process เป็นแบบ Multi-Process Model คือ งานแต่ละอย่างแยกเป็น 1 Process ทั้ง Control, Tab, Extension และ Plug-in โดยสำหรับ parameter จัดการ Process เหล่านี้จะมี 3 แบบ ได้แก่ “–process-per-tab” เป็นค่า Default ของระบบเลย คือ แยก Process ของแต่ละ Tab แยกออกจากกันไปเลย(สังเกตุได้จาก Task Manager ที่มี Chrome.exe เต็มไปหมด) ซึ่งข้อดี คือ เวลา Tab ไหนมันค้าง มันจะไม่กระทบกับ Tab อื่นๆ แต่ข้อเสียของมัน คือ ใช้ RAM เยอะมาก “–process-per-site” เป็นการบอกให้ Google Chrome จัด Process…

Disable auto commit ในโปรแกรม TOAD for DB2

หลังจากทำงานมา 1 ปี ผมก็ได้มีโอกาศอยู่ Standby รอรับปัญหาจาก User วันแรก ซึ่งวันแรกเนี่ยแหละ ผมเขียน Query ผิด ลืม Where และเข้าใจว่าโปรแกรมที่ใช้ Toad for DB2 ตัวใหม่ ซึ่งลองเอามาใช้แทนตัว WinSQL ที่มันเก่ามากแล้ว มัน Default Auto Commit = off แล้ว แต่มันปรากฏว่าไม่ใช้ ดังนั้นผมจึงขอนำเสนอวิธีการปิด Auto Commit สามารถดูตามรูปภาพที่แนบมาได้เลยครับ ปล. วิธีการนี้สามารถประยุกต์ใช้กับโปรแกรม Toad for SQL Server, Toad for  MySQL และอื่นๆ

The Seven Wastes of Software Development

ช่วงวันหยุดสงกรานต์ ผมได้อ่านบทความท่มีประโยชน์ตามลิงค์ The Seven Wastes of Software Development – DZone (จริงๆอ่านเจอมานั้นและ แต่ไม่มีเวลาอ่าน 555) โดยเท่าที่ลองอ่านสแกนคร่าวๆมา ผมขอสรุปเนื่อหาสั้นๆนะครับ ก่อนอื่นเลย เราตีความคำว่า waste หมายถึง อะไร ถ้าลองค้นหาในพจนานุกรมดู พบว่ามันแปลว่า ขยะ หรือ สูญเสียไปโดยไร้ประโยชน์ การพัฒนา Software ก็มีขยะพวกนี้เหมือนกัน ซึ่งในบทความนี้จะนำเสนอขยะ หรือ ลงแรงโดยป่าวประโยชน์ ในการพัฒนา Software มีอะไรบ้างนะครับ โดยผมจะเปรียบเทียบกับ 7 waste of Production ที่จะกล่าวถึงขยะของการผลิต(manufacturing) แหล่งข้อมูล

[Crystal Report] ปัญหา “There must be a group that matches this field.”

วันนี้ผมได้รับงานมาให้แก้ไขรายงานด้วย Crystal Report ชิ้นนึง เพื่อเพิ่ม Field และจัดกรุ๊ปใหม่ ปัญหามันอยู่ที่ว่า Database Field เจ้ากรรมดันไม่มี Field ที่ผมได้เพิ่มใน DB ? ผมก็เลยไปเอา Data Source ออกไป และสร้างตัดใหม่เข้ามาแทน ผลปรากฏว่าพอทดสอบรันทำ Unit Test เจอ Error Message ” There must be a group that matches this field.” สาเหตุ เกิดจากการไปเอาตัว Data Source ออกไป ทำให้ข้อมูล Group หายไปด้วย รวมถึง Formular Field ที่เราคำนวณสดทั้งหลาย แนวทางแก้ไข ให้คลิกขวา Set Data Source Location จากนั้นเลือก Table อันใหม่เข้าไป และกด Update