go to http://oracle.in.th
Showing posts with label oracle. Show all posts
Showing posts with label oracle. Show all posts

Tuesday, December 7, 2010

โอกาสของน้องๆนักศึกษา มาอีกแล้ว อบรมฟรี Oracle JDeveloper !!

โอกาสของน้องๆนักศึกษา มาอีกแล้ว
คราวนี้ OUGTH ของเรา เปิดอบรมฟรี Oracle JDeveloper !!


...แต่รอบนี้มีกติกานิดหน่อย ผู้ที่จะมาอบรมได้นั้น จะต้องเป็นนักศึกษาและ ต้องเป็นสมาชิกของOUGTH Facebook Page, OUGTH Facebook group, OUGTH google buzz, Google friend connect ใน blog OUGTH ของเรา, หรือ OUGTH twitter เท่านั้น



เปิดรับสมัครผู้สนใจ ตั้งแต่วันนี้ - 10 ธันวาคม 2553 เวลา 12:00 น.
(ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

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

  1. ชื่อ-นามสกุล
  2. เบอร์ติดต่อกลับ
  3. สถานที่ศึกษา
  4. แนบสำเนาบัตรนักศึกษา
  5. เหตุผลที่อยากมาเข้าร่วมอบรมนี้
  6. Capture รูปที่เป็นสมาชิกกับเรา เช่น
Facebook Fan Page


แล้วส่งมาที่ oracle.in.th@gmail.com

สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์-อาทิตย์ที่ 11 และ 12 ธันวาคม 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)


ดู โอกาสของน้องๆนักศึกษา มาอีกแล้ว อบรมฟรี Oracle JDeveloper !! ในแผนที่ขนาดใหญ่กว่า


...โอกาสดี มันไม่ได้มีง่ายๆ รีบคว้าไว้ ก่อนที่จะสายไป
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, December 1, 2010

National Character Set แบบ AL16UTF16 กับ UTF8 ต่างกันอย่างไร?

ห่างหายไปนานกับการเขียนบทความลงบล็อค oracle ของเรา ขอต้อนรับต้นเดือนสุดท้ายของปี 2010 นี้ด้วยทริก เล็กๆน้อยๆ นะครับ

วันนี้มีเกร็ดเล็กๆ น้อยๆ ที่เป็นประโยชน์ซึ่งเกี่ยวกับการสร้าง Database โดยใช้ DBCA หรือ Database Configuration Assistant มาให้ทุกท่านได้อ่านกันนะครับ

...ผมเชื่อว่า หลายๆท่านที่กำลังอ่านอยู่ตอนนี้ ต้องเคยได้ลองติดตั้ง Oracle Database หรือ เคยสร้าง Database มากันบ้างแล้วล่ะ ซึ่งขั้นตอนในการสร้าง Database นั้นมันก็ไม่ได้ยากมากมาย เพียงแค่ตั้งค่าให้ถูกต้องเท่านั้นเอง ซึ่งผมนั้นก็ได้ลองติดตั้งด้วยตัวผมเองแล้วเหมือนกัน แต่มีขั้นตอนนึงที่ทำให้ผมชะงักขึ้นมาว่า ...เอ๊ะ จะเลือกอันไหนดีล่ะ ? นั่นคือ ตอนที่ให้ตั้งค่า Database Character set โดยมี National Character Set แบบ AL16UTF16 กับ UTF8 ให้เลือก (ดูตามรูปได้เลยนะครับ)


เอาเป็นว่า แทนที่จะมานั่งเดาเอา ผมก็ search หาเอาซะเลย แล้วดูว่า National Character Set แบบ AL16UTF16 กับ UTF8 มันมีข้อแตกต่างกันอย่างไร?

AL16UTF16
  1. ถ้าข้อมูลเป็นภาษาเอเชีย จะประหยัดพื้นที่กว่า UTF8 ซึ่งจะดีในแง่ของพื้นที่ในฮาร์ดดิสก์ และ I/O แต่ถ้าข้อมูลส่วนใหญ่เป็นภาษาทางยุโรปใช้ UTF8 ดีกว่าเพราะประหยัดพื้นที่กว่า
  2. Oracle มอง AL16UTF16 เป็น fixed-width characters ดังนั้นจะ process เร็วกว่า
  3. ความกว้างสูงสุดของ NCHAR และ NVARCHAR คือ 1000 และ 2000 ตัวอักษร ซึ่งการันตี เพราะเป็น fixed-width
...มาดูฝั่ง UTF8 กันบ้าง

UTF8
  1. ถ้าข้อมูลเป็นภาษาทางยุโรป โดยปกติจะประหยัดพื้นที่กว่า AL16UTF16 (เนื่องจากภาษาทางยุโรปอยู่ในลำดับต้นๆของ Unicode ซึ่งสามารถแทนได้ด้วยข้อมูลเพียง Byte เดียว) และให้ประสิทธิภาพดีกว่าในการ Process
  2. ความยาวสูงสุดของ NCHAR และ NVARCHAR คือ 2000 และ 4000 ซึ่งดูเหมือนจะมากกว่า AL16UTF16 แต่ไม่การันตี เนื่องจาก UTF8 เป็น variable width ถ้าเป็น Character ที่ใช้ Byte เดียวก็จะได้ถึง 4000 bytes แต่ถ้าเป็น Character ที่ใช้ 3 Bytes ก็จะมีได้สูงสุดแค่ 4000/3 ตัวอักษร
...นั่นก็คือข้อแตกต่างของแต่ละตัว ดังนั้นก่อนที่ท่านผู้อ่านทุกท่านจะ set ค่าในการสร้าง database ลองดูรายละเอียดซักนิดนะครับ อย่าเพิ่งกด Next ๆๆ อย่างเดียวนะครับ ;)

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

Monday, November 1, 2010

อบรม Oracle Business Intelligence Standard Edition (Oracle BI): Discoverer ฟรี! สำหรับ นศ.



ปิดรับสมัครแล้วครับ 
ขอบคุณน้องๆ นักศึกษาที่ให้ความสนใจเป็นจำนวนมาก


นักศึกษาเตรียมพร้อม! มาพบกับ อบรมฟรีๆ กับ Oracle user Group in Thailand กันดีกว่า

อบรม Oracle Business Intelligence Standard Edition: Discoverer



Oracle Business Intelligence Standard Edition: Discoverer เป็นเครื่องมือที่ผู้ใช้้ทางธุรกิจสามารถสืบค้นข้อมูล จัดทำรายงาน วิเคราะห์ข้อมูล และเผยแพร่ข้อมูลในฐานข้อมูลทางเว็บ ซึ่งสามารถใช้ข้อมูลในฐานข้อมูลได้ทันที พร้อมทั้งยังสามารถตัดสินใจดำเนินการทางธุรกิจได้อย่างรวดเร็วและง่ายดายอีกด้วย

เปิดรับสมัคร ผู้สนใจ ตั้งแต่วันนี้ - 4 พฤศจิกายน 2553 (ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

สำหรับผู้ที่สนใจ สามารถ Email แจ้งความจำนงที่จะเข้าร่วมอบรม พร้อมทั้งบอก ชื่อ-นามสกุล, ชื่อเล่น, เบอร์ติดต่อกลับ, สถานที่ศึกษา, แนบสำเนาบัตรนักศึกษา และเหตุผลที่อยากมาเข้าร่วมอบรมนี้ มาที่ oracle.in.th@gmail.com

สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์-อาทิตย์ที่ 6 และ 7 พฤศจิกายน 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)


ดู อบรม Oracle Business Intelligence Standard Edition: Discoverer ในแผนที่ขนาดใหญ่กว่า
ข้อเขียนนี้ช่วยฉัน:  

Monday, September 27, 2010

อบรม Oracle Performance Tuning สำหรับนักศึกษาเท่านั้น

มาอีกแล้วค่าาาาาาาา กับ อบรมฟรีสำหรับนักศึกษาครั้งที่ 2...
คราวนี้เราเปิดอบรมเรื่อง Oracle Performance Tuning ที่นักศึกษาจะได้เรียนรู้และเข้าใจถึงหลักการและเครื่องมือต่าง ๆ ที่ช่วยในการปรับแต่งประสิทธิภาพของ database ให้ดียิ่งขึ้น ซึ่งจะช่วยให้นักศึกษานำความรู้ที่ได้ไปประกอบอาชีพในอนาคต


เปิดรับสมัครผู้สนใจ ตั้งแต่วันนี้ - 30 กันยายน 2010 เวลา 12:00 น.
(ขอสงวนสิทธิ์ในการปิดรับสมัครก่อนเวลาที่กำหนด หากที่นั่งเต็ม)

สำหรับผู้ที่สนใจ สามารถ Email แจ้งความจำนงที่จะเข้าร่วมอบรม พร้อมทั้งบอก ชื่อ-นามสกุล, เบอร์ติดต่อกลับ, สถานที่ศึกษา, แนบสำเนาบัตรนักศึกษา และเหตุผลที่อยากมาเข้าร่วมอบรมนี้ มาที่ oracle.in.th@gmail.com
สอบถามรายละเอียดเพิ่มเติมได้ที่ 02-634-1711 หรือ oracle.in.th@gmail.com

รายละเอียดของการอบรม
วันที่ทำการอบรม: วันเสาร์-อาทิตย์ที่ 2 และ 3 ตุลาคม 2553
เวลา: 09:00 - 16:30 น.
สถานที่: อาคาร ปาโซ่ ทาวเวอร์ ชั้น 21 ถนนสีลม แขวงสุริยวงศ์ กรุงเทพมหานคร 10500
(ห่างจากรถไฟฟ้า BTS สถานีช่องนนทรี ประมาณ 500 เมตร)


ดู อบรม Oracle Performance Tuning ในแผนที่ขนาดใหญ่กว่า


...โอกาสดี มันไม่ได้มีง่ายๆ รีบคว้าไว้ ก่อนที่จะสายไป


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

Thursday, August 19, 2010

Oracle Database 11g Installation on IBM-AIX 6

วันนี้เกิดคึกอยากจะเขียนบล็อคขึ้นมาครับ เพราะว่าพึ่งผ่าน case นี้มาและคิดว่าเป็น case ที่้น้อยคนจะได้เจอ ก็คือการติดตั้ง Oracle Database 11g บน AIX 6 นั่นเอง หลายคนอาจจะพึ่งเคยได้ยินว่า AIX คืออะไร ก็เลยขออธิบายนิดนึงว่ามันคือ OS ของ IBM ซึ่งเป็น Linux base ถ้าอยากรู้จัก AIX มากกว่านี้ก็ลอง search ดูได้เลยครับ

กลับมาในส่วนของเราดีกว่า อย่างที่ทราบๆกันว่า ในการติดตั้ง Oracle Database เนี่ยจะมีขั้นตอนหลักๆอยู่ 2 ขั้นตอนก็คือ

1. การเตรียม pre-requisite ให้พร้อมสำหรับการติดตั้ง Oracle Database
2. การติดตั้ง Oracle Database

ในที่นี้ผมจะกล่าวถึงเฉพาะข้อแรกก็คือการเตรียม pre-requisite นั่นเอง เพราะในส่วนของการติดตั้ง ก็จะสามารถหาอ่านได้จาก blog เก่าๆครับ
การ Install Oracle Database 11g และสร้าง Database

ที่อยากจะพูดถึงเรื่องการเตรียม pre-requisite เนี่ยเพราะว่าในแต่ละ platform ก็จะมี requirement ต่างๆที่เราต้องติดตั้งหรือแก้ไขเพิ่มเติมต่างกันไปและ AIX ก็เช่นกัน ซึ่ง case ที่ผมไปเจอก็คือ AIX นั้นจะติดตั้งมาแบบ default เลย มีการแบ่งพื้นที่ให้แก่ partition ต่างๆแค่นิดเดียว partition ละไม่ถึง 1GB (เอาไฟล์ installer ลงไปยังไม่ได้เลย - -") , swap space ไม่พอและไม่ได้ติดตั้ง fileset ที่จำเป็นสำหรับการติดตั้งเพิ่มเติม (คล้ายๆกับ package ของ linux) ทำให้เราต้องมาจัดการเองทั้งหมด ซึ่งถ้าไม่เคยได้เล่น AIX เลยเนี่ยอาจจะจิตตกได้ เพราะไม่รู้ว่าต้องแก้ไขอย่างไร, หา download fileset จากไหน หรือติดตั้งอย่างไร วันนี้เรามีข้อมูลจากประสบการณ์จริงที่พบมาเล่าสู่กันฟังครับ

1 การเพิ่มพื้นที่ให้แก่ partition ต่างๆ
- เข้าไปที่ Web-based System Manager (WSM) สามารถคลิกขวาที่ partition ที่ต้องการและเลือก properties และเพิ่มขนาดได้เลย ง่ายเกินคาด สามารถใช้ได้กับ /tmp ด้วย

2.การเพิ่ม swap space
- ตรวจสอบดูก่อนว่า swap space นั้นใช้ที่ partition ใด โดยใช้คำสั่ง sysdumpdev -l และดูผลลัพธ์ที่ primary เช่น primary /dev/hd6

- เมื่อทราบแล้วว่า swap space ใช้ path ใดก็ลองตรวจสอบขนาดของมันโดยใช้คำสั่ง lsps -a จะมีการระบุขนาดไว้

- ถ้าต้องการขยายขนาดเพิ่มไปอีก 1GB สามารถทำได้โดยใช้คำสั่ง extendlv hd6 1G

- reboot เครื่องซักรอบนึง แล้วลองตรวจสอบขนาดโดยใช้คำสั่ง lsps -a เช่นเดิม จะพบว่า swap space จะเพิ่มมาอีก 1 GB แล้วครับ

ประเด็นนี้ขออ้างอิงจากน้องที่เข้าไปช่วยกันทำนะครับ โดยได้บันทึกขั้นตอนไว้ในนี้
https://jira.oracle.in.th/browse/ORCL-364

3. การติดตั้ง fileset
- จะมี fileset ที่ต้องติดตั้งเพิ่มเติมอีก 3 ตัวดังนี้
bos.adt.libm
rsct.basic.rte
rsct.compat.clients.rte

- สามารถหาได้จากแผ่นติดตั้ง AIX 6 แผ่นที่ 1 นะครับ ตอนแรกผมก็ไปหาโหลดตั้งนาน เจอแต่ไฟล์ 200-300 MB ทั้งนั้น เหมือนมัดรวมเป็น pack มาให้โหลดกันเลย ถ้าใครต้องไปติดตั้ง Oracle Database อย่าลืมทวงหาแผ่นติดตั้ง AIX 6 นะครับ

- ขั้นตอนการติดตั้งเนี่ยจะต้องทำการ mount แผ่นเข้าไปและใช้ tool ที่ชื่อว่า "SMIT" ในการติดตั้ง fileset เหล่านั้น อยากจะเน้นชื่อเจ้า tool ตัวนี้จริงๆ เพราะมันเปรียบเสมือนพระเจ้าของ System Admin เลยทีเดียว SMIT นั้นย่อมาจาก System Management Interface Tool เป็น tool ครอบจักรวาลเกี่ยวกับการจัดการระบบ ซึ่งในช่วงที่เข้าไปติดตั้งเนี่ยผมมีสโลแกนประจำใจว่า "คิดไม่ออก บอก SMIT" :p

- วิธีการติดตั้งก็ใช้ command ดังนี้ SMIT install_latest หรือจะเข้าจาก SMIT แล้วไปไล่หา option เอาก็ได้

- จะมี interface ขึ้นมาจากนั้นก็เลือก fileset ที่จะติดตั้งตาม wizard ได้เลยครับซึ่งอาจจะปล่อย option ต่างๆให้เป็น default ไปก็ได้จากนั้นกด OK ก็จะเป็นการติดตั้ง

- เมื่อติดตั้งเสร็จแล้วลองตรวจสอบดูโดยใช้คำสั่ง lslpp -l ตามด้วยชื่อ fileset ที่ต้องการตรวจสอบ เช่น lslpp -l bos.adt.libm ก็น่าจะพบว่าติดตั้งเรียบร้อยแล้ว

ทั้ง 3 ข้อที่กล่าวมานั้นเป็นการกล่าวถึงขั้นตอนที่อาจแตกต่างจาก platform อื่นๆ ส่วน pre-requisite บางอย่างเช่น ค่า kernel นั้นก็แก้ได้เช่นเดียวกับ Linux อื่นๆครับ จากนั้นก็จะสามารถติดตั้ง Oracle Database 11g บน AIX 6 ได้แล้วครับ หวังว่าบล็อคนี้จะเป็นประโยชน์ต่อผู้ที่ต้องติดตั้งบน AIX 6 ไม่มากก็น้อยนะครับ :)
ข้อเขียนนี้ช่วยฉัน:  

Thursday, July 22, 2010

วิธีเปลี่ยนเมนูภาษาไทยเป็นอังกฤษใน Oracle Developer Suite 10g

เมื่อติดตั้ง Oracle Developer Suite 10g ได้เมนูเป็นภาษาไทย รู้สึกใช้งานยาก ต้องการเปลี่ยนเป็น Eng ทำอย่างไร? วันนี้ผมมีวิธีแก้มาบอกครับ

การแก้ปัญหาต้องการเปลี่ยนเมนูของ Oracle Developer Suite 10g จากภาษาไทยให้เป็นภาษาอังกฤษ

ขั้นตอนการแก้ปัญหาสามารถทำได้ดังนี้
1. Start > Run และพิมพ์ regedit


2. ที่แท็บ HKEY_LOCAL_MACHINE ทำการค้นหา registry ที่ชื่อ nls_lang ของ Developer Suite ซึ่งแต่ละเครื่องอาจจะอยู่ที่ Path ต่างๆกันไป สามารถทำการค้นหาได้ โดยคลิกขวาที่ HKEY_LOCAL_MACHINE และกด Find จากนั้นพิมพ์n ls_lang และกด Find (ในที่นี้ อยู่ที่ HKEY_LOCAL_MACHINE > SOFTWARE >Wow6432Node > ORACLE > KEY_DevSuiteHome1)


3. คลิกขวาที่ nls_lang และเลือก Modify ให้ทำการแก้ไขค่าจาก THAI_THAILAND.TH8TISASCII ให้เป็น AMERICAN_AMERICA.TH8TISASCII ซึ่งการแก้ไขแบบนี้ จะทำให้เมนูของ Oracle Developer Suite กลายเป็นภาษาอังกฤษ และยังสามารถเก็บข้อมูลหรือแสดงผลเป็นภาษาไทยได้อีกด้วย จากนั้นกด OK


4. ทำการ Restart เครื่อง จากนั้นเมนูของ Oracle Developer Suite จะกลายเป็นภาษาอังกฤษแล้วครับ

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

Tuesday, July 20, 2010

ติดตั้ง Oracle แล้วติดปัญหา Swap size ทำอย่างไรดี??

สวัสดีครับ วันนี้ผมเอาปัญหาที่พบเจอกันบ่อย ๆ ในระหว่างการติดตั้ง Oracle มาให้อ่านกันครับ ซึ่งผมเชื่อว่าคงมีใครหลาย ๆ คน ได้เจอปัญหานี้กันมาบ้างแล้ว (ตัวผมก็คนนึงล่ะ) เอาเป็นว่า มาดูรายละเอียดกันดีกว่า...



สำหรับคนที่เคยทำการ ติดตั้ง Oracle Database 11gR2 ใน Linux Redhat อาจะจะได้พบกับ Error ต่าง ๆ ที่แสดงให้เห็นในขั้นตอนของ Prerequisite Check ซึ่งถ้าเป็น Error ทั่วไป คุณก็สามารถกดปุ่ม Fix & Chack Again เพื่อให้ระบบทำการ fix error ให้อัตโนมัติ แต่ในกรณีนี้ Error ของผมที่เจอมากับตัวคือ Swap Size ซึ่งตอนที่ผมทำนั้น ผมทำการติดตั้งใน VMware โดยติดตั้ง oracle db11201 ตาม OBE ใน Linux Redhat แล้วแบ่ง Swap space น้อยไป

Error Message:

This is a prerequisite condition to test whether sufficient 
total swap space is available on the system. (more details)
Expected Value : 2.22GB (2332980.0KB)
Actual Value : 2GB (2097144.0KB)
ที่เกิด Error นี้ ก็เป็นเพราะว่่า ในขณะติดตั้ง oel5 กำหนดขนาด swap partition ไว้น้อยไป

วิธีแก้ก็มีอยู่ 2 ข้อคือ
1. ลง OS ใหม่ซะเลย หรือ
2. เพิ่ม swap space นั่นเอง

การจะลง OS ใหม่ ก็เสียเวลา...ฉะนั้น มาดูวิธีการเพิ่ม swap space ดีกว่า

1.เริ่มจาก login เข้าใช้โดย user root

2. เปิด terminalแล้วพิมพ์คำสั่งตามนี้ครับ
dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
โดยที่ count=524288 คือค่าที่ได้จาก 1024*512(ค่าที่อยากเพิ่มเป็น Mb) ช่วงนี้ก็รอสักครู่นะครับ

3. หลังจากนั้นก็ set up swap area ครับ ด้วยคำสั่ง
mkswap /swapfile1

4. เสร็จแล้วเราก็ Active swapfile1 ด้วยคำสั่ง
swapon /swapfile1

5. ต่อไปจะทำให้ swapfile1 ถูกเรียกทุกครั้งหลังจากที่เปิดเครื่องมาใหม่
vi /etc/fstab
เพื่อเปิดไฟล์ fstab ขึ้นมาแก้ โดยเพิ่ม
/swapfile1 swap swap defaults 0 0 
ต่อท้ายของของไฟล์ เป็นอันเสร็จครับ ทีนี้หลังจากนี้เราก็จะได้ swap file ที่มีขนาดใหญ่ขึ้นครับ

6. สามารถใช้คำสั่ง
free -m
เพื่อเช็คขนาดของ swap file ของเราได้ครับ

Credit by Pelay

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

Wednesday, July 14, 2010

WebCenter 11g เวอร์ชั่น 11.1.1.3 ได้รับการรับรองแล้ว

หลังจากที่ Oracle WebCenter Suite ได้เปิดตัวออกมา ตอนนี้ทาง oracle ได้ทำการพัฒนา WebCenter 11g ใน patch 11.1.1.3 แล้ว และสามารถใช้งานได้ใน Oracle E-Business Suite Release 12 (12.0.4 และสูงกว่า หรือ 12.1.1 และสูงกว่า) ได้อย่างสมบูรณ์แบบ ส่วน WebCenter 11g version 11.1.1.2 (a.k.a. Patchset 1) ที่เปิดตัวเมื่อต้นปีนั้น ก็สามารถใช้ได้กับ Oracle E-Business Suite Release 12 เช่นกัน

Oracle WebCenter Suite คืออะไร? สามารถหาคำตอบได้จาก บทความ นี้


สำหรับผู้ที่ต้องการทราบวิธี installation และ configuration สามารถดูได้จาก documentation นี้:

Certified EBS 12 Platforms
  • Linux x86 (Oracle Enterprise Linux 4, 5)
  • Linux x86 (RHEL 4, 5)
  • Linux x86 (SLES 10)
  • Linux x86-64 (Oracle Enterprise Linux 4, 5)
  • Linux x86-64 (RHEL4, 5)
  • Linux x86-64 (SLES 10)
  • Oracle Solaris on SPARC (64-bit) (9, 10)
  • HP-UX Itanium (11.23, 11.31)
  • HP-UX PA-RISC (64-bit) (11.23, 11.31)
  • IBM AIX on Power Systems (64-bit) (5.3, 6.1)
  • Microsoft Windows Server (32-bit) (2003; 2008 for EBS 12.1 only)

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

Friday, July 9, 2010

Oracle Database Vault

Oracle Database Vault คืออะไร ? ในบทความวันนี้ ผมจะมาอธิบายข้อดีคร่าว ๆ ของการใช้เจ้าตัวนี้ ให้ทุกท่านได้อ่านกันนะครับ

Oracle Database Vault
คือส่วนหนึ่งของ database security ครับ โดยจะทำหน้าจำกัด user ผู้เข้าใช้ database ให้สามารถเข้าได้เฉพาะ user ที่ได้รับอนุญาติหรือเป็น DBA นั่นเองครับ ทั้งนี้เพื่อความปลอดภัยของ application ต่าง ๆ ที่ต้องการ security โดยมีหลักการ security ตามข้อบังคับต่าง ๆ เช่น Sarbanes-Oxley, Payment Card Industry (PCI) Data Security Standard (DSS), Health Insurance Portability and Accountability Act (HIPAA)และ อื่น ๆ ที่เกี่ยวข้องกับ security ใน data integrity และ data privacy โดย Oracle Database Vault จะทำการป้องกันการเข้าใช้ database ตาม environtment ต่างๆที่ต้องการ เช่น วันเวลาที่เข้าใช้, IP Address ของผู้เข้าใช้, ชื่อเข้า application ที่เข้ามาใช้ และการ authentication user ต่าง ๆ

