สำหรับคนที่เคยใช้ MySQL หรือ SQL Server มาก่อน เมื่อย้ายมาใช้ Oracle Database อาจจะเกิดความสับสนเรื่องโครงสร้างได้ครับ เพราะแนวคิดของคำว่า Database และ Schema ใน Oracle นั้นมีความแตกต่างจากระบบอื่นอย่างชัดเจน ความเข้าใจที่ว่า “เห็นแต่ Schema” นั้นถูกต้องแล้วครับในมุมมองของผู้ใช้งาน โดยสรุปความแตกต่างได้ดังนี้ครับ
1 User = 1 Schema
ใน Oracle Schema คือเซตของ Object ที่เป็นของ User คนใดคนหนึ่งเท่านั้น
- เมื่อคุณสร้าง User ใหม่ ระบบจะสร้าง Schema ชื่อเดียวกันขึ้นมาโดยอัตโนมัติ
- ในขณะที่ MySQL 1 Database อาจจะมีหลาย User เข้ามาใช้งานได้ แต่ใน Oracle เราจะมองว่า Schema คือพื้นที่ส่วนตัวของ User นั้น ๆ
โครงสร้างแบบ Multitenant
ถ้าคุณใช้ Oracle เวอร์ชันใหม่ ๆ โครงสร้างจะแบ่งออกเป็น
- CDB : คือตัวระบบฐานข้อมูลใหญ่
- PDB : คือฐานข้อมูลย่อยที่อยู่ข้างใน
- สิ่งที่คุณเห็น: เมื่อคุณ Connect เข้าไปใน PDB คุณจะมองเห็น “Schemas” ต่าง ๆ ของ User ที่อยู่ใน PDB นั้น
ตารางเปรียบเทียบให้เห็นภาพ
| องค์ประกอบ | MySQL / SQL Server | Oracle Database |
| ระดับบนสุด | Instance | Instance / CDB |
| สิ่งที่เก็บ Data | Database | PDB หรือ Tablespace |
| เจ้าของ Object | Database (User แค่มีสิทธิ์) | Schema (User คือเจ้าของ) |
วิธีตรวจสอบ Database ที่คุณใช้งานอยู่
หากคุณต้องการดูว่าตอนนี้คุณกำลังต่ออยู่กับ Database ชื่ออะไร หรืออยู่ใน Container ไหน สามารถใช้คำสั่ง SQL เหล่านี้ได้ครับ
| คำสั่ง | วัตถุประสงค์ | ระดับสิทธิ์ที่ต้องการ |
SELECT * FROM global_name | ดูชื่อ Database ปัจจุบัน | ทั่วไป |
SELECT user FROM dual | ดูชื่อ Schema / User ที่คุณกำลังใช้งาน | ทั่วไป |
SELECT name FROM v$database | ดูชื่อ Database และสถานะเชิงลึก | Admin / SYSDBA |
SELECT instance_name FROM v$instance | ดูชื่อ Instance (SID) | Admin / SYSDBA |
สรุปสั้น ๆ
ใน Oracle เราจะไม่สร้าง Database พร่ำเพรื่อเหมือน MySQL แต่เราจะสร้าง User / Schema เพื่อแยกโปรเจกต์ออกจากกันครับ
อ่านเพิ่มเติม