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

แปลงฐานข้อมูลที่ไม่ใช่คอนเทนเนอร์เป็นฐานข้อมูลแบบเสียบได้หลายตัว

เผยแพร่ครั้งแรกโดย TriCore:29 สิงหาคม 2017

Oracle® เวอร์ชัน 12c เสนอตัวเลือกฐานข้อมูลแบบหลายผู้เช่าสำหรับโฮสต์ฐานข้อมูลแบบเสียบได้หลายรายการ (PDB) ที่มีฐานข้อมูลคอนเทนเนอร์เดียว (CDB) บางครั้ง คุณต้องแปลงฐานข้อมูลที่ไม่ใช่ CDB เป็นฐานข้อมูลแบบเสียบได้ CDB บล็อกนี้อธิบายวิธีการที่คุณสามารถใช้เพื่อแปลงฐานข้อมูลที่ไม่ใช่ CDB เป็นฐานข้อมูล CDB

การตั้งค่ากรณีทดสอบ

สถานการณ์การทดสอบนี้เริ่มต้นด้วยอินสแตนซ์ฐานข้อมูลที่ไม่ใช่ CDB noncdb12c ที่กำลังทำงานอยู่บนเครื่อง ABC123.xyz.com . งานคือการสร้างฐานข้อมูล CDB cdb12c ,ในเครื่องเดียวกัน. คุณต้องแน่ใจว่าคุณมีพื้นที่ดิสก์เพียงพอที่จะเก็บฐานข้อมูล CDB ที่แปลงแล้ว

โฮสต์เซิร์ฟเวอร์ :ABC123.xyz.com

ฐานข้อมูลที่ไม่ใช่ CDB :noncdb12c

เวอร์ชัน Oracle :12.1.0.2

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

แปลงฐานข้อมูลที่ไม่ใช่คอนเทนเนอร์เป็นฐานข้อมูลแบบเสียบได้หลายตัว

การทดสอบ Conversion

ใช้ขั้นตอนในส่วนนี้เพื่อแปลงฐานข้อมูลที่ไม่ใช่ CDB เป็นฐานข้อมูล CDB

ขั้นตอนที่ 1:ทำการปิดระบบใหม่ทั้งหมด

ทำตามขั้นตอนต่อไปนี้เพื่อปิดฐานข้อมูลที่ไม่ใช่ CDB อย่างหมดจด:

  • ตั้งค่าสภาพแวดล้อมเป็น noncdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      shutdown immediate
    

ขั้นตอนที่ 2:เปิดฐานข้อมูลเป็นแบบอ่านอย่างเดียว

หลังจากที่คุณปิดฐานข้อมูลอย่างหมดจดแล้ว ให้ทำตามขั้นตอนต่อไปนี้เพื่อเริ่มฐานข้อมูลในโหมดเมานต์เอกสิทธิ์เฉพาะบุคคล และเปิดฐานข้อมูลในโหมดอ่านอย่างเดียว:

  • ตั้งค่าสภาพแวดล้อมเป็น noncdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      startup mount exclusive
    
      alter database open read only;
    

ขั้นตอนที่ 3:สร้างไฟล์รายการ PDB

ทำตามขั้นตอนต่อไปนี้เพื่อสร้างไฟล์รายการ PDB จากที่ไม่ใช่ CDB:

  • ตั้งค่าสภาพแวดล้อมเป็น noncdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      exec dbms_pdb.describe (pdb_descr_file=>'/tmp/noncdb12c_manifest_file.xml');
    

ขั้นตอนที่ 4:ปิดระบบที่ไม่ใช่ CDB

ทำตามขั้นตอนต่อไปนี้หลังจากขั้นตอนที่ 3 เสร็จสิ้นเพื่อปิดไฟล์ที่ไม่ใช่ CDB

  • ตั้งค่าสภาพแวดล้อมเป็น noncdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      shutdown immediate
    

ขั้นตอนที่ 5:เริ่ม CDB

หาก CDB ไม่ได้ทำงานอยู่ ให้ทำตามขั้นตอนต่อไปนี้เพื่อเริ่มต้นและตรวจสอบความเข้ากันได้:

  • ตั้งค่าสภาพแวดล้อมเป็น cdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      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:

      startup
      SELECT name, cause, type, message, status FROM PDB_PLUG_IN_VIOLATIONS
      WHERE name='NONCDB12C';
    

หมายเหตุ :หากมีข้อผิดพลาดให้แก้ไขก่อนดำเนินการต่อ

ขั้นตอนที่ 7:เชื่อมต่อกับ CDB และเสียบเข้ากับ PDB

ทำตามขั้นตอนต่อไปนี้เพื่อเชื่อมต่อกับ CDB และเสียบเข้ากับฐานข้อมูล PDDB12C โดยใช้ไฟล์ Manifest ที่ไม่ใช่ CDB:

  • ตั้งค่าสภาพแวดล้อมเป็น cdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      CREATE PLUGGABLE DATABASE pdb12c USING '/tmp/noncdb12c_manifest_file.xml'
       COPY
       FILE_NAME_CONVERT = ('<Datafile_Location_for_noncdb>', 'Datafile_Location_for_pdb');
    

หมายเหตุ :รองรับตัวเลือกต่อไปนี้ และคุณสามารถเลือกได้ตามสภาพแวดล้อมของคุณ:

  • คัดลอก :ไฟล์ข้อมูลของ noncdb ยังคงไม่บุบสลาย และ noncdb ถูกคัดลอกเพื่อสร้าง PDB ที่ตำแหน่งใหม่และเก็บไฟล์ข้อมูลเดิมไว้ที่ตำแหน่งเดิม ซึ่งหมายความว่าฐานข้อมูล noncdb ยังคงทำงานอยู่หลังจากสร้าง PDB แล้ว
  • ย้าย :ไฟล์ข้อมูลของ noncdb ถูกย้ายไปยังตำแหน่งใหม่เพื่อสร้าง PDB ในกรณีนี้ noncdb ฐานข้อมูลไม่พร้อมใช้งานหลังจากสร้าง PDB แล้ว
  • NOCOPY :ไฟล์ข้อมูลของ noncdb ใช้เพื่อสร้าง PDB2 และใช้ตำแหน่งเดียวกับ noncdb . ในกรณีนี้ noncdb ฐานข้อมูลไม่พร้อมใช้งานหลังจากสร้าง PDB แล้ว

คุณสามารถใช้ FILE_NAME_CONVERT พารามิเตอร์เพื่อระบุตำแหน่งใหม่ของ thedatafiles ในขณะที่ใช้ COPY หรือ ย้าย ตัวเลือก

ขั้นตอนที่ 8:เรียกใช้สคริปต์การแปลง

หลังจากขั้นตอนที่ 7 เสร็จสมบูรณ์ ให้ทำตามขั้นตอนต่อไปนี้เพื่อสลับไปยังคอนเทนเนอร์ PDB และเรียกใช้สคริปต์การแปลง $ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql :

  • ตั้งค่าสภาพแวดล้อมเป็น cdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      alter session set container=pdb12c
      @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
    

ขั้นตอนที่ 9:เริ่ม PDB และตรวจสอบโหมด

ทำตามขั้นตอนต่อไปนี้เพื่อเริ่ม PDB และตรวจสอบว่าโหมด เปิด :

  • ตั้งค่าสภาพแวดล้อมเป็น cdb12c .

  • ดำเนินการคำสั่งต่อไปนี้:

      sqlplus / as sysdba
    
  • เรียกใช้รหัสต่อไปนี้ที่พรอมต์ SQL:

      alter pluggable database open;
      SELECT name, open_mode FROM v$pdbs;
    

บทสรุป

เมื่อคุณแปลงฐานข้อมูลที่ไม่ใช่ CDB เป็นฐานข้อมูลแบบเสียบได้ CDB คุณสามารถเลือกจากตัวเลือกต่างๆ ได้ขึ้นอยู่กับขนาดของฐานข้อมูล

หากฐานข้อมูลมีขนาดใหญ่มาก คุณอาจใช้ NOCOPY ตัวเลือก. วิธีนี้ช่วยลดจำนวนพื้นที่เพิ่มเติมที่จำเป็นและลดเวลาที่ใช้ในการดำเนินการแปลง NOCOPY ตัวเลือกมีความเสี่ยง อย่างไรก็ตาม เนื่องจากคุณไม่ได้เก็บไฟล์ฐานข้อมูลเดิมไว้ ดังนั้น หากคุณต้องการกู้คืนฐานข้อมูลเป็นสถานะก่อนหน้า คุณต้องกู้คืนฐานข้อมูลโดยใช้ข้อมูลสำรองที่ดำเนินการก่อนกิจกรรมการแปลง

ถ้าฐานข้อมูลมีขนาดเล็กลง คุณควรใช้ COPY เพื่อที่ว่าหากมีปัญหาใด ๆ ทางเลือกสำรองของ non-CDB แบบเก่านั้นตรงไปตรงมาเพราะไฟล์ต้นฉบับจะไม่เสียหายเสมอ

ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม

เรียนรู้เพิ่มเติมเกี่ยวกับบริการแอปพลิเคชัน Rackspace