Phương pháp plug unplug oracle pdb

   Giới thiệu

 

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 thêm  Chuyển bảng non-partition thành bảng partition bằng dbms_redefinition

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.

 

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

Đọc thêm  Oracle 12c - Kết nối với CDB và PDB

   Cuối cùng là open PDB

alter pluggable database prodpdb open;

 

Như vậy tôi đã hướng dẫn xong các bạn các bước để plug unplug PDB trong Oracle Database. Hẹn gặp lại các bạn ở các bài viết tiếp theo.

 

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

 

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

 

    KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN  Xem ngay!

 

   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é.

Đặng Xuân Duy
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận