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