go to http://oracle.in.th

Tuesday, December 29, 2009

ความแตกต่างระหว่าง SOAP กับ REST



ความแตกต่างระหว่าง SOAP กับ REST

วันนี้ผมจะมาอธิบายความแตกต่างระหว่าง SOAP กับ REST แบบง่ายๆชาวบ้านๆเลยนะครับโดยทั้ง SOAP และ REST เกี่ยวข้องกับ Web Service ทั้งนั้นครับ


....โดย SOAP ย่อมาจาก "Simple Object Access Protocol" และ REST "Representational State Transfer" ผมขอยืมคำพูดจาก Blognone หน่อยนะครับผมว่าเขาอธิบายได้ดี

"ใน​การพัฒนา​เว็บเซอร์วิส​นั้น​เรา​สามารถ​เลือกที่​จะ​พัฒนา​แบบ​ SOAP ​หรือ​แบบ​ REST ​ก็​ได้​ ​ถ้า​เราพัฒนา​ SOAP Web services ​เรา​จะ​ต้อง​มีการส่งข้อ​ความ​ XML (เอกซ์​เอ็มแอล) ​ตามรูปแบบที่กำ​หนด​ไว้​โดย​โปรโตคอล​ SOAP ​อีก​ทั้ง​ต้อง​มี​เอกสารอธิบายการเรียก​ใช้​เว็บเซอร์วิสประกอบ​ ​ซึ่ง​เอกสารที่อธิบายนี้​จะ​เขียน​โดย​ใช้​ภาษา​ WSDL (วิสเดิล) ​ใน​แง่ของ​ผู้​เรียก​ใช้​ ​จะ​ต้อง​มีการ​เข้า​ใจเอกสารที่อฺธิบายการเรียก​ใช้​ SOAP Web services ​หรือ​มี​เครื่องมือที่​จะ​เข้า​ใจ​และ​เรียก​ใช้​ได้​อย่างถูก​ต้อง​ ​

ใน​ขณะที่​ REST Web service ​จะ​เป็น​รูปแบบของซอฟต์​แวร์ที่มองว่าข้อมูลต่าง​ ​ๆ​ ​เป็น​ Resource ​ซึ่ง​คน​สามารถ​เรียก​ใช้​ได้​ผ่านทางโปรโตคอล​ HTTP ​และ​ข้อมูลที่ส่งกลับมา​ให้​ผู้​ใช้​เป็น​ข้อมูลรูปแบบ​ XML ​ใด​ ​ๆ​ ​ก็​ได้​ ​ใน​แง่ของ​ผู้​เรียก​ใช้​ REST Web service ​ก็ขอเพียงแค่​ให้​ทราบ​ URL ​ของ​ REST Web service ​และ​การอ่านข้อมูล​ XML ​ก็​จะ​ดึงข้อมูลที่ตนเอง​ต้อง​การ​ได้"

ถ้าจะว่าถึงความง่ายในการทำ Web Service ผมว่าทำง่ายพอๆกัน ถ้าคุณรู้จัก Tool ต่างๆแล้วรู้วิธีใช้ แต่ถ้าถามว่าอันไหนศึกษาแล้วทำได้ง่ายกว่าผมว่า REST จะง่ายมากครับเพียงคุณนำ Output ไปหุ้มด้วย XML เพียงเท่านี้คุณก็จะได้ Web Service แล้ว (แต่คนใช้ก็ต้องถอด xml ที่คนทำ web service ทำไว้ ซึ่งหา library มาใช้ง่ายมาก) ส่วน SOAP นั้นถ้าไม่ใช่ Tool Generate แล้วละก็ถือว่ามี Learning Curve ที่สูงเอาการเลย โดยภาษาที่ดังด้านนี้คือ .NET , PHP แล้วก็ Java (อันดับท้ายใน 3 เลยซะงั้น) ผมมี Resource มาฝากทุกท่านด้วยครับ
SOAP กับ REST คงยังต้องต่อสู้กันต่อไปกระแสคงบอกว่า SOAP จะดับแล้ว REST จะมาแทนที่แต่ผมว่าืัทั้ง 2 แบบมีจุดเด่นจุดด้อยของมันเอง เพียงแต่ REST มีจุดเด่นที่เรียนรู้และเข้าใจง่าย ทำให้คนส่วนใหญ่ชอบใช้งานแบบ REST มากกว่าก็เท่านั้นเอง...

Credited by DominixZ
ข้อเขียนนี้ช่วยฉัน:  

Monday, December 28, 2009

ภูมิหลังของ Web Application

หลังจากที่ได้อ่านบทความเรื่อง "ความเป็นมาและประสิทธิภาพของ PL/SQL" ไปกันแล้ว
วันนี้ ผมก็เลยขอเสนอ ...ภูมิหลังของ Web Application กันบ้างครับ

Web Application

ในยุคแรกของการติดต่อสื่อสารผ่านเวบจะเป็นแข็งๆถื่อๆตรงไปตรงมา หรือที่เรียกว่า Static Content คือ เนื้อหาข้อมูลจะคงที่ ไม่สามารถเปลี่ยนแปลงได้ พอซักระยะนึงก็มีคนพัฒนา CGI (Common Gateway Interface) Script ใน Web Server ได้ นี่แหล๊ะที่ทำให้เกิด Dynamic Content ขึ้น เจ้า CGI นี้เจ๋งมาก มันยัง support ภาษาอื่นๆ ด้วย เช่น ภาษา C หรือ C++ ทำให้ขณะนั้น CGI เป็นที่ popular มาก จนตอนนี้ก็ยังใช้อยู่เลย

ต่อมา Sun ผู้ผลิตภาษา Java ได้คิดทำ Java Applet ขึ้น แต่จะเป็นการทำงานที่อยู่ฝั่ง Client Side ระหว่างนั้นเอง Sun ก็ได้เริ่มออก Technology ใหม่อีกที่ชื่อว่า Servlet เพื่อมาทำงานฝั่ง Server Side เจ้า Servlet ได้ช่วยแก้ไขปัญหาข้อเสียหลายอย่างของ CGI เช่น ในเรื่องของประสิทธิภาพและความยืดหยุ่น ทำให้เจ้า Servlet ดังขึ้นมาในพริบตา

หลังจากนั้นไม่นาน พี่ Sun เค้าก็สร้าง Technology ใหม่อีกแหละ คือเจ้า JSP ตัวนี้เจ๋งมาก จริงๆมันออกมาก็เพื่อแก้ปัญหาของ Servlet อีกหละ แทนที่เราจะเขียน Code ทั้งหมดเอาไว้ที่ Servlet กว่าจะเขียน Web ออกมาได้ซักหน้าก็คงนาน เค้าก็เลยแยกออกมาเป็นภาษา Script ออกมาช่วยให้การทำงานง่ายขึ้น แถมเวลาแก้ไขไฟล์ JSP ก็ไม่จำเป็นต้อง Compile ใหม่อีก เจ้าตัว Servlet Container จะจัดการ Compile ให้เองอัตโนมัติ

เวลาผ่านไป คนทำงานเขียนโปรแกรมก็เริ่มฉลาดขึ้น ทำโปรเจคใหญ่ก็มามากต่อมาก ทำให้เรียนรู้ปัญหาที่เกิดขึ้นระหว่างการทำงาน จากประสบการณ์ที่สั่งสมมาทำให้เกิดสิ่งที่เรียกว่า Framework ขึ้น นิยามสั้นๆของ Framework นะครับ Frame แปลว่ากรอบ work แปลว่า การทำงาน แปลจากหลังมาหน้าได้ความว่า การทำงานที่เป็นไปตามกรอบ หรือแบบแผนนั้นเองครับ

การที่เรามี Framework ก็เพื่อช่วยลดภาระการทำงานให้น้อยลง ไม่ต้องเสียเวลา ส่วน Framework ที่เราพอจะรู้จักในสาย Web ดังก็มี Spring Framework, Struts Framework … นับนิ้วคงไม่หมด แต่ที่จะพูดถัดจากนี้ไปจะเป็น Struts Framework กันครับ

ไว้ติดตามกันต่อ ภาค2 นะครับ

Credited by Tangy
ข้อเขียนนี้ช่วยฉัน:  

Friday, December 25, 2009

ความเป็นมาและประสิทธิภาพของ PL/SQL

PL/SQL เป็นการนำคำสองคำคือ PL และ SQL มารวมกัน

