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

การ Unplug และ Replug Multitenant Databases อย่างราบรื่น: คู่มือปฏิบัติ

บล็อกนี้อภิปรายการ Detach Pluggable Database (PDB) หนึ่งจาก Source Container Database (CDB) และ Attach ไปยัง Target CDB เพื่อวัตถุประสงค์ของบล็อกนี้ PDB คือฐานข้อมูลที่เราบันทึกฐานข้อมูลที่เกี่ยวข้องกับแอปพลิเคชันทั้งหมด

บทนำ

CDB ประกอบด้วย PDB databases ศูนย์หรือมากกว่าที่เกี่ยวข้องกับแอปพลิเคชันต่างๆ และมี Root Container เพียงหนึ่งเดียวที่จัดเก็บ Oracle®-related Metadata และ Common Users ชื่อของ Root Container คือ CDB$ROOT Root Container ยังมี Seed PDB หนึ่งคือ PDB$SEED Seed PDB นี้เป็น Template ที่ระบบจัดเตรียมไว้ ซึ่ง CDB สามารถใช้สร้าง PDBs ใหม่ได้ ใน Version 12c Oracle นำเสนอฟีเจอร์ Container และ PDB ซึ่งช่วยให้คุณเพิ่ม PDBs ตามความต้องการทางธุรกิจ ตัวอย่างเช่น คุณสามารถสร้าง PDB Database ที่มีข้อมูลแผนกขายในแอปพลิเคชันขาย และข้อมูลแผนก HR ในแอปพลิกเคชัน HR

การ Unplug PDB หมายถึงการ Detach PDB Database จาก Source CDB และ Attach ไปยัง Target CDB

ในบล็อกนี้ Source CDB คือ TEST12 มี PDBs 2 ตัว คือ PDB1 และ PDB2 Target CDB คือ DEV12 ซึ่งจะรับ PDBs ที่ Unplug มา

ตัวอย่าง Unplug และ Plug PDB

ในส่วนนี้ คุณจะเรียนรู้วิธี Unplug PDB1 และ PDB2 จาก Source CDB TEST12 และ Plug เข้าไปใน Target CDB DEV12

ก่อนทำการเปลี่ยนแปลง Source PDBs อยู่ในสถานะ MOUNTED ตามภาพต่อไปนี้:

การ Unplug และ Replug Multitenant Databases อย่างราบรื่น: คู่มือปฏิบัติ

ตรวจสอบความเข้ากันได้ของ PDB กับ Target CDB

ก่อนเริ่มการ Plug ให้ตรวจสอบว่า PDB ที่จะ Plug เข้าไปเข้ากันได้กับ CDB Host ใหม่หรือไม่ หากไม่เข้ากันได้ การรัน PL/SQL Block ต่อไปนี้จะแสดง Error:

. oraenv [enter dev12 at the prompt] sqlplus / as sysdba set serveroutput on DECLARE compatible BOOLEAN := FALSE; BEGIN compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( pdb_descr_file => '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml '); if compatible then DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? YES'); else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? NO'); end if; END; / set serveroutput on DECLARE compatible BOOLEAN := FALSE; BEGIN compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( pdb_descr_file => '/home/oracle/app/oradata/pdb2/pdb2.xml'); if compatible then DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? YES'); else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? NO'); end if; END; / 

ปิด PDBs

ปิด PDBs เพื่อให้สามารถ Unplug ได้ โดยรันคำสั่ง SQL*Plus® ต่อไปนี้:

. oraenv [enter test12 at the prompt] sqlplus / as sysdba alter pluggable database pdb1 close immediate; alter pluggable database pdb2 close immediate; 

Source PDBs ควรอยู่ใน Mount State Closed

Unplug PDBs

หลังปิด PDB ให้สร้าง XML Manifest File ไฟล์ XML นี้มีข้อมูลเกี่ยวกับชื่อและ Full Path ของ Tablespaces รวมถึง Data Files สำหรับ PDB ที่ Unplug

Unplug PDB ที่ปิดแล้ว และระบุ Path และชื่อไฟล์ XML โดยรันคำสั่งต่อไปนี้:

alter pluggable database pdb1 unplug into '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml'; alter pluggable database pdb2 unplug into '/home/oracle/app/oradata/pdb2/pdb2.xml'; 

Drop PDB ที่ปิดแล้วและเก็บ Data Files โดยรันคำสั่งต่อไปนี้:

drop pluggable database pdb1 keep datafiles; drop pluggable database pdb2 keep datafiles; 

ตรวจสอบสถานะของ PDB ที่ Unplug โดยรันคำสั่งต่อไปนี้:

select pdb_name, status from cdb_pdbs where pdb_name in ('PDB1', 'PDB2'); [you will see no rows] exit 

Plug PDBs

คุณสามารถ Plug PDB เข้า Target CDB ได้โดยใช้วิธี COPY, NOCOPY หรือ CLONE MOVE

Plug ด้วยวิธี COPY

เพื่อใช้วิธี COPY ในการ Plug PDB ให้สร้างและกำหนด Destination สำหรับ Data Files ใหม่ Plug PDB ที่ Unplug เข้า Target CDB และ Copy Data Files ของ PDB ที่ Unplug

สร้าง Destination Directory โดยรันคำสั่งต่อไปนี้:

mkdir /home/oracle/app/oradata/DEV12/pdb1 sqlplus / as sysdba 

ใช้ Data Files ของ PDB ที่ Unplug เพื่อ Plug PDB เข้า CDB และ Copy Data Files ไปยัง Location ใหม่โดยรันคำสั่งต่อไปนี้:

create pluggable database pdb_plug_copy using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ' COPY FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/pdb1'); 

ตรวจสอบสถานะและ Open Mode ของ PDB ที่ Plug โดยรันคำสั่งต่อไปนี้:

select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_COPY'; select open_mode from v$pdbs where name='PDB_PLUG_COPY'; List the data files of the plugged PDB. select name from v$datafile where con_id=3; exit 

ผลลัพธ์ของการดำเนินการเหล่านี้แสดงในภาพต่อไปนี้:

การ Unplug และ Replug Multitenant Databases อย่างราบรื่น: คู่มือปฏิบัติ
Plug ด้วยวิธี NOCOPY

วิธีนี้ใช้ Data Files ของ PDB ที่ Unplug เพื่อ Plug PDB เข้า Target CDB โดยไม่ทำหรือใช้ Copy ใดๆ

เพื่อใช้วิธี NOCOPY ในการ Plug PDB ให้รันคำสั่งต่อไปนี้:

create pluggable database pdb_plug_nocopy using '/home/oracle/app/oradata/pdb2/pdb2.xml' NOCOPY TEMPFILE REUSE; 

การดำเนินการนี้ใช้เวลาไม่กี่วินาที Data Files ต้นฉบับของ PDB ที่ Unplug ตอนนี้เป็นของ PDB ที่ Plug ใหม่ใน CDB Host ใหม่ ไฟล์ที่มีชื่อเดียวกับ Temp File ที่ระบุใน XML File อยู่ใน Target Location แล้ว ดังนั้น Clause TEMPFILE_REUSE จึงจำเป็น

ตรวจสอบสถานะและ Open Mode ของ PDB ที่ Plug โดยรันคำสั่งต่อไปนี้:

select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_NOCOPY'; select open_mode from v$pdbs where name='PDB_PLUG_NOCOPY'; 

ผลลัพธ์ของการดำเนินการเหล่านี้แสดงในภาพต่อไปนี้:

การ Unplug และ Replug Multitenant Databases อย่างราบรื่น: คู่มือปฏิบัติ

แสดงรายการ Data Files ของ PDB ที่ Plug โดยรันคำสั่งต่อไปนี้:

select name from v$datafile where con_id=3; select name from v$datafile where con_id=4; exit 
Plug ด้วยวิธี CLONE MOVE

เพื่อใช้วิธี CLONE MOVE ในการ Plug PDB ให้สร้างและกำหนด Destination สำหรับ Data Files ใหม่ ใช้ Data Files ของ PDB ที่ Unplug เพื่อ Plug PDB เข้า Target CDB และ Move Data Files ไปยัง Location อื่น

สร้าง Destination Directory โดยรันคำสั่งต่อไปนี้:

mkdir /home/oracle/app/oradata/DEV12/clone sqlplus / as sysdba 

Plug PDB เข้า CDB และ Move Data Files ไปยัง Location ใหม่โดยรันคำสั่งต่อไปนี้:

create pluggable database pdb_plug_move using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ' MOVE FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/clone '); 

Error Message แสดงขึ้นเพราะ Global Unique Identifier (GUID) ไม่ Unique PDB1 ถูก Plug ด้วยวิธี COPY ไปแล้ว ซึ่งทำให้เกิด Conflict กับ GUID ตามภาพต่อไปนี้:

การ Unplug และ Replug Multitenant Databases อย่างราบรื่น: คู่มือปฏิบัติ

เพื่อแก้ไข ให้รันโค้ดต่อไปนี้พร้อม Clause AS CLONE:

create pluggable database pdb_plug_move AS CLONE using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ' MOVE FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/clone'); 

