Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Cơ Sở Dữ Liệu

Gỡ bỏ và gắn lại cơ sở dữ liệu Multitenant liền mạch: Hướng dẫn thực tế

Blog này thảo luận việc tách một pluggable database (PDB) từ source container database (CDB) và gắn nó vào target CDB. Cho mục đích blog này, PDB là cơ sở dữ liệu nơi chúng ta lưu trữ tất cả database liên quan đến ứng dụng.

Giới thiệu

Một CDB chứa không hoặc nhiều database PDB liên quan đến các ứng dụng khác nhau và chứa đúng một root container lưu trữ metadata liên quan đến Oracle® và common user. Tên của root container là CDB$ROOT. Root container cũng chứa một seed PDB, PDB$SEED. Seed PDB này là template do hệ thống cung cấp mà CDB có thể dùng để tạo PDB mới. Một PDB là cùng database chúng ta dùng trong môi trường non-container. Phiên bản 12c, Oracle giới thiệu tính năng container và PDB, cho phép bạn thêm PDB dựa trên yêu cầu kinh doanh. Ví dụ, bạn có thể tạo database PDB chứa dữ liệu bộ phận bán hàng trong ứng dụng sales và dữ liệu bộ phận Nhân sự (HR) trong ứng dụng HR.

Unplug một PDB nghĩa là tách một database PDB từ source CDB và gắn nó vào target CDB.

Trong blog này, source CDB, TEST12, có hai PDB, PDB1 và PDB2. Target CDB, DEV12, nhận các PDB được unplug.

Ví dụ unplug và plug PDB

Trong phần này, bạn học cách unplug PDB1 và PDB2 từ source CDB TEST12 và plug chúng vào target CDB DEV12.

Trước khi thay đổi, source PDBs ở trạng thái MOUNTED như hình sau:

Gỡ bỏ và gắn lại cơ sở dữ liệu Multitenant liền mạch: Hướng dẫn thực tế

Xác thực tính tương thích PDB với target CDB

Trước khi bắt đầu thao tác plug, đảm bảo PDB chuẩn bị plug tương thích với CDB host mới. Nếu không tương thích, thực thi khối PL/SQL sau sẽ báo lỗi:

. 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;
/

Đóng PDBs

Đóng PDBs để chúng có thể được unplug bằng cách chạy các câu lệnh SQL*Plus® sau:

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

Source PDBs nên ở trạng thái mount closed.

Unplug PDBs

Sau khi đóng PDB, tạo file manifest XML. File XML này chứa thông tin về tên và đường dẫn đầy đủ của tablespace, cũng như data file cho PDB unplugged.

Unplug PDB đã đóng và chỉ định đường dẫn và tên file XML bằng cách chạy các lệnh sau:

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 đã đóng và giữ data files bằng lệnh sau:

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

Xác minh trạng thái PDB unplugged bằng lệnh sau:

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

Plug PDBs

Bạn có thể plug PDB vào target CDB bằng phương pháp COPY, NOCOPY hoặc CLONE MOVE.

Plug với phương pháp COPY

Để dùng phương pháp COPY plug PDB, tạo và định nghĩa đích cho data file mới, plug PDB unplugged vào target CDB, sau đó copy data file của PDB unplugged.

Tạo thư mục đích bằng lệnh sau:

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

Dùng data file của PDB unplugged để plug PDB vào CDB và copy data file đến vị trí mới bằng lệnh sau:

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');

Xác minh trạng thái và open mode của PDB plugged bằng lệnh sau:

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

Kết quả các hoạt động này hiển thị trong hình sau:

Gỡ bỏ và gắn lại cơ sở dữ liệu Multitenant liền mạch: Hướng dẫn thực tế

Plug với phương pháp NOCOPY

Phương pháp này dùng data file của PDB unplugged để plug PDB vào target CDB mà không tạo hoặc dùng bất kỳ bản sao nào.

Để dùng phương pháp NOCOPY plug PDB, chạy lệnh sau:

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

Hoạt động này mất vài giây. Data file gốc của PDB unplugged bây giờ thuộc về PDB plugged-in mới trong CDB host mới. File có cùng tên với temp file chỉ định trong file XML hiện diện ở target location. Do đó, mệnh đề TEMPFILE_REUSE là bắt buộc.

Xác minh trạng thái và open mode của PDB plugged bằng lệnh sau:

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

Kết quả các hoạt động này hiển thị trong hình sau:

Gỡ bỏ và gắn lại cơ sở dữ liệu Multitenant liền mạch: Hướng dẫn thực tế

Liệt kê data file của PDB plugged bằng lệnh sau:

select name from v$datafile where con_id=3;
select name from v$datafile where con_id=4;
exit

Plug với phương pháp CLONE MOVE

Để dùng phương pháp CLONE MOVE plug PDB, tạo và định nghĩa đích cho data file mới, dùng data file của PDB unplugged để plug PDB vào target CDB, sau đó move data file đến vị trí khác.

Tạo thư mục đích bằng lệnh sau:

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

Plug PDB vào CDB và move data file đến vị trí mới bằng lệnh sau:

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 ');

Thông báo lỗi hiển thị vì global unique identifier (GUID) không unique. PDB1 đã được plug dùng phương pháp COPY, gây xung đột GUID như hình sau:

Gỡ bỏ và gắn lại cơ sở dữ liệu Multitenant liền mạch: Hướng dẫn thực tế

Để khắc phục, chạy mã sau với mệnh đề 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');

Xác minh trạng thái và open mode của PDB plugged bằng lệnh sau:

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

Liệt kê data file của PDB plugged bằng lệnh sau:

select name from v$datafile where con_id=5;

Kết quả các hoạt động này hiển thị trong hình sau:

Gỡ bỏ và gắn lại cơ sở dữ liệu Multitenant liền mạch: Hướng dẫn thực tế

Mở các PDB đã plug

Để mở PDB và hoàn tất thao tác plug, chạy lệnh sau:

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

Kết nối tới PDB đã plug và xác minh container name bạn kết nối bằng lệnh sau:

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

Di chuyển PDBs trở lại source CDB

Đóng tất cả pluggable database bằng lệnh sau:

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

Unplug database pdb_plug_copy để dùng tái tạo database pdb1 bằng lệnh sau:

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

Drop database pdb_plug_copy bằng lệnh sau:

drop pluggable database pdb_plug_copy;

Unplug và drop database pdb_plug_nocopy để dùng tái tạo database pdb2 bằng lệnh sau:

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 bằng lệnh sau:

drop pluggable database pdb_plug_move;

Plug database pdb1 trở lại CDB TEST12 bằng lệnh sau:

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 trở lại CDB TEST12 bằng lệnh sau:

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

Mở pdb1 và pdb2 bằng lệnh sau:

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

Kết luận

Unplug và plug PDB có thể đơn giản hóa việc chuyển file giữa server và giảm cơ hội lỗi do con người. Ví dụ, bạn có thể áp dụng patch một lần cho tất cả database PDB, trong khi môi trường non-container bạn cần áp dụng patch cho từng database riêng biệt. Backup và các tác vụ bảo trì khác dễ dàng hơn nhiều trong môi trường container và PDB. Việc có một file đơn để truyền giữa server đơn giản hơn vì bạn không thể quên truyền một hoặc nhiều file.

Hy vọng blog này cho bạn ý tưởng tốt hơn về lợi ích PDB và CDB phiên bản 12c so với database non-container.

Sử dụng tab Feedback để bình luận hoặc đặt câu hỏi.

Tìm hiểu thêm về dịch vụ cơ sở dữ liệu của chúng tôi.