PL ย่อมาจาก Procedure Language พัฒนาโดย Oracle เพื่อเป็นส่วนเพิ่ม (extension) ใน standard SQL ให้ทำงานแบบ procedural กับฐานข้อมูล PL/SQL เป็นตัวเชื่อมระหว่าง database technology และ procedural programming language, PL/SQL เป็นเครื่องมือใช้พัฒนาระบบงานที่เพิ่มความสามารถให้กับ SQL ของ Oracle ทำให้พัฒนาระบบงานที่สลับซับซ้อน และเข้าถึงจัดการข้อมูลในฐานข้อมูลได้เป็นอย่างดี ด้วยความสามารถของ PL/SQL เราสามารถใช้คำสั่ง
DML เช่น insert, delete, update, select กับข้อมูล ใช้คำสั่ง loop ทำงานแบบวนซ้ำ ใช้ if และ case ตรวจสอบเงื่อนไข

คำสั่ง SQL นำมาใช้ใน PL/SQL ได้ ใน PL/SQL block มีได้หลาย SQL statements เมื่อส่ง SQL statements ไปประมวลผลที่ตัวจัดการฐานข้อมูลมันถูกส่งไปในลักษณะของ block SQL (Structured Query Language) คือภาษาที่มีลักษณะเหมือนประโยคบรรยายถึงสิ่งที่ต้องการ โดยไม่สนใจวิธีเพื่อให้ได้มาของสิ่งที่ต้องการว่าเป็นอย่างไร

ข้อดีคือทำให้ระบบงานที่พัฒนาไม่สนใจว่าข้อมูลจัดเก็บจริงอย่างไร (physically stored) การทำงานของ SQL เกือบทั้งหมดกระทำที่ database server แต่ SQL มีข้อจำกัดคือในการทำงานจริงบางอย่าง การทำงานให้เสร็จโดยใช้ SQL query เพียงประโยคเดียวอาจทำได้ยาก หรือทำไม่ได้นักพัฒนาระบบงานพบว่าบ่อยครั้งต้อง execute หลาย queries เพื่อให้ได้ผลลัพธ์ที่ต้องการ และอาจต้องประมวลผลผลลัพธ์ที่ได้จาก query หนึ่งก่อนที่จะทำงานในขั้นตอนต่อไปได้

ประสิทธิภาพของ PL/SQL
ถ้าไม่มี PL/SQL, RDBMS จะประมวลผล SQL statement ครั้งละ 1 statement ทำให้ประมวลผลล่าช้า ถ้าทำงานบน network มีผู้ใช้หลายคนสั่ง run SQL statement พร้อมกันในเวลาเดียวกันจะทำให้เพิ่ม traffic บน network และ disk I/O ทำงานเพิ่มขึ้น ถ้ามี PL/SQL เราส่ง SQL statement ในลักษณะของ block (มีหลาย SQL statements ในหนึ่ง block) ไปประมวลผลที่ RDBMS engine วิธีนี้ทำให้ลดการติดต่อสื่อสารระหว่างโปรแกรมที่พัฒนากับ RDBMS และลด traffic บน network ไปในตัว

SQL statement
จากรูป เปรียบเทียบการส่ง SQL statement ไปประมวลผลระหว่าง PL/SQL ของ Oracle กับ SQL ของโปรดักท์อื่น Oracle ส่งไปเป็น block ใน block ประกอบด้วยหลาย SQL statements เมื่อตัวจัดการฐานข้อมูล (RDBMS) ได้รับ SQL code ที่มาเป็น block ทำให้การประมวลผลทำได้เร็วกว่ารับมาครั้งละ statement แล้วประมวลผล วิธีนี้ทำให้ PL/SQL เพิ่มประสิทธิภาพการประมวลของ RDBMS

อ้างอิ​งจากหนังสือ​ของคุณบรรศักดิ์​ ​เกิดชัยฤทธิ์
เล่ม "พัฒนา​ Web Applications ​ด้วย​ Oracle Developer Suite 10g"

ปล. ดูเนื้อหาหนังสือที่แจกฟรี 16 บทได้ที่นี้ครับ
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, December 23, 2009

ขั้นตอนการ Install Fedora 12 (F12)

การ Install แบบพื้นฐาน

1. ทำการ Boot จาก Live CD และเมื่อเข้าสู่หน้าเริ่มต้นให้ทำการดับเบิลคลิกที่ "Install to Hard Drive" เพื่อเริ่มการ Install

















2. ข้ามขั้นตอนการทำ Media Test ไปโดยกด Tab เพื่อให้ Cursor เปลี่ยนไปที่ Skip และกดปุ่ม Return บน Keyboard













3. ที่หน้า Welcome Screen กด Next
















4. เลือกภาษาที่เหมาะสม จากนั้นกด Next
















5. เลือกรูปแบบของ Keyboard ที่เหมาะสม จากนั้นกด Next
















6. เมื่อพบข้อความเตือนดังภาพ ให้กดปุ่ม "Re-initialize drive"
















7. ใส่ Hostname ที่ถูกต้อง จากนั้นกด Next
















8. เลือก Timezone ที่เหมาะสม โดยการคลิกที่เมืองที่ใกล้กับเราที่สุดในแผนที่ จากนั้นกด Next
















9. ใส่ Root Password จากนั้นกด Next
















10. เอาเครื่องหมายถูกหน้า "Encrypt system" ออก และ Check เครื่องหมายถูกหน้า "Review and modify partitioning layout" จากนั้นกด Next
















11. หน้าจอจะแสดงแผนผังของการแบ่ง Partition ถ้า OS นี้จะมีการใช้งาน Oracle ให้ตรวจสอบให้แน่ใจว่า มี swap partition อย่างต่ำ 2G (2048M) เพื่อรองรับการทำงานของ Oracle Installation เมื่อปรับค่าจนพอใจแล้วให้กด Next ตามด้วย "Format" และ "Write changes to disk" ตามลำดับ
















12. กด Next โดยปล่อยให้ค่าต่างๆเป็นไปตาม Default
















13. เลือก Package ที่เหมาะสมและ Check เครื่องหมายถูกที่ Additional repositories ทั้ง 3 อัน
















14. หลังจากกดเลือก Repository จะต้องทำการใส่ค่า Network Configuration ให้ใส่ค่าที่เหมาะสมและกด OK
















15. หลังจากทำการเลือก Repository ทั้งหมดแล้ว ให้เลือก "Customize Now" และกด Next
















16. เลือก Package Group และ Optional Package ที่เหมาะสมสำหรับการใช้งาน จากนั้นกด Next
















17. รอจนกระทั่งการ Installation เสร็จสิ้น
















18. เมื่อทำการ Install เสร็จแล้วให้ทำการ Restart เครื่อง เมื่อเครื่องทำการ Boot ขึ้นมาแล้วจะพบ Welcome Screen ให้กด Forward
















19. กด Forward เพื่อยอมรับ License agreement
















20. ใส่รายละเอียดของ User ที่จะทำการ Login จากนั้นกด Forward
















21. กำหนดค่า วันและเวลาให้เหมาะสม จากนั้นกด Forward
















22. ให้เลือกว่าต้องการส่ง Hardware Profile ไปให้กับทาง Fedora Project หรือไม่ จากนั้นกด Finish
















23. กด Other จากนั้นให้ Login ด้วย Username ที่ได้กำหนดไว้ก่อนหน้านี้
















24. ใส่ Password และกด Login
















25. หลังจาก Login เข้ามาแล้วจะพบหน้าจอ Default Desktop ของ Fedora
















การกำหนดค่า Network Configuration

ถ้าได้ทำตามขั้นตอนการ Installation มาก่อนหน้านี้แล้ว ในส่วนนี้ก็ไม่จำเป็นที่จะต้องแก้ไขแล้วเพราะได้ทำไปในขั้นตอนที่เลือก Repository แล้ว

- ถ้าคุณใช้ DHCP ในระบบเครือข่ายของคุณ ให้ข้ามขั้นตอนเหล่านี้ไป แต่ถ้าไม่ได้ใช้ DHCP ให้คลิกเมนู "System > Administration > Network" จะพบในส่วนของ "Network Configuration" และในส่วนของแท็บ "Devices" เลือกที่ "eth0" จากนั้นกด Edit





















- ตรวจสอบให้แน่ใจว่าได้ทำการ Check เครื่องหมายถูกที่ "Controlled by NetworkManager" และ "Activate device when computer starts" จากนั้นให้เลือก "Statically set IP addresses" และใส่หมายเลข IP, Subnet Mask, Default Gateway และ Primary DNS ที่เหมาะสมลงไป จากนั้นกด OK





















