Tuesday 27 November 2007

http://www.expobadge.com/dldev/dc/alldemogroundslist.cfm?

[ถามต้อม#3] Hit rate ของ database นี่มันคืออะไร? มีผลอะไรกับ database บ้าง?

ถามโดย คุณ Anonymous
รบกวนสอบถามค่ะ คือสงสัยว่า hit rate ของ database นี่มันคืออะไรเหรอคะมีผลอะไรกับ DB บ้างรบกวนท่านผู้รู้หน่อยค่ะ

ตอบ
โดยหลักการทำงานของ Oracle Database นั้น จะมีส่วนที่เรียกว่า Database Buffer Cache โดยส่วนนี้จะทำหน้าที่ Cache เหล่า Data Block ที่ถูก Query ไว้ ซึ่งทุกครั้งที่มีการ Query ข้อมูลต่าง ๆ Oracle ก็จะทำการค้นหาที่ Buffer Cache ก่อน และแสดงผลทันทีเมื่อพบ Data Block ที่ต้องการ (cache hit) ทำให้การค้นหาข้อมูลเร็วขึ้น และช่วยลดการอ่าน Disk โดยตรงอีกด้วย

อย่างไรก็ดี ถ้า Query แล้วไม่เจอ Data Block ที่ต้องการใน Buffer Cache (cache miss) ตัว Oracle ก็จะทำการค้นหาใน Disk แล้ว Copy Data Block ดังกล่าวมาเก็บไว้ที่ Cache ทีนี้จะเก็บได้มากน้อยแค่ไหน ก็ขึ้นกับขนาดของ Cache ที่กำหนด ถ้า Cache เต็ม Oracle ก็จะทำการ move block ที่มีการใช้งานน้อยที่สุด ออกไปก่อน (LRU)

อย่างไรก็ดี Cache ที่มีขนาดใหญ่ไม่ได้ช่วยให้ Performance ของ Database ดีขึ้นเสมอไป การกำหนดขนาดของ Cache ให้เหมาะสมจะช่วยเพิ่ม Performance ของ Database ได้ โดยอาศัยการ monitor ค่า Hit Rate หรือที่ Oracle เรียกว่า Buffer Cache Hit Ratio ซึ่งเป็นการหาอัตราส่วนของ ความถี่ที่ cache hit ต่อด้วยจำนวน total request

ถ้าค่า Buffer Cache Hit Ratio มีค่ามาก แสดงถึงว่ามีการเข้าถึงข้อมูลผ่านทาง Buffer Cache มากกว่าการ read จาก disk โดยตรง อย่างไรก็ดี การ tuning database นั้น ขึ้นกับองค์ประกอบหลายส่วน การ tuning โดยไม่คำนึงถึงส่วนประกอบอื่นๆ อาจส่งผลให้ Performance ของ Database แย่ลงได้ค่ะ

(ถามต้อมคืออะไร?)

Wednesday 21 November 2007

http://www.internetnews.com/breakingnews/article.php/3711466

Oracle Database Recovery

ถัดจากตอนที่แล้ว เรื่องในตอนนี้จะเกี่ยวกับการ Database Recovery เมื่อเกิด Database Files ทั้งหลายเสียหายเราต้องมีวิธีแก้ไข ซึ่งตรงนี้ได้แบ่งการแก้ปัญหาแต่ละ file ดังนี้

Control File เสียหาย

เมื่อ Control File เสียหายจะทำให้ startup database ไม่ขึ้น ถ้าเราพยายาม startup database ถึงแค่ nomount mode ตัวอย่าง ถ้ามี control file 03 เสียหาย
    จะมีวิธีแก้อยู่ 2 วิธี
  • ให้ oracle มาใช้งานแค่ control file 01, 02 แทน โดยแก้ parameter CONTROL_FILES=’…’, ‘…’ ใหม่ให้อ่าน Control file แค่ 2 ตัวที่ใช้งานได้
  • สร้าง control file แทนที่ตัวที่เสียหาย Shutdown database ก่อน แล้วเข้าไปที่ path control file ที่ใช้งานได้แล้ว copy control file ไปวางไว้ใน path control file ที่เสียหาย จากนั้น rename ให้ชื่อเหมือน control file ตัวที่เสียหาย แล้ว startup database ตามปกติก็ใช้งานได้เหมือนเดิม
แต่ในกรณีที่ Control File ทุกตัวเสียหายเราสามารถแก้ไขได้โดยนำ backup control file to trace ที่เป็น option ตอน backup มาใช้งาน ซึ่ง trace เก็บเป็น sql command เราจึงนำมา run ได้เลย โดยไป run ที่ nomount mode การทำ Backup Control File to Trace
NOTE: เมื่อ database มีปัญหาเราควรเข้าไปดู alert log ของ database ซึ่ง path จะถูกกำหนดที่ parameter BACKGROUND_DUMP_DEST (default path: /admin//bdump/alertlog)

Redo Log File เสียหาย

ถ้าใน 1 group มี 2 member แล้วเสียหายไป 1 member database ยังทานได้โดยไม่ส่งผลกระทบอะไรยัง startup database ได้เหมือนเดิม ซึ่งจะไม่เหมือนกับ control file ที่จะ startup database ไม่ได้ ส่วน DBA จะรู้ก่อนต่อเมื่อเข้าไปดูใน alert log
วิธีแก้เมื่อ redo log file เสียหาย ให้ shutdown database จากนั้นเข้าไป copy redo log file ที่ใช้งานได้แล้วนำไปวางใน path ของ redo log file ที่เสียหายแล้ว rename ให้ชื่อเหมือนเดิม

Data File เสียหาย

    ถ้า data file เสียหายจะแบ่งออกได้เป็น 2 แบบคือ

  • Noarchivedlog mode แก้ปัญหาโดย shutdown database ก่อนจากนั้น เอา backup มา restore แต่ข้อมูลที่ได้กลับมาจะเป็นข้อมูลที่ backup ครั้งล่าสุดเอาไว้
  • Archivedlog mode การแก้ต้องทำ 2 ขั้นตอนคือ restore + recovery แบ่งออกเป็น 2 ประเภท

    • 1. Noncritical data file ก็ต่อเมื่อ data file ที่เสียหายนั้นไม่ได้เป็นของ Tablespace system, undo สำหรับเครื่อง production เราต้องทำให้ database กลับมา open ให้ได้ก่อนเพื่อให้ใช้งาน tablespace อื่นที่ไม่เสียหายไปก่อน โดยการ
    • Startup database mount mode
    • ALTER DATABASE DATAFILE <หมายเลข datafile ที่เสียหาย> offline;
    • ALTER DATABASE OPEN;
    • ในระหว่างที่จะเอา backup มาลงควร offline tablespace ก่อน
    • ALTER tablespace <ชื่อ tablespace> offline
    • RMAN sys/oracle (อีก session)
    • RESTORE TABLESPACE <ชื่อ tablespace> ที่จะทำการ resotre); ลองดูใน database physical path น่าจะกลับมาแล้ว
    • RECOVER TABLESPACE <ชื่อ tablespace> online
    • ALTER DATABASE DATAFILE <หมายเลข datafile ที่เสียหาย> online;

      2. Critical data file การแก้ปัญหาต้องทำที่ mount mode เท่านั้น เพราะ tablespace system, undo offline ไม่ได้ จึงไม่สามารถแก้ไขให้ database open เริ่มแก้ไขโดยการ
    • Shutdown database
    • Startup mount
    • RMAN sys/oracle
    • RESTORE TABLESPACE <…>
    • RECOVER TABLESPACE <…>
    • ALTER DATABASE OPEN;

Tuesday 20 November 2007

[ถามต้อม#2] Oracle จะเก็บ log การทำงานของ database ไว้ที่ไหนคะ?

ถามโดย คุณ Anonymous
มีเรื่องรบกวนถามเกี่ยวกับการเก็บ Event Log ของ oracle น่ะคะ
ที่หน่วยงานใช้ oracle ในการเก็บข้อมูลทางด้าน GIS
ซึ่งบ่อยครั้งที่ application ทำงานช้ามาก user บ่นเยอะ
จึงแจ้งไปทางเจ้าของ application ซึ่งเค้าก็มาดูแล้วบอกว่าเป็นที่ database
มี redo log ของ database มันไม่ทำงาน ซึ่งเค้าบอกว่าไปดูจาก log ของ database
มันฟ้องว่า redo log ไม่ทำงาน ถามเค้าว่าดูได้จากไหน เค้าก็ไม่ยอมตอบ
เลยอยากทราบว่าโดยปกติแล้ว oracle จะเก็บ log การทำงานของ database ไว้ที่ไหนคะ
เครื่องเป็นเครื่อง SUN คะ
รบกวนด้วยนะคะ
ขอบคุณมากคะ

ตอบ
ปกติแล้ว Oracle จะมี Alert log ที่ไว้เก็บรายละเอียดการทำงานของ Database ค่ะ
ซึ่งส่วนมากจะเก็บไว้ที่
Path ==> $ORACLE_HOME/admin/bdump
โดยจะมีชื่อไฟล์ว่า alert_[SID].log
ส่วนประเด็นเรื่อง redo log ไม่ทำงาน ขอยังไม่ตอบนะคะ ข้อมูลที่มียังน้อยไป
ไว้ดู log ตาม path ที่ให้ไป ค่อยว่ากันอีกทีค่ะ

(ถามต้อมคืออะไร?)

Presentation ของ OpenWorld ครั้งล่าสุด เปิดให้ download แล้ว

มาแล้วครับ, presentation files ของงาน Oracle OpenWorld สัปดาห์ที่ผ่านมา (11 - 15 November 2007) เปิดให้ download แล้วครับ
มีรายการให้ download ได้ทั้งสิ้นเฉียดพันรายการ ซึ่งนำมาจาก power point ของบรรดา speaker ร่วม 1769 session

จะมีถาม username/password ด้วยครับ, ใช้ account ตามนี้เลยครับ cboracle/oraclec6

เหมาะสำหรับใคร?

  • คนที่ทำงานอยู่ในวงการ Oracle, แน่นอนครับทั้ง technical และ บรรดา presales ต้องไม่พลาด
  • ลูกค้าที่ได้ซื้อ products Oracle, เพื่อดูว่าแนวโน้มของ products ที่ใช้อยู่เป็นอย่างไร
  • คู่แข่ง Oracle, เพื่อดู potential ของ competitors
  • บรรดา Geeks ทั้งหลาย ที่อยากจะดู trends ของ IT
นี่คือ Focus Area ทั้งหมดครับ

Monday 19 November 2007

ภาษา Programming Language ตัวไหนนิยมที่สุด?

วันนี้เรามี chart เกี่ยวกับความฮอตฮิตของภาษาสำหรับ programming มาฝากกันซึ่งไปเจอมาจากเว็บนี้ครับ http://www.langpop.com/ โดยเว็บนี้จะแบ่งออกเป็นเป็นด้านต่างๆ แล้วจึงค่อยมีมาสรุปรวมกันในตอนท้ายว่าใครเป็นภาษาที่ฮิตอย่างแท้จริง ซึ่งถ้าให้เปรียบละก็คงจะเหมือนกับอันดับเพลงของแต่ละคลื่นวิทยุย่อมมีอันดับที่ไม่เหมือนกัน เอาหละโม้มามากแล้วไปดูอันดับแต่ละคลื่นดังนี้

- แบ่งตาม index ของ search engine โดย search engine ที่ใช้นี้เป็นของ yahoo ซึ่งได้ผลตามกราฟดังนี้
สังเกตุว่าภาษา C นี้เค้ายังคงแรงอยู่แม้ว่าจะจะป็นภาษาที่เก่าแก่มีอายุมากแล้วแต่ว่ายังคงมีความเก๋าอยู่ตามติดๆด้วยภาษา Java และ PHP แต่ไม่น่าเชื่อว่า Visual Basic นี้ไม่ติดหนึ่งในสามเลย แต่คงมีคนอาจจะสงสัยว่าทำไมเราถึงไม่ใช้ google ในการ search หละนั้นก็เพราะว่าอันดับของ programming language เก่าที่ทางเว็บ langpop เค้าทำนั้นใช้ google ในการค้นหาดังนั้นเพื่อเกิดความยุติธรรมเค้าจึงใช้ yahoo ในครั้งนี้ สามารถติดตามผลอันดับเก่าๆเก่าได้ที่นี่ http://www.welton.it/articles/language_popularity.html แต่ที่ผมว่ามันเป็นผลอัน “เก่าๆ” นั้นก็เพราะว่ามันเก่าจริงๆเพราะว่าทำมาตั้งแต่ปี 2004 แหนะแต่ว่าสำหรับผลอันดับครั้งนี้เป็นอันล่าสุดครับอัพเดทเมื่อ วันที่ 8 ของเดือนนี้ที่ผ่านมานี้เองครับ

- แบ่งตาม ความต้องการภาษาต่างๆที่กำลังรับสมัครงาน โดยในการจัดอันดับนี้เอามาจาก Craigs List ครับซึ่งข้อมูลตรงนี้น่าเชื่อถือมากครับแต่อาจจะไม่ทั่วโลกครับแต่เน้นหนักไปทางข้อมูลของ America มากกว่าครับซึ่งผลปรากฎออกมาว่าSQL มาแรงแซงเป็นที่ 1 ซะงั้นส่วน C นั้นก็ตกไปอยู่ที่สองแต่ว่า Java หลุดไปไกลเลยอยู่ที่ 4 ส่วน Visual Basic หลุดไปไกลเลยอยู่อันดับที่ 9 ที่ SQL มาเป็นที่หนึ่งน่าจะเป็นเพราะว่าอาจจะต้องการ SQL developer มาทำงานเพื่อเตรียมข้อมูลเพื่อจะมาทำ BI ซึ่งในไทยที่ในตามธนาคารต่างๆ ก็มี SQL developer เพื่อดึงข้อมูลมาเพื่อเตรียมไว้สำหรับส่งแบงค์ชาติ ดังนั้นจึงไม่น่าแปลกใจว่า SQL Developer นั้นเป็นที่ต้องการมากในอเมริกา

- แบ่งตามหนังสือที่มีอยู่ใน amazon คราวนี้มาลุ้นกันต่อว่าภาษาใดจะครองอันดับหนึ่ง ซึ่งอันดับหนึ่งได้แก่
คราวนี้หนังสือของภาษา C มีมากที่สุดตามมาด้วย Java และ Visual Basic ตามมาติดๆ

- แบ่งตาม open source projects โดยเราจะใช้เว็บ Freshmeat เป็นตัวจัดอันดับซึ่งสามารถเข้าไปดูข้อมูลได้ที่นี่ http://freshmeat.net/browse/160 ซึ่งคราวนี้ C ก็ครองอันดับหนึ่งอีก (โหดูท่าภาษา C นี้จะครองบัลลังค์แชมป์นะนี่) และตามด้วยอันดับอื่นๆดัง chartแต่ไม่ยักกะรู้ว่า VB มี project ที่เป็น open source projects

- คราวนี้แบ่งตาม code ที่มี example code อยู่ใน googlecode โดยสามารถเข้าไปเล่นเจ้าตัว googlecode ได้ดังนี้ http://www.google.com/codesearch
อันนี้อาจะเชื่อไม่ค่อยได้เท่าไรเพราะว่า code ที่มีอยู่ใน googlecode นั้นยังน้อยอยู่

- คราวนี้แบ่งตาม Social Bookmark ซึ่ง Social Bookmark ที่จะใช้นี้เป็นที่รู้จักกันดีคือ Del.icio.us นั่นเองโดยจะได้ผลยังไงนั้นดูตาม chart เลย
โดย chart นี้น่าจะเป็นกลางมากที่สุดนั้นก็ เพราะว่าถ้าใครชอบอะไรภาษาไหน หรือเจออะไรที่เกี่ยวข้องกับภาษาที่ชอบ ก็จะเก็บ bookmark ตามความชอบของตนเองแต่ถ้าซึ่งถ้าสิ่งไหนไม่ชอบคงจะไม่ book mark ไว้ซึ่งผลก็ออกมาว่า JavaScript ครองที่หนึ่ง PHP ตามมาที่สองและ Java ตามมาลำดับส่วน VB อันดับเกือบโหล่ๆ

ผลสรุป
จาก ทุกๆ chart ที่เห็นจะได้ว่าภาษาที่ได้รับความนิยมสูงสุดนั้นก็คือ C แต่ก็ต้องยอมให้เค้าจริงๆเพราะว่าได้อันดับหนึ่งเกือบทุก chart รองลงมาก็เป็น Java และที่สามก็เป็นภาษายอดนิยมของคนทำเว็บ PHP ดังจะเห็นได้จากสรุปดัง chart ด้านล่าง
ไม่รู้ว่าจะตรงใจทุกๆ คนหรือเปล่าแต่ที่ผมรู้แน่ๆ C ยังไม่ตาย

ฺBusiness Activity Monitoring (BAM) On SOA

ฺBusiness Activity Monitoring (BAM)
เทคนิคที่ BAM(Business Activity Monitoring) ใช้ในการ monitoring ข้อมูลที่วิ่งอยู่บน SOA architecture ให้สามารถดูข้อมูลได้เกือบ real time นั่นคือการใช้วิธีที่เรียกว่า "Sensors" ซึ่งจะมาแทนการใช้ query event ด้วย sql statement แบบเก่า
ที่ใช้ resource จำนวนมาก และทำให้เิกิดปัญหา buttom nect ตามมา
BAM ถูกออกแบบมาเพื่อให้สามารถ analytics และ reporting ใกล้เคียง real-time มากที่สุด
BAM มีองค์ประกอบอยู่ด้วยกัน หก ส่วน ดังนี้
- Data Integration
- Data Caching
- Analytics
- Monitoring
- Alerting
- Reporting
ไว้โอกาสหน้าเราจะมาพูดถึง องค์ประกอบแต่ละส่วนของ BAM กันต่อนะึครับ

วิธีการเรียกใช้ EJB บน Websphrere Application Server

โดยปกติทั่วไปเวลาเรา call ejb จะใช้ตามตัวอย่าง เช่น
1 Context ic = new InitialContext();
2 Object o = ic.lookup("sample/User1LocalHome"); // sample/User1LocalHome คือ ชื่อ JNDI ejb
......................................

แต่เมื่อผมลองกับ Websphere Server 6.0 แล้วปรากฎว่าจะขึ้น error NameException ซึ่งหมายถึงการหา naming ของ
ejb ไม่พบ
ดังนั้นผมจึงเปลี่ยนมาใช้โค๊ดดังนี้ครับ
1 Context ic = new InitialContext();
2 Object o = ic.lookup("local:ejb/sample/User1LocalHome"); // โดยการเติม local:ejb ไว้ข้างหน้า JNDI ของ ejb
ผมก้อสามารถ เรียกใช้ ejb ที่ผมต้องการโดยไม่เกิดปัญหาในการหาชื่อ JNDI ไม่พบ อีกเลย

Friday 16 November 2007

[ถามต้อม#1] วิธีแก้ปัญหา OUI Error: "Java RunTime Environment was not found" ระหว่างการติดตั้ง Oracle

ถาม
สวัสดีครับขอรบกวนถามเรื่องการ install oracle database 11g นะครับ

พอดีลงแล้วมีการแจ้ง error ดังรูปครับhttp://i22.photobucket.com/albums/b332/toncrub/error.jpg

ในเครื่องผมลง jdk6 update3 ไว้แล้วครับเลยงงๆ ไม่รู้ว่าต้องแก้ตรงไหน


ตอบ

ปัญหานี้เป็นได้กับแทบทุก products ของ Oracle ครับ

ไม่จำเป็นว่าจะเกิดกับ Oracle Database 11g บน Windows เท่านั้น

วิธีแก้ปัญหาอย่างง่าย ๆ ก็ ...

ให้ลอง run command ตามนี้แทนการ double click ที่ file setup.exe ครับ

[ORACLE_INSTALLER_PATH]\setup.exe -ignoreSysPrereqs -jreLoc [J]
C:\oracle\db11106\oui\bin\setup.exe -ignoreSysPrereqs -jreLoc C:\java\jdk1.6.0_02


ให้เปลี่ยน path จาก C:\oracle\db11106\oui\bin\ เป็น pa

Tuesday 13 November 2007

IBM ยื่นซื้อ Cognos ห้าพันล้านเหรียญ US

เมื่อวานนี้ (12 พฤศจิกายน) IBM ยื่นซื้อ Cognos ด้วยราคา 58 เหรียญต่อหุ้น เบ็ดเสร็จเป็นจำนวนเงินทั้งสิ้นเฉียดห้าพันล้านเหรียญ US

ตลาด BI ช่วงนี้ร้อนระอุ

  • 3 เดือนก่อน Oracle ซื้อ Hyperion
  • เดือนที่แล้ว SAP ซื้อ BO
  • เมื่อวานนี้ IBM เสนอซื้อ Cognos
Cognos เป็นที่หมายตาของบริษัทยักษ์ใหญ่หลายเจ้า รวมทั้ง Oracle ด้วย แต่พักหลัง Oracle แผ่วลงไป เพราะได้ซื้อทั้ง Siebel และ Hyperion มาครอบครองแล้ว

รายละเอียดการซื้อขายครั้งนี้ ตามไปดูได้ที่

Monday 12 November 2007

ฐานข้อมูล ออราเคิล 11g (Oracle Database 11g) ออกครบทุก platform ให้ download แล้ว

Oracle Database 11g ออกครบทุก platform แล้วครับ

ตามไป download ได้เลยครับ

คอลัมน์ "ถามต้อม?"

ได้ฤกษ์งามยามดี จับยามสามตา เปิดคอลัมน์ใหม่ใน blog นี้แล้วครับ ชื่อว่าคอลัมน์ "ถามต้อม?"


"ถามต้อม?" คืออะไร?
ตรงไปตรงมา "ถามต้อม?" มาจาก "AskTom" ของ Oracle ครับ
เราเลียนแบบมาอย่างหน้าไม่อาย จาก "Tom" กลายเป็น "ต้อม"
จะตั้งชื่อคอลัมน์ว่า "ถามตอบ" ก็ไม่โดน เอาเป็น "ถามต้อม?" ดีกว่าครับ

แล้วใครคือ "Tom"?
Tom ชื่อเต็ม ๆ ว่า Tom Kyte เป็นกูรูอันดับหนึ่งของ Oracle ครับ
ทำงานกับ Oracle มาร่วม 15 ปี ปัจจุบันดำรงตำแหน่ง Vice President ของ Oracle Core Technolgy Group
และเป็นผู้เขียนคอลัมน์ AskTom ในนิตยสาร Oracle Magazine's และ website AskTom.oracle.com
อีกทั้งยังเป็นผู้เขียนตำราชือว่า "Effective Oracle by Design" ที่ขายดีเป็นเทน้ำเทท่า

แล้วใครคือ "ต้อม"?
"ต้อม" ไม่ใช่ใครอื่นไกล ก็คือบรรดาผู้เขียนของ blog แห่งนี้ครับ
ที่จะมาให้คำตอบตามความถนัดของแต่ละคน
บางครั้งจะเห็นพวกเรา "ถามเองตอบเอง" ก็ไม่ต้องแปลกใจครับ
เพราะชีวิตการทำงานของพวกเรา เจอปัญหากับ Oracle และ Java ตลอดเวลา
ทุกครั้งที่เราติดปัญหาอะไร ก็จะมา post ถามไว้ในนี้เช่นกัน
เพื่อให้นักเขียนท่านอื่น ๆ หรือตัวเราเองในอนาคตมาตอบครับ
ก็ถือว่าเป็นการ share ประสบการณ์ให้ผู้อ่าน blog ไปในตัวด้วย
(ผู้อ่าน blog จะมาช่วยตอบก็ยินดี จากถามต้อม กลายเป็นต้อมถาม ฮา)

ถามอะไร "ต้อม" ได้บ้าง?
คำถามที่เกี่ยวข้องกับ Oracle และ Java ครับ

ทุกคำถามจะได้รับคำตอบหรือไม่?
ไม่ครับ เราจะตอบเฉพาะคำถามที่เราอยากตอบ และตอบได้ครับ

จะถาม "ต้อม" ได้อย่างไร?
สามารถถามได้โดยการ post คำถามไว้ใน comment post ถามต้อม
เราเปิดช่องทางให้ใคร ๆ (anonymous) ก็ถามได้
แต่เราจะกระตือรือร้นกว่า ถ้าผู้ถามแสดงตัวด้วย ว่าเป็นใครมาจากไหน

อีกช่องทางหนึ่งที่สามารถส่งคำถามมาได้ ก็คือทาง email
tom@middleware.co.th
สำหรับกรณีที่มี log file หรือ screenshot

"ถามต้อม?" ถือเป็น forum หรือไม่?
ไม่ครับ คอลัมน์นี้ไม่ใช่ forum ถ้าจะใช้งาน forum ด้าน Oracle และ Java
ให้ไปที่ narisa ครับ มีกูรูเก่ง ๆ หลาย ๆ คนแวะเวียนมาช่วยตอบครับ

Thursday 8 November 2007

Oracle Database Backup with RMAN

เรื่องราวในตอนนี้จะเกี่ยวกับการ Backup Oracle database แบบ physical backup โดยจะใช้ utility ที่ชื่อว่า Recovery Manager (RMAN)

ศัพท์ที่เกี่ยวข้องเกี่ยวกับการ backup

    การ backup มีโดยหลักๆแล้วมี 2 แบบ
  • Backup database ทั้งก้อน
  • Backup แค่เฉพาะบางส่วนของ database เช่น backup เฉพาะบาง tablespace หรือบาง datafile
    ประเภทการ backup
  • Full backup คือทุกครั้งที่ทำการ backup จะสร้าง backup ด้วยข้อมูลใหม่ทั้งหมด
  • Incrememtal backupคือ backup เฉพาะข้อมูลส่วนที่ต่าง ส่วนที่มีการเปลี่ยนแปลง แต่แบบนี้จะต้องมี backup ตัวเก่าอยู่ก่อนด้วยเพื่อเอาไว้เปรียบเทียบว่ามันต่างกันตรงไหน
    Mode การ backup
  • Offline backup อาจเรียกว่า consistent backup คือการ backup ขณะที่ database ไม่ได้ถูกทำงาน
  • Online backup อาจเรียกว่า inconsistent backup หรือ hot backup คือการ backup ขณะที่ database กำลังทำงานอยู่
    Format ของการ backup
  • Image Copies รูปแบบนี้จะเหมือนกับการ copy physical file ระดับ os เช่น data file ต้นฉบับมีขนาดเท่าไหร่ backup ก็จะมีขนาดเท่ากัน ข้อเสียของการ backup ในรูปแบบนี้คือเปลืองเนื้อที่
  • Backup set รูปแบบนี้เป็น format ของ Oracle โดยเฉพาะ Oracle เลือก backup set รุปแบบนี้เป็น default backup set แตกต่างกับ image copies ตรงที่จะ backup เฉพาะ block ที่มีข้อมูลจัดเก็บอยู่เท่านั้น โดย backup set นั้นเราสามารถกำหนดระดับ set ได้ และกำหนดได้อีกว่าจะเก็บลง media ชนิดไหน disk หรือ tape
Recovery Manager (RMAN)
RMAN คือ utility ที่ถูกติดตั้งมาพร้อมกับ Oracle Database มีไว้เพื่อทำหน้าที่ จัดการ backup, restoring และ recovering database โดยสามารถสั่งงานผ่าน Command หรือ OEM ก็ได้

    ศัพท์ที่เกี่ยวข้องกับ RMAN
  • Target Database คือ database เป้าหมายที่เราจะทำการ backup
  • Channel Process คือ ช่องทางที่ RMAN จะติดต่อกับ target database
  • RMAN Repository คือ ที่เก็บข้อมูลของ RMAN โดยจะเก็บรายละเอียดของการ backup ของ instance นั้นๆ ซึ่งโดย default จะเก็บข้อมูลอยู่ control file ของ instance นั้นๆ แต่เราสามารถเปลี่ยนได้โดยการสร้าง database ใหม่ขึ้นมาเพื่อให้เก็บรายละเอียดการ backup แล้วเราอาจกำหนดให้ share ได้นั้นคือถ้ามี database ที่จะ backup หลายตัวก็ใช้ RMAN Repository เดียวกันได้
  • flash recovery area คือตำแหน่งที่ instance นั้นๆ ใช้จัดการกับไฟล์ต่างๆที่เกี่ยวกับการ backup เช่น archive log file โดย default path จะเก็บอยู่ทีนี่ หรือ ไฟล์ที่ได้จากคำสั่ง RMAN
  • Media managent software คืออุปกรณ์ต่างๆที่ใช้เพื่อ backup ข้อมูล เช่น tape drives การจะใช้อุปกรณ์ภายนอกต่างๆ วิธีใช้ขึ้นอยู่กับผู้ผลิตเป็นผู้กำหนด
  • Recovery catalog คือ database ที่เก็บ recovery catalog schema ซึ่งจะเก็บ metadata ที่ RMAN ใช้ทำหน้าที่ backup และ recovery
    Parameter ที่ใช้ในการ configure RMAN
  • DB_RECOVERY_FILE_DEST_SIZE ใช้กำหนดขนาดพื้นที่ของ flash_recovery ให้ใช้ได้เท่าไหร่
  • DB_RECOVERY_FILE_DEST ใช้กำหนด path ที่ใช้จัดเก็บ backup set
    View ที่เกี่ยวข้องกับ RMAN
  • V$RECOVERY_FILE_DEST เป็น view ที่บอกดูตำแหน่งของ flash recovery
  • V$FLASH_RECOVERY_AREA_USAGE เป็น view ที่บอกตำแหน่ง file แต่ละประเภทใช้เนื้อที่ไปเท่าไหร่
    Physical File ที่ RMAN สามารถ backup ได้
  • Database file = { data file, control file, spfile }
  • Archived log file
  • ส่วน password file, network configure file (tnsname.ora, listener.ora, sqlnet.ora) ไม่สามารถใช้ RMAN backup ได้ พวกนี้เรา manual backup เองได้
คำสั่ง RMAN เบื้องต้น
Start & Exit RMAN
# RMAN target /[@] [nocatalog | catalogname]
# RMAN
RMAN> EXIT

คำสั่ง run script RMAN จากไฟล์
# RMAN target / @file1
RMAN> @file1

คำสั่งตรวจสอบ syntax RMAN
# RMAN CHECKSYNTAX
# RMAN CHECKSYNTAX @file1

คำสั่งเกี่ยวกับ parameter
RMAN> show ;
RMAN> SHOW ALL;
RMAN> CONFIGURE CLEAR;

คำสั่งเกี่ยวกับการจัดการ device อื่น
ระบุอุปกรณ์ที่จะจัดเก็บ
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO ;
ระบุประเภทของการ backup และจะบีบอัดหรือไม่
RMAN> CONFIGURE DEVICE TYPE BACKUP TYPE TO ;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/backup/ora_df%t_s%s_s%p’;
บาง media managers ต้องปรับแต่งผ่าน parameter แล้วแต่ผู้ผลิตอุปกรณ์นั้น
RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT PARMS=’ENV=mml_env_settings’;

คำสั่งเกี่ยวกับการ backup data file
RMAN> BACKUP DATABASE;
Backup บาง tablespace
RMAN> BACKUP TABLESPACE system, users, tools;
RMAN> BACKUP DEVICE TYPE sbt MAXSIZE=10M TABLESPACE user, tool;
Backup บาง data file
RMAN> BACKUP DEVICE TYPE sbt DATAFILE 1,2,3,4 DATAFILECOPY ‘/tmp/system.dbf’;
RMAN> BACKUP DEVICE TYPE sbt TABLESPACE user INCLUDE CURRENT CONTROLFILE;
RMAN> BACKUP AS BACKUPSET DATAFILE
’ORACLE_HOME/oradata/trgt/users01.dbf’,
’ORACLE_HOME/oradata/trgt/tools01.dbf’;
เราสามารถกำหนดเรื่องของ incremental backup ได้แต่การทำ incremental backup จะต้องเปรียบเสมือน level 1 ดังนั้นก่อนจะทำได้ต้องมี level 0 ก่อน นั่นคือเมื่อเรา backup ครั้งแรกให้กำหนดเป็น level 0 ก่อน แต่เมื่อทำ incremental backup ไฟล์ backup level0 และ 1 ต้องอยู่ครบเพื่อทำให้สามารถทำการ restore และ recovery ได้อย่างสมบูรณ์
RMAN> BACKUP INCREMENTAL LEVEL [0 | 1] CUMULATIVE DATABASE;

คำสั่งเกี่ยวกับ backup control file
เป็นการ config ว่าจะให้ autobackup control file และ parameter file เมื่อมีการเปลี่ยนแปลงหรือไม่ และเมื่อมีความเสียหาย RMAN จะ recover ให้กับ instance นั้นเอง
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ;
เปลี่ยน default name ของ autobackup
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE to ‘?/oradata/cf_%F’;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE clear;
ถ้าต้องการ override ค่า autobackup เฉพาะ session นั้นๆ (ใช้ใน run block กับ RMAN prompt)
RMAN> SET CONFIGURE AUTOBACKUP FORMAT
Backup copy control file ณ ปัจจุบัน
RMAN> BACKUP CURRENT CONTROLFILE;
RMAN> BACKUP CURRENT CONTROLFILE TO ’/backup/curr_cf.copy’;
Backup copy control file
RMAN> BACKUP AS COPY CURRENT CONTROLFILE FORMAT ‘/tmp/control01.ctl’;
RMAN> BACKUP DEVICE TYPE sbt CONTROLFILECOPY ‘/tmp/control01.ctl’;

คำสั่งเกี่ยวกับ backup parameter file
RMAN> BACKUP SPFILE;
RMAN> BACKUP DEVICE TYPE sbt SPFILE;

คำสั่งเกี่ยวกับ backup archived log file
RMAN> BACKUP ARCHIVELOG …;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
RMAN> BACKUP ARCHIVELOG COMPLETION TIME BETWEEN ’SYSDATE-31’ AND ’SYSDATE-7’;

คำสั่ง restore
RMAN> RESTORE DATABASE;
RMAN> RESTORE TABLESPACE users;
RMAN> RESTORE DATAFILE <ชื่อ datafile>;
RMAN> RESTORE DATAFILE 7;

คำสั่ง recovery
RMAN> RECOVER DATABASE;
RMAN> RECOVER TABLESPACE users;
RMAN> RECOVER DATAFILE <ชื่อ datafile>;
RMAN> RECOVER DATAFILE 7;

ตัวอย่างการ backup
Backup Database รวมทั้ง Archivelog file พร้อมให้ delete archive log file ที่ backup แล้วด้วย
# RMAN TARGET backup_admin/backup_admin NOCATALOG
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;

Backup Database รวมทั้ง Control file พร้อมทั้งให้ delete ไฟล์ backup ที่ล้าหลังด้วย
RMAN> backup incremental level 0 cumulative device type disk tag '%TAG' database include current controlfile;
RMAN> allocate channel for maintenance type disk;
RMAN> delete noprompt obsolete device type disk;
RMAN> release channel;

ตัวอย่างการ restore & recovery
Recovering ทั้ง database
RMAN> STARTUP FORCE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;

Recovering เฉพาะบาง tablespace
RMAN> SQL 'ALTER TABLESPACE users OFFLINE';
RMAN> RESTORE TABLESPACE users;
RMAN> RECOVER TABLESPACE users;
RMAN> SQL 'ALTER TABLESPACE users ONLINE';

Recovering Datafiles 7
RMAN> SQL 'ALTER DATABASE DATAFILE 7 OFFLINE';
RMAN> RESTORE DATAFILE 7;
RMAN> RECOVER DATAFILE 7;
RMAN> SQL 'ALTER DATABASE DATAFILE 7 ONLINE';

การทำ Backup Control File to Trace
ทำ Trace ของ Control File เพื่อใช้ในการ recover เมื่อ control file เสียหาย ถ้าใช้ OEM ให้เข้าเมนุ Controlfiles แล้วกดปุ่ม Backup To Trace หรือใช้คำสั่ง
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE; โดยผลลัพธ์จะเก็บอยู่ตามที่ระบุไว้ใน parameter USER_DUMP_DEST
โดย default name: _ora_pid.trc
และ default path: อยู่ที่ <ORACLE_HOME>/admin/<sid>/udump
ภายใน trace ไฟล์จะเก็บเป็นคำสั่ง sql สามารถนำไปสร้างเป็น control file ใหม่ได้
Note: แนะนำว่าเพื่อให้ไม่เกิดความสับสนในการหา file trace ก่อนสั่ง trace เข้าไปลบไฟล์ trace เก่าๆที่เก็บอยู่ก่อนแล้วค่อยสั่ง trace controlfile

เราสามารถทำ Job RMAN โดยใช้ OEM ช่วยทำได้เหมือนกัน แต่เอาไว้ก่อนถ้าไม่ขี้เกียจเดี๋ยวเขียนต่อ แล้วเมื่อวันก่อนลองเล่น Oracle Database 11g เห็นมี feature น่าสนใจอยู่หลายตัวถ้ามีเวลาอยากมา review ให้ดูกัน
ปล1. พยายามสรุปให้ตอนนี้สั้นๆกระชับ ไม่เขียนยาวเหมือนตอนที่แล้ว เขียนยาวเดี๋ยวคนอ่านเหนื่อย คนเขียนก็เหนื่อยเหมือนกันครับ
ปล2. ตอนหน้าลองมาทำ recovery physical database เมื่อมันเสียหายกัน

Tuesday 6 November 2007

Crack password Oracle database ตั้งแต่ 8i ถึง 11g

คงเป็นที่ทราบกันดีว่า password ที่เราเก็บไว้ในฐานข้อมูลเพื่อไว้ใช้ในการทำ authentication (ระบุตัวตน) นั้นในปกติการเก็บ password นั้นเราจะไม่เก็บกันตรง ๆ เช่นเราตั้ง password ว่า siam เวลาเก็บลงใน database จริงแล้วจะไม่เก็บคำว่า siam โดยคำว่า siam นั้นจะถูกแปลงเป็นคำอื่น ๆ โดยจะไม่เหลือเค้าโครงเดิมเลย โดยการแปลงนี้ก็มี algorithm (วิธีการ) ต่าง ๆ มากมายกันไปซึ่งเราจะเรียกวิธีการนี้ว่า การ hash password แต่ว่ามันอาจจะยังไม่เพียงพอ ทำให้บางคนนั้นก็ได้เพิ่ม keyword เข้าไปผสมลงใน password ก่อนจะผ่านกรรมวิธีการ hash password เพื่อให้แก้ไขได้ยากยิ่งขึ้นซึ่งเราเรียก keyword ที่เราไปผสม password นี้ว่า salt (ซึ่งเป็นตัวเดียวกันกับคำว่า เกลือ ครับ ก็เหมือนเวลาที่เรากินอาหารแล้วอยากให้อาหารอร่อยขึ้นเราก็เหยาะเกลือลงไป แต่ในที่นี้เพื่อที่จะทำให้การถอด password ยากขึ้น)

ซึ่งวิธีการนี้อาจะนำไปใช้ร่วมกับข้อมูลที่ป็นความลับ เพื่อทำการเข้ารหัส เพื่อไม่ให้คนอื่นที่สามารถทะลุทะลวงล้วงเข้ามาในฐานข้อมูลของเรา นั้นอ่านข้อมูลนี้ได้ ถึงได้ข้อมูลมาอาจจะต้องมานั่งเสียเวลาในการแก้ algorithm ตัวนี้มากขึ้น แต่ไม่น่าเชื่อว่าเจ้าแห่ง database อย่าง Oracle นั้น password ที่ถูกทำการ hash ไว้แล้วนั้นจะถูกแก้ออกมาได้อย่างง่ายดายและที่สำคัญไม่ใช่มีแค่ tool เดียวเท่านั้นที่สามารถแก้ได้ซึ่งแสดงออกมาดังตารางด้านล่างดังนี้

จะเห็นได้ว่าโปรแกรมที่ชื่อ worrauthbf version 0.2 นั้นใช้เวลาแค่ 3s วินาทีเท่านั้นเอง แต่ว่าที่เร็วกว่านั้นก็เพราะใช้ CPU ประมวลผลแบบ Dualcore แต่ถ้าเป็นแบบที่ไม่ใช่ CPU ที่เป็นแบบ Dualcore หละก็ orabf 0.7.6 จะเร็วกว่าครับ แต่ว่า password ที่ crack ได้เร็วนั้นขึ้นอยู่กับว่าจำนวน password นั้นยาวหรือสั้นมากแค่ไหนด้วยครับ ซึ่งถ้าใครอยากลองว่าจะ crack ได้จริงหรือเปล่าลองไปโหลดโปรแกรมที่เว็บนี้เลยครับ

ซึ่งเจ้าตัวนั้นไม่ห่วง source code ด้วยครับสามารถนำไปศึกษาได้ด้วยครับแต่เสียอย่างเดียวเป็นภาษา C ไม่ใช่ภาษา Java

เอาหละโม้มามากแล้วลงมือทำกันจริงๆ กันดีกว่าเดี๋ยวจะหาว่าผมมาโม้อีกโดน schema ที่ผมจะเอามาลองนั้นคือ schema HR โดยผมจะเปลี่ยน password เป็น “HRACLE” ตัวใหญ่หมดครับและ database ที่ลองคือ Oracle 11g R1 ครับโดยตอนแรกนั้นให้เราไปติดตั้งโปรแกรม worrauthbf version 0.2 ลงในเครื่องก่อนครับหลังจากนั้นก็ไปทำตามขึ้นตอนนี้ครับ
  • เตรียมข้อมูลเพื่อที่จะทำการถอด password ที่ทำการ hash แล้วให้กลับมาเป็น password ปกติโดยให้เรา login เข้าไปใน database ก่อนโดยเราต้องมีสิทธิ์เป็น admin ด้วยนะครับไม่งั้นดึงข้อมูลไม่ได้ โดยเราต้องใช้ข้อมูลตามรูปแบบดังนี้ครับ

    username:password hash:11g password hash:sid:server:

    username :: นั้นเป็นชื่อของ username ที่เราต้องการจะแก้ hash password ครับ
    password hash :: อันนี้คือ password ที่ถูกทำการ hash แล้วครับ
    11g password hash :: ที่นี้ก็คือ salt ที่ผมบอกนั้นเองครับโดย salt ตัวนี้จะไม่ซ้ำกันตามแต่ที่ระบบจะสร้างขึ้นมา
    sid :: คือชื่อของ Oracle database instance เช่น orcl
    server :: นั้นเป็นชื่อของ server ที่ database นั้นอยู่ครับ
    หมายเหตุ ในแต่ละ version ของ database นั้นอาจจะต้องการ parameter ที่แตกต่างกันเพื่อที่จะใช้เป็นข้อมูลที่จะทำการแก้ hash password ครับโดย salt นี้ Oracle เพิ่งจะมาเริ่มมีใน Oracle database 11g ครับ

    แต่ว่าโชคดีครับที่เราไม่ต้องไปหา parameter เหล่านี้เองให้เราใช้คำสั่ง sql นี้ครับแต่ต้องอย่าลืมว่าต้อง login เป็น username ที่มีสิทธิ์เป็น admin ครับ ดังนี้

    select u.name||':'||u.password||':'||substr(u.spare4,3,63)||':'||d.name||':'||
    sys_context('USERENV','SERVER_HOST')||':'
    from sys.user$ u, sys.V_$DATABASE d
    where u.type#=1;

    ซึ่งเมื่อ run ใน database ที่ผมทดสอบผลที่ได้คือ

    HR:E313D0596944C41D:6E7036A1EB587DCCE6D84DFF73E6F80207BB8F980B5643D01AE23F747FAC:ORCL:vista:

  • หลังจากนั้นก็จะใช้ command prompt run โปรแกรมเพื่อที่จะทำการ crack hash password ตามขั้นตอนนี้ครับ

      เข้าไปใน home directory ที่เราติดตั้ง worrauthbf version 0.2 ไว้
      run คำสั่ง woraauthbf แล้วตามด้วย parameter ต่างๆ ดังนี้
        -p :: คือชื่อ file ที่เก็บข้อมูลที่เราเตรียมไว้ข้างต้นซึ่งในที่นี้คือ 11gHash.txt
        -t :: ในที่นี้คือเป็นการระบุว่า hash password ที่เราต้องต้องการแก้นั้นเป็น version อะไรในที่นี้ให้ระบุว่า 11g10g
        -c :: เป็นการระบุว่า password ที่เราจะแก้ hash password นั้นมี character ชนิดใดบ้างซึ่งแบ่งได้เป็น สามชนิดคือ
          "alpha" คือ [A-Z]
          "alphanum" คือ [A-Z0-9]
          "all" คือ [A-Z0-9!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/]

          ซึ่งให้เราเลือกว่าทดลองตามความเหมาะสมครับถ้าสมมติเรารู้ว่า password เรามีแค่ตัวอักษรและตัวอักษรปนกันก็ให้เลือก alphanum ส่วนในที่นี้เรารู้อยู่แล้วว่า password ของเรามีตัวอักษรอย่างเดียวก็เลือก alpha ครับ

        -m :: เป็นการระบุว่า password ของเรานั้นยาวเท่าไรครับ
        -d :: นั้นเป็นการระบุ dictionary file ครับซึ่งจะระบุหรือไม่ระบุก็ได้แต่ถ้าเราระบุมาก็จะทำให้แก้ hash password ได้เร็วขึ้นมากแต่ในที่นี้ผมไม่ใส่นะครับ

        ที่จริง parameter นั้นมากกว่านี้อีกซึ่งถ้าใครสนใจก็ลองข้าไปดูที่เว็บนี้ครับ

        http://soonerorlater.hu/index.khtml?article_id=513

เอาหละที่นี้เราลองมาดูผลลัพธ์กันเลย


หมายเหตุ คือผมลองแก้ hash password หลายตัวพร้อมกันครับผลที่ได้กว่าจะแก้ได้แต่ละตัวช้ามากครับ

สรุป

ถ้าไม่มี dictionary file ช้ามากถึงมากที่สุด

ใช้กับ password ที่เป็นตัวใหญ่ได้อย่างเดียวนั้นก็คือถ้าเป็น 11g แล้วตั้ง password case sensitive หละก็จะแก้ไม่ได้ดังนั้นถึงจะบอกว่ารองรับ 11g แต่ก็ไม่เต็มร้อยครับต้องรอ version ใหม่ดีกว่า

ความยาวของ password รองรับแค่ 10 ตัวอักษรเท่านั้นถือว่าน้อยมากซึ่งตอนนี้มีตัว crack hash password ของ database Oracle ออก version ใหม่มาคือ checkpwd ซึ่งผมก็ยังไม่ได้ลองครับลองไปเล่นดูตามนี้เลยครับ http://www.red-database-security.com/software/checkpwd200a12.zip

อ้างอิง
http://www.petefinnigan.com/weblog/archives/00001103.htm
http://soonerorlater.hu/index.khtml?article_id=513

Oracle OpenWorld Presentation Downloads

วันที่ 11 -15 นี้ ที่ San Fran จะจัดงาน Oracle OpenWorld
เป็นงานที่แสดง Oracle Technology ที่ยิ่งใหญที่สุดในรอบปี
ปกติงาน OpenWord จะจัดปีละ 3 ครั้ง โดยจะเวียนไปตามทวีปต่าง ๆ ของโลก
ตลอดปี 2007 จะมีที่

  • เซา เปาโล ประเทศบราซิล เมื่อมีนาที่ผ่านมา
  • เซี่ยงไฮ้ ประเทศจีน เมื่อ 3 เดือนก่อน
  • ที่กำลังจะถึง ก็ San Fran สัปดาห์หน้า
จะมีบรรดา กูรู ทั้งหลายมากเป็น speaker ตลอด 5 วันเต็ม
ทุก ๆ ครั้งหลังจากที่งานจบลง Oracle ก็จะเปิดให้ download presentations + materials ต่าง ๆ ได้ฟรี
สำหรับใครที่สนใจ วันนี้ผมมี OpenWorld Presentation ให้ download ไม่ต่ำกว่า 100 files มาฝากครับ
เป็นของ OpenWorld ที่ เซี่ยงไฮ้ เนื้อหาใหม่มาก ๆ ครับ

Monday 5 November 2007

ภูมิหลังของ 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 กันครับ

Saturday 3 November 2007

สรุปประเด็นเรื่อง Oracle กับ BEA

post นี้ช้าไป 1 สัปดาห์ครับ จะสรุปประเด็นเรื่อง Oracle กับ BEA- Oracle ยื่นข้อเสนอ BEA 17 / หุ้น- BEA ปฏิเสธว่า 17 / หุ้น น้อยไป- Oracle ยื่นข้อเสนอว่า ยืนยันที่ราคานี้ และราคาจะมีผลถึงวันอาทิตย์ที่ 27 ที่ผ่านมาเท่านั้น- BEA เริ่มอ่อน บอกว่าถ้าได้ 21 ก็จะตกลง- Oracle ยืนยันข้อเสนอเดิม- สรุป ข้อเสนอนี้ expire ไปเรียบร้อย Oracle กับ BEA ยังไม่มีการซื้อขายแต่อย่างใดนักวิเคราะห์ออกมาบอกว่าการยื่นเสนอครั้งถัดไป BEA น่าจะได้ราคาที่ต่ำกว่าเดิม

Pagerank จาก 0 เป็น 6

สุดสัปดาห์นี้ ขอไม่ post เรื่อง technology ครับ, มาคุยกันสบาย ๆ ดีกว่า

ช่วงสัปดาห์นี้ บรรดา web/blog master ทั้งหลายคงจะทราบดีว่า google update ค่า pagerank แล้ว
ก็จะเห็นหลาย ๆ คนมีบ่นอุบอยู่เหมือนกัน ว่าทำไม pagerak ไม่ค่อยขยับเลย

ส่วนผมทำหน้าที่เป็น blog master แห่งนี้ พอจะถู ๆ ไถ ๆ บ้างเรื่อง google pagerank
แต่ไม่ค่อยจริงจังกับมันเท่าไหร่
blog นี้ก็เพิ่งจะทำมา 4 เดือน ค่า pagerak ขยับเป็น 1 ก็ดีใจตายแล้วครับ

แต่เกิดเรื่องมหัศจรรย์ขึ้นครับ
ได้ pagerank จาก 0 เป็น 6!

ผมเองยังแทบไม่เชื่อสายตาตัวเอง ต้องตามไปตรวจสอบหลาย ๆ ที่
ว่าเราได้ 6 จริง ๆ เหรอ?

เพราะผมเห็นอย่างหลาย ๆ web กว่าจะได้ 5-6 ก็ต้องหมั่นดูแลร่วม 2 ปีขึ้นไป

ดังนั้นผมจึงคุ้ยต่อ ว่าทำไมค่า pagerank เราดันขึ้นสูงจัง
ในที่สุดก็มาถึงบางอ้อ

สาเหตุสำคัญก็คือที่ blogs.oracle.com ที่เป็น official blog ของ oracle
มี link กลับมาหา blog ของเราแห่งนี้ครับ

ที่ blogs.oracle.com มี pagerank 8 เลยทำให้ blog เรามีค่าสูงตามไปด้วย

ก็จึงต้องขอบคุณ Mr. Justin Kestelyn, Senior Director ของ OTN
ที่ได้แปะ link ของเราไว้กับบรรดา oracle กูรูทั่วโลก ภูมิใจครับ

ในที่สุด link คุณภาพ มีน้ำหนักกับ pagerank ที่สุดครับ

Friday 2 November 2007

Oracle ฉีกนำ IBM ทางด้านความเป็นผู้นำทาง Technology ของ Data Warehouse


โดยในปีที่แล้วนั้น Gartner ได้ทำการสำรวจทางด้านความเป็นผู้นำทาง Technology ของ Data Warehouse (Leader) ซึ่ง Oracle นั้นอยู่ในอันดับที่ 3 โดยที่ Teradata และ IBM นั้นครองอันดับหนึ่งและอันดับสองตามลำดับโดย Oracle นั้นตามหลัง IBM อย่างหายใจลดต้นคอดังที่เห็นตามกราฟครับโดย Microsoft นั้นตามหลังมาอย่างห่าง ๆ

แต่ว่าผลสำรวจปีนี้ของ Gartner ออกมาแล้วปรากฏว่า Oracle นั้นได้แซง IBM ขึ้นมาแล้วและกำลังไล่กวด Teradata อย่างสนุกซึ่งโอกาสที่จะแซงนั้นอาจจะยากซักหน่อยเพราะว่าทาง Teradata นั้นเค้าเชี่ยวชาญทางด้านนี้มานานแล้วและพัฒนาทางด้าน Data Warehouse มาอย่างต่อเนื่องไม่เหมือนกับ Oracle ที่จับแต่ database จนกระทั่งเพิ่งมาจับทางด้าน Data Warehouse แต่ก็ไม่แน่อาจจะเหมือน Google ที่มาที่หลังแต่ดังกว่าก็ได้
ส่วนเรื่องทางส่วนแบ่งทางการตลาดของ Data Warehouse ของ Oracle นั้น Oracle ทิ้งห่างคู่แห่งไปไกลหลายขุมเลยทีเดียว โดยตรองส่วนแบ่งทางการตลาดทั้งหมด 41% ในปี 2006 นะครับแต่ปีนี้ยังไม่รู้ครับแต่ที่น่าแปลกทั้งๆ ที่ Teradata นั้นเป็นผู้นำทางด้านนี้กลับครองส่วนแบ่งทางการตลาดได้น้อยมาก

Oracle Database Uptime

Post นี้สั้น ๆ กระชับครับ
วันก่อนเข้าไปหาลูกค้า ได้รับคำถามว่า
เราจะรู้ได้อย่างไรว่า Oracle Database ที่ใช้งานอยู่ start มาตั้งแต่เมื่อไหร?

คำตอบ ให้ login ด้วย sys หรือ system แล้ว run query นี้ครับ

SELECT to_char(startup_time,'DD-MON-YYYY HH24:MI:SS') "DB Startup Time" FROM sys.v_$instance;

Thursday 1 November 2007

Oracle ADF Business Component (BC4J) ตอนที่ 5 สร้าง Client

ต่อจากคราวที่แล้ว ผมสัญญาว่าจะสร้างตัว Client ขึ้นมาติดต่อกับ Customers View Object กัน งั้้นไม่เสียเวลาเรามาลองทำการเลยครับโจทย์ที่ตั้งไว้คือ จะเลียนแบบกับ การสร้างตัว Client ที่ติดต่อกับ Entity Object โดยจะทำการหาข้อมูลชื่อลูกค้าที่มี Customers ID = 118 เพื่่อเปรียบเทียบความยากง่ายระหว่างการใช้ Entity ตรงๆ กับเรียกใช้ผ่าน View Object ขั้นตอนมีดังนี้

1. ในที่นี้เรานำโปรเจคเก่ามาใช้เลยนะครับ ซึ่งจะมี Application Moduel ชื่อ CustomersService และ View Object ชื่อ CustomersView เราจะต้องให้ Application Module รู้จััก View เสียก่อน โดยดับเบิ้ลคลิ๊กที่ CustomersService แล้วคลิ๊กที่ Data Model ให้เลือก CustomersView ไปทางขวา ตรงนี้จะเป็นการรวม CustomersView กับ CustomersService ครับ ตามรูป แล้วกด OK ครับ


2. พิจารณาที่ CustomersServiceImpl.java จะมี Code เพิ่มขึ้น ดังรูป
3. เนื่องจากเราต้องการดึงค่าข้อมูลจาก Customers View เป็น Record ดังนั้นเราต้องสร้าง Class Row ของ Customers View ด้วย ขั้นตอนก็ง่ายมากครับ ดับเบิ้ลคลิ๊ฏที่ Customers View จากนั้น คลิ๊กตรงแทบ Java คลิ๊กเลือก Generate Java File

4. ผมสร้าง Method findCustomersViewByPK คล้ายกับ Method findCustomersByPK ก่อนหน้านี้ครับ ดังรูป

5. เมื่อทำการรันโปรแกรมจะได้ผลดังรูป

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