Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

แปลงฐานข้อมูล Oracle Non-Container Legacy ให้เป็น Multitenant CDB

เผยแพร่ครั้งแรกโดย 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

ภาพต่อไปนี้แสดงสถานการณ์ทดสอบ:

แปลงฐานข้อมูล Oracle Non-Container Legacy ให้เป็น Multitenant CDB

การทดสอบการแปลง

ใช้ขั้นตอนในส่วนนี้เพื่อแปลงฐานข้อมูล 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 ในกรณีนี้ noncdb database ไม่พร้อมใช้งานหลังจากสร้าง PDB แล้ว
  • NOCOPY: Datafiles ของ noncdb ถูกใช้เพื่อสร้าง PDB2 และใช้ตำแหน่งเดียวกับ noncdb ในกรณีนี้ noncdb database ไม่พร้อมใช้งานหลังจากสร้าง 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