- กดแท็บ "DNS" และใส่ Hostname กับ DNS ที่เหมาะสม จากนั้นกลับมายังแท็บ "Devices"

- กดเมนู "File > Save" เป็นอันเสร็จสิ้นการกำหนดค่า


การปรับแต่ง Software

คุณสามารถทำการปรับแต่ง Package ที่ Install ไว้ได้ โดยใช้ส่วนของ "Add/Remove Software" โดยคลิกที่เมนู "System > Administration >Add/Remove Software"














SELinux

- ถ้าใน OS นี้จะมีการใช้งาน Oracle Installation ควรจะทำการ Disable ในส่วนของ Secure Linux (SELinux) เพื่อให้ทำงานได้ง่ายขึ้น โดยเข้าไปที่เมนู "System > Administration > SELinux Management" ที่แท็บ Status ให้เลือก "System Default Enforcing Mode" เป็น "Disabled"














- กดเมนู "File > Quit" เพื่อทำการออกจากหน้าจอ จากนั้นให้ Restart เครื่องเป็นอันเสร็จสิ้น


Firewall

- ถ้าใน OS นี้จะมีการใช้งาน Oracle Installation ควรจะทำการ Disable ในส่วนของ Firewall เพื่อให้ทำงานได้ง่ายขึ้น โดยเข้าไปที่ เมนู "System >Administration > Firewall" จะปรากฏหน้าจอ Firewall Configuration ให้กดปุ่ม "Disable" ที่ Toolbar จากนั้นกด "Apply"
















- จะมีกล่องข้อความเตือน กด "Yes"
















- กดเมนู "File > Quit" เพื่อทำการออกจากหน้าจอ เป็นอันเสร็จสิ้น


SSH

- คุณสามารถทำการ Enable/Disable SSH ได้ โดยใช้ส่วนของ "Services" โดยคลิกที่เมนู "System > Administration > Services" จะพบหน้าจอ "Service Configuration" จากนั้นให้เลือก Service ที่ชื่อ "sshd" แล้วจะสามารถกดปุ่ม "Enable/Disable" และ "Start/Stop/Restart" ได้ตามที่ต้องการ













- กดเมนู "File > Quit" เพื่อทำการออกจากหน้าจอ เป็นอันเสร็จสิ้น
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, December 22, 2009

Profit Magazine ฉบับเดือน February 2010

Profit Magazine ฉบับเดือน February 2010

...วันนี้ ดิฉันได้ Check email ตอนเช้าเหมือนปรกติทุกวัน แล้ว ดิฉันก็ได้รับ Email จากทาง Oracle ซึ่ง Oracle ได้ส่ง Profit Magazine - February 2010 มาให้ ดิฉันก็เลยอยากจะเอามาโพสไว้ เผื่อเพื่อนๆคนไหนสนใจอ่านกันนะคะ ^^

...ถ้ายังอ่านกันไม่จุใจ อยากสูบเก็บไว้ในเครื่อง ก็สามารถ Download ได้จากด้านล่างเลยค่ะ

หรือว่า ถ้าอยากได้รับข่าวสารดีๆ จาก Oracle ฟรี เหมือนดิฉัน ก็สามารถสมัครเองได้ง่ายๆ เลยตาม Link ข้างล่างนี้เหมือนกันค่ะ
Oracle Magazine - สมัครวันนี้เพื่อรับ Oracle Magazine ส่งตรงถึงบ้านคุณ, ฟรี!!
Profit Magazine - Profit Magazine หนังสือดีๆ แจกฟรีๆ จาก Oracle

ข้อเขียนนี้ช่วยฉัน:  

Friday, December 18, 2009

ปัญหาเกี่ยวกับการ Convert ค่าของ Type Double

....เมื่อวานได้ไปแก้ Bug ที่ไซท์งานมาครับ

หลังจากลองไล่ๆโปรแกรมดูก็พบ Bug ใน Code (Java) ส่วนที่เกี่ยวกับการเซตค่าลงใน Statement

เมื่อทำการรันโปรแกรมแล้วพบ Error นี้

"Exception occured during BigDecimal conversion."

และ

"Caused by Overflow occured during numeric data type conversion of "1000000000000000000.00" "

ทำให้คาดเดาได้ว่าน่าจะเกี่ยวกับเรื่องของการแปลงค่าครับ

เมื่อ ลองดูข้อมูลแล้วพบว่า Field ที่ชื่อ Payment Amount นั้นมีบาง Record ที่มีค่า "99999999999999999999.00" หรือ เลข 9 จำนวน 20 หลักนั่นเอง

ทำให้โปรแกรมไปตายที่บรรทัดนี้ครับ
stmt.setDouble(15, Double.parseDouble(newCredit[index].getPaymentAmount()));

คาดว่าน่าจะเกี่ยวกับ Type ของข้อมูล จึงทำการเปลี่ยน Type การเซตค่าจาก Double ให้เป็น BigDecimal ดังนี้ครับ
stmt.setBigDecimal(15, new BigDecimal(newCredit[index].getPaymentAmount()));

ผลก็คือโปรแกรมสามารถรันได้โดยไม่ติด Error อะไรเลยครับ ^^


อ้อ!! ลืมบอกไปนิดนึงว่าต้องทำใส่ import java.math.BigDecimal; ไว้ด้วยนะครับ

ถ้าคราวหน้าพบปัญหาอะไรแล้วแก้ไขได้ ก็จะมาเล่าสู่กันฟังอีกนะครับ เผื่อเป็นประโยชน์ต่อหลายๆคนที่เข้ามาอ่าน :P
ข้อเขียนนี้ช่วยฉัน:  

Thursday, December 17, 2009

JFreeChart มาทำ Chart ด้วย Java อย่างง่ายๆกัน

JFreeChart เป็น Java Library ตัวหนึ่งที่ทำให้การสร้าง Chart ด้วย Java ไม่ใช่เรื่องยากอีกต่อไป โดย JFreeChart สามารถทำ Chart ได้หลายรูปแบบ สามารถนำไปใช้ทั้งด้าน Server-side หรือ Client-side ได้ทั้งสองแบบ โดยรองรับ Output หลายแบบทั้ง Png , Jpeg , Pdf , Eps , Svg เป็นต้น โดย JFreeChart เป็น Open Source สามารถนำไปใช้ได้ฟรีโดยอยู่บน License แบบ GNU LGPL (อนุญาติให้ใช้ใน Application ที่ขายได้)

JFreeChart-Oracleinth

คุณสามารถ Download ไปใช้กันได้ฟรีครับโดยมันจำเป็นต้องใช้ JCommon ซึ่งเป็น Library ที่ฟรีของ Jfree.org เหมือนกันครับ แล้วยังต้องมี JDK 1.3 ขึ้นไป โดยผมมี JFreeChart 0.9.1 Developer Guide ให้ไปอ่านกันฟรีๆครับ (ก่อนที่มันจะหายไป) อันนี้คือ Code ตัวอย่างลองนำไป Compile ดูนะครับ

ปล. อย่าลืมนำ JCommon , JFreeChart เข้าไปใน Library ของ Java ก่อนนะครับ
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, December 15, 2009

จำนวน datafile ที่สามารถสร้างได้ บน Oracle ดาต้าเบส

ผู้ดูแลจะไม่พบปัญหา จนต้องตอบคำถามเกี่ยวกับจำนวน datafile บนดาต้าเบสที่ไม่ใหญ่มากนัก
แต่หากดาต้าเบสมีขนาดใหญ่ จนต้องใช้จำนวน tablespace มากๆ มันเริ่มจะมีคำถามกลับมาที่จำนวนของ datafile ที่จะสร้างได้ในดาต้าเบส

ผู้ดูแลดาต้าเบสสามารถที่จะหาจำนวนของ datafile ที่จะสามารถสร้างบนดาต้าเบส ได้จาก DB_FILES พารามิเตอร์
SQL> show parameter db_files

NAME TYPE VALUE
----------------------
db_files integer 200
จากตัวอย่าง สามารถสร้าง datafile ได้ที่ 200 ไฟล์
แต่ทั้งนี้ต้องขึ้นกัน Operation System (การจำกัดจำนวนไฟล์บน OS) ด้วย... ซึ่งจะเจอได้น้อยมาก

