Oracle Database 18c XE กับปัญหาการ import user

Oracle Database XE คืออะไร

Oracle XE หรือ Oracle Express Edition เป็นซอฟต์แวร์ฐานข้อมูล Oracle เวอร์ชันที่ให้สามารถดาวน์โหลดไปใช้งานได้โดยไม่มีค่าใช้จ่าย แต่จะมีข้อจำกัดในการใช้งาน ตัวอย่างเช่นในเวอร์ชัน 18c จะมีข้อจำกัด เช่น

  • จำกัดการใช้งานข้อมูลได้ไม่เกิน 12 GB
  • จำกัดการใช้งาน RAM ได้ไม่เกิน 2 GB
  • ฟังก์ชันการใช้งานหลายอย่างที่ไม่มีให้ใช้งานเหมือนเวอร์ชัน Standard หรือ Enterprise

Oracle Database XE 18c กับการติดตั้งในรูปแบบ Multitenant

Oracle Database XE 18c จะถูกติดตั้งในรูปแบบที่เรียกว่า Multitenant ซึ่งจะมีรูปแบบดังนี้คือ

  • มีฐานข้อมูลที่เป็น container database
  • ฐานข้อมูลที่สร้างภายใต้ container เรียกว่า pluggable database
  • ในการติดตั้งไม่สามารถเลือกได้ว่าจะลงเฉพาะ container database อย่างเดียวโดยไม่ลง pluggable database แต่ตัว pluggable database จะถูกติดตั้งมาให้ด้วย 1 pluggable database (มีได้สูงสุด 3 pluggable database)

รูปตัวอย่างผลการติดตั้ง Oracle Database XE 18c

  • การเรียกใช้ service name จะเป็นดังนี้
    • XE เป็น service name สำหรับเรียกใช้ container database
    • XEPDB1 เป็น service name สำหรับเรียกใช้งาน pluggable database
    • service name ทั้ง XE และ XEPDB1 จะถูกกำหนดไว้แล้วตั้งแต่ตอนติดตั้ง

ปัญหาที่พบกับการ import user

  • เมื่อมีการ import user ด้วยคำสั่ง impdp
  • พบปัญหากับฐานข้อมูล container หรือ XE ส่วน ตัว pluggable หรือ XEPDB1 จะไม่พบปัญหาเช่นนี้
  • ตัวอย่างข้อความ error ที่พบ

ORA-39083: Object type USER:”๊USER” failed to create with error: //”USER” คือชื่อ user ที่ถูก import เข้ามา

ORA-65096: invalid common user or role name

ตัวอย่างการแก้ปัญหาเมื่อต้องการ import user เข้า XE

  • รันคำสั่ง alter session set “_ORACLE_SCRIPT”=true;
  • สร้าง user ใหม่ โดยตั้งชื่อให้ตรงกับ user ที่ต้องการ import
  • ทำการ import ด้วยคำสั่ง impdp ตามปกติ

สิ่งที่น่าสนใจ

จะเห็นว่า oracle database 18c XE ถูกติดตั้งมาในรูปแบบ multitenant โดยมี database เริ่มต้นให้ 2 database คือ container database และ pluggable database ดังนั้นการเลือกว่าจะใช้งานแบบไหนก็ขึ้นอยู่กับลักษณะงานที่เราต้องการใช้งาน แต่กรณีที่ต้องการใช้งานทั่วไปแบบปกติ จะเห็นว่าการเลือกทำงานกับฐานข้อมูล pluggable database ดูแล้วน่าจะพบปัญหาน้อยกว่าจะไปทำงานกับตัว container database