ตรวจสอบสถานะและ Open Mode ของ PDB ที่ Plug โดยรันคำสั่งต่อไปนี้:

select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_MOVE'; select open_mode from v$pdbs where name='PDB_PLUG_MOVE'; 

แสดงรายการ Data Files ของ PDB ที่ Plug โดยรันคำสั่งต่อไปนี้:

select name from v$datafile where con_id=5; 

ผลลัพธ์ของการดำเนินการเหล่านี้แสดงในภาพต่อไปนี้:

การ Unplug และ Replug Multitenant Databases อย่างราบรื่น: คู่มือปฏิบัติ

เปิด PDBs ที่ Plug แล้ว

เพื่อเปิด PDB และเสร็จสิ้นการ Plug ให้รันคำสั่งต่อไปนี้:

alter pluggable database pdb_plug_nocopy open; alter pluggable database pdb_plug_copy open; alter pluggable database pdb_plug_move open; 

เชื่อมต่อกับ PDBs ที่ Plug แล้วและตรวจสอบ Container Name ที่คุณเชื่อมต่ออยู่โดยรันคำสั่งต่อไปนี้:

connect sys/*****@localhost:1521/pdb_plug_nocopy AS SYSDBA show con_name connect sys/******@localhost:1521/pdb_plug_copy AS SYSDBA show con_name connect sys/******@localhost:1521/pdb_plug_move AS SYSDBA show con_name exit 

ย้าย PDBs กลับไปยัง Source CDB

ปิด Pluggable Databases ทั้งหมดโดยรันคำสั่งต่อไปนี้:

. oraenv [enter dev12 at the prompt] sqlplus / as sysdba alter pluggable database all close immediate; 

Unplug Database pdb_plug_copy เพื่อให้สามารถใช้สร้าง Database pdb1 ใหม่ได้ โดยรันคำสั่งต่อไปนี้:

alter pluggable database pdb_plug_copy unplug into '/home/oracle/app/oradata /pdb_plug_copy.xml'; 

Drop Database pdb_plug_copy โดยรันคำสั่งต่อไปนี้:

 drop pluggable database pdb_plug_copy; 

Unplug และ Drop Database pdb_plug_nocopy เพื่อให้สามารถใช้สร้าง Database pdb2 ใหม่ได้ โดยรันคำสั่งต่อไปนี้:

alter pluggable database pdb_plug_nocopy unplug into '/home/oracle/app/oradata /pdb_plug_nocopy.xml'; drop pluggable database pdb_plug_nocopy keep datafiles; 

Drop Database pdb_plug_move โดยรันคำสั่งต่อไปนี้:

drop pluggable database pdb_plug_move; 

Plug Database pdb1 กลับเข้า CDB TEST12 โดยรันคำสั่งต่อไปนี้:

connect sys/*****@localhost:1521/test12 as sysdba create pluggable database pdb1 AS CLONE using '/u01/app/oracle/oradata/pdb_plug_copy.xml' MOVE FILE_NAME_CONVERT=(' /home/oracle/app/oradata/DEV12/pdb1',' /home/oracle/app/oradata/TEST12/pdb1'); 

Plug Database pdb2 กลับเข้า CDB TEST12 โดยรันคำสั่งต่อไปนี้:

create pluggable database pdb2 using '/u01/app/oracle/oradata/pdb_plug_nocopy.xml' nocopy tempfile reuse; 

เปิด pdb1 และ pdb2 โดยรันคำสั่งต่อไปนี้:

alter pluggable database pdb2 open; alter pluggable database pdb1 open; exit 

สรุป

การ Unplug และ Plug PDBs สามารถทำให้การโอนไฟล์ระหว่าง Server ง่ายขึ้นและลดโอกาสของ Human Error ตัวอย่างเช่น คุณสามารถ Apply Patch ในครั้งเดียวสำหรับ PDB Databases ทั้งหมด ในขณะที่ใน Non-Container Environment คุณต้อง Apply Patch ให้ทุก Database แยกกัน Backup และงานบำรุงรักษาอื่นๆ ง่ายขึ้นมากใน Container และ PDB Environment การมีไฟล์เดียวในการขนส่งระหว่าง Server นั้นง่ายกว่าเพราะคุณไม่สามารถลืมโอนไฟล์หนึ่งหรือหลายไฟล์ได้โดยไม่ได้ตั้งใจ

หวังว่าบล็อกนี้จะให้คุณเข้าใจดีขึ้นเกี่ยวกับประโยชน์ของ Version 12c PDB และ CDB เหนือกว่า Non-Container Databases

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

เรียนรู้เพิ่มเติมเกี่ยวกับบริการฐานข้อมูลของเรา