Phương pháp plug unplug oracle pdb

Kiến trúc Multitenant được đưa ra trong phiên bản Oracle 12c, cho phép các database con (PDB) gắn vào database mẹ (CDB). Việc quản lý database trên kiến trúc mới này trở nên rất đơn giản và dễ hiểu.

Trong bài viết này, tôi sẽ hướng dẫn các bạn cách di chuyển PDB từ CDB này sang CDB khác. Bài toán này có thể xảy ra khi bạn muốn chuyển PDB sang 1 máy chủ khác có cấu hinh mạnh hơn, hoặc bạn muốn gom các database có cùng mục đích hoặc cùng 1 nhóm nghiệp vụ nào đó vào 1 CDB để cho dễ quản lý.

Nguyên tắc tổng quan như sau:

   Đóng PDB cần di chuyển lại.

   Gỡ (Unplug) PDB ra khỏi CDB1

   Di chuyển các datafile cần thiết của PDB sang CDB2.

   Gắn (Plug) PDB vào CDB2


   Các bước tiến hành

   Môi trường và bài toán đặt ra

Tôi thực hiện bài toán này với phiên bản Oracle 12.1.0.2 và hệ điều hành Oracle Linux 7.4

Đây là thông tin CDB1

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PRODPDB READ WRITE NO

Bài toán đặt ra: Tôi cần di chuyển PDB PRODPDB từ CDB1 sang CDB2 (2 CDB nằm trên 2 máy chủ khác nhau với đường dẫn lưu datafile khác nhau)

   Đóng PRODPDB lại

Đầu tiên bạn cần đóng PRODPDB lại để không còn session nào can thiệp trong quá trình bạn thực hiện unplug

alter pluggable database prodpdb close immediate;

Chú ý: Trước khi làm bất cứ hành động gì, bạn hãy chắc chắn là database của bạn đã được backup thành công trước đó

   Gỡ (Unplug) PDB PRODPDB khỏi CDB1

alter pluggable database PRODPDB unplug into '/home/oracle/prodpdb.xml';

Câu lệnh này sẽ xuất ra 1 file xml có lưu tất cả thông tin cấu trúc (metadata) của PRODPDB, để có thể khi mang PDB sang CDB mới, có thể plug vào được.

Đọc thêm  Cài đặt PgAdmin để quản lý PostgreSQL

Bạn mang file xml tạo được ở bước trước sang CDB2 để kiểm tra xem PRODPDB có đủ điều kiện để gắn vào CDB2 không nhé.

SET SERVEROUTPUT ON
DECLARE
l_result BOOLEAN;
BEGIN
   l_result := DBMS_PDB.check_plug_compatibility(
   pdb_descr_file => '/home/oracle/prodpdb.xml',
   pdb_name => 'PRODPDB');

   IF l_result THEN
     DBMS_OUTPUT.PUT_LINE('Compatible!!!');
   ELSE
     DBMS_OUTPUT.PUT_LINE('Incompatible!!!');
   END IF;
END;
/

Nếu kết quả trả về là Compatible là được.

   Kiểm tra đường dẫn lưu datafile của PDB

select file_name, con_id from cdb_data_files where con_id=3

FILE_NAME CON_ID
------------------------------------------------------------ ----------
/u01/app/oracle/oradata/CDB1/prodpdb/system01.dbf 3
/u01/app/oracle/oradata/CDB1/prodpdb/sysaux01.dbf 3
/u01/app/oracle/oradata/CDB1/prodpdb/undotbs01.dbf 3
/u01/app/oracle/oradata/CDB1/prodpdb/users01.dbf 3

(PRODPDB có con_id là 3, đã kiểm tra ở bước trên)

Như vậy các datafile của PRODPDB nằm trong thư mục /u01/app/oracle/oradata/CDB1/prodpdb

   Drop PDB khỏi CDB1

drop pluggable database PRODPDB keep datafiles;

Câu lệnh trên sẽ xóa PDB PRODPDB khỏi CDB1 nhưng vẫn giữ lại các datafile của nó

Kiểm tra lại bạn sẽ thấy PRODPDB đã biến mất trong CDB1

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO

Như vậy bạn đã hoàn thành việc unplug PDB khỏi CDB

   Gắn (Plug) PRODPDB vào CDB2

Bây giờ, bạn copy các datafile của PRODPDB nằm trong thư mục /u01/app/oracle/oradata/CDB1/prodpdb sang đường dẫn /u01/app/oracle/oradata/CDB2/prodpdb nằm trên CDB2

create pluggable database PRODPDB using '/home/oracle/prodpdb.xml' NOCOPY
SOURCE_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/CDB1/prodpdb','/u01/app/oracle/oradata/CDB2/prodpdb');

Tham số SOURCE_FILE_NAME_CONVERT cho phép bạn thay đổi đường dẫn datafile cũ của PRODPDB trên CDB1 sang đường dẫn mới trên CDB2

   Cuối cùng là open PDB

alter pluggable database prodpdb open;

Nguồn: https://dangxuanduy.com/

   Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments