เผยแพร่ครั้งแรกโดย TriCore: 29 สิงหาคม 2017
Oracle® เวอร์ชัน 12c เสนอตัวเลือกฐานข้อมูล Multitenant สำหรับโฮสต์ pluggable databases (PDB) หลายตัวด้วย container database (CDB) เดียว บางครั้งคุณต้องแปลงฐานข้อมูล non-CDB ให้เป็น CDB pluggable database บล็อกนี้อธิบายวิธีการที่คุณสามารถใช้เพื่อแปลงฐานข้อมูล non-CDB ให้เป็นฐานข้อมูล CDB
การตั้งค่ากรณีทดสอบ
สถานการณ์ทดสอบนี้เริ่มต้นด้วยอินสแตนซ์ฐานข้อมูล non-CDB คือ noncdb12c ที่รันบนเครื่อง ABC123.xyz.com ภารกิจคือสร้างฐานข้อมูล CDB คือ cdb12c บนเครื่องเดียวกัน คุณต้องแน่ใจว่ามีพื้นที่ดิสก์เพียงพอสำหรับจัดเก็บฐานข้อมูล CDB ที่แปลงแล้ว
เซิร์ฟเวอร์โฮสต์: ABC123.xyz.com
ฐานข้อมูล Non-CDB: noncdb12c
เวอร์ชัน Oracle: 12.1.0.2
ภาพต่อไปนี้แสดงสถานการณ์ทดสอบ:
การทดสอบการแปลง
ใช้ขั้นตอนในส่วนนี้เพื่อแปลงฐานข้อมูล non-CDB เป็นฐานข้อมูล CDB
ขั้นตอนที่ 1: ปิดการทำงานอย่างสะอาด
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อปิดฐานข้อมูล non-CDB อย่างสะอาด:
- ตั้งค่าสภาพแวดล้อมเป็น
noncdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
shutdown immediate
ขั้นตอนที่ 2: เปิดฐานข้อมูลในโหมดอ่านอย่างเดียว
หลังจากปิดฐานข้อมูลอย่างสะอาดแล้ว ดำเนินการตามขั้นตอนต่อไปนี้เพื่อเริ่มฐานข้อมูลในโหมด mount exclusive และเปิดฐานข้อมูลในโหมดอ่านอย่างเดียว:
- ตั้งค่าสภาพแวดล้อมเป็น
noncdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
startup mount exclusive alter database open read only;
ขั้นตอนที่ 3: สร้างไฟล์ Manifest ของ PDB
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อสร้างไฟล์ manifest ของ PDB จาก non-CDB:
- ตั้งค่าสภาพแวดล้อมเป็น
noncdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
exec dbms_pdb.describe (pdb_descr_file=>'/tmp/noncdb12c_manifest_file.xml');
ขั้นตอนที่ 4: ปิด non-CDB
ดำเนินการตามขั้นตอนต่อไปนี้หลังจากขั้นตอนที่ 3 เสร็จสิ้น เพื่อปิดไฟล์ non-CDB
- ตั้งค่าสภาพแวดล้อมเป็น
noncdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
shutdown immediate
ขั้นตอนที่ 5: เริ่ม CDB
หาก CDB ยังไม่ได้รัน ให้ดำเนินการตามขั้นตอนต่อไปนี้เพื่อเริ่มต้นและตรวจสอบความเข้ากันได้:
- ตั้งค่าสภาพแวดล้อมเป็น
cdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
startup SET SERVEROUTPUT ON; DECLARE Compatible CONSTANT VARCHAR2(3) :=CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY (pdb_descr_file => '/tmp/noncdb12c_manifest_file.xml') WHEN TRUE THEN 'YES' ELSE 'NO' END; BEGIN DBMS_OUTPUT.PUT_LINE(compatible); END; /
ขั้นตอนที่ 6: ตรวจสอบข้อผิดพลาด
หลังจากการเริ่มต้นฐานข้อมูล CDB เสร็จสิ้น ให้ดำเนินการตามขั้นตอนต่อไปนี้เพื่อตรวจสอบข้อผิดพลาดในมุมมอง PDB_PLUG_IN_VIOLATIONS:
- ตั้งค่าสภาพแวดล้อมเป็น
cdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
startup SELECT name, cause, type, message, status FROM PDB_PLUG_IN_VIOLATIONS WHERE name='NONCDB12C';
หมายเหตุ: หากมีข้อผิดพลาด ให้แก้ไขก่อนดำเนินการต่อ
ขั้นตอนที่ 7: เชื่อมต่อกับ CDB และ plug เข้า PDB
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อเชื่อมต่อกับ CDB และ plug เข้าฐานข้อมูล PDDB12C โดยใช้ไฟล์ manifest non-CDB:
- ตั้งค่าสภาพแวดล้อมเป็น
cdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
CREATE PLUGGABLE DATABASE pdb12c USING '/tmp/noncdb12c_manifest_file.xml' COPY FILE_NAME_CONVERT = ('<Datafile_Location_for_noncdb>', 'Datafile_Location_for_pdb');
หมายเหตุ: ตัวเลือกต่อไปนี้รองรับ และคุณสามารถเลือกหนึ่งตัวตามสภาพแวดล้อมของคุณ:
- COPY: Datafiles ของ
noncdbคงอยู่ และnoncdbถูกคัดลอกเพื่อสร้าง PDB ที่ตำแหน่งใหม่ และเก็บ datafiles ต้นฉบับไว้ที่ตำแหน่งเดิม หมายความว่า noncdb database ยังทำงานได้หลังการสร้าง PDB - MOVE: Datafiles ของ
noncdbถูกย้ายไปตำแหน่งใหม่เพื่อสร้าง PDB ในกรณีนี้noncdbdatabase ไม่พร้อมใช้งานหลังจากสร้าง PDB แล้ว - NOCOPY: Datafiles ของ
noncdbถูกใช้เพื่อสร้าง PDB2 และใช้ตำแหน่งเดียวกับnoncdbในกรณีนี้noncdbdatabase ไม่พร้อมใช้งานหลังจากสร้าง PDB แล้ว
คุณสามารถใช้พารามิเตอร์ FILE_NAME_CONVERT เพื่อระบุตำแหน่งใหม่ของ datafiles ขณะใช้ตัวเลือก COPY หรือ MOVE
ขั้นตอนที่ 8: รันสคริปต์การแปลง
หลังจากขั้นตอนที่ 7 เสร็จสิ้น ให้ดำเนินการตามขั้นตอนต่อไปนี้เพื่อสลับไปที่ PDB container และรันสคริปต์การแปลง $ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql:
- ตั้งค่าสภาพแวดล้อมเป็น
cdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
alter session set container=pdb12c @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
ขั้นตอนที่ 9: เริ่ม PDB และตรวจสอบโหมด
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อเริ่ม PDB และตรวจสอบว่าโหมดเป็น open:
- ตั้งค่าสภาพแวดล้อมเป็น
cdb12c - รันคำสั่งต่อไปนี้:
sqlplus / as sysdba - รันโค้ดต่อไปนี้ที่ SQL prompt:
alter pluggable database open; SELECT name, open_mode FROM v$pdbs;
สรุป
เมื่อคุณแปลงฐานข้อมูล non-CDB เป็น CDB pluggable database คุณสามารถเลือกจากหลายตัวเลือกได้ ขึ้นอยู่กับขนาดของฐานข้อมูล
หากฐานข้อมูลมีขนาดใหญ่มาก คุณอาจใช้ตัวเลือก NOCOPY ซึ่งลดพื้นที่เพิ่มเติมที่ต้องการ และลดเวลาในการดำเนินการแปลง อย่างไรก็ตาม ตัวเลือก NOCOPY มีความเสี่ยง เนื่องจากคุณไม่เก็บไฟล์ฐานข้อมูลต้นฉบับไว้ ดังนั้น หากคุณต้องกู้คืนฐานข้อมูลไปสู่สถานะก่อนหน้า คุณต้องกู้คืนฐานข้อมูลโดยใช้ backup ที่สร้างก่อนกิจกรรมการแปลง
หากขนาดฐานข้อมูลเล็ก คุณควรใช้ตัวเลือก COPY เพื่อที่ถ้ามีปัญหาใดๆ การ fallback ไปยัง non-CDB เก่าจะตรงไปตรงมา เนื่องจากไฟล์ต้นฉบับคงอยู่เสมอ
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม
เรียนรู้เพิ่มเติมเกี่ยวกับบริการแอปพลิเคชันของ Rackspace