จากที่เคยทำงานกับ Oracle 10g และ version ใหม่ ๆ จะเห็นได้ว่า Oracle ไม่ได้เป็นแค่ Database แต่เป็น “อสูรกาย” แห่งการคำนวณที่มีวิวัฒนาการมายาวนานเกือบ 50 ปี บทความนี้จะสรุปความต่างของ Oracle ในแต่ละยุค เพื่อให้คุณเห็นภาพให้รองรับระบบเก่าและใหม่ครับ
ยุคก่อร่างสร้างตัว: The Foundation ( v2 – v6 )
ช่วงปี: 1979 – 1988
นี่คือยุคที่ SQL เพิ่งเกิด Oracle เป็นเจ้าแรกที่นำ SQL มาใช้ในเชิงพาณิชย์ ( ตัดหน้า IBM )
คนสังเกตจะเห็นว่า version 1 มันไม่มี เพราะไม่ได้ออกมาขายจริง
- สถาปัตยกรรม: เน้นความถึกทน ( Robustness ) เริ่มมีแนวคิด Row-level locking ( v3 ) ซึ่งเหนือกว่าคู่แข่งในสมัยนั้นที่ล็อคทั้ง Table
- จุดเปลี่ยน: v6 เริ่มมี PL/SQL ( Procedural SQL ) ทำให้เราเขียน Logic ซับซ้อนใน Database ได้
- ความต่างในการเขียน Provider: ยุคนี้ Metadata เก็บใน System Tables พื้นฐานมาก ยังไม่มีระบบ View ที่ซับซ้อนแบบ
ALL_TAB_COLUMNSที่เราคุ้นเคยในปัจจุบัน
ยุคทองของ Client-Server: Oracle 7, 8, & 8i
ช่วงปี: 1992 – 1999 เป็นยุคที่ Oracle ครองโลกธุรกิจ และเริ่มก้าวเข้าสู่ยุค Internet ( i ย่อมาจาก Internet )
- สถาปัตยกรรม: * Oracle 7: นำเสนอ Stored Procedures, Triggers และ Declarative Referential Integrity ( Primary/Foreign Key แบบที่เราใช้ทุกวันนี้ )
- Oracle 8/8i: เริ่มมีแนวคิด Object-Relational และการทำ Partitioning เพื่อรองรับข้อมูลขนาดมหึมา
- Data Types: เริ่มมี LOBs (BLOB, CLOB) มาแทนที่การเก็บแบบ LONG เดิม ๆ
- ความต่างในการเขียน Provider: ต้องเริ่มรับมือกับการดึง Metadata ผ่าน Data Dictionary Views (
USER_,ALL_,DBA_)
ยุค Grid และ Automation: Oracle 9i, 10g, & 11g
ช่วงปี: 2001 – 2007 ตัวอักษร g ย่อมาจาก Grid Computing เน้นการแชร์ทรัพยากรร่วมกันและการจัดการอัตโนมัติ และจะเจอ 10g ในบริษัทในไทยมากที่สุด
- ฟีเจอร์เด่น:
- Oracle 9i: นำเสนอ Real Application Clusters ( RAC ) ทำให้รัน Database หลาย Node พร้อมกันได้
- Oracle 10g: เน้นการ Manage ตัวเอง ( Self-managing ) มีระบบ AWR ( Automatic Workload Repository ) ช่วยวิเคราะห์ Query ที่ช้า
- Oracle 11g: เพิ่ม Result Cache และ Advanced Compression
- ความต่างในการเขียน Provider: ยุคนี้คือมาตรฐานของ “Legacy ที่ยังใช้งานอยู่” การดึง DDL มักใช้ Package
DBMS_METADATA.GET_DDLซึ่งแม่นยำกว่าการ Query View เอง
ยุค Cloud และ Multi-tenant: Oracle 12c, 18c, & 19c
ช่วงปี: 2013 – 2019 ตัวอักษร c ย่อมาจาก Cloud โดยมีหัวใจหลักคือ Multitenant Architecture
- สถาปัตยกรรม ( CDB / PDB): แนวคิด Container Database ( CDB ) และ Pluggable Databases ( PDB ) คือการมีฐานข้อมูลแม่ 1 ตัว แล้ว “เสียบ” ฐานข้อมูลลูกเข้าไปข้างในได้หลายตัว ( คล้าย Docker แต่เป็นระดับ Database )
- Oracle 18c/19c: เริ่มเปลี่ยนมาใช้วิธีการออก Version ตามปี ( Autonomous Database ) ที่ซ่อมแซมและจูนตัวเองได้โดยไม่ต้องใช้ DBA
- ความต่างในการเขียน Provider: ต้องรับมือกับ Connection String ที่ต้องระบุ Service Name แทน SID และการสลับ Container ( CDB / PDB ) เมื่อต้องการดึง Metadata ทั้งระบบ
ยุคปัจจุบัน: AI & Converged Database ( 21c, 23c / 23ai )
ช่วงปี: 2021 – ปัจจุบัน ( ในยุค .NET 10 / 11 ) เน้นการเป็น Converged Database คือตัวเดียวทำได้ทุกอย่าง ( SQL, JSON, Graph, Vector )
- ฟีเจอร์เด่น ( 23ai ):
- Vector Search: รองรับการทำ AI / LLM ภายใน Database ( Vector Data Type )
- JSON Relational Duality: มองข้อมูลเป็น JSON ก็ได้ หรือมองเป็น Table ก็ได้ ในข้อมูลชุดเดียวกัน
- Boolean Data Type: ในที่สุด Oracle ก็มี Data Type
BOOLEANให้ใช้ใน SQL จริงๆ เสียที ( หลังจากรอกันมา 40 ปี! )
- ความต่างในการเขียน Provider: .NET 10 ของคุณจะสามารถใช้ Oracle Entity Framework Core หรือ ODP.NET รุ่นล่าสุดที่รองรับ Asynchronous Programming เต็มรูปแบบ และการจัดการข้อมูลแบบ JSON ที่รวดเร็วขึ้นมาก
ตารางเปรียบเทียบ Oracle ในมุมนักพัฒนา ( C# Provider Perspective )
| หัวข้อ | ยุค Legacy ( 7 – 9i ) | ยุค Grid ( 10g – 11g ) | ยุค Modern / AI ( 12c – 23ai ) |
| Driver (.NET 10) | OLEDB / Managed ODP.NET | Managed ODP.NET | ODP.NET Core / Devart |
| Metadata Method | Manual Query sys tables | DBMS_METADATA | DBMS_METADATA + PDB aware |
| Data Types | LONG, RAW, DATE | BLOB/CLOB, TIMESTAMP | JSON, VECTOR, BOOLEAN |
| Paging Syntax | ROWNUM Subquery | ROWNUM Subquery | OFFSET ... FETCH ( 12c+ ) |
ถ้าจะเขียน Provider ให้ครอบคลุม Oracle ทุกยุค การทำ Paging จะเป็นจุดที่ปวดหัวที่สุด เพราะก่อนเวอร์ชัน 12c เราต้องเขียน Query ซ้อนกัน 3 ชั้นเพื่อทำ ROWNUM แต่ในเวอร์ชันใหม่เราสามารถใช้ OFFSET ... FETCH เหมือน SQL Server ได้แล้วครับ
อ่านเพิ่มเติม