โดยการใช้ Oracle Database Vault มีข้อดีดังนี้ครับ
  • Pro-actively safeguard application data stored in the Oracle database คือการป้องกันไม่ให้ผู้ใช้ที่ไม่ผ่านการ authentication เข้ามาใช้ข้อมูลได้
  • Address regulatory requirements คือการแบ่งความรับชอบตามหน้าที่ของ user
  • Restrict ad-hoc access to application data เป็นการป้องกันการใช้ application ที่ไม่ได้รับอนุญาติให้เข้าใช้ ด้วย multi-factor policies
  • Deploy with confidence สามารถติดตั้งได้กับ Oracle E-Business Suite, Oracle PeopleSoft, และ Oracle Siebel CRM
  • Realms เป็นการรวม schemas, object และ role ต่างๆที่ต้องการให้มี secure ไว้ด้วยกัน และกำหนดสิทธิ์ให้เฉพาะบาง user หรือ role มีสิทธิ์เข้าถึงข้อมูลเหล่านั้นได้
  • Command Rules เป็นการกำหนดให้ user สามารถ execute คำสั่งได้บางคำสั่ง
  • Factors เป็นการกำหนดการเข้าถึงข้อมูลโดยใช้ factor ซึ่งจะเก็บค่าต่างๆเช่น user location, database IP address หรือ user's session
  • Rule Sets คือ rule หรือกลุ่มของ rule ที่ใช้ร่วมกับ realms, command rule, factor และ secure application role
  • Secure Application Role เป็น special role ที่สามารถใช้ร่วมกับ rule set ได้
Credit by Ice, Yong

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

Friday, July 2, 2010

Oracle User Group in Thailand - News Letter: July 2010 มาแล้ว

สวัสดีครับทุกท่าน

สำหรับโพสนี้ ไม่มีอะไรมากมาย เพียงแค่ผมอยากจะประชาสัมพันธ์จดหมายข่าวของเรากันซะหน่อย หรือ Oracle User Group in Thailand Newsletter ฉบับที่ 1 ประจำเดือน กรกฎาคม นั่นเอง

โดย Newsletter นี้ จะประกอบไปด้วยเรื่องราวต่าง ๆ ที่น่าสนใจเกี่ยวกับ Oracle ไม่ว่าจะเป็นเทคนิคต่าง ๆ, ข่าวสารใหม่ ๆ, Events ที่น่าสนใจ, เรื่องน่ารู้ต่าง ๆ ที่คุณไม่ควรพลาด ส่งตรงให้คุณถึงที่

ซึ่ง Newsletter นี้ จัดทำโดยทีมงานของ Oracle User Group in Thailand ทุกท่าน พร้อมที่จะให้ทุกท่านได้รับรู้ข่าวสารต่าง ๆ อัพเดทไปกับเรานะครับ

ถ้าสนใจอ่าน คลิกที่ Link นี้ได้เลย
Oracle User Group in Thailand: News Letter: July 2010

ปล. ครั้งนี้เป็นครั้งแรก ถ้ามีข้อแนะนำ ติชม หรือเสนอแนะ ก็ Comment บอกกันได้นะครับ ผมจะได้ไปปรับปรุงให้ดีขึ้น

...ขอบคุณมากครับ
ข้อเขียนนี้ช่วยฉัน:  

Wednesday, June 30, 2010

Oracle Application Express 4.0 พร้อมดาวน์โหลดแล้ว!!!


สำหรับคนที่เล่นตัว Oracle Application Express หรือ APEX อยู่นั้น เห็นข่าวนี้คงจะดีใจนะครับ เพราะว่าทาง Oracle ได้ออกตัว Oracle Application Express Release 4.0 มาให้ดาวน์โหลดกันไปใช้แล้ว หลังจากที่เคยออกมาให้ทดลองเล่นกันในแบบ Oracle Application Express 4.0 Early Access ให้ติดใจกันก่อน แล้วค่อยปล่อยของจริงในวันนี้นี่เอง

สนใจดาวน์โหลดตัว Oracle Application Express 4.0 คลิก ที่นี่ เลยครับ
ถ้าได้ทดสอบกันแล้ว เป็นอย่างไร อย่าลืมมาแชร์ประสบการณ์กันนะครับ :)

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

Thursday, June 17, 2010

การ set ให้ Web server เราสามารถรองรับคนจำนวนมากได้

วันนี้ผมได้รับคำถามจาก Twitter (@oracleinth) อีกแล้วครับ โดยที่คำถามเค้าได้ถามมาว่า...
"ขอถามหน่อยนะครับว่า ถ้าเราลง apache tomcat 6.x เพื่อรัน jsp เป็น Web server เราต้องเซตอะไรบ้างเพื่อให้มันรองรับคนจำนวนมากๆ ? "

ถ้าจะพูดถึงการ set ให้ Web server ของเราสามารถรองรับคนจำนวนมากนั้น สามารถทำได้หลายวิธี ซึ่งถ้าเป็นวิธีพื้นฐานเลย นั่นคือ การ set session timeout วิธีนี้ก็จะช่วยได้ในระดับนึง แต่ set session timeout นั้นมันไม่ได้ช่วยอะไรได้มากเท่าไร จากประสบการณ์ที่เคยเจอมากับตัวนะครับ แต่อีกเรื่องนึงที่พอเราไป set รับรองว่ารับคนได้เยอะขึ้นชัวร์คือไปเพิ่ม memory ให้กับ java นั่นเอง

การไป set parameter ดังนี้
JVM option passed to Resin Meaning
-Xms initial java heap size
-Xmx maximum java heap size
-Xmn the size of the heap for the young generation

แต่การเพิ่มพวกนี้ Ram ต้องเยอะด้วยนะ

การไป set ต้องไป set ที่ Environment variable ของ OS เช่นที่ Windows

set JAVA_OPTS=-Xms512m -Xmx1024m

นอกจากจะ set ที่ Environment variable ของ OS ยังไป set ที่ Tomcat ตรงๆได้ ไป set ที่ file %TOMCAT_HOME%\bin\catalina.bat
ไป search ที่ parameter JAVA_OPTS แล้วไปแก้ไขตรงนั้น

ที่เห็นผลได้ชัดเจน client รองรับได้เยอะขึ้น

...จะบอกว่าการ config อย่างเดียวมันก็ไม่ได้ช่วยได้ที่จะทำให้ Tomcat รองรับได้เยอะขึ้น
อย่างการเพิ่ม memory ให้กับ java, การ set session timeout เป็นการแก้ปัญหาที่ปลายเหตุทั้งสิ้น ถึงการแก้แบบนี้จะรองรับ client ได้เยอะขึ้นแต่เอาเข้าจริงไม่มีทางเกินหลักพัน (ใช้พร้อมกัน) เคยลองใช้ jmeter ลองจำลอง client พันตัวพร้อมกันก็ไม่ไหวแล้ว

พอดีผมได้ฟังประสบการณ์ที่มาจากรุ่นพี่ ซึ่งเค้าเคยทำงานกับ web ที่ uip เป็นหลักหมื่นต่อวัน
ซึ่ง web นี้ใช้ php เป็นภาษา developer ส่วน database ก็เป็นเพียง mysql หรือง่ายๆก็คือ LAMP

ผมเลยถามเค้าว่าทำยังไงถึงได้รองรับ user ได้เยอะขนาดนี้ ?
เค้าก็ตอบว่าทำ web ยังไงก็ได้อย่าให้มีการติดต่อ database เป็นดีที่สุด อย่าไปดึงมาเด็ดขายไม่งั้น web ล่มแน่
พี่เค้าก็บอกว่า เชื่อหรือไม่ว่าหน้าแรกของ web ดังทั้งหลายในไทยเป็น HTML ล้วนๆ โดยจะมีการ generate หน้าแรกตั้งทิ้งไว้เป็น HTML จากนั้นเวลาที่ใครมาเรียกก็จะเรียกจากหน้าที่ generate นั้น (ตรงนี้การแยก HTTP server กับ Servlet Container ออกจากกันจะช่วยให้ทำงานได้ดีมากขึ้น เพราะ PHP ก็ต้องแยกเหมือนกัน)

แล้วผมก็ถามต่อว่าถ้าเป็นหน้าข่าวที่มีคน comment เรื่อยๆหละจะทำยังไง เค้าบอกว่าใช้เทคโนโลยี Caches เข้ามาช่วย จะทำการติดต่อ database ก็ต่อเมื่อ insert, update, และ delete เท่านั้น ถ้าจะ select จะ select แค่ครั้งเดียวเท่านั้น แต่จะ select ใหม่ถ้ามีการ update โดยข้อมูลทั้งหมดจะถูกเก็บลง cache ทั้งหมด ที่ต้องเก็บลง cache ทั้งหมดนั้นจะดีกว่าการ select ใหม่ทุกครั้ง เพราะจะมี overhead สูงมากในการติดต่อ DB