หากมีการสร้าง datafile ที่มากกว่าค่า db_files พารามิเตอร์ แน่นอนจะทำให้ผู้ดูแลรู้จัก ORA Error มากขึ้นอีกตัว
SQL> create tablespace a01 datafile '+DATA1' size 20M;
create tablespace a01 datafile '+DATA1' size 20M
*
ERROR at line 1:
ORA-00059: maximum number of DB_FILES exceeded
อย่างไรก็ตาม ผู้ดูแลสามารถที่จะเพิ่มค่า DB_FILES พารามิเตอร์
แต่ต้อง restart ดาต้าเบส...
ในเคสที่ใช้ Oracle RAC ผู้ดูแลต้อง shutdown ทุก node (shutdown ดาต้าเบส นั่นเอง... ไม่สามารถ restart ทีละnode)

ค่า db_files เท่าไหร่... ถึงจะเป็นค่าที่เหมาะสม
นั่น เป็นสิ่งที่ผู้ดูแลต้องคิดและตอบโจทย์ เพราะมันผูกกับการจำกัดจำนวนไฟล์บน OS... แล้วยังใช้ SGA memory ในการเก็บข้อมูล datafile ด้วย

หลายคนที่ใช้ Oracle ดาต้าเบส คงมีคำถามว่า... แล้ว MAXDATAFILES บน controlfile ??? ...ยังมีผลเกี่ยวข้องหรือไม่
แน่ นอน! ถ้าคุณใช้ Oracle 8i หรือสูงกว่า ค่า MAXDATAFILES บน controlfile จะการขยายโดยอัตโนมัติ... เมื่อมีการเพิ่มจำนวน datafile เกินค่า MAXDATAFILES แต่น้อยกว่าหรือเท่ากับค่า db_files (metalink: 331067.1)

ตัวอย่างการเพิ่ม db_files พารามิเตอร์ (เมื่อใช้ spfile)
SQL> show parameter db_files

NAME TYPE VALUE
----------------------
db_files integer 200
SQL> alter system set set db_files=500 scope=spfile;
SQL> shutdown immediate
SQL> startup
SQL> show parameter db_files

NAME TYPE VALUE
----------------------
db_files integer 500
การเปลี่ยนค่า db_files ไม่ใช่ปัญหา ถ้าระบบสามารถหยุดการใช้งาน
สิ่งที่ยากยิ่งกว่า คือการกำหนดค่า ว่าในเวลาหนึ่งปี หรือสองปี ต้องใช้จำนวน datafile เท่าไหร่

Credit by surachart
ข้อเขียนนี้ช่วยฉัน:  

Saturday, December 12, 2009

Unit Test ด้วย JUnit

JUnit ประเด่นเรื่องการ Test ในหมู่ Programmer อาจจะเป็นเรื่องที่ชอบบ้างไม่ชอบบ้าง แต่ในการทำงานให้มีประสิทธิภาพนั้นก็ขาดการ Test ไม่ได้จริงๆนั้นและ Java มี JUnit ที่จะช่วยให้ชีวิตการ Test ของ Programmer ง่ายขึ้นในการทำ Unit Test โดนส่วนใหญ่ JUnit จะถูกใช้รวมกับ Eclipse เพื่อทำการ Test

JUnit

โดยการ Test นี้สามารถ Test ได้ทั้งการ Test Suite , Test Method ฯลฯ โดยผมมีข้อมูลที่หาได้จาก Google ดีๆเข้าใจง่ายอยู่ที่หนึ่งคือ ที่นี้ โดยส่วนตัวแล้วปกติ ถ้าเราจะ Test Method สัก Method หนึ่งเราก็ต้องทำการ New Class ส่งค่านู้นค่านี้ เพิ่มเข้าไปแล้วถ้ามี Method สัก 20 Method เราจะต้องทำแบบนี้ทั้ง 20 ครั้งหรอ ?

JUnit จะมาเติมเต็มการ Test ในส่วนนี้นะครับ ลอง Download ไปใช้ได้เลยที่นี้ ส่วนอันนี้เป็น Sourcecode Opensource ที่แจกฟรีใน SourceForge.net ของหนังสือ JUnit in Action นะครับ ;) หวังว่าคงมีประโยชน์นะครับ
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, December 9, 2009

การลดขนาด oracle database segment ออนไลน์

ตั้งแต่ oracle 10g เราสามารถออนไลน์ลดขนาด segment เพื่อให้ได้พื้นที่ว่าง หรือการ shrink space นั่นเอง ซึ่งแน่นอน ส่งผลให้เกิดประสิทธิภาพกับการเก็บข้อมูล พร้อมกันนี้ยังช่วยลด High Water Mark (HWM) อย่างไรก็ตาม วิธีนี้ใช้ได้กับ tablespace ที่เป็น Locally Manage และ Automatic Segment Space Management (ASSM)

การลดขนาด(shrink) segment สามารถทำได้ทั้ง TABLE และ INDEX แต่อย่างไรก็ตามเราต้อง enable row movement บน TABLE เสียก่อน

การ enable/disable row movement คำสั่งนี้สามารถทำให้ package/procedure/function/... ที่ผูกกับ table นี้ invalid ได้ แต่เมื่อมีการเรียกใช้ package/procedure/function/... มันจะ valid อีกครั้ง
SQL> create table temp (id number);

Table created.

SQL> alter table temp shrink space;
alter table temp shrink space
*
ERROR at line 1:
ORA-10636: ROW MOVEMENT is not enabled

SQL> alter table temp enable row movement;

Table altered.

SQL> alter table temp shrink space;

Table altered.
การใช้คำสั่ง shrink เพื่อลดขนาด segment นั้น...
ALTER TABLE...SHRINK ช่วยบีบขนาดพื้นที่ของข้อมูล และลด HWM, ถ้า SHRINK SPACE COMPACT ช่วยบีบอัดข้อมูล แต่ HWM ไม่ได้เปลี่ยนแปลง, แต่... ถ้าเรา SPACE CASCADE มันจะกระทำกับ object ที่เกี่ยวข้องด้วย

การ shrink นี้ แน่นอนสามารถใช้กับ table, index (b-tree,bit-mapped) และ object บางปรเภท
เราสามารถหาข้อมูลได้จาก Oracle Document

อีกประเด็นเกี่ยวกับการ shrink ในระหว่างที่เรา shrink, ROWID อาจจะมีการเปลี่ยนแปลงเมื่อเราย้ายข้อมูล ระหว่าง block ดังนั้นก็แน่นอนอีกนั่นแหละว่า เราไม่สามารถ shrink กับ materialized view ที่ใช้ rowid และเราต้อง enable row movement

อะไรที่เราต้องกังวลเมื่อทำการลดขนาด segment ด้วยวิธีนี้, การ lock ข้อมุลในระหว่างที่กระทำการ shrink นั้นจะเป็นในระดับ row หรือ กับข้อมูลใน block ที่ถูกย้าย แน่นอนมันให้ lock บน DML ที่เป็น update/delete... และ ในขณะที่ HWM มีการปรับเปลี่ยนจะส่งผลให้เกิด lock ในระดับ exclusive จนปรับเปลี่ยนสำเร็จ
สำหรับ index ไม่มีผลกระทบ (ไม่ทำให้ unusable)

ในบางขณะเวลา เราอาจจำเป็นที่จะต้องแบ่งงานออก เป็นสองขั้นตอน โดยการ SHRINK SPACE COMPACT จากนั้น SHRINK SPACE ตามทีหลัง
SQL> alter table temp shrink space compact;

Table altered.

SQL> alter table temp shrink space;

Table altered.
การหาพื้นที่ว่างกับ TABLE บางครั้งเราคิดถึง ALTER TABLE...MOVE
แต่... ถ้าใช้ tablespace ที่เป็น ASSM ลอง ALTER TABLE...SHRINK มันอาจจะช่วยได้

Credit by surachart
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, December 8, 2009

Oracle Database Backup and Recovery Concept

เมื่อต้นเดือนที่ผ่านมาได้รับโจทย์ให้ไปดูแล Oracle Database ที่ไซต์ของลูกค้า และสิ่งที่ขาดไม่ได้ในการดูแล database นั่นคือเรื่องของการ backup database เลยใช้เวลาหาเรื่องเกี่ยวกับการ backup ซักระยะแล้วก็เริ่มหงุดหงิดกับบทความภาษาไทยที่บอกไม่ละเอียดเลย มีบอกนั่นนิดมีบอกนี่หน่อย พอกันทีครับไป otn ดีกว่า มือใหม่อย่างผมก็นั่งงมอยู่ซักพักก็เริ่มจับหลักได้

