วันอังคารที่ 24 กุมภาพันธ์ พ.ศ. 2558

Oracle Concept: Schema คืออะไร Instance คืออะไร Tablespace คืออะไร

Oracle Concept: Schema คืออะไร Instance คืออะไร Tablespace คืออะไร


ไม่แปลกที่เวลาใครใช้งาน Oracle ครั้งแรกจะต้องงงกับศัพท์ต่างๆ ที่ใช้ใน Oracle database
blog post นี้ก็เลยจะเขียนอธิบายเกี่ยวกับ concept เบื้องต้นของ oracle ที่คิดว่าคนที่ใช้ใหม่ๆ อาจจะสับสนครับ

Instance

Instance (หรือ SID) ถ้ามองง่ายๆ ก็เหมือน service ของ Oracle database นั่นเอง โดยปกติแล้วเราก็จะสร้าง instance เพียง instance เดียว เพื่อความง่ายในการจัดการ (แต่บางที่ก็มีการสร้างหลายๆ instance แยกกัน อันนี้ก็สามารถทำได้เหมือนกัน)

Schema

ใน Oracle นั้นจะมอง schema เป็นเสมือน user (ถ้าดู script create schema ของ oracle จะเป็น CREATE USER ABC... ก็จะได้มาทั้ง user และ schema ชื่อ ABC)
โดย schema ของ Oracle นั้นเป็นที่เก็บ object ต่างๆ ของ database เช่น table, view, index และอื่นๆ ในเชิง logical (หรือถ้ามองง่ายๆ ก็เหมือนกับบอกว่า object พวกนี้เป็นของใคร) เวลาที่เราจะ query table ที่เป็นของเราเองก็ไม่จำเป็นต้องระบุ schema ก็ได้ เช่น SELECT * FROM MY_TABLE แต่ถ้าเราต้องการ query table ที่อยู่ใน schema อื่น (เป็นของคนอื่น) เราจะต้องระบุ schema ด้วย เช่น SELECT * FROM XYZ.HIS_TABLE เป็นต้น

Tablespace (และ data file)

Tablespace และ data file ก็คือที่เก็บ object ต่างๆ ของ database ในเชิง physical นั่นเอง โดยการมองการเก็บ object แบบ physical นี้ถูกแบ่งออกเป็น 2 layer
layer แรกคือ layer ที่เป็น tablespace กล่าวคือ object ต่างๆ จะถูกกำหนดไว้ว่าให้จัดเก็บไว้ใน tablespace ไหนในตอนสร้าง (ไม่กำหนดก็ได้ แต่จะไปเข้า default tablespace ของ schema ที่ object นั้นถูกสร้างขึ้นมา)
ส่วน layer ที่ 2 คือ layer ที่เป็น data file (หรือเป็น path ของพื้นที่บนเครื่องจริงๆ) โดยที่ tablespace ก็จะถูกชี้มาที่ data file อีกทีนึง (ในกรณีที่เพิ่ม disk หรือจะให้เก็บที่ path อื่นเพิ่มเติมก็สามารถทำได้ เพราะ mapping ระหว่าง tablespace กับ data file ไม่จำเป็นต้องเป็น 1:1 โดยที่ tablespace นึงสามารถมี data file ได้มากกว่า 1 data file

สุดท้ายนี้ขอฝาก diagram สรุปความสัมพันธ์คร่าวๆ ดังนี้






Data Warehouse (2) : ส่วนประกอบของ Data Warehouse

Data Warehouse (2) : ส่วนประกอบของ Data Warehouse


ใน blog post ที่แล้วได้พูดถึง concept คร่าวๆ ของ data warehouse รวมไปถึงประโยชน์ในเชิงการใช้งานของ data warehouse ไปแล้ว ต่อมาที่จะพูดถึงก็จะเป็นส่วนประกอบของ data warehouse

ส่วนประกอบของ data warehouse


เราจะอธิบายส่วนประกอบของ data warehouse (และมันไปติดต่อกับระบบอื่นยังไง) ผ่าน diagram ที่แสดงการไหลของข้อมูลอันนี้


จากรูปจะแบ่ง layer ของระบบ (หรือฐานข้อมูล) ออกเป็นทั้งหมด 5 layer ด้วยกัน ได้แก่

1. Operational System

Operational system ก็คือระบบต่างๆ ขององค์กรนั่นเอง โดยระบบพวกนี้จะใช้ฐานข้อมูลที่อยู่ในรูปแบบที่เรียกว่า OLTP (Online Transaction Processing) กล่าวคือถูกออกแบบมาเพื่อรองรับการเขียนอ่านข้อมูลในทันที (หรือในเวลาอันสั้น) โดยจุดประสงค์หลักของฐานข้อมูลพวกนี้คือจะต้องเก็บและเรียกใช้ข้อมูล (จำนวนไม่มาก ต่อครั้ง) ได้อย่างรวดเร็ว และถูกต้องแม่นยำ ไม่สูญหาย ถ้ายกตัวอย่างจากบริษัทร้านค้า ระบบพวกนี้ก็จะเป็นประเภท POS, E-commerce หรือ Inventory (เก็บข้อมูลสินค้าคงคลังใน stock) เป็นต้น

2. Staging Layer

Staging Layer ก็เป็นชื่อเรียก layer ที่คั่นกลางระหว่าง operational system กับ data warehouse ซึ่ง staging นี้จะเป็นที่พักข้อมูลระหว่างการแปลงข้อมูลจากรูปแบบของ operational system กับ data warehouse โดยกระบวนการแปลงข้อมูลนี้เรียกว่า ETL (Extract, Transform, Load) ซึ่งกระบวนการ ETL นี้ก็จะถูกใช้ตั้งแต่ operational system ไปจนถึง data mart เลยทีเดียว โดยหลักการเบื้องต้นแบบง่ายๆ ของกระบวนการ ETL ก็คือ ดึง (extract) ข้อมูลออกมาจากระบบต้นทาง แปลงข้อมูลให้อยู๋ในรูปแบบที่ต้องการ (transform) และ write data ลงสู่ที่หมายปลายทาง (load) โดยปกติ staging layer นี้ก็จะเป็นแค่ที่พักของข้อมูลเท่านั้น ดังนั้นโดยปกติก็จะถูกลบเมื่อใช้งานเสร็จ (หรืออาจจะเก็บไว้เผื่อในกรณีที่การนำข้อมูลเข้า data warehouse ไม่สำเร็จ แต่อย่างไรก็ตามโดยปกติแล้วก็จะไม่ค่อยมีการเก็บข้อมูล historical ของ staging ไว้)

3. Data Warehouse Layer

อันนี้ก็จะเป็นส่วนที่เก็บข้อมูลของตัว data warehouse เอง

4. Data Mart Layer

Data mart เป็น subset ของ data warehouse หรือก็คือเป็น data warehouse ฉบับย่อๆ โดยจุดประสงค์ของการแยกออกมาเป็น data mart คือ ต้องการนำข้อมูลไปใช้ โดยมีจุดประสงค์เฉพาะเจาะจง เช่น จากตัวอย่างก็มีการสร้าง data mart ออกมา 3 mart คือ Customer analysis data mart เพื่อนำมาใช้ในการวิเคราะห์ข้อมูลการซื้อสินค้าของลูกค้า, Inventory analysis data mart เพื่อนำมาใช้ในการวิเคราะห์สินค้าคงคลัง (อาจจะวิเคราะห์เพื่อหาวิธีลดต้นทุน เป็นต้น) และ report data mart สำหรับนำมาใช้สร้าง report ทั้งนี้ทั้ง 3 data mart นี้เป็นเพียงตัวอย่างที่แสดงให้เห็นว่า สามารถเลือกสร้าง data mart ออกมาได้จากทั้งในเชิงของ business area (เช่น 2 mart แรก) และในเชิงของฟังก์ชั่นการใช้งาน เช่น report data mart

5. Application Layer

อันนี้จะเป็นส่วนของตัวระบบต่างๆ ที่เอาข้อมูลจาก data mart ไปใช้ ที่ยกตัวอย่างมาก็เช่น ระบบ report ซึ่งสร้าง report จากข้อมูลใน data mart ซึ่ง report นอกจากจะสร้าง report ในลักษณะที่เป็น static (นึกถึงรายงานใน Excel ปกติ ที่ดูได้อย่างเดียว ไม่สามารถทำอะไรได้) report ที่ดึงข้อมูลจาก data mart ไปก็สามารถนำไปสร้าง report แบบ dynamic ได้ (ลองนึกถึง pivot table ใน Excel ที่สามารถดูรายละเอียดย่อยลงไปได้ เช่น ถ้ามีข้อมูลระดับปีแล้ว อยากจะดูแต่ละเดือนในแต่ละปีก็สามารถดูได้ เป็นต้น)
หรือระบบ data mining ซึ่งสามารถนำข้อมูลใน data mart ไปใช้ในการวิเคราะห์ และสร้างแบบจำลองเพื่อค้นหารูปแบบที่ซ่อนอยู่ในข้อมูล หรือทำนายได้ เช่น อาจจะนำไปใช้วิเคราะห์ดูว่าลูกค้าประเภทไหนที่ชอบซื้อสินค้าในแต่ละประเภท เป็นต้น

วันจันทร์ที่ 23 กุมภาพันธ์ พ.ศ. 2558

Data Warehouse (1) : Data Warehouse คืออะไร?

Data Warehouse (1)

Data Warehouse คืออะไร?


Data Warehouse เป็นระบบคอมพิวเตอร์ในรูปแบบนึง ซึ่งมีวัตถุประสงค์เพื่อรวบรวมข้อมูลจากระบบต่างๆ ขององค์กร เพื่อนำมาใช้ประโยชน์ในการออกรายงาน (report) และวิเคราะห์ข้อมูล โดยปกติแล้วเราจะเห็นระบบ Data Warehouse ในองค์กรที่มีขนาดใหญ่ โดย Data Warehouse ก็จะเป็นศูนย์รวมข้อมูลจากระบบงานต่างๆ เช่น ร้านขายของ อาจจะมีระบบหลายๆ ระบบ เช่น ระบบ stock สินค้า ที่เก็บจำนวนสินค้าที่อยู่ในคลังสินค้า, ระบบ point of sale (หรือ POS) ที่ทำการบันทึกข้อมูลเวลาลูกค้าซื้อของจากร้านค้า, ระบบที่จัดการการขายของบนเวปไซต์ (e-commerce) เป็นต้น ซึ่งระบบเหล่านี้เป็นระบบในรูปแบบที่เป็น operational system คือ ออกแบบมาเพื่อทำงานใดงานหนึ่งโดยเฉพาะเจาะจง ไม่ได้ถูกออกแบบมาเพื่อวิเคราะห์ข้อมูล (ในภาพรวม) ขององค์กร

Data Warehouse ดียังไง? : ประโยชน์ของ Data Warehouse


1. เป็นแหล่งรวมข้อมูลของทั้งองค์กร - อยากได้ข้อมูลอะไรก็มาหาจากที่นี่


โดยปกติแล้วระบบ Data Warehouse ขององค์กรก็จะมีการรวบรวมข้อมูลจากระบบ operational system ต่างๆ ในองค์กรเพื่อนำมาสร้างเป็น report หรือ นำมาใช้สำหรับการวิเคราะห์ข้อมูล เช่น จากตัวอย่าง ถ้าร้านขายของดังกล่าวมีการนำระบบ Data Warehouse มาใช้ ก็จะสามารถวิเคราะห์ข้อมูลการซื้อสินค้าของลูกค้าได้อย่างครบถ้วนมากขึ้น เช่น จากเดิมถ้าวิเคราะห์แบบแยกระบบก็จะเห็นการซื้อสินค้าของลูกค้าผ่านทางหน้าร้านอย่างเดียว หรือจากทางเวปไซต์อย่างเดียว แต่ถ้าเรานำระบบ Data Warehouse มาใช้ ก็จะสามารถวิเคราะห์ข้อมูลการซื้อสินค้าของลูกค้าได้อย่างครบถ้วนไม่ว่าจะเป็นจากทางหน้าร้าน หรือผ่านทางเวปไซต์ก็ตาม

ในอนาคตถ้ามี user ต้องการข้อมูลอะไรก็ตามขององค์กร ก็สามารถเข้าถึงข้อมูลทั้งหมดผ่านทาง Data Warehouse ได้ ซึ่งนอกจากจะสะดวกแล้ว ยังมีประโยชน์อื่นๆ อีก เช่น มองข้อมูลได้ครบถ้วน รอบด้าน (จากตัวอย่างข้างต้น), ได้ข้อมูลที่ถูกต้องและชัดเจน (เช่น โดยปกติแต่ละแผนกอาจจะมีวิธีการคำนวนค่าต่างๆ ต่างกัน เช่น Sales Amount, Profit เป็นต้น แต่เมื่อเรานำข้อมูลจากระบบ หรือ แผนกต่างๆ มาไว้ที่ Data Warehouse แล้ว ข้อมูลทั้งหมดจะต้องถูกคำนวนด้วยสูตร หรือวิธีเดียวกัน เพื่อให้ข้อมูลที่ดึงจาก Data Warehouse มีความถูกต้องและชัดเจน)

2. เก็บข้อมูลย้อนหลัง - สามารถเก็บข้อมูลตามความจริงในช่วงเวลานั้นๆ


โดยปกติแล้ว Data Warehouse ก็จะถูกออกแบบสำหรับเก็บข้อมูลย้อนหลังเป็นช่วงเวลานานๆ เช่น 6 เดือน, 1 ปี, 5 ปี หรือนานกว่านั้นก็สามารถทำได้ เพื่อนำมาใช้ในการวิเคราะห์ แต่ลักษณะพิเศษอย่างนึงของ Data Warehouse ก็คือ มันถูกออกแบบมาเพื่อให้เก็บข้อมูลเพื่อใช้ในการวิเคราะห์ แม้ว่าจะเป็นข้อมูลในอดีตก็ตาม เช่นยกตัวอย่างคือ ถ้านาย A เป็นลูกค้าของร้านขายของเรามาอย่างยาวนาน ในอดีตนาย A เป็นนักศึกษามหาวิทยาลัย ซึ่งมีพฤติกรรมการซื้อของใช้ประเภทขนม และน้ำอัดลมเยอะ แต่หลังจากนั้นเมื่อนาย A ได้เริ่มทำงาน มีอาชีพเป็นพนักงานบริษัท นาย A ได้เปลี่ยนแปลงพฤติกรรมการซื้อของตัวเองเป็นซื้ออาหารเพื่อสุขภาพมากขึ้น แต่โดยปกติแล้วระบบ operational system ต่างๆ จะเก็บเฉพาะข้อมูลปัจจุบัน และไม่มีการเก็บข้อมูลในอดีตไว้ ทำให้เมื่อเรามาวิเคราะห์ข้อมูลของลูกค้าที่เป็นพนักงานบริษัท ณ เวลาปัจจุบัน อาจจะเข้าใจผิดคิดว่าลูกค้าลักษณะนี้มีพฤติกรรมที่ชอบซื้อขนม และน้ำอัดลม เป็นต้น

อย่างไรก็ตาม ถ้าเป็น Data Warehouse แล้ว ตัว Data Warehouse จะมีการออกแบบเพื่อเก็บข้อมูลที่มีการเปลี่ยนแปลงนี้ไว้ ทั้งข้อมูลในอดีตและปัจจุบัน ทำให้เราสามารถเข้าใจลูกค้าได้แม่นยำมากขึ้น เช่น ในกรณีนี้ก็จะเข้าใจได้ว่า ลูกค้าที่เป็นนักศึกษามหาวิทยาลัยนิยมซื้อสินค้าประเภทขนม และน้ำอัดลม ส่วนลูกค้าประเภทพนักงานบริษัทนิยมซื้ออาหารเพื่อสุขภาพ เป็นต้น


3. ความรวดเร็วในการ query (ดึงข้อมูล) - ระบบถูกออกแบบมาเพื่อรองรับการ query เป็นหลัก


ระบบ Data Warehouse นั้น จะถูกออกแบบด้วยวิธีการที่เรียกว่า Dimensional Modeling ซึ่งการออกแบบนี้จะต่างจากแนวคิดในการออกแบบของระบบ operational system เนื่องจาก Data Warehouse นั้นโดยวัตถุประสงค์ของการทำงาน จะถูกออกแบบมาเพื่อรองรับการทำงานในลักษณะ query เป็นส่วนใหญ่ ทำให้การ query ข้อมูลจาก Data Warehouse จะมีความเร็วมากกว่าการ query ข้อมูลจากระบบ operational system



วันพุธที่ 6 เมษายน พ.ศ. 2554

Oracle How To: create user via SQL plus

หลังจากลองลง Oracle Server 64 bit ลงในเครื่องพบว่ามันใช้ Toad กับ PL/SQL Developer connect เข้าไปไม่ได้ เนื่องจากมัน support เฉพาะ 32 bit ดังนั้นก็เลยต้องมาพึ่ง SQL plus อย่างช่วยไม่ได้

เริ่มแรกเลย connect เข้า SQL plus ด้วย user sys ที่สร้างไว้ตอน create database ก่อนเลย

sqlplus sys/password@SERVICE as sysdba

เมื่อเข้ามาได้แล้วก็ สร้าง user ก่อนเลยด้วยคำสั่ง create user

create user myuser identified by password;

หลังจากเรา create user เสร็จแล้ว ก็จะพบว่า login เข้าไปไม่ได้ เนื่องจากเรายังไม่ได้ grant สิทธิ์ให้ connect เข้า database ได้ โดยเราสามารถ grant สิทธิ์ได้ดังนี้

grant connect to myuser;

หรือถ้าจะเอาแบบให้ได้ทุกอย่างเลยก็

grant dba to myuser;

เท่านี้ก็สามารถ connect เข้า database ได้แล้ว

วันศุกร์ที่ 25 กุมภาพันธ์ พ.ศ. 2554

Oracle How To: Change character set ให้อ่านภาษาไทยได้

การแก้ Oracle ให้อ่านภาษาไทยได้นั้น จะแบ่งออกเป็น 2 ส่วน คือ 
1. ฝั่ง client 
2. ฝั่ง server

โดยการที่จะทำให้อ่านภาษาไทยได้ต้อง set character set ทั้งที่ client และ server ประกอบกันทั้งคู่

วิธีการ set ทางฝั่ง client มีดังนี้

1. ทำการแก้ไขใน reg edit ที่ My Computer\HKEY_LOCAL_MACHINES\SOFTWARE\ORACLE\KEY_OraDb10g_home1 โดยแก้ NLS_LANG ให้เป็น THAI_AMERICA.TH8TISASCII

โดย THAI_AMERICA เนี่ย ตัวหน้า คือ ภาษาของพวกข้อมูลที่แสดง ส่วนตัวหลังจะเป็นภาษาของระบบ เช่น พวก error message

จบละ

ส่วนวิธีการ set ทางฝั่ง server มีดังนี้

1. เริ่มจาก query ก่อนเพื่อดู character set ของ server ก่อน โดยใช้ sql

SELECT * FROM NLS_DATABASE_PARAMETERS;


จะเห็นว่ามี NLS_CHARACTERSET และ NLS_NCHAR_CHARACTERSET ซึ่งทั้ง 2 ค่าต้องเป็นอย่างในรูป (ุTH8TISASCII และ AL16UTF16 ตามลำดับ) ซึ่งถ้าไม่ใช่ก็ต้อง set ใหม่ 

2. ทำการ set ค่าโดยเข้าใช้ SQLPlus ผ่าน command line ดังนี้

 2.1 ใช้ sqlplus ต่อ database ด้วย command
C:\> sqlplus dbusername/dbpassword@dbservice
โดยตัว service นี้ดูจากในไฟล์ TNSNAME.ORA

2.2 เข้า mode sysdba
SQL> connect sys/syspassword@dbservice as sysdba;
ถ้าเข้าเรียบร้อยแล้ว จะขึ้นว่า Connected.

2.3 รันคำสั่งแก้ไข character set ดังนี้
update props$ 
set value$='TH8TISASCII'
where name='NLS_CHARACTERSET';
แล้วมันจะขึ้นว่า 1 row update ก็ commit ซะ

3. restart oracle service แล้วก็จะใช้ได้แล้ว

4. ส่วน NLS_NCHAR_CHARACTERSET ก็ทำเหมือนกัน แค่เปลี่ยน sql สุดท้าย

จบฮะ

ปล. Oracle 10g
reference: http://www.narisa.com/forums/index.php?showtopic=14704