ซึ่งใน java นั้นก็มีอยู่นะ เยอะด้วยยกตัวอย่าง Coherence Caches ของ oracle http://www.oracle.com/technology/pub/articles/vohra-coherence.html ซึ่งเคยได้ยินมา แต่ไม่เคยทดลองเล่นดู...

นอกจาก database cache แล้วใน java ยังมี lib หลายๆส่วนที่สามารถทำ cache ได้ อย่างเช่น connection cache ของการติดต่อ DB (Connection Pooling), การทำ cache ของ object เป็นต้น

และมีอีกประเด็นที่จะเสริมเกี่ยวกับการใช้งาน tomcat เพื่อรับ load จำนวนมาก ควร config tomcat เข้ากับ apache(http server) เพื่อแยกงานการ render web (html) กับงานประมวลผล Java ออกจากกัน
จะทำให้ประสิทธิภาพโดยรวมดีขึ้น

ดูที่ http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

Credit by @plaumkamon, Kim
ข้อเขียนนี้ช่วยฉัน:  

การ recovery PFILE และ SPFILE

บทความนี้ ผมขอเอาใจ DBA ทุกท่านโดยเฉพาะเลย สมมุติว่าถ้า DBA เผลอทำ parameter file หาย และ shutdown instance ไปแล้วด้วย, แถมยังไม่เคยมีการ backup ไว้ก่อนเลย, DBA สามารถแก้ไขอย่างไรได้บ้าง ? โดยปกติแล้ว ถ้าเกิดเราทำ file ใด ๆ ในเครื่องคอมหาย การจะกู้คืนกลับมาเราจะใช้การ recovery, ฉะนั้น เรามาดู วิธีการ recovery PFILE และ SPFILE ที่ไม่ได้มีการ backup ไว้กันเลยดีกว่า

ผมได้ทดสอบทำดู เลยจะขอแจงแจงรายละเอียดเป็นขั้นตอนต่อไปนี้ครับ

1. ทำการ shutdown instance และลบไฟล์ทั้ง 2 file นะครับ คือ PFILE และ SPFILE โดย
PFILE จะอยู่ที่ Path /oracle/admin/orcl/pfile
SPFILE จะอยู่ที่ Path /oracle/db11201/dbs

2. ไปเปิด alert log เพื่อดู parameter โดย alert log จะอยู่ที่ Path
/oracle/diag/rdbms/orcl/orcl/trace
โดยมีชื่อไฟล์ว่า alert_orcl.log

3. ทำการ copy ในส่วนนี้ของไฟล์ alert log มานะครับ
processes                = 150
  memory_target            = 812M
  control_files            = "/oracle/oradata/orcl/control01.ctl"
  control_files            = "/oracle/flash_recovery_area/orcl/control02.ctl"
  db_block_size            = 8192
  compatible               = "11.2.0.0.0"
  db_recovery_file_dest    = "/oracle/flash_recovery_area"
  db_recovery_file_dest_size= 3852M
  undo_tablespace          = "UNDOTBS1"
  remote_login_passwordfile= "EXCLUSIVE"
  db_domain                = "co.th"
  dispatchers              = "(PROTOCOL=TCP) (SERVICE=orclXDB)"
  audit_file_dest          = "/oracle/admin/orcl/adump"
  audit_trail              = "DB"
  db_name                  = "orcl"
  open_cursors             = 300
  diagnostic_dest          = "/oracle"
4. ทำการสร้าง PFILE ชื่อ initorcl.ora ไว้ที่ Path /oracle/db11201/dbs โดยนำ content ของ alert log ที่ copy มาใส่ลงไปในไฟล์

5. เข้า sqlplus ด้วย user sys และทำการ start instance
$ sqlplus /nolog
sql> conn / as sysdba
sql> startup

6. ทำการสร้าง SPFILE จาก PFILE ไปไว้ที่ Path /oracle/db11201/dbs ด้วยคำสั่งต่อไปนี้
sql> create spfile='spfileorcl.ora'
       from pfile='/oracle/db11201/dbs/initorcl.ora';
7. เราจะได้ spfile ที่ชื่อ spfileorcl.ora มานะครับ

8. ทดสอบ startup instance อีกครั้ง พบว่าสามารถ start ได้ครับ
SQL> startup
ORACLE instance started.

Total System Global Area  849530880 bytes
Fixed Size                  1339824 bytes
Variable Size             499125840 bytes
Database Buffers          343932928 bytes
Redo Buffers                5132288 bytes
Database mounted.
Database opened.
SQL> 

เท่านี้เราก็สามารถนำ PFILE และ SPFILE กลับมาได้เหมือนเดิมแล้วครับ :)

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

Tuesday, June 15, 2010

มารู้จักกับ Oracle interMedia กันดีกว่า

Oracle interMedia เป็น feature ที่ทำให้ Oracle Database สามารถที่จะทำการเก็บ บริหารจัด หรือกู้คืนข้อมูลประเภท image, audio, video หรือ media data อื่นๆ โดย Oracle interMedia เพิ่ม reliacility, availability และ data management ในด้านของ multimedia ให้กับ Oracle Database ที่ multimedia เป็นเนื้อหาหรือส่วนต่างๆของ internet, e-commerce และ media-rich application

แต่ Oracle interMedia ไม่ได้ทำการควบคุม media capture หรือ output ของ device เนื่องจากส้วนนี้เป็นหน้าที่ของ application software

โดย Oracle interMedia ทำการบริหารจัดการกับ multimedia โดยรองรับสิ่งต่างๆเหล่านี้
  • การจัดเก็บและการกู้คืน
  • การบริหารจัดการกับ metadata ของ media และ application
  • สามารถที่จะรองรับได้หลาย format
  • สามารถ access ผ่านแบบปกติ และได้กับ web interface
  • ทำการ query ด้วยการใช้ความสัมพันธ์ของข้อมูล
  • ทำการ query ด้วย extracted metadata
  • ทำการ query ด้วยการใช้ media content ที่มี optional specialized indexing
Oracle interMedia รองรับ media content สำหรับ Oracle JDeveloper, Oracle Content Management SDK, Oracle Application Server Porta และ Oracle Partner ด้วย

ตัวอย่างการใช้งาน Oracle interMedia

1. ทำการ connect เข้า database ด้วย sqlplus และทำการ สร้าง table ที่ชื่อว่า "image_table" เพื่อใช้ในการเก็บรูป
connect hr/hr
create table image_table (id number primary key, image ordsys.ordimage);
2. ทำการสร้าง directory ที่เก็บรูปไว้โดย ตั้งให้ตรงกับ directory ที่เก็บรูปไว้อยู่ ด้วย user sys และทำการให้สิทธิในการอ่าน directory แก่ user hr
connect / as sysdba
create or replace directory imagedir as '/home/oracle/quickstart/';
grant read on directory imagedir to hr;
3. ใช้ user hr ในการสร้าง PL/SQL procedure ในการ import รูปเข้ามายัง table
create or replace procedure image_import(dest_id number, filename varchar2) is
img ordsys.ordimage;
ctx raw(64) := null;
begin
delete from image_table where id = dest_id;
insert into image_table (id,image)
values (dest_id, ordsys.ordimage.init())
returning image into img;

img.importFrom(ctx, 'file', 'IMAGEDIR', filename);
update image_table set image=img where id=dest_id;
end;
/
! ที่ IMAGEDIR จะต้องพิมพ์เป็นตัวใหญ่ทั้งหมด แม้ในตอนที่สร้าง directory ขึ้นมาจาพิมพ์ด้วยตัวพิมพ์เล็กก็ตาม

4. ทดลองเรียกใช้ procedure ที่สร้างขึ้นมา
call image_import(1,’book2.jpg’);
call image_import(2,’check.png’);
เสร็จแล้วรูปทั้งสองรูปจะถูกเพิ่มเข้าไปยัง table

5. ตรวจสอบรูปภาพด้วยคำสั่ง select ต่อไปนี้ โดยสามารถใช้ดูได้หลายคุณสมบัติของรูป แต่คำสั่งในตัวอย่างนี้จะเป็นการดูความกว้างความยาวของรูป
SQL> select id,t.image.getheight(),t.image.getwidth() from image t;

ID T.IMAGE.GETHEIGHT() T.IMAGE.GETWIDTH()
---------- ------------------- ------------------
1                 134                572
2                 464                667

ในลิ้งค์อ้างอิงยังมีตัวอย่างการใช้ Oracle interMedia อีก แต่ขอยกตัวอย่างมาเพียงเท่านี้ครับ

Credit by Ice

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

Thursday, June 10, 2010

มาลดเวลาการ Start Oracle Database ด้วย Auto Start กันเถอะ

โดยปกติ เวลาผมจะ Start Database นั้น ผมจะ Start แบบ manual มีวันนึงผมก็เริ่มขี้เกียจมา อยากจะให้ Database มัน Start เองเลยหลังจาก Boot OS เสร็จ...ผมเลยไปหาวิธีที่จะให้มัน Auto Start Database หลังจากการ boot OS เลยโดยที่ผมไม่ต้องไปทำ manual start อีกต่อไป วันนี้เลยอยากจะแชร์บทความนี้ไว้ เผื่อใครอยากทำบ้างนะครับ

มาดูวิธีที่จะทำให้ Oracle Database auto start ขึ้นมาหลังจากการ boot OS โดยที่ admin ไม่ต้อง manual start กันเลยดีกว่า

1. login root

2. เข้าไปแก้ที่ /etc/oratab
โดยสังเกตุที่บรรทัด orcl:/oracle/db11201:N
ถ้าเป็น N อยู่ให้เปลี่ยนเป็น Y ดังนี้ orcl:/oracle/db11201:Y

3.สร้างไฟล์ใหม่ชื่อ dbora ไว้ที่ /etc/init.d/ โดยรายละเอียดตามด้านล่าง

#!/bin/sh
#chkconfig: 345 99 10
#description: Oracle auto start-stop script.
#
#Set ORA_HOME to be equivalent to the $ORACLE_HOME
#from which you wish to execute dbstart and dbshut;
#
#Set ORA_OWNER to the user id of the owner of the
#Oracle database in ORA_HOME.

ORA_HOME=/oracle/db11201
ORA_OWNER=oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi

case "$1" in
'start')
#Start the Oracle databases:
#The following command assumes that the oracle login
#will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole" &
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
touch /var/lock/subsys/dbora
;;
'stop')
#Stop the Oracle databases:
#The following command assumes that the oracle login
#will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole" &
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
rm -f /var/lock/subsys/dbora
;;
esac

ข้อควรระวัง ต้องแก้ส่วน path ORA_HOME ให้ตรงตามที่เราเซ็ต $ORACLE_HOME ไว้ด้วย

4. ทำการ execute โดยใช้คำสั่งตามด้านล่างนี้

#chmod 750 /etc/init.d/dbora
#ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
#ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
#ln -s /etc/init.d/dbora /etc/rc.d/rc4.d/S99dbora
#ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
#ln -s /etc/init.d/dbora /etc/rc.d/rc6.d/K01dbora

5. ทำการ reboot เครื่องใหม่ ก็เป็นอันเสร็จ

เราจะทราบได้อย่างไรว่าสิ่งที่เราทำไป database ได้ start หรือ shutdown ได้ถูกต้องจริงๆ
  • ตรวจสอบ log file เมื่อเปิดเครื่อง ที่ $ORACLE_HOME/startup.log
  • ตรวจสอบ log file ไฟล์เมื่อปิดเครื่อง ที่ $ORACLE_HOME/shutdown.log

Credit by Bie

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

Tuesday, June 8, 2010

ทำไมการใช้ index จึงทำให้ query ข้อมูลได้ไวขึ้น?

การทำ index ในฐานข้อมูล ก็คลายกับการทำ index ในท้ายเล่มของหนังสือ การที่เราจะหาเนื้อหาในหนังสือเราก็เปิดไปที่ index แล้วก็หาว่าตัวเนื้อหาที่เราต้องการอ่านนั้นอยู่หน้าไหนบ้าง เราก็เปิดไปยังหน้านั้นได้เลย โดยที่ไม่ต้องมาเปิดหนังสือดูทุกหน้าว่าเนื้อหาที่เรากำลังหานั้นอยู่หน้าไหน

ในฐานข้อมูลการทำ index ก็จะทำให้กับ field หรือคอลัมน์ที่เรามีเงื่อนไขในการ query บ่อยๆ การดึงข้อมูลก็จะไปดูที่ index แล้วกระโดดไปยังตำแหน่งที่เก็บข้อมูลเลยโดยไม่ต้องค้นหาทุกแถวในตาราง

ตัวอย่างเช่น การทำ index ให้กับตาราง employees ที่คอลัมน์ emp_id
1rowid
2rowid
3rowid
..
..
..

เมื่อมีการ query

SELECT *
FROM employees
WHERE emp_id = 3;

Database ก็จะวิ่งไปดึงข้อมูลยังตำแหน่งที่เก็บข้อมูลของ emp003 มาแสดง โดยที่ไม่ต้องวิ่งไปหาทุกๆ แถวในตาราง employees

Oracle Database มี Index อยู่หลายประเภทแต่ที่ถูกใช้กันทั่วไปคือ B-Tree Indexes

(รูปภาพจาก www.oracle.com)

จากรูปจะเห็นว่า B-tree Index นั้นมี block อยู่สองประเภทด้วยกันคือ Branch blocks ไว้สำหรับการค้นหา และ leaf blocks สำหรับเก็บค่า ในการค้นหาก็จะแบ่งเป็นช่วงๆ ตามขอบเขตแต่ละ block ทำให้การค้นหานั้นมีประสิทธิภาพ

ซึ่ง การใช้ index นั้น ยังมีรายละเอียดเสริมเพื่อเพิ่มความเข้าใจอีก โดย คุณ Siamnobita ได้อธิบายเกี่ยวกับ index ด้วยกัน 5 ข้อดังต่อไปนี้

1. สิ่งที่ทำให้เราสามารถค้นหาใน index ได้เร็วนั้นเนื่องจากมีการ sort ตามค่าในคอลัมน์ด้วย เคยมีคนตั้งคำถามใน narisa ประมาณว่าทำไม oracle ถึงไม่เรียงลำดับข้อมูลในตารางซะเลย จะได้ไม่ต้องใช้ index คำตอบก็คือการจัดเก็บแบบเรียงลำดับนั้นทำได้ยากกว่าและเกิดต้นทุนตามมาเช่น เวลาที่ใช้เมื่อมีการเพิ่ม record ใหม่ พื้นที่ว่างเมื่อเกิดการ split block เป็นต้น อย่างไรก็ดีหากเราไม่มีปัญหากับต้นทุนเหล่านี้ เราก็สามารถจัดเก็บข้อมูลในตารางแบบเรียงลำดับได้เลย นั่นคือใช้ index-organized table (IOT) ซึ่งถือเป็นวิธีที่เร็วที่สุดในการค้นหาข้อมูลตาม primary key

2. ปกติเวลา oracle อ่านข้อมูลจะอ่านทีละ block ไม่ใช่ทีละแถว ดังนั้นจะดูว่าเร็วหรือช้า จะนับจากว่า oracle ต้อง access ข้อมูลจำนวนกี่ block เช่น

ถ้าดูจากรูปด้านบน index มี 3 level
เมื่อเรา select * from ... where index_column = ??
oracle จะอ่านข้อมูลทั้งสิ้น 4 block คือ root block ตัวบนสุด, branch block ตัวกลาง, leaf block ตัวล่างสุด, table block ซึ่งรู้ได้ทันทีเมื่อรู้ค่า rowid จำนวน level ที่น้อยที่สุดที่เป็นไปได้คือ 1 level คือเก็บ rowid ไว้ใน root block เลย ซึ่งจะเกิดในกรณีที่ข้อมูลมีจำนวนไม่มาก ( โดย default ขนาดของ block ประมาณ 8K )

3. คำถามคือ หากข้อมูลมีขนาดเล็ก ๆ เช่น ตารางมีขนาดแค่ block เดียว การใช้ index ยังมีประโยชน์อยู่หรือไม่ เดิมผมเคยเข้าใจว่าไม่มีประโยชน์เหมือนกัน แต่เมื่อได้อ่าน blog ของคุณ richard foote ซึ่งทำการทดสอบให้เห็นชัด ๆ ไปเลย พบว่า index ก็ยังมีประโยชน์อยู่ดี เนื่องจาก

3.1 ในการ full table scan นอกจากตัว block ที่เก็บ data แล้วยังต้องอ่าน header block ด้วยจึงมี cost ที่เกิดขึ้นไม่ใช่แค่ 1 I/O เมื่อเทียบกับ index ที่ใช้ 2 I/O (root block + data block) ก็พอ ๆ กัน

3.2 ในการ full table scan จะเก็บ data ที่อ่านมาบน buffer cache ด้าน LRU ซึ่งจะอยู่ใน memory ได้ไม่นาน ขณะที่ index scan จะวางไว้ด้าน MRU ทำให้มีโอกาสใช้ประโยชน์จากการอ่านจาก memory โดยตรงได้มากกว่า โดยเฉพาะเมื่อมีการเรียกใช้ข้อมูลจาก table บ่อย ๆ

4. ในข้อ 3 เขาทดสอบเฉพาะกรณี index unique scan เช่นค้นตาม primary key เท่านั้น หากเป็น index range scan จะเป็นอีกกรณีหนึ่ง ซึ่งทุก rowid ที่เจอใน index ก็จะต้องมีการ access table block หนึ่งครั้ง แม้ว่า block นั้นจะอยู่บน memory แล้วก็ยังเป็น cost อยู่ดี ดังนั้น full table scan ก็อาจจะคุ้มกว่าขึ้นกับจำนวนแถวที่ต้องการ

5. ประโยชน์ของ index อีกข้อ คือโดยปกติจำนวน column ใน index จะน้อยกว่า column ใน table มาก ๆ ดังนั้นขนาดของ index ก็จะเล็กกว่า table มาก ๆ ด้วย หากเราต้องการดูเฉพาะข้อมูลที่อยู่ใน index อยู่แล้ว เราก็อาจ full scan ที่ index แทน table ไปเลยก็ได้ ซึ่งกรณีนี้จะเป็นการ fast full scan ซึ่งอ่าน index แบบ multi block เหมือน table scan ( full scan ใน index มี 2 แบบ full scan เฉย ๆ กับ fast full scan แบบแรกอ่านทีละ block ซึ่งช้ากว่า แต่ข้อดีคือ ผลลัพธ์มีการ sort ตาม index แบบหลังจะไม่มีการเรียงลำดับ

ปล. ต้องขอบคุณคำอธิบายดี ๆ จาก คุณ Siamnobita มาก ๆ ครับ

Credit by Paley (@ratipong)

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

Friday, June 4, 2010

การเลือก Shutdown database ให้เหมาะสม

หลายท่านที่ได้ทำ Database ต้องรู้จักการ Shutdown database อย่างแน่นอน ซึ่งบางคนก็จะใช้แต่คำสั่ง Shutdown immediate แต่คุณรู้ไหมว่าจริง ๆ แล้วการ shutdown นั้น มีหลายแบบแต่ละแบบนั้นมีความแตกต่างกันขึ้นอยู่กับความเหมาะสมของแต่ละงาน ฉะนั้น เรามาดูกันดีกว่าว่า เราควรจะ Shutdown database แบบไหนให้เหมาะสมที่สุด...


Mode ในการ Shutdown database มีด้วยกัน 4 mode ดังนี้

SHUTDOWN NORMAL mode นี้จะเป็น mode ปกติ ที่ต้องรอให้ผู้ใช้ ใช้งานเสร็จทั้งหมดก่อนถึงจะ shutdown ให้
  • หลังทำการรันคำสั่งนี้แล้ว จะไม่อนุญาตให้มีการเชื่อมต่อเข้ามาใหม่ และ จะรอจนกว่าการเชื่อมต่อที่มีอยู่ทำการยกเลิกการเชื่อมต่อก่อนจึงจะ shutdown
  • การ startup ครั้งต่อไป จะไม่มีการทำ instance recovery

SHUTDOWN TRANSACTIONAL mode นี้จะเป็นการ shutdown ไม่ต้องรอให้ผู้ใช้คนอื่นทำ sessions เสร็จก่อน โดยจะทำการปิด sessions ให้เลย แต่ถ้ายังมีการทำ transactions อยู่ก็รอจนกว่าจะทำเสร็จถึงจะปิดให้
  • หลังทำการรันคำสั่งนี้แล้ว จะไม่อนุญาตให้มีการเชื่อมต่อเข้ามาใหม่ รวมถึง transaction ที่ยังไม่ได้รัน
  • จะรอให้ Transaction ที่ทำงานค้างอยู่ทำงานให้เสร็จก่อน จากนั้นจะทำการยกเลิกการเชื่อมต่อทั้งหมด
  • มีประโยชน์สำหรับการป้องกันไม่ให้งานที่ทำอยู่เกิดข้อผิดพลาด เนื่องจากจะรอให้ทำ transaction ต่างๆที่ค้างอยู่เสร็จก่อน
  • การ startup ครั้งต่อไป จะไม่มีการทำ instance recovery

SHUTDOWN IMMEDIATE mode ไม่ต้องรอใน transactions mode นี้จะปิดให้เลยโดยไม่เลย transactions จบ
  • หลังทำการรันคำสั่งนี้แล้ว จะไม่อนุญาตให้มีการเชื่อมต่อเข้ามาใหม่ รวมถึง transaction ที่ยังไม่ได้รัน
  • Transaction ใดๆที่ยังไม่ได้มีการ commit จะถูก roll back ไปทั้งหมด
  • การเชื่อมต่อทั้งหมดจะถูกยกเลิกทันที
  • การ startup ครั้งต่อไป จะไม่มีการทำ instance recovery

SHUTDOWN ABORT mode นี้จะเป็นการ shutdown เร็วที่สุด เพราะ mode นี้จะไม่ต้องรออะไร
  • หลังทำการรันคำสั่งนี้แล้ว จะไม่อนุญาตให้มีการเชื่อมต่อเข้ามาใหม่ รวมถึง transaction ที่ยังไม่ได้รัน
  • SQL Statement ที่กำลังทำงานอยู่จะถูก terminate ทันที
  • Transaction ใดๆที่ยังไม่ได้มีการ commit จะไม่ถูก roll back
  • การเชื่อมต่อทั้งหมดจะถูกยกเลิกทันที
  • การ startup ครั้งต่อไป จะมีการทำ instance recovery

หรือสามารถดูสรุปได้จากตารางด้านล่างครับ

Database Behavior ABORT IMMEDIATE TRANSACTIONAL NORMAL

Permits new user connections

No

No

No

No

Waits until current sessions end

No

No

No

Yes

Waits until current transactions end

No

No

Yes

Yes

Performs a checkpoint and closes open files

No

Yes

Yes

Yes

Credit by Yong(@stigmatise)

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

Thursday, May 27, 2010

10 อันดับแรก ของระบบฐานข้อมูล ที่น่าจับตามอง


ว่ากันด้วยเรื่องของระบบฐานข้อมูล หรือ Database System ถ้าผู้ที่เริ่มรู้จักหรือสนใจเรื่อง Database ได้ไม่นาน(ย้อนหลังไปซัก 5 ปี) จะไม่รู้ว่า Database นั้น ได้ถือกำเนิดมานานแล้วตั้งแต่ปลาย ๆ ปี 1970 โดยประมาณ ซึ่งพอหันกลับมามองในช่วงปีนี้ ก็ไม่สามารถจะแย้งได้เลยว่า วงการการตลาดของ Database นั้น มันเจริญเติบโตอย่างรวดเร็วเลยทีเดียว ยิ่งในช่วงปีนี้ เหล่าองค์กร Database ต่าง ๆ เกิดการปรับเปลี่ียนตัวผลิตภัณฑ์ของเขาเองเพื่อที่จะพร้อมแข่งขันกับคู่แข่งที่มากขึ้น ๆ ทุกวัน แถมยังมีประสิทธิภาพที่ดีมากขึ้นกว่าสมัยก่อนเป็นอย่างมาก

ฉะนั้นแล้ว สำหรับผู้ที่กำลังมองหา Database ซักตัว มาใช้ทำงานอะไรซักอย่าง บทความนี่้จะช่วยคุณในการ พิจารณา Database ที่ดีที่เหมาะแก่การใช้งานของคุณ โดยเรียงลำดับ 10 อันดับแรกของ Database ที่กำลังมาแรงในปัจจุบัน

1. Oracle
Oracle เริ่มมาตั้งแต่ปี 1979 ซึ่งเป็นองค์กรแรกก็ว่าได้ทีมี Database แบบ Relational database management system หรือที่เรียกย่อ ๆ ว่า RDBMS นั่นเอง โดยผู้ที่เป็นหัวเรือ CEO ของ Oracle จะเป็นใครไปไม่ได้นอกจาก Larry Ellison ซึ่งเป็นผู้ที่ทำให้ Oracle มีองค์กรที่เป็นลูกค้ากว่า 500 องค์กร และเป็นองค์กรที่ทำระบบฐานข้อมูลที่โด่งดังเกือบจะมากที่สุดก็ว่าได้

2. SQL Server
ถ้าพูดถึง Microsoft ที่เป็นบริษัทซอร์ฟแวร์ที่ใคร ๆ ก็รู้จัก ซึ่ง SQL Server ก็ส่วนหนึ่งที่ทำให้ Microsoft มีชื่อเสียงมากขึ้น เพราะ OS ของ Microsoft ก็มีอยู่เกือบทั่วทุกแห่ง และยิ่งถ้าคุณใช้ Microsoft Server แล้วละก็ คุณก็ต้องใช้ SQL Server ควบคู่กันไปเพราะมันทำงานได้ง่ายขึ้นและเหมาะที่จะรันบน Windows ที่ใคร ๆ ก็ใช้ด้วย

3. DB2
สำหรับ DB2 ที่ IBM เป็นเจ้าของนั้น สามารถทำงานได้บนหลายแฟลตฟอร์ม เช่น Linux, UNIX, Windows โดย IBM ได้ทำการพัฒนา DB2 เวอร์ชั่น 9.7 นี้ เพื่อมาแย่งตลาด Oracle โดยยึดแนวคิดที่ว่า "Lower costs. Easy to use. Secure." และเหมาะสำหรับองค์กรที่มีขนาดไม่ใหญ่โตนัก ซึ่งหากต้องการหาระบบจัดการฐานข้อมูลที่ดีและมีประสิทธิภาพสูง ดังนั้น DB2 เวอร์ชั่น 9.7 นี้น่าสนใจมากทีเดียว

4. Sybase
Sybase ยังคงเป็นผู้นำในด้าน Adaptive Server Enterprise หลังจาก 25 ปีแห่งความสำเร็จที่ผ่านมาและการปรับปรุงผลิตภัณฑ์ของ Adaptive Server Enterprise อยู่เรื่อย ๆ แต่เมื่อเร็ว ๆ นี้ Sybase ก็ได้ถูกซื้อโดย SAP ไปซะแล้ว

5. MySQL
เป็นระบบจัดการฐานข้อมูลโดยใช้ภาษา SQL แม้ว่า MySQL เป็นซอฟต์แวร์โอเพนซอร์ส แต่แตกต่างจากซอฟต์แวร์โอเพนซอร์สทั่วไป โดยมีการพัฒนาภายใต้บริษัท MySQL AB ในประเทศสวีเดน โดยจัดการ MySQL ทั้งในแบบที่ให้ใช้ฟรี และแบบที่ใช้ในเชิงธุรกิจ แต่อย่างไรก็ตาม ตอนนี้ Oracle ก็ได้ชื่อว่าเป็นเจ้าของ MySQL ไปซะแล้วและ Oracle ได้ประกาศต่อสาธารณะอย่างมุ่งมั่นว่าจะพัฒนาอย่างต่อเนื่องและสนับสนุน MySQL อย่างสุดกำลัง

6. PostgreSQL
PostgreSQL หรือนิยมเรียกว่า โพสต์เกรส (Postgres) เป็นระบบจัดการฐานข้อมูลในลักษณะของซอฟต์แวร์เสรีภายใต้สัญญาอนุญาตบีเอสดี ชื่อเดิมของซอฟต์แวร์คือ โพสต์เกรส ซึ่งต่อมาได้ถูกเปลี่ยนเป็นโพสต์เกรสคิวเอล โดยประกาศออกมาจากทีมหลักในปี 2550 ชื่อของโพสต์เกรสมาจากชื่อ post-Ingres ซึ่งหมายถึงตัวซอฟต์แวร์ที่พัฒนาต่อจากซอฟต์แวร์ชื่ออินเกรส
นั่นเอง

7. Teradata
ถ้าคุณเคยทำฐานข้อมูลในระดับใหญ่ ๆ คุณอาจจะเคยได้ยิน Teradata อยู่บ้าง Teradata เกิดขึ้นเมื่อปี 1970 เป็นผู้ที่วางรากฐานสำหรับคลังข้อมูลแรก ๆ ก่อนที่จะมีอย่างเป็นทางการ ซึ่งผู้เชี่ยวชาญด้านคลังสินค้าหรือ Data warehouse มักจะเรียก Teradata ในความหมายเดียวกับ บริษัทคลังข้อมูลขนาดใหญ่นั่นเอง

8. Informix
เป็นผลิตภัณฑ์อีกตัวหนึ่งของ IBM ที่ถูกพัฒนาออกมาหลายเวอร์ชั่นมาก ตั้งแต่ imited Developer Edition จนถึง entry-level Express Edition หรือ low-maintenance online transaction processing (OLTP) Workgroup Edition และ high-performance OLTP Enterprise Edition โดย Infomix จะยึดหลักที่ว่า "ลูกค้ามักจะได้ต้นทุนต่ำของการบำรุงรักษาและความน่าเชื่อถือสูงที่สุด"

9. Ingres
Ingres เป็นส่วนรากฐานของโอเพ่นซอร์สในตระกูล PostgreSQL และฐานข้อมูลอื่น ๆ หรือเรียดได้ง่าย ๆ ว่า คือ RDBMS (Relational Database Management System) แบบโอเพ่นซอร์สของบริษัทคอมพิวเตอร์ แอสโซซิเอทส์ จำกัด (Computer Associates - CA) ซึ่งเป็นหนึ่งในระบบจัดการฐานข้อมูลเชิงสัมพันธ์หรือ RDBMS อันดับต้นๆ ของโลก

10. Amazon's SimpleDB
ฐานข้อมูลแบบง่ายๆ มีตารางเดียว แต่รองรับปริมาณข้อมูลจำนวนมากได้ โดยทั่วไปแล้ว SimpleDB จะมีการใช้งานที่ใกล้เคียงกับ SQL ตามปรกติ ที่ต่างออกไปคือการทำ Query ต้องอยู่บนตารางเดียวเท่านั้น และสามารถใช้ Expression ได้เพียงพื้นฐาน แต่มีข้อดีคือการเพิ่มขนาดของ SimpleDB นั้นทำได้ค่อนข้างง่ายและที่สำคัญที่สุดคือไม่มีค่าธรรมเนียมขั้นต่ำ

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

Tuesday, May 25, 2010

ถึงเวลาออกตัว MySQL entreprise เวอร์ชั่นใหม่กันเสียที



ได้ฤกษ์ออกเวอร์ชั่นใหม่เสียทีกันเสียทีสำหรับซอฟแวร์ฐานข้อมูลโอเพนซอร์สอย่าง MySQL หลังจากที่ถูก Oracle เข้าไป take over มาสักระยะ ก็ถึงเวลาที่จะออกเวอร์ชั่นใหม่ให้กับ MySQL enterprise ซึ่งในเวอร์ชั่นนี้มี component ใหม่ที่สำคัญอย่าง MySQL Enterprise Monitor 2.2 ที่จะเพิ่มประสิทธิภาพในการ monitor ให้กับเหล่า DBA ได้เป็นอย่างดี

สามารถอ่านรายละเอียดเพิ่มเติมได้จาก Link ด้านล่างเลยครับ
Oracle releases new version of MySQL enterprise

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

Friday, May 21, 2010

เหล่าคนรักจาวาทั้งหลายไม่ควรพลาด JavaOne + Develop 2010 เปิดให้ลงทะเบียนแล้ววันนี


JavaOne and Develop เป็นงานที่รวมพลคนรักจาวาจากทุกมุมโลก ให้มาพบปะแลกเปลี่ยนประสบการณ์กัน โดยจะมีการจัดแสดงนวัตกรรมต่างๆด้านเทคโนโลยีจาวา ซึ่งช่วยเปิดวิสัยทัศน์และเพิ่มโอกาสทางธุรกิจ 
 
โดยงาน "JavaOne and Develop 2010" ครั้งนี้จัดที่ซานฟรานซิสโก สหรัฐอเมริกา ระหว่างวันที่ 19-23 กันยายน 2010 คุณสามารถลงทะเบียนเพื่อเข้าร่วมงานได้แล้ววันนี้ที่ http://www.oracle.com/us/openworld/036763.htm


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