ผมจึงตั้งใจจะเขียนเรื่องการ backup database โดยแบ่งออกมาได้เป็น 3 ตอน
1. Oracle Database Backup & Recovery Concept
2. Oracle Database Backup (RMAN)
3. Oracle Database Recovery


แล้วจะค่อยๆทยอยเขียนให้อ่านเรื่อยๆถ้ายังไม่เบื่อกันก่อน ok เข้าเรื่องเลย
สำหรับตอนนี้เป็นตอนแรกผมอยากให้เข้าใจ concept ของการทำ backup & recovery database กันก่อนให้เข้าใจก่อนว่า failure สามารถเกิดได้ในเหตุการณ์ไหนบ้าง

Backup และ Recovery จะเกี่ยวข้องกับยุทธวิธีและขั้นตอนการป้องกันข้อมูลไม่ให้สูญหายและคืนสภาพให้กับ database เมื่อข้อมูลเสียหาย
Backup คือการ copy ข้อมูลจาก database เพื่อนำมาใช้สร้าง database เมื่อ database มีข้อมูลเสียหาย แบ่งได้เป็น 2 ประเภท
  • Physical backup คือการ backup ข้อมูลจาก physical file เช่น data file, control file, archive redo log file วิธีการ backup มี 2 วิธี
    • Manual Backup คือการเราเข้าไป copy physical database file แต่ต้องทำขณะที่ shutdown database อยู่
    • Recovery Manager (RMAN) เป็น utility ที่ Oracle ทำขึ้นมาเพื่อทำหน้าที่ backup restore and recovery โดยเฉพาะสามารถทำได้ขณะที่ database กำลัง online อยู่
  • Logical backup คือการ backup พวกข้อมูลที่เป็น Logical เช่น Tables, stored procedures ซึ่งอาจใช้ Oracle export utilit
Physical backup เป็นรากฐานของการ backup ส่วน Logical backup ทำเพื่อช่วย support physical backup เพราะมันไม่สามารถกู้ Oracle database ส่วนที่เสียหายกลับคืนมาได้ทั้งหมด เช่นถ้า control file เสียหาย Logical backup ไม่สามารถกู้คืนกลับมาได้เนื่องจาก Logical มันเป็นแค่ข้อมูลที่ backup มาจาก data file

เป้าหมายของการทำ backup
Mean Time Between Failure (MTBF) หมายถึงเพิ่มเวลาเมื่อเกิด database failure แต่ User ยังสามารถทำงานต่อไปได้โดยไม่รู้สึกว่า database failure
Mean Time To Recover (MTTR) คือการใช้เวลาให้น้อยที่สุดในการ recovery database
ป้องกันไม่ให้เกิด Database Failure
เมื่อ Recovery กลับมาแล้วข้อมูลควรเสียหายน้อยที่สุด และต้องใช้งานได้เหมือนเดิม

Database Failure ที่อาจเกิดขึ้นได้
Statement Failure สาเหตุเกิดจาก
syntax ไม่ถูกต้อง
application logic failure
User ไม่มีสิทธิ์ส่งคำสั่งนั้น
User ใช้พื้นที่ tablespace เกิน quota ที่กำหนด ถ้าเกิดปัญหาในข้อนี้สามารถแก้ได้โดยให้ dba เพิ่ม quota ให้ user แต่เราสามารถดักให้ error ที่เกิดขึ้นนี้หน่วงเวลาออกไปได้โดยเข้าไปกำหนดใน parameter RESUMABLE_TIME=xxx (วินาที) ซึ่งในระหว่างนี้ให้ dba เข้าไปเพิ่ม quota ให้กับ user ที่เกิดปัญหาหลังจากนั้น statement ที่ error นั้นสามารถทำงานต่อไปได้
failure ประเภทนี้ที่ไม่ต้องมี backup และไม่ต้องทำ recovery เพราะไม่มีผลกระทบอะไรกับ database Oracle สามารถจัดการกับปัญหาที่เกิดขึ้นทั้งหมดได้

User Process Failure สาเหตุเกิดจาก
User ที่ disconnect database แบบผิดปกติ เช่น user ทำ transaction ต่างๆอยู่แล้วยังไม่ commit เกิดข้อผิดพลาดขึ้นใน application ทำให้ application ต้องหยุดการทำงานไปทำให้ user ออกจาก database แบบผิดปกติ
ซึ่งถ้าเกิดความผิดปกติประเภทนี้ เราจะรู้ได้ทันทีจาก background process Process Moniter (PMON) โดยสิ่งที่ Oracle จะแก้ไขปัญหานี้คือ Oracle จะ rollback transaction ที่ทำค้างของ User คนนั้น และปลดล็อคคืนให้กับระบบ failure ประเภทนี้ไม่ต้องมี backup และไม่ต้องทำ recovery

Network Failure สาเหตุเกิดจาก
Listener Fails เมื่อเกิดเหตุการณ์นี้ client จะไม่สามารถเข้ามาใช้งาน Oracle Database ได้เลย เป็น failure ที่เล็กน้อยแต่เป็นปัญหาใหญ่ การป้องกันไม่ให้เกิด failure ประเภทนี้คือ สร้างเส้นทางสำรองให้กับ listener ทำโดยสร้าง listener process อีก 1 ตัว แล้วเลือก option connection fail over เป็น advance option จากนั้นเราต้องทำให้ client รู้จัก listener รู้จักกับเส้นทางสำรองผ่าน listener โดยการ config tnsname.ora
ระบบ network fails
ปัญหาอย่างนี้ไม่เกี่ยวข้องกับข้อมูลของ database เลยไม่ต้องมี backup ไว้

User Error สาเหตุเกิดจาก
ความผิดพลาดจาก user เอง เช่นการลบ table ผิดซึ่งพบได้บ่อยมาก ใน Oracle Database 10g จึงได้เพิ่ม feature ใหม่เข้ามาคือ flashback ซึ่งสามารถเอา table ที่ถูกลบไปแล้วกลับมาได้ด้วย user คนนั้นเอง แต่ก็ต้องดูด้วยว่าข้อมูลที่จะ flashback กลับมานั้นยังอยู่ใน undo table หรือไม่
ตัวอย่างการใช้คำสั่ง flashback
SQL> DROP Table hr.job_history;
Table dropped.
SQL> FLASHBACK TABLE hr.job_history TO BEFORE DROP;
Flashback complete.
ตารางที่ลบไปแล้วจะถูกเปลี่ยนชื่อโดยขึ้นต้นว่า bin ถ้าเราต้องลบ table ที่อยู่ใน recycle bin คำสั่ง PURGE
ตัวอย่างการใช้คำสั่ง purge
SQL> purge recyclebin ; อันนี้ลบทั้งหมด
SQL> purge table ... ;
SQL> purge index ... ;
Failure ประเภทนี้อาจต้องใช้ backup เพื่อทำ recovery เพราะว่าถ้าใช้ คำสั่ง PURGE จะทำให้ table ที่อยู่ใน recycle bin จะถูกลบไปถาวร

Media Failure อาจเกิดขึ้นกับ disk ที่ไม่ว่ากรณีใดๆ เมื่อเกิดขึ้นแล้วต้องมี backup และต้องทำ recovery ให้กับ database

Instance Failure สาเหตุอาจเกิดจาก
ไฟดับ
Hardware failure
Background processes Failure
Emergency shutdown เช่นการส่งคำสั่ง shutdown ABORT และ start FORCE
Failure ประเภทนี้ต้องมี backup เพื่อเอาไว้ recovery Failure ประเภทนี้ Oracle สามารถตรวจเจอได้เอง
การที่ Instance Failure มีโอกาสสูงที่จะทำให้ข้อมูลไม่ synchonize กันเพราะเมื่อมีการส่งคำสั่ง update เข้ามามีผลทำให้ข้อมูลมีการเปลี่ยนแปลง ข้อมูลที่เปลี่ยนแปลงจะถูกเก็บลงใน redo log buffer แล้วเมื่อ user ส่ง commit เข้ามาข้อมูลที่เปลี่ยนแปลงจึงถูกเขียนลงใน redo log file แต่ยังไม่เขียนข้อมูลที่เปลี่ยนแปลงลงใน data file มันจะรอจนถึงกระบรวนการ checkpoint ให้ background process Database Writer (DBWR) เขียนข้อมูลลง data file ให้เป็นข้อมูลเดียวกันระหว่าง redo log file กับ data file ข้อมูลทั้งสอง file จึง synchonize กัน แต่ถ้าระหว่างนี้ เกิดเหตุการณ์ที่ทำให้เกิด Instace Failure ทำให้ข้อมูลที่ถูกเปลี่ยนแปลงล่าสุดจริงๆอยู่ที่ redo log file แต่ Oracle สามารถตรวจจับความผิดปกติตรงนี้ได้และแก้ไขให้เราแต่ต้องอาศัยให้ dba startup database ให้

