Database Architecture
Oracle History
ในปี คศ.1977 Larry Ellison ประธานบริษัท Oracle ได้ร่วมมือกับ Robert Minor นำ เอาระบบ การจัดการระบบฐานข้อมูลแบบ Relational (Relational Database Management System, RDBMS) มาประยุกต์ใช้กับฐานข้อมูลของ IBM เป็นครั้งแรก และเป็นครั้งแรกที่นำ RDBMS มาใช้กับโครงสร้างแบบ SQL ปัจจุบันโปรแกรม Oracle ได้สนับสนุนระบบปฏิบัติการต่างๆมากกว่า 80 ระบบปฏิบัติ การ เช่นระบบ mainframes ของ IBM , ระบบ DEC VAX minicomputers , ระบบ UNIX-based minicomputers , ระบบ Windows NT และระบบปฏิบัติการต่างๆ บริษัท Oracle เป็นบริษัทที่ใหญ่ที่ สุดเป็นอันดับสองรองจาก Microsoft ทั้งในด้านรายได้, ด้าน software และในด้านการให้การบริการ มีผู้เชี่ยวชาญทำงานอยู่มากว่า 20000 คน มีสาขาตั้งอยู่มากว่า 90 แห่ง ในปีที่ผ่านมา Oracle ได้วาง รากฐานอย่างมั่นคง ถูกนำไปใช้งานในทางทหารและรัฐบาล ทั้งภายในและนอกประเทศ
Oracle is a DBMS.
ตามหลักการ Oracle ถือว่าเป็น DBMS เพราะว่ามันสามารถเก็บรักษาข้อมูล (Data Dictionary) แต่ละขั้นตอนของการใช้งานจะมีการรักษาความปลอดภัยของข้อมูลโดยผู้ใช้จะมีการ Log in กำหนดสิทธิเข้ามาใช้ฐานข้อมูลของ user มีการแจกจ่ายข้อมูลที่น่าเชื่อถือได้ และนำเอา SQL มาใช้ในการจัด เก็บฐานข้อมูล ทำให้การค้นหาข้อมูลทำได้ง่าย มีการเลือก Primary key และ foreign key โดยสามารถ บอกสถานะว่าข้อมูลตัวไหนเป็น key ตัวไหนไม่เป็น key ซึ่งจะแตกต่างกับการเขียนโปรแกรมโดยทั่วไป เพราะจะต้องกำหนด key ลงไปเอง
ผู้ใช้สามารถการเลือกค่า Index ของแต่ละ Primary key และForeign key ได้ Oracleสนับสนุนโปรแกรม SQL*Plus ซึ่งเป็นโปรแกรมที่ออกแบบมาให้ผู้ใช้พิมพ์คำสั่ง SQL เพื่อทำงานกับ Oracleในลักษณะ command-line และ Run สคริปต์ที่มีคำสั่ง SQL หลายๆคำสั่งเป็นชุดจะเห็นได้ว่า Oracle เป็นโปรแกรม DBMS ที่มีความสามารถสูง และเป็นเครื่องมือช่วย ที่ดีสำหรับ RDBMS อีกเหตุผลหนึ่งที่โปรแกรมนี้เป็นที่นิยมก็เพราะการบริการข้อมูลของโปรแกรม Oracle สามารถรองรับการทำงานโดยทั่วไปได้
Overview of oracle Database Architecture
Memory structure
1. System Global Area (SGA)
เป็นโครงสร้างหน่วยความจำส่วนที่สำคัญมากของ Oracle Server SGA เป็นส่วนประกอบของ instance จะใช้โครง สร้างของ memory เพื่อย้ายข้อมูลไปมา SGA จะอนุญาตให้เข้ามาใช้ หรือ ปรับปรุงแก้ไขข้อมูล โดยจะมี SGA เป็นตัวชี้บอกตำแหน่งใน SGA ประกอบด้วย The Share Pool Buffer, The Data Buffer Cache,
The Redo Log Buffer
1.1 The share pool Buffer เป็นเนื้อที่สำหรับเก็บข้อมูลหลายอย่างเช่น คำสั่ง SQLที่ถูกเรียกใช้บ่อยๆ Data Dictionary ฯลฯ ข้อมูลเหล่านี้เมื่ออ่านขึ้นมาจากดิสก์แล้วจะค้างอยู่ในหน่วย ความจำเพื่อให้ผู้อื่นได้ใช้ด้วย นอกจากนั้นจะกันหน่วยความจำส่วนหนึ่ง เพื่อใช้เก็บค่าตัวแปรที่ใช้ โดยผู้ใช้แต่ ละคนไม่ใช้ร่วมกัน (Private area)
ในทางปฏิบัติหากมีผู้ใช้อยู่เป็นจำนวนมาก ควรจะกำหนดให้ Share Pool มีขนาดใหญ่เพียงพอที่จะบรรจุคำสั่งละค่าตัวแปรต่างๆ ของผู้ใช้ที่กำลังใช้งานอยู่ให้เพียงพอ จะประกอบด้วย library cache, dictionary cache
· Library cache จะใช้สำหรับเก็บประโยคคำสั่ง SQL และ PL/SQLที่ใช้ในการทำงานโดย Library Buffer Cache ประกอบด้วย 2 โครงสร้าง คือ Shared SQL area และ Shared PL/SQL area ขนาดของ Library Buffer Cache จะขึ้นอยู่กับการกำหนดจาก Share pool
· dictionary cache จะจัดเก็บข้อมูลที่เรียงลำดับไว้ในแถวแบบ SQL ,control structures เก็บรูปแบบตัวอักษรในฐานข้อมูล เก็บรวบรวมรายละเอียดต่าง ๆ ที่ใช้ในฐานข้อมูลรวมทั้งข้อมูลที่เกี่ยวกับ tables, indexes, columns, users, privileges และ object ฐานข้อมูลอื่น ๆ ขนาดของ Data Dictionary Cache จะขึ้นอยู่กับการกำหนดจาก Share pool
กำหนดขนาดโดยใช้คำสั่ง
SHARED_POOL_SIZE
เช่น ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
1.2 Database Buffer Cache ก็คือที่เก็บข้อมูลในหน่วยความจำ เพื่อใช้สืบค้น (Query) หรือทำคำสั่ง SQL ได้อย่างรวดเร็วเมื่อผู้ใช้ต้องการสืบค้นข้อมูลจากฐานข้อมูล Process ที่ดูแลการให้บริการแก่ผู้ใช้ (Server Process) จะทำหน้าที่เป็นขั้นๆ ต่อไปนี้
1. มองหาข้อมูลที่ผู้ใช้ต้องการใน Database Buffer Cache หากพบก็จะส่ง ข้อมูลเหล่านั้นไปให้แก่ผู้ใช้ หากไม่พบให้ทำข้อถัดไป
2. อ่านข้อมูลจากดิสก์
3. บันทึกข้อมูลที่อ่านมานั้นลงใน Database Buffer Cache แล้วส่งไปให้ผู้ใช้ในทางปฏิบัติควรกำหนดขนาดของ Database Buffer Cache ให้มีขนาดใหญ่มากเพียงพอที่จะใส่ข้อมูล ไปได้เป็นจำนวนมาก แต่ไม่เกิน ขนาดของหน่วยความจำทั้งหมดที่มี
กำหนดขนาดโดยใช้คำสั่ง
DB_BLOCK_SIZE
เช่น Database Buffer Cache Size = DB_BLOCK_SIZE * DB_BLOCK_BUFFERS;
1.3 Redo Buffer Cache ก่อนที่บันทึกข้อมูลเกี่ยวกับคำสั่งลงในไฟล์ล็อก จะต้องบันทึกลงใน Redo Log Buffer เสียก่อน ลักษณะการบันทึกจะเป็นตามลำดับ(Sequential Write) เมื่ออ่านจาก Redo Log Buffer ไปบันทึกลง Redo Log File ก็จะเป็นแบบตามลำดับเช่นกัน
กำหนดขนาดโดยใช้คำสั่ง
LOG_BUFFER
2. Program Global Area (PGA)
PGA เป็นพื้นที่ ( พื้นที่ส่วนนี้จะถูกจองเมื่อมีการ start ของ server process เกิดขึ้น )ที่อยู่ในหน่วยความจำซึ่งจะช่วย user process ในการกระทำการดังตัวอย่าง เช่น bind variable information, sort areas, cursor information และsession information ซึ่งโดยทั่วไปแล้วในการกระทำการของ SQL statements ในshared area ถูกเรียกใช้จาก Library cache แล้วคุณสงสัยไหมว่าทำไม user จึงต้องการพื้นที่ในการที่จะกระทำการเป็นของตนเอง เหตุผลก็คือ userต้องการที่จะกระทำการ select หรือ update โดยไม่มีการถูกใช้ข้อมูลร่วมกันได้ ( Shared ) เพราะฉะนั้น PGA จึงถูกใช้ในการเก็บข้อมูลจริง ๆ ในที่ซึ่งไม่มีผู้ใดสามารถมองเห็นได้ สำหรับที่จะกระทำ SQL statement
Process structure
Server Process
Sever Process เป็น Process ที่ทำหน้าที่ดูแลความต้องการของผู้ใช้ที่ส่งเข้ามาให้ Oracle ปฏิบัติ โดยปกติเมื่อ Sever Process ได้รับคำสั่งแล้วจะทำการ
1. ตีความคำสั่ง ตรวจสอบสิ่งต่างๆ ที่ต้องใช้คู่กับคำสั่ง แล้วทำตามคำสั่งนั้น
2. อ่านข้อมูลที่ผู้ใช้ต้องการจากดิสก์มาไว้ในหน่วยความจำ ในกรณีที่ Oracle หาข้อมูลในหน่วยความจำนั้นไม่พบ
3. ส่งการทำงานตามคำสั่งและข้อมูลที่เกี่ยวข้องไปให้ผู้ใช้
Background Process
เมื่อเริ่มใช้งานฐานข้อมูล Oracle จะสร้าง Process ขึ้นมาชุดหนึ่งเพื่อรองรับการทำงาน ฐานข้อมูล โดยจะประกอบด้วย Process เหล่านี้ (Process มาตรฐาน)
1. CKPT (Check Point)
2. PMON (Process Monitor)
3. SMON (System Monitor)
4. DBWR (Database Writer)
5. LGWR (Log Writer)
หากมีการเลือกใช้ตัวเลือกพิเศษหรือ Option ขึ้นมา Oracle ก็จะสร้าง Process ต่อไปนี้
6. ARCH (Archiver)
7. CHPK (Check Point Process)
8. RECO (Recoverer)
9. Dispatcher (Dnn)
10. Lock (LCKn)
11. Shared Server (Snnn)
12. Snapshot (SNAPn)
13. Parallel Processes
14. Etc.
Checkpoint (CKPT)
ทุกๆ 3วินาทีจะเกิดกระบวนการ Check point จะเก็บข้อมูลในcontrol file เพื่อจะชี้ไปในตำแหน่งที่ redo log file ในตำแหน่งที่จะทำซ้ำในรอบต่อไป เมื่อมีการเรียกcheckpoint จุประสงค์ของcheckpoint จะทำให้แน่ใจได้ว่าข้อมูลทั้งหมดที่อยู่ใน Database Buffer Cache ได้แก้ไขก่อนถูกเขียนลงใน data file
Checkpoint ถูกนำไปใช้สำหรับเหตุผลดังต่อไปนี้
· เพื่อทำให้แน่ใจว่าข้อมูลที่แก้ไขใหม่ถูกเขียนในdiskเป็นข้อมูลที่ถูกต้องในกรณีที่ระบบฐานข้อมูลล่ม
· เพื่อลดเวลาในการทำซ้ำอีกครั้งcheckpoint จะจดบันทึกจุดที่ประมวลผลล่าสุดมาทำซ้ำใหม่อีกครั้ง
· เพื่อให้แน่ใจว่าข้อมูลทั้งหมดถูกเขียนลงในdata file ในระหว่างปิดเครื่อง
ข้อมูลของ Check point จะถูกเปลี่ยนตัวเลขด้วยระบบ ตำแหน่ง redo log จะเปลี่ยนข้อมูลเกี่ยวกับ log และอย่างอื่นๆอีก
Process Monitor (PMON) PMON จะทำหน้าที่ Process Recovery คือเมื่อ User Process ปิด Session ทิ้งแบบปกติ และไม่ปกติ PMON จะนำหน่วยความจำที่ User Process ใช้คืนมา และทำการปัดกวาดส่วนต่างๆ ที่เกี่ยวกับโปรแกรมให้เรียบร้อย เช่น Reset สถานะของ Transaction Table ปลดล็อกต่าง ๆ ของผู้ใช้ ลบ Process ID จากรายการ Process ที่ใช้งานอยู่ (Active Process List)
เป็นต้น
Data System Monitor (SMON) SMON ทำหน้าที่
1. กู้คืนฐานข้อมูล (Recovery Database) แบบ Instance Recovery ซึ่งอาจเกิดขึ้นเนื่องจากเครื่องหยุดทำงาน โดยไม่มีอุปกรณ์อะไรเสียหาย หรืออาจเกิดจากการปิดฐานข้อมูลที่ ไม่ปกติ ใช้เพื่อให้มที่ว่างมากๆ
2. ลบข้อมูลในเซกเมนต์ชั่วคราว ( temporary segment ) ที่ไม่จำเป็นต้อง
3. คอยรวบรวม Extent (ส่วนของไฟล์ข้อมูลที่ไม้ได้ใช้) ว่างๆ ที่ต่อเนื่องกัน
SMON จะทำงานเป็นช่วงๆ ตามกำหนด หรือถูกเรียกใช้โดย Process อื่นก็ได้
Base Writer ( DBWR ) การเขียนข้อมูลจาก Memory Buffer สู่ไฟล์ข้อมูลเป็น หน้าที่ของ Database Write Process (DBWR ) มีหน้าที่ดูแล Buffer ใน Buffer Cache ถูกเรียกใช้เช่น ถูกเขียนหรือ แก้ไขข้อมูลใน Buffer นั้น มันจะถูกทำเครื่องหมายเป็น Dirty Buffer งานหลักของDBWR คือทำให้ Dirty Buffer เป็น Clean Buffer โดยการบันทึก Dirty Buffer ลงสู่ดิสก์ แต่ก่อนที่ จะบันทึกข้อมูลใดๆ ลงสู่ดิสก์ก็ต้องตรวจสอบก่อนว่ามีความจำเป็นที่ต้องกระทำหรือไม่ โดยการตรวจสอบ Buffer ใน Buffer Cache ว่ามีเพียงพอให้ User Process และ Server Process ใช้งานหรือไม่ หากไม่เพียงพอ DBWR จะจัดการให้มีจำนวน Buffer ว่างเพียงพอให้ User Process ใช้งานเสมอโดยใช้อัลกอริทึม LRU
อัลกอลิทึม LRU ( Least Recently Used ) เป็นวิธีการที่จะคงข้อมูลที่ถูกใช้งานบ่อยๆ ไว้ในหน่วยความจำ เพื่อลดการอ่านเขียนดิสก์ แต่หากการอ่านเขียนข้อมูลส่วนใดที่อยู่ในหน่วยความจำแล้ว ไม่ค่อยได้ถูกเรียกใช้งานบ่อยนัก เมื่อถึงเวลาที่มีข้อมูลอื่นที่มีความจำเป็นที่ต้องถูกเรียกใช้ แต่เนื้อที่ในหน่วย ความจำมีไม่เพียงพอ ก็จะนำข้อมูลที่ไม่ค่อยได้ใช้บ่อยนั้นออกไปจากหน่วยความจำ เพื่อให้เกิดเนื้อที่ว่างเพียง พอต่อการใช้งานของข้อมูลชุดใหม่แต่ก่อนจะนำข้อมูลชุดเก่าออกไปนั้นจะต้องบอกให้ DBWR Process บันทึกข้อมูลนั้นลงดิสก์ในกรณีที่ข้อมูลนั้นมีการเปลี่ยนแปลงก่อน จากนั้นจึงค่อยทำให้หน่วยความจำนั้นว่าง เพื่อให้ผู้อื่นใช้ต่อไปDBWR จะเขียน Dirty Buffer ลงสู่ดิสก์เพื่อให้ผู้อื่นใช้ต่อไป
1. Server Process พบว่าจำนวน Dirty Buffer ถึงจุดที่กำหนด (Threshold Length) จุดที่กำหนดนี้มีค่าเป็น 1.5 เท่าของค่าพารามิเตอร์ DB_BLOCK_WRITE_BATCH
2. Server Processต้องการจำนวนBufferที่ว่างอยู่ให้มีเท่ากับค่า DB_BLOCK_MAX_SCAN_CNT ในรายการแสดง LRU แต่ถ้าไม่พอ มันจะหยุดหาและบอกให้ DBWR เขียนข้อมูล ลงดิสก์
3. ทุกๆ ช่วงเวลา 3 วินาที
4. เมื่อเกิดมีจุดตรวจสอบ (Check Point) LGWR Process จะบอก DBWR Processให้เขียนข้อมูลลงดิสก์
สำหรับใน 2 กรณีแรก DBWR จะเขียนข้อมูลใน Dirty List ลงดิสก์ด้วยวิธี Single Multi- Block Write จำนวนบล็อกที่จะบันทึกนี้กำหนดโดยค่าพารามิเตอร์ DB_BLOCK_WRITE_BATCH หากจำนวน Dirty Block ใน Dirty List มีไม่ถึงค่าของพารามิเตอร์นั้น DBWR จะเอา Buffer ใน LRU มาเพิ่ม เพื่อให้เท่ากับค่าของพารามิเตอร์หลัก จึงบันทึกข้อมูลลงดิสก์ช่วงเวลา ( Time Out ) จะเกิดขึ้นเมื่อ DWBR ไม่ได้ทำงานเลยเป็นเวลาติดต่อกัน 3วินาที ในกรณีนี้คือ DWBR จะบันทึก Dirty Buffer ในรายการแสดง LRU ซึ่งมีจำนวนเท่ากับ 2 เท่าของค่า พารามิเตอร์ DB_BLOCK_WRITE_BATCH ถ้าฐานข้อมูลอยู่ในสถานะที่ไม่ได้ทำงานอะไร ( Idle ) DBWR จะบันทึกทั้ง Buffer Cache การตรวจสอบตามจุดต่างๆ (Check Point) เกิดขึ้นเมื่อ Log Write Process ระบุBuffer ที่ต้องการให้บันทึกลงไฟล์มาให้ DBWR ทราบ DBWR จะทำการบันทึก Buffer เหล่านั้นลงไฟล์ เครื่องคอมพิวเตอร์บางแบบอาจมี DBWR ได้หลาย Process ต่อ 1 Instance เพื่อความรวดเร็วในการเขียนข้อมูล โดยที่ DBWR แต่ละตัวทำงานเป็นอิสระต่อกันจำนวน DBWR Process กำหนดโดยค่าพารามิเตอร์ DB_WRITERS มักจะใช้เมื่อมีไฟล์ ข้อมูลกระจายอยู่ในดิสก์หลายตัว
Log Write (LGWR) Redo Log Buffer ถูกเขียนลง Redo Log Buffer ในดิสก์โดย Log Write Process (LGWR) โดย LGWR จะดูแลการจัดการ Redo Log Buffer และจะเขียน Bufferใน Redo Log Buffer ลง Redo Log File เมื่อ
- มีการ บันทึก (commit)
- ทุกๆ 3 วินาที
- มีการใช้ Redo Buffer ไป 1 ใน 3 ของทั้งหมด
- DBWR บันทึกข้อมูลที่ถูกแก้ไขลงดิสก์
Redo Log Buffer เป็น Buffer แบบหมุนเวียน คือใช้แล้วสามารถนำกลับมาใช้ใหม่ได้ ทันที หลังจากที่ LGWR ทำการเขียนรายการใน Redo Log Buffer ลง Redo Log File เรียบร้อยแล้ว เมื่อมีการบันทึกรายการ (Transaction) รายการนั้นจะได้รับเลข System Change Number (SCN) อยู่ในรายการ นั้นด้วย เพื่อใช้ในการสำรองข้อมูลแบบออนไลน์
ในบางขณะที่มีงานมากๆ LGWR กำลังบันทึกข้อมูลเป็นกลุ่มที่เรียกว่า Group Commit เช่นในขณะที่ LGWR กำลังบันทึกข้อมูลลงดิสก์ มีรายการอื่นที่พร้อมสำหรับการบันทึกแล้วแต่ไม่สามารถ บันทึกได้ ต้องรอให้การบันทึกครั้งแรกเสร็จเรียบร้อยก่อน เมื่อรายการแรกเสร็จเสร็จแล้ว LGWR จะมาดูในLog Buffer ว่ามีรายการใดบ้างที่รออยู่ จากนั้นจะรวบรวมรายการทั้งหมด และทำการบันทึกรายการเหล่านั้น ลงดิสก์ครั้งเดียวเป็นการลด I/O อีกทั้งประสิทธิภาพของระบบดีขึ้น หากใน Instance ไม่มี CKPT Process อยู่ LGWR Process จะต้องดูแลเรื่องการบันทึก การตรวจสอบตามจุดต่างๆ ( Check Point ) ที่เกิดขึ้นกับทุกๆ ไฟล์ข้อมูลด้วย
Archiver (ARCH) ARCH ดูแลการคัดลอก ( Copy ) รายการใน Online Redo Log File ที่เต็ม ไปไว้ที่ไฟล์ หรือ อุปกรณ์ที่กำหนด โดย ARCH จะทำงานโดยอัตโนมัติหากเราสร้างฐานข้อมูล แบบ Archive Log และขณะใช้งานมีการกำหนดให้เป็น Automatic Archiving รายละเอียดจะอยู่ในเรื่องของการสำรองข้อมูล ( Backup ) และกู้คืนข้อมูล ( Recovery )การตรวจสอบตามจุดต่างๆ ( Checkpoint หรือ CHPK )
การตรวจสอบตามจุดต่างๆ ( Checkpoint) เกิดขึ้นเมื่อ DBWR ทำการบันทึกข้อมูลทั้ง ที่บันทึกแล้วและยังไม่ได้บันทึกข้อมูลลงไฟล์ข้อมูล ด้วยเหตุผลดังนี้ บางครั้งเมื่อไม่มีการเรียกใช้ข้อมูลบาง บล็อกเป็นประจำ ตามหลักของ LRU แล้วจะทำให้ไม่มีการบันทึกข้อมูลบล็อกนั้นลงดิสก์เป็นเวลานาน และ บางครั้งนานเกินไป ดังนั้นจึงต้องมีการตรวจสอบเป็นจุดๆ ไปเพื่อให้ ข้อมูลบันทึกลงดิสก์บ้าง
การกู้คืนข้อมูล ( Recovery หรือ RECO)
RECO ใช้ในกรณีที่มีข้อเลือกฐานข้อมูลแบบ Distributed อยู่ในระบบ RECO ทำหน้าที่ แก้ปัญหาที่เกิดจากรายการที่เป็นแบบ Distributed เช่น เมื่อเกิด In-Doubt Transaction รายการต่างๆ ที่ เกี่ยวข้องจะถูกลบออกจากเทเบิลรายการ ( Transaction Table ) เพื่อให้รายการเหล่านั้นคืนกลับสภาพเดิม ถ้าหาก RECO พยายามเข้าไปแก้ไขปัญหาในเครื่องแม่ข่ายที่เกี่ยวข้อง แล้วพบว่าสามารถทำได้เนื่อง จากสาเหตุของการสื่อสาร RECO จะพยายามใหม่จนกว่าจะทำสำเร็จ การพยายามใหม่ทุกครั้งนี้จะทิ้งระยะ ห่างขึ้นเรื่อยๆ เพื่อให้โอกาสเจ้าหน้าที่แก้ไขปัญหาเหล่านั้นให้เรียบร้อยก่อนRECO จะถูกสร้างขึ้นเมื่อระบบสามารถใช้ Distribute Transaction ได้ และค่าพารามิเตอร์ distribute_transactions จะต้องมากกว่าศูนย์
Database structure
Oracle Files
เราสามารถแบ่ง Database ออกเป็นสองส่วนคือ ส่วนที่ใช้ใน RDBMS ซึ่งเรียกว่า System database Object และส่วนที่ใช้ในการเข้าถึงข้อมูลด้วยกระบวนการต่างๆ เรียกว่า User Database Object
System Database Object มีส่วนประกอบคือ
- The initialization parameter file(s)
- The control file
- Online redo log files
- The archived redo logs
- The trace file(s)
- The ROWID
- Oracle blocks
ซึ่งจะอธิบายรายละเอียดดังต่อไปนี้
The Initialization Parameter file(s) หรือ init.ora เป็นส่วนประกอบหลักของ RDBMS คือกลุ่มของ configuration key และค่าของkey ที่บอกความแตกต่างของ database และ instance มี ลักษณะเป็น ASCII text file ที่อยู่ใน $ORACLE_HOME/dbsใน UNIX serverและอยู่$ORACLE_HOME/database ใน Windows NT server โดยจะมีdefault name เป็น initSID.ora ซึ่งใน file นี้จะมี SID
เป็นตัวแทนสำหรับ Database ที่มันทำหน้าที่ควบคุมอยู่ ใน UNIX server จะค้นหาfile นี้เมื่อมีการเริ่มต้น การทำงานของ
Database ซึ่ง file init.ora จะถูกอ่านเมื่อมีเริ่มการทำงาน database ซึ่งจะถูกอ่านก่อน created file, และcontrol file init.ora จะค้นหา database และ instance
The Control File เป็นส่วนสำคัญของ database ทำหน้าที่เก็บข้อมูลของ data files และ redo log files, ตรวจดูว่าจะเก็บข้อมูลแบบใดลงใน database, เก็บสถานะของฐานข้อมูลและอื่นๆ ค่าต่างๆที่ทำถูกเก็บลง control นั้นจะถูกกำหนดระหว่างสร้างdatabase หรือขณะสถานะของ database คงที่ซึ่งข้อมูลเหล่านี้จะอยู่ในรูปของ binary code และจะไม่มีการเปลี่ยนแปลงหรือถ้าจะทำการเปลี่ยน แปลงจะทำได้ยาก เพื่อป้องการความเสียหายที่เกิดขึ้นกับ Control file จึงควรมีการสำรอง control file ไว้เพราะถ้า Oracle ไม่สามารถอ่าน control file จะไม่สามารถใช้งาน data file ได้แต่ถ้าอ่าน control fileหนึ่งได้ก็จะสามารถเปิด data file ได้ทันที แม้ว่าจะสามารถสร้าง control fileใหม่ได้แต่วิธีที่ดีที่สุดคือการทำ mirror ซึ่งในการติดตั้ง Oracle ถ้าบอกให้ oracle ทำการสำรอง log file มันจะทำการสำรอง control file โดยอัตโนมัติ
Online Redo Log Files เป็น redo file log ที่ติดต่ออยู่กับ database ขณะที่มีการ ทำงาน ทำหน้าที่เก็บข้อมูลและคำสั่งที่เกิดขึ้นในระบบฐานข้อมูลเพื่อใช้ตอนเกิดเหตุขัดข้องกับระบบฐานข้อมูล เช่น ขณะทำงานอยู่เกิดไฟดับ หรือระบบเครื่องคอมพิวเตอร์เกิดมีปัญหาไม่สามารถทำงานต่อไปได้
(System Cash) ข้อมูลบางอย่างที่ยังค้างอยู่ในหน่วยความจำอาจสูญหายไป เราสามารถนำข้อมูลเหล่านั้น กลับมาได้โดยอ่านข้อมูลที่เก็บอยู่ใน file log แล้วนำมาปรับปรุง data file เพื่อกู้ข้อมูลที่สูญหายกลับคืนมา หลักการเก็บข้อมูลลงใน file log คือเมื่อเริ่มต้นทำงานฐานข้อมูล Oracle จะจองเนื้อที่ในหน่วยความจำเพื่อใช้ทำงานเกี่ยวกับข้อมูลต่างๆเมื่อมีคำสั่งเพิ่มหรือลบข้อมูลใน table ก็จะไปทำในหน่วย ความจำก่อน เพื่อความรวดเร็วทุกครั้งที่มีคำสั่งเพิ่มหรือลดข้อมูลใน table คำสั่งเหล่านั้นจะถูก copy จากShear SQL Area ไปเก็บไว้ใน Redo Log Buffer ก่อนที่จะบันทึกลง file log ด้วย Process LGWR Redo Log Buffer เป็น Buffer แบบหมุนเวียนคือใช้แล้วสามารถนำมาใช้ใหม่ได้ทันที หลังจากที่LGWR ทำการเขียนรายการลงใน Redo log Buffer ลง Redo Log File เรียบร้อย เมื่อมีการ บันทึกรายการ(Transaction)รายการนั้นจะได้รับหมายเลข System Change Number (SCN) อยู่ในราย การนั้นด้วยเพื่อใช้สำรองข้อมูลแบบ online
ในบางขณะที่มีงานมากๆ LGWR อาจบันทึกข้อเป็นกลุ่มที่เรียกว่า Group Commit เช่น ขณะที่ LGWR กำลังบันทึกข้อมูลลง disk มีรายการอื่นๆ ที่พร้อมสำหรับการบันทึกแล้วแต่ยังไม่สามารถ บันทึกได้ ต้องรอให้การบันทึกครั้งแรกเสร็จเรียบร้อยก่อน เมื่อรายการแรกเสร็จ LGWR จะมาดูใน Log Buffer ว่ามีรายการใดบ้างรออยู่ จากนั้นจะรวบรวมรายการทั้งหมดและบันทึกลง disk ครั้งเดียวเป็นการลดI/O อีกทั้งทำให้ประสิทธิภาพของระบบดีขึ้น
The Trace File(s) Background process และ user process จะสร้าง Trace Fileไว้สำหรับเก็บข้อมูลต่างๆของมัน เช่น ข้อมูลเกี่ยวกับความผิดพลาดภายใน (Internal
Error) ข้อมูลเหล่านี้อาจแก้ปัญหาของระบบแล้วยังสมารถนำข้อมูลเหล่านั้นมาใช้เพิ่มประสิทธิภาพของระบบ ได้ด้วย
ปกติ Trace File จะอยู่ในไดเร็กทอรี่ ORACLE_HOME\RDBMSxx\ADMIN\TRACE
(xx = 70, 71,72,73,80 ขึ้นอยู่กับเวอร์ชั่นของ ORACLE ที่ ใช้อยู่)
ROWID เป็นชนิดของข้อมูลที่ใช้ภายใน ORACLE โดยประกอบขึ้นจากข้อมูลสามส่วนคือ Block, Row และ File เพื่อใช้ชี้ตำแหน่งที่จัดเก็บข้อมูลที่แท้จริงของแต่ละรายการ เช่น ข้อมูลมี ROWID เท่ากับ 00000022.00001.0002 หมายถึงตำแหน่งของข้อมูลรายการที่ 1 ของ table ใน block ที่ 22 ใน fileที่ 2 ของระบบฐานข้อมูล เป็นต้น แต่รายการจะมีหมายเลข ROWID ที่ไม่ซ้ำกับรายการอื่นในฐานข้อมูลเลย
ผู้ใช้ทั่วไปไม่ควรสร้างคอลัมน์แบบ ROWID เองแต่ให้ใช้อ้างอิงจากคอลัมน์ ROWID ที่ORACLE Workgroup Server สร้างขึ้นมา
Oracle Blocks คือ หน่วยเก็บข้อมูลระดับล่างสุด มีขนาดเล็กที่สุด ซึ่ง Oracle Blockนี้ไม่ควรที่จะปะปนอยู่กับ operating system block ถึงแม้ว่า Oracle Block จะสร้างมาจาก operating system block แต่มันก็ไม่เหมือนกัน ในการ access ข้อมูลก็จะทำในรูปแบบของ Oracle Block ขนาดของ Oracle Block จะมีหน่วยเป็น Byte RDBMS จะอ่านหรือเขียน data files ด้วย I/O เพียงตัวเดียวเท่านั้น ซึ่ง Database object size และ block ใน memory และ cache ก็จะถูก set ให้เป็น Oracle block เช่นกัน ใน Oracle Block จะเก็บ header ,การ update ข้อมูลภายใน block และข้อมูลใน blockขณะนั้น block header จะเก็บข้อมูลพวก database segments, ต้องใช้กี่ transactions ในการ เข้าถึงข้อมูลใน block 1 ครั้ง เป็นต้น
User Database Objects
User database objects เป็น object ที่ไม่ใช้เพียงแต่ใน ORACLE RDBMS และทุก User database objects ยกเว้น data files เป็น logical database objects หมายความว่ามันมี เฉพาะรูปแบบและนิยามของมันใน context ของ Oracle server
User database objects ประกอบด้วย data files, extents, table space และ data segments ซึ่ง
จะอธิบายดังต่อไปนี้
Data files Fileข้อมูลถูกสร้างขึ้นตอนติดตั้ง ORACLE เราอาจสร้างเองได้โดยใช้คำสั่ง Create Database Data Files เป็นที่จัดเก็บข้อมูลของผู้ใช้ และ Data Dictionary อย่าพยายามแก้ไข file เหล่านี้โดยตรงหรือโดยโปรแกรมใดๆ เพราะจะทำให้ข้อมูลเสียหายได้ แต่ให้แก้ไขหรือเพิ่มเติมผ่านโปรแกรมของ ORACLE หรือโดยคำสั่ง SQL แทน ORACLE ใช้ใน File ข้อมูลเหล่านี้เก็บข้อมูลต่างๆ ไม่ใช่เพียงแค่ข้อมูลของผู้ใช้เท่านั้นแต่ ยังใช้จัดเก็บข้อมูลเกี่ยวกับดัชนี (Index), Rollback Segment และอื่นๆ
Extents เป็นหน่วยของที่เก็บข้อมูลซึ่งแต่ละ database segment จะต้องมี extents เป็นส่วนประกอบและ extents แต่ละตัวใน database segment จะมีขนาดเท่ากันหรือต่างกันก็ได้ ใน Oracle7.3 จำนวนของ extent ที่มากที่สุดจะขึ้นอยู่กับขนาดของ Oracle block
Tablespaces เป็นที่เก็บกลุ่มของ object file ซึ่ง Object file นี้ก็ประกอบไปด้วย ไฟล์ หลายไฟล์ในการสร้างobject file ขึ้นมานั้นจะต้องระบุ tablespace ให้กับมันด้วยซึ่ง tablespace นี้จะทำ การ mapping ข้อมูลต่างๆในfile ให้อยู่แล้วโดยที่เราไม่ต้องกังวลวาข้อมูลจะไปอยู่คนละ disk กัน นอกจากนี้ tablaspace ยังสามารถทำเป็น RAIDได้ด้วย
Database Segments เป็น object ที่ user สร้างขึ้นใน database ประกอบไปด้วยtables, indexes, rollback segment, table clusters และ hash cluster
Tables เป็น database segments ที่ทำหน้าที่เก็บข้อมูล ในหนึ่ง table จะประกอบไปด้วยคอลัมน์1 คอลัมน์ขึ้นไป และแต่ละคอลัมน์ จะถูกระบุชื่อและ data type ที่มันจะเก็บdata type ของแต่ละคอลัมน์จะระบุถึงชนิด และขนาดหรือความระเอียดของข้อมูลที่จะเก็บ data typeใน ORACLE มีดังต่อไปนี้
Data Type Description Max Size
CHAR Fixed-length character field, Padded with trailing blanks 255 bytes
VARCHAR Variable-length character field2KB 4KB
LONG Variable-length character data 2GB
Note ควรใช้ VARCHAR2 มากกว่า VARCHAR เพราะ VARCHAR เป็นมาตรฐานของ ANSI ซึ่งเปลี่ยนแปลงได้ แต่ VARCHAR2 นั้นทาง ORACLE รับรองว่าไม่มีการเปลี่ยนแปลงรายละเอียดภายใน
Indexes เป็น data segments ชนิดหนึ่งทำให้ access ข้อมูลเฉพาะเร็วขึ้น index 1 ตัวจะเก็บค่าจากคอลัมน์ต่างๆใน table และ ROWID ที่สัมพันธ์กับค่า นั้นไว้ เมื่อ ORACLE ต้องการหาแถวหนึ่งๆใน table ก็จะหา ROWID ใน index แล้วจึงดึงข้อมูลออกมาจาก table
Rollback Segment ใช้ในการเก็บค่าเก่าที่เกิดการเปลี่ยนแปลงจากคำสั่ง Update หรือ Delete สำหรับกรณีที่ต้องการยกเลิกคำสั่งนั้น ORACLE ก็จะนำค่าเก่าที่อยู่ใน segment นี้ไปเขียนทับค่าที่เปลี่ยนไปในคอลัมน์ให้เป็นค่าเก่า โดยปกติ ORACLE จะเลือก rollback segment ที่ว่าง หรือรับงานน้อยที่สุดให้กับรายการให้กับเรา แต่ถ้าหากเราต้องการเลือก Rollback Segment เองก็ให้ใช้ คำสั่ง Set transaction use rollback segment segment _name; เมื่อเราสร้างฐานข้อมูลขึ้นมา ORACLE จะสร้าง Rollback Segment ชื่อ system ให้โดยอัตโนมัติ แต่ขอแนะนำให้สร้างเพิ่มอีก 2-3 Segment ใน tablespaces อื่นที่เราสร้างรอไว้ก่อนเพื่อรองรับจำนวนรายการพร้อมๆ กันมากๆ แต่หากเรา ใช้ Script ของ ORACLE ในการสร้าง ฐานข้อมูลสาธิต ORACLE จะสร้าง tablespaces ให้ 4 tablespaces คือ System, User_Data, Temporary_Data และ Rollback_Data และสร้าง Rollback Segment ใน tablespaces Rollback_Date ให้อีก 4 Segment หรือมากกว่านั้น นอกเหนือจาก Roll back Segment System
Rollback Segment ก็เหมือนกับ Segment ชนิดอื่นๆ คือจะมีแต่ขนาดไม่มีการลดจน กว่าจะลบแล้วสร้างใหม่ บางกรณีทำให้พื้นที่ว่างใน Tablespaces ไม่เพียงพอต่อการรองรับปริมาณรายการ ที่เข้ามาพร้อมๆกันได้ ORACLE จึงมีทางเลือกให้กำหนดขนาดที่เหมาะสมด้วยการระบุคำ Optimal Size ไว้ ในวลี Storage ซึ่งเป็นผลให้ segment ใดที่เมื่อรายการก่อนใช้เกินขนาดของ optimal ขึ้นมา รายการถัด มาจะได้รับ Rollback Segment ที่ถูกทำให้มีขนาดเล็กลงเท่ากับค่าที่ประกาศไว้ใน Optonal ก่อนแล้วจึง ยื่นรายการนั้นไปใช้งาน
Table Clusters เป็นรูปแบบการจัดเก็บข้อมูลใน table หลาย table ที่ เราเรียกขึ้นมาใช้ join กันบ่อยครั้งให้ใช้เวลาน้อยลง และ join ข้อมูลให้รวดเร็วโดยใช้หลักง่ายๆคือ คอลัมน์ ที่ใช้ join (หรือ cluster key) ก็จะเก็บไว้ที่ตำแหน่งเดียวกัน คอลัมน์จากทั้งสอง table หรือมากว่านั้นก็จะชี้มาที่เดียวกัน ถึงเวลาอ่านก็จะอ่านเพียงครั้งเดียวทำให้เวลาสั้นกว่าการจัดเก็บข้อมูลแบบเดิมมาก
Hash Clusters ใน hash cluster Tables จะถูกเรียงตามค่า hash value ที่เกิดจากการนำค่า primary key ไปเข้า hash function และการที่จะค้นหาข้อมูลใน hash clusters นั้น ทำโดยการนำค่า primary key ไปเข้า hash function และจะได้ค่า hash values ซึ่งจะชี้ตำแหน่งของ block ของข้อมูลที่เราต้องการ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น