Mục lục

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

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

1. 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)

 

2. Đó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 đó

 

Đọc thêm  Tibero Database là gì

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

 

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.

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

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

6. 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  Ý nghĩa các loại partition table trong PostgreSQL

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

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

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

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x