ขั้นตอนการทำงานของ Instance Recovery
ข้อมูลตัวสำคัญที่บอกว่าข้อมูล synchonize กันหรือไม่นั่นค่าของ SCN (System Change Number) ค่า SCN จะบอกว่า ณ ตอนนี้ข้อมูลมีการเปลี่ยนแปลงไปครั้งที่เท่าไหร่แล้ว SCN จะเกิดขึ้นทุกครั้งที่มีการ commit Database จะสร้างเลข SCN ขึ้นมา 1 ตัวและบวกเพิ่มขึ้นไปเรื่อยๆ แล้วเก็บลงใน data file, control file, redo log group
ตัวอย่าง Instance Failure


ใน redo log group กับ control file ค่า SCN ล่าสุดคือ 143 แต่ data file ค่า SCN ล่าสุดคือ 140 จะเห็นว่าค่าตอนนี้ไม่ synchonize กัน ซึ่ง background process ที่จะมา stamp ให้ค่า SCN ตรงกันคือ background process Check Point (CKPT) เมื่อมา stamp แล้วเห็นว่าค่า SCN ไม่ตรงกันก็บอกให้รู้แล้วว่า Instance Failure จึงต้องทำ Instance Recovery จากนั้นจะไปเรียกให้ SMON ให้ทำงาน โดย SMON จะทำอยู่ 2 operation นั่นคือ Row forward กับ transaction ที่ commit แล้วคือเอาข้อมูลที่อยู่ใน redo log file ไป update ใน datafile ให้แล้ว, Row backward กับ transaction นั้นถูก rollback หรือถูก force ให้ rollback คือไปเอาข้อมูลใน undo data มาใส่ใน table เหมือนเดิม


การทำ Instance จะต้องมีจุดเริ่มทำซึ่งจะเกี่ยวข้องกับ checkpoint คือเริ่มทำในตำแหน่งที่ยังไม่ถูกทำ check point เป็นต้นมา จะเห็นว่า checkpoint ถี่ก็มีข้อดีคือ recvoery เร็วขึ้น แต่ก็ทำให้ performance ตกลงเช่นกันเมื่อทำ checkpoint การจะดูว่าควร checkpoint ถี่แค่ไหนให้ดูจาก MTTR

Mean Time To Recovery (MTTR) ระยะเวลาในการทำ recovery
เราสามารถเข้าไปกำหนดได้ว่าเมื่อมีการ recovery ให้ใช้เวลาเท่าไหร่ ถ้าเข้าไปดูที่ OEM จะมีบอกรายละเอียดด้วยว่าถ้ามีการ recovery ต้องใช้เวลาประมาณเท่าไหร่ หรือเราเข้าไปกำหนดได้ใน Parameter FAST_START_MTTR_TARGET ถ้าเรากำหนดค่าน้อยจะมีผลทำให้ checkpoint บ่อยขึ้น แต่ถ้าใส่ค่ามากจะมีผลทำให้ checkpoint นานขึ้น ซึ่งค่ามากที่สุดคือ 3600 วินาที (1 ชั่วโมง) ค่า default คือ 0 (disable) ซึ่งตรงนี้ถ้าเป็น disable Oracle จะเข้าไปดู paramter ตัวอื่นที่เกี่ยวข้องด้วยคือ LOG_CHECKPOINT_TIMEOUT (วินาที)

การวางแผนเรื่องการ backup
  • ควรมีตารางการ backup เช่น ทุกๆวัน, ทุกๆวันพุธ, ทุกเดือน ซึ่งตรงนี้จะถี่แค่ไหนขึ้นอยู่กับ data ว่ามีการเปลี่ยนแปลงบ่อยแค่ไหน
  • ควรทำ Multiplex Control Files ถ้าไม่มี control files Instance Database จะ statup ไม่ขึ้น
  • ควรทำ Multiplex Redo log groups
  • Production System ควร run อยู่ใน ArchivedLog mode เพื่อป้องกัน loss data
  • สร้าง redundancy ให้กับระบบของเราด้วยการใช้ RAID-based เพื่อให้ระบบสามารถทำงานต่อไปได้เมื่อ disk failure และแถมยังเป็นการการรันตีว่าข้อมูลจะไม่สูญหายไปเมื่อ disk failure
  • ทำการ backup เป็นประจำเพื่อเมื่อถึงเวลาที่ต้องทำการ recovery จะได้กลับไปจุดที่ทำการ backup ครั้งล่าสุดได้ไม่ไกลจากช่วงเวลาปัจจุบันนัก
  • รักษาอุปกรณ์เก็บข้อมูล และมั่นทดสอบว่าข้อมูลที่เก็บอยู่สามารถใช้งานได้จริง
  • run noarchivelog mode เมื่อคุณแน่ใจว่าระบบมีเวลา downtime
  • หลังจากมีการเปลี่ยนแปลงโครงสร้างของ database ควรมีการ backup control file อยู่เสมอ
  • ควรมีการ backup ลงใน tape และ tape ก็ควร backup อีกเช่นกัน
  • ควรมี 2 copies ของ archived redo logs อันนึงเก็บไว้ใน disk และอีกอันเก็บไว้ในอุปกรณ์เก็บข้อมูลอย่างอื่น เพื่อที่ว่าเมื่อมีปัญหาจะได้ดึง archived redo log ที่อยู่ใน disk มาใช้งานได้อย่างรวดเร็วหรือถ้ามีปัญหาอีกก็ดึงจากอุปกรณ์เก็บข้อมูลภายนอก
  • ไฟล์ที่เราควร backup ได้แก่ data files, log files, control files, spfile หรือ init.ora, sqlnet.ora, tnsnames.ora, listener.ora และ password file
  • เก็บมี copy backup อันเก่าไว้ด้วย เผื่อที่ว่า backup ปัจจุบันใช้งานไม่ได้ขึ้นมา(ซึ่งมีโอกาสเป็นไปได้)
  • script backup ควรมีเก็บ log file ได้ด้วยเผื่อมี error เกิดขึ้นระหว่างการ backup จะได้รู้
  • แต่ละ application ควรมีการใช้งานแยก tablespace กันเพื่อที่ว่าถ้า tablespace ใดมีปัญหาเกิดขึ้น application อื่นๆยังคงใช้งานได้ต่อ
  • ใช้ snapshot technology เพื่อเก็บ system backup เพราะว่ามัน backup ได้อย่างรวดเร็วกับ database ขนาดใหญ่
  • ใช้ data pump export utility เพื่อช่วยในการสนับสนุนการ backup
Control Files
เป็น file ควบคุมเก็บสถานะการทำงานของ database โดยสิ่งที่ Control File เก็บเช่น mode การทำงานของ database, เก็บ physical structure เช่นว่า data file กี่ตัวอยู่ path อะไรที่ไหนบ้าง
Control File จะถูกอ่านเมื่อ startup database MOUNT mode แต่ยังไม่ตรวจสอบความถูกต้องของ control file ซึ่งถ้าไม่มี control file จะ startup database ได้แค่ NOMOUNT mode ดังนั้น Oracle จึงแนะนำว่าควรทำ Multiplex Control files ทั้งหมด 3 file และแต่ละตัวควรอยู่คนละ disk กัน ซึ่งตรงนี้ถ้าใช้ DBCA เป็นตัว create database จะสร้าง control file ให้ทั้งหมด 3 file

การทำ Multiplex Control Files ต้องทำ 2 ขั้นตอนคือ
  • ทำในระดับ Database เข้าไปแก้ไข parameter CONTROL_FILE (static parameter) ต้อง shutdown ก่อนจึงจะเห็นผล
    ex. CONTROL_FILES=’’,’’
  • ทำในระดับ OS เริ่มแรกให้ shutdown database ก่อนจากนั้นเข้าไป copy control file ที่ใช้งานอยู่ปัจจุบัน แล้วไปวางใน path ที่ระบุไว้ใน parameter แล้วเปลี่ยนชื่อให้ตรงกับค่าใน paramter ด้วย จากนั้น startup database แล้วเข้าตรวจสอบความถูกต้อง โดยดูได้จาก view V$CONTROLFILE
  • ข้อดีของการทำ Multiplex Control Files คือถ้ามี Control File ตัวใดตัวหนึ่งเสียหายไปอีกตัวสามารถทำงานแทนกันได้โดย Database จะไปอ่าน Control File ที่ยังใช้งานได้อยู่จาก paramter CONTROL_FILES
Redo Log Files
เป็น file ที่เก็บข้อมูลที่เปลี่ยนแปลง โดยจะมี background process log writer (LGWR) ทำหน้าที่เขียน redo log file ให้ก่อนที่จะเขียนลงใน redo log file จะมี memory ตัวนึงที่เก็บข้อมูลที่เปลี่ยนแปลงอยู่เรียกว่า redo log buffer และจะเขียนลงใน redo log เมื่อมีคำสั่ง commit หรือเหตุการณ์อื่นๆ
โครงสร้างของ redo log จะเป็น group ในแต่ละ group จะมี redo log file เป็น member ถ้าใช้ DBCA เป็นตัว create database จะสร้าง redo log group ให้ 3 group และ redo log file ให้ group ละ 1 file ซึ่งเป็นค่า default ของ DBCA แต่อย่างนี้ยังไม่เป็น Multiplex redo log file จะเป็น Multiplex redo log file ก็ต่อเมื่อในแต่ละ redo log group มีมากกว่า 1 redo log file และถ้าให้ดีแต่ละ member ควรจะแยกอยู่กันคนละ disk
ข้อดีของการทำ Multiplex Redo Log File คือ ถ้า member ใดใน group นั้นเสียหายไป Database ก็ยังทำงานได้อยู่เพราะยังมี member อีกตัวทำงานแทนกันได้ และถ้าให้ดี member ที่อยู่ใน group
Note: ถ้าใช้ DBCA สร้าง database จะมี mulitplex control file แต่ไม่มี multiplex redo log file

Archived Log Files
เป็น file ที่เก็บ copy ของ redo log file ก่อนที่ LGWR จะเขียนทับลงใน redo log file path ที่เก็บ archive log file โดย default จะเก็บอยู่ที่ตำแหน่งเดียวกับ flash recovery area ดูได้จาก parameter DB_RECOVERY_FILE_DEST ตำแหน่งที่ 10
เราสามารถกำหนด path ของ archive log file เพิ่มเติมได้ นอกจากจะเก็บลงใน default path ยังสามารถกำหนดได้เองอีก 9 path จาก parameter LOG_ARCHIVE_DEST_<1-10>=""เท่ากับเป็นการ copy archive log file เพิ่มขึ้นเหมือนเป็นการ backup ซึ่งกันและกัน วิธีนี้จะมีประโยชน์ในกรณีที่ archive log file default ใช้งานไม่ได้ database จะย้ายไปใช้อีก path ให้
โดย default archive log file จะมีก็ต่อเมื่อเรา enable archivelog mode แต่ค่า default จะเป็น disable

การตรวจว่า database ขณะนี้ run อยู่ใน mode อะไร
SQL> select archiver from v$instance;
--ถ้าค่าคือ STARTED=archivedlog mode หรือ STOPPED=noarchivedlog mode
หรือ
SQL> select name, log_mode FROM v$database;
หรือ
SQL>ARCHIVE LOG LIST; --ถ้าอยู่ใน archivedlog mode จะแสดงรายละเอียดออกมา
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 18
Next log sequence to archive 20
Current log sequence 20

การเปลี่ยน mode database ให้เป็น archivelog mode หรือ noarchivelog mode
SQL > shutdown
SQL > startup mount
SQL > ALTER DATABASE [ARCHIVELOG | NOARCHIVELOG]
SQL > ALTER DATABASE OPEN;

ถ้าสงสัยตรงไหนหรืออยากให้เพิ่มตรงไหนบอกได้ครับ
สำหรับตอนนี้ขอจบไว้เพียงแค่นี้ครับ ตอนหน้าเทคนิคเน้นๆทำ backup ให้เห็นกันจะๆครับ

บทความที่เกี่ยวข้อง

Credit by tofu
ข้อเขียนนี้ช่วยฉัน:  

Thursday, December 3, 2009

วิธีทำ Oracle performance tuning

ขั้นตอนการทำ Oracle Performance Tuning

สำหรับการทำ Performance Tuning นั้น Oracle นำเสนอวิธีการปรับแต่งในลักษณะของ Top-down ซึ่งจะเริ่มต้นจากขั้นตอนที่กว้างมากๆ ก่อน แล้วจึงค่อยพิจารณาเฉพาะจุด ในขั้นตอนถัดๆ ไป การทำ Oracle Performance Tuning นั้นค่อนข้างซับซ้อน แม้ว่าจะมีขั้นตอนในการทำ Performance tuning ทั้วไปอยู่ แต่มันก็ไม่ได้ง่ายอย่างนั้นเสมอไป ลองมาดูขั้นตอนสำหรับการทำ Oracle Performance Tuning เพื่อให้เข้าใจกันมากขึ้น

Scope of Oracle Tuning

Top-Down tuning model

เราสามารถทำการ Tuning ได้ในหลายขั้นตอน โดยในแต่ละขั้นตอนจะพิจารณาเฉพาะส่วนตามเป้าหมายของขั้นตอนนั้นๆ
สำหรับขั้นตอนในการทำ Oracle Performance Tuning สามารถแบ่งได้เป็น 4 ขั้นตอน ดังนี้ :

1. Server & Network Tuning - ขั้นตอนนี้จะป็นขั้นตอนแรกในการ Tuning เสมอ เป็นการปรับแต่งที่ง่ายที่สุด และกระทบกับผู้ใช้งาน และผู้พัฒนาระบบ น้อยที่สุดอีกด้วย การปรับแต่งในขั้นตอนนี้ มักเกี่ยวข้องกับ Hardware เช่นการเพิ่ม RAM เป็นต้น และมันกระทำการโดย System Admin อย่างไรก็ดี การปรับแต่งในขั้นนี้ ไม่สามารถช่วยได้สำหรับ Server ที่มี environment ที่แย่อยู่แล้ว

2. Instance Tuning - ขั้นตอนต่อไปคือการ Tuning Oracle SGA เป็นขั้นตอนที่เกี่ยวข้องกับการปรับแต่งพารามิเตอร์ของฐานข้อมูล โดยอาศัยข้อมูลจากสถิติต่างๆ ที่ฐานข้อมูลได้มีการเก็บข้อมูลไว้ เป็นการทำที่ระดับ Database ซึ่งการปรับแต่งในส่วนนี้จะไม่กระทบกับนักพัฒนาระบบ และมักกระทำการโดย Database Admin โดยพารามิเตอร์ทั้งหมดจะถูกตรวจสอบเพื่อให้มั่นใจว่าฐานข้อมูลได้ถูกกำหนดค่าอย่างเหมาะสมสำหรับการใช้งานแล้ว ในบางกรณีฐานข้อมูลอาจมีการใช้งานใน 2 รูปแบบ (bi-modal workload) คือ online และ batch ดังนั้นแล้ว ค่าพารามิเตอร์ต่างๆ จะถูกปรับแต่งเพื่อให้เกิดการใช้งานที่เหมาะสมในขั้นตอนนี้

3. Object Tuning - ขั้นตอนนี้ เป็นการ Tuning โดยพิจารณาจากการตั้งค่าต่างๆ ของ Object เช่น การตั้งค่า PCTFREE, PCTUSED และ FREELISTS ใน Table และ Index สามารถส่งผลกระทบต่อประสิทธิภาพการทำงานของ Oracle ได้ด้วย การปรับแต่งในขั้นตอนนี้จะไม่กระทบกับนักพัฒนาระบบ และมักกระทำการโดย Database Admin

4. SQL Tuning - ขั้นตอนนี้เป็นขั้นตอนสุดท้ายในการทำ Tuning และเป็นขั้นตอนที่ใช้เวลามากที่สุดในการทำ Tuning อีกด้วย เนื่องจาก SQL statements ที่เข้ามาใช้งานระบบฐานข้อมูลนั้นมีจำนวนมาก ทำให้เราไม่สามารถทราบได้ว่า Statement ใดที่ต้องการการปรับแต่ง ซึ่งถ้าเรามีการปรับแต่งระบบเพื่อเพิ่มประสิทธิภาพการทำงานตามขั้นตอนที่ 2 แล้วนั้น เราก็เพียงปรับแต่ง "outlier" SQL Statement หรือก็คือ Statement ที่มีประสิทธิภาพการทำงานแย่กว่า Statement อื่นมากๆ เท่านั้นก็เพียงพอ โดยขั้นตอนนี้ จะกระทบกับนักพัฒนาระบบโดยตรง เนื่องจากเป็นการปรับแต่งรูปแบบของ Statement และมักจะกระทำโดย นักพัฒนาระบบเอง ในขั้นตอน SQL Tuning นี้ ยังมีขั้นตอนย่อยๆอยู่อีก 4 ขั้นตอนดังต่อไปนี้
  • Remove unnecessary large-table full-table scans - สำหรับ Table ที่มีขนาดใหญ่นั้น การทำ Full-Table Scan อาจเป็นสาเหตุที่ทำให้ประสิทธิภาพการทำงานของระบบลดลงได้ การเพิ่ม Index ที่จำเป็น ไม่ว่าจะเป็น B-Tree, Bitmapped หรือ Funtcion-Based index สามารถลดการเกิด Full-table scan ลงได้ และยังช่วยเพิ่มประสิทธิภาพให้กับการทำงานในระบบของเราได้อีกด้วย แต่ทั้งนี้ จะต้องพิจารณาเพิ่ม Index ให้ถูกต้องเหมาะสมกับการใช้งานนั่นเอง
  • Cache small-table full-table scans - ในส่วนนี้จะขึ้นกับขนาดของ Database Buffer Cache ซึ่งควรมีขนาดที่พอเหมาะเพื่อให้เรามั่นใจได้ว่า สามารถที่จะ Cache ข้อมูลตามจำนวน Rows ที่เรามีการเรียกใช้ได้
  • Verify optimal index usage - การใช้ Index เองก็ควรพิจารณาถึงจำนวนของ Index และความเหมาะสมในการใช้งานอีกด้วย ทั้งนี้ อาจมีบาง Index ที่ถูกสร้างขึ้นมา แต่ไม่เคยถูกเรียกใช้งานเลย และในทางกลับกัน อาจมีบาง Index ที่หายไปจากระบบ หรือไม่เคยถูกสร้างขึ้นมาเลย ทั้งที่มีความจำเป็นต่อการใช้งาน ซึ่งอาจทำให้ I/O มีการทำงานมากเกินความจำเป็น ก็เป็นได้ นอกจากนี้ การเขียน Statement เอง ก็ต้องพิจารณาถึง การเรียกใช้ Index ด้วย โดยอาจมีการใช้ Hint เพื่อบังคับให้มีการเรียกใช้ Index หรือการเรียงลำดับของ Where Cluase ให้ถูกต้อง เพื่อให้มั่นใจว่า Index จะถูกเรียกใช้อย่างแน่นอน
  • Materialize your aggregations and summaries for static tables - เป็น feature หนึ่งของฐานข้อมูล Oracle เหมาะสำหรับ Summary ข้อมูล โดย Materialize View นั้น จะทำหน้าที่ในการ Summary ข้อมูลเบื้องต้น ตามเงื่อนไขของระบบ เช่น ข้อมูลยอดขาย รายวัน รายสัปดาห์ หรือรายเดือน ขึ้นกับการนำไปใช้ หากแต่มีข้อจำกัด กล่าวคือ Materialize View นั้น ไม่เหมาะสำหรับการใช้เป็น Transaction Table เนื่องจาก ต้องอาศัยการ Refresh ข้อมูล เมื่อ Table หลักที่อ้างอิงถึงมีการเปลี่ยนแปลง แต่อย่างไรก็ดี หากพิจารณาเลือกใช้ให้เหมาะสมกับงานแล้วนั้น จะช่วยเพิ่มประสิทธิภาพให้กับระบบได้เป็นอย่างดี

นี่เป็นแค่การอธิบายในภาพกว้างๆของการทำ Oracle Performance Tuning เท่านั้น ถ้าใครอยากได้รายละเอียดในการทำ Tuning มากกว่านี้ ขอแนะนำหนังสือเล่มนี้เลย "Oracle Tuning
The Definitive Reference"


Credit by Cherry

อ้างอิง
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, December 2, 2009

ความแตกต่างระหว่าง Default , Public , Private , Protected ใน Java (J2SE)

ในส่วนของ Java ถ้าไม่พูดถึง Access Modifier เลยก็คงไม่ได้นะครับ จะว่าเป็นพระเอกของ Encapsulation กับ Information Hiding เลยทีเดียว วิธีใช้ Access Modifier สำหรับทั้ง 4 อย่างนี้ก็สามารถใช้ได้ตั้งแต่
  • class
  • local variable
  • global variable
  • method
  • constructor
ความแตกต่างของ Access Modifier ทั้ง 4 อันนี้ผมจะอธิบายแบบง่ายๆตามที่ผมได้เรียนมานะครับ

public หรือสาธารณะเมื่อเราประกาศแบบนี้แล้ว class อื่นสามารถเข้าถึง class , variable หรือ method นี้ได้โดยอิสระ

private หรือส่วนตัวเมื่อเราใช้การประกาศแบบนี้แล้ว class อื่นๆจะไม่สามารถเข้าถึงได้เลยและถึงแม้จะทำการ inheritance ก็ไม่สามารถเข้าถึง variable , method ได้ (แต่ส่วนใหญ่ variable จะเข้าถึงได้ผ่านทาง method ถ้า inheritance มาแล้วมีการทำ get set)

protected หรือเก็บไว้ให้ลูกดังนั้นตัวแม่ ไม่สามารถใช้งานในส่วนนี้ได้ ผู้เรียกใช้ก็ไม่สามารถใช้งานได้ ยกเว้นแต่ทำการ inheritance มันแล้วเรียกจากตัวลูกจะถูกสามารถเรียกใช้งานได้

สุดท้าย default (หรือปกติที่ไม่ต้องเติมอะไรเลย) จะสามารถถูกเข้าถึงได้เกือบเหมือน public แต่จะต่างตรงที่จะสามารถถูกเข้าถึงได้จาก package เดียวกันเท่านั้น

โดยในการทำ Encapsulation และ Information Hiding ทุก Access Modifier 4 ตัวนี้มีความสำคัญในการออกแบบมากโดยวันนี้ผมก็ทิ้งท้ายด้วยตาราง Modifier-Element : Matrix in Java


Credit by DominixZ
ข้อเขียนนี้ช่วยฉัน:  

Tuesday, December 1, 2009

iText จะจัดการ PDF ด้วย Java ง่ายๆนี้ไง

iText เป็น library สำหรับสร้าง PDF โดยจุดประสงค์จริงๆของ iText คือการที่ทำให้ Developer ที่พัฒนา Web Application หรือ application ต่างๆนั้นได้สร้าง file PDF ในรูปแบบ Dynamic ซึ่งทำให้การปรับเปลี่ยนแก้ไข เป็นได้ง่ายขึ้น iText ไม่ใช่สำหรับ end-user แล้วคงไม่ได้เอาไว้ใช้บน Desktop เพราะใช้ Arcrobat ซึ่งง่ายกว่าแต่กระนั้นการใช้ iText จะทำเกิดการ update file PDF นั้นอย่างอัตโนมัติได้โดยที่เราไม่ต้องแก้ไขเองเลยก็ทำได้ โดยเราสามารถใช้ iText ทำได้ดังนี้
  • ส่ง PDF ขึ้น Web Browser ได้
  • สร้าง Dynamic Content จาก XML หรือ Database
  • ใช้ PDF กับ Feature ต่างๆได้มากมาย
  • เพิ่ม bookmarks , เลขหน้า , ลายน้ำ etc. ได้
  • แยก , รวม , จัดการ หน้า PDF ได้
  • จัดการเติม PDF Form ได้
  • ทำ Digital Signature กับ PDF ได้
  • และอื่นๆ
iText นั้นยังมี Tutorial ที่ดูแล้วเข้าใจง่ายลองไปดูกันเลยที่นี้ http://itextdocs.lowagie.com/tutorial/ สำหรับคนใช้ JAVA โดยเฉพาะลองไปใช้ดูกันนะครับ

Download Page

Credit by DominixZ
ข้อเขียนนี้ช่วยฉัน: