Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Rút và cắm cơ sở dữ liệu nhiều đối tượng

Blog này thảo luận về việc tách một cơ sở dữ liệu có thể cắm được (PDB) khỏi cơ sở dữ liệu trình điều khiển nguồn (CDB) và gắn nó vào một CDB đích. Đối với mục đích của blog này, PDB là cơ sở dữ liệu trong đó chúng tôi lưu tất cả các cơ sở dữ liệu liên quan đến ứng dụng của mình.

Giới thiệu

CDB chứa không hoặc nhiều cơ sở dữ liệu PDB liên quan đến các ứng dụng khác nhau và chứa chính xác một vùng chứa gốc lưu trữ siêu dữ liệu liên quan đến Oracle® và người dùng thông thường. Tên của vùng chứa gốc là CDB$ROOT . Bộ chứa gốc cũng chứa một PDB hạt giống, PDB$SEED . PDB hạt giống này là một vật liệu hệ thống cung cấp mà CDB có thể sử dụng để tạo các PDB mới. PDB là cùng một tập dữ liệu mà chúng tôi sử dụng trong môi trường không chứa. Trong phiên bản 12c, Oracle đã giới thiệu vùng chứa và tính năng PDB này, cho phép bạn thêm các PDB dựa trên yêu cầu kinh doanh của bạn. Ví dụ:bạn có thể tạo cơ sở dữ liệu PDB chứa dữ liệu bộ phận bán hàng trong ứng dụng bán hàng và dữ liệu bộ phận Nhân sự (HR) trong ứng dụng nhân sự.

Rút phích cắm PDB có nghĩa là tách cơ sở dữ liệu PDB khỏi CDB nguồn và đính kèm với CDB đích.

Trong blog này, nguồn CDB, TEST12 , có hai PDB, PDB1PDB2 . CDB mục tiêu, DEV12 , nhận các PDB đã rút phích cắm.

Rút phích cắm và cắm mẫu PDB

Trong phần này, bạn học cách rút phích cắm PDB1PDB2 từ nguồn CDB TEST12 và cắm chúng vào CDB đích DEV12 .

Trước khi thực hiện thay đổi, các PDB nguồn được MOUNTED như được hiển thị trong hình ảnh sau:

Rút và cắm cơ sở dữ liệu nhiều đối tượng

Xác thực khả năng tương thích của PDB với CDB mục tiêu

Trước khi bắt đầu thao tác cắm, hãy đảm bảo rằng PDB sắp cắm tương thích với CDB máy chủ mới. Nếu chúng không tương thích, việc thực thi khối PL / SQL sau sẽ gây ra 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 các PDB để chúng có thể được rút ra bằng cách chạy các câu lệnhSQL * Plus® sau:

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

Các PDB nguồn phải ở trạng thái gắn kết closed .

Rút phích cắm các PDB

Sau khi đóng PDB, hãy tạo tệp kê khai XML. Tệp XML này chứa thông tin về tên và đường dẫn đầy đủ của không gian bảng, cũng như tệp dữ liệu cho PDB đã rút phích cắm.

Rút phích cắm PDB đã đóng và sau đó chỉ định đường dẫn và tên của tệp 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';

Thả PDB đã đóng và giữ các tệp dữ liệu bằng cách chạy các lệnh sau:

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

Xác minh trạng thái của PDB đã rút phích cắm bằng cách chạy các lệnh sau:

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

Cắm PDBs

Bạn có thể cắm PDB vào CDB đích bằng cách sử dụng phương pháp SAO CHÉP, NOCOPY hoặc phương thức CLONE MOVE.

Cắm bằng phương pháp SAO CHÉP

Để sử dụng phương pháp COPY để cắm PDB, hãy tạo và xác định đích cho các tệp dữ liệu mới, cắm PDB đã rút phích cắm vào CDB đích, sau đó sao chép các tệp dữ liệu của PDB đã rút phích cắm.

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

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

Sử dụng các tệp dữ liệu của PDB đã rút phích cắm để cắm PDB vào CDB và sao chép các tệp dữ liệu vào vị trí mới bằng cách chạy các 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à chế độ mở của PDB đã cắm bằng cách chạy các 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ủa các hoạt động này được hiển thị trong hình ảnh sau:

Rút và cắm cơ sở dữ liệu nhiều đối tượng
Cắm bằng phương pháp NOCOPY

Phương pháp này sử dụng các tệp dữ liệu của PDB đã rút phích cắm để cắm PDB vào CDB mục tiêu mà không cần tạo hoặc sử dụng bất kỳ bản sao nào.

Để sử dụng phương thức NOCOPY để cắm PDB, hãy chạy các lệnh sau:

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

Thao tác này mất vài giây. Các tệp dữ liệu gốc của PDBnow đã rút phích cắm thuộc về PDB mới được cắm vào trong CDB máy chủ mới. Tệp có cùng tên với tệp tạm thời được chỉ định trong tệp XML hiện diện ở vị trí đích. Do đó, TEMPFILE_REUSE điều khoản là bắt buộc.

Xác minh trạng thái và chế độ mở của PDB đã cắm bằng cách chạy các 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ủa các hoạt động này được hiển thị trong hình ảnh sau:

Rút và cắm cơ sở dữ liệu nhiều đối tượng

Liệt kê các tệp dữ liệu của PDB đã cắm bằng cách chạy các lệnh sau:

select name from v$datafile where con_id=3;
select name from v$datafile where con_id=4;
exit
Cắm bằng phương thức CLONE MOVE

Để sử dụng phương pháp CLONE MOVE để cắm PDB, hãy tạo và xác định đích cho các tệp dữ liệu mới, sử dụng các tệp dữ liệu của PDB đã rút phích cắm để cắm PDBint vào CDB đích, rồi di chuyển các tệp dữ liệu đến một vị trí khác.

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

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

Cắm PDB vào CDB và di chuyển các tệp dữ liệu đến vị trí mới bằng cách chạy các 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 ');

Một thông báo lỗi hiển thị vì số nhận dạng duy nhất toàn cầu (GUID) không phải là mã duy nhất. PDB1 đã được cắm bằng cách sử dụng phương pháp SAO CHÉP, điều này gây ra lỗi này với GUID như được hiển thị trong hình ảnh sau:

Rút và cắm cơ sở dữ liệu nhiều đối tượng

Để giải quyết vấn đề này, hãy chạy đoạn mã sau với AS CLONE mệnh đề:

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à chế độ mở của PDB đã cắm bằng cách chạy các 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ê các tệp dữ liệu của PDB đã cắm bằng cách chạy lệnh sau:

select name from v$datafile where con_id=5;

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

Rút và cắm cơ sở dữ liệu nhiều đối tượng

Mở PDB đã cắm

Để mở PDB và hoàn tất thao tác cắm, hãy chạy các 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 với các PDB được cắm vào và xác minh tên vùng chứa mà bạn được kết nối bằng cách chạy các 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 các PDB trở lại CDB nguồn

Đóng tất cả cơ sở dữ liệu có thể cắm thêm bằng cách chạy các lệnh sau:

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

Rút phích cắm của pdb_plug_copy cơ sở dữ liệu để bạn có thể sử dụng nó để tạo lại pdb1 cơ sở dữ liệu bằng cách chạy lệnh sau:

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

Thả pdb_plug_copy cơ sở dữ liệu bằng cách chạy lệnh sau:

 drop pluggable database pdb_plug_copy;

Rút phích cắm và thả pdb_plug_nocopy cơ sở dữ liệu để bạn có thể sử dụng nó để tạo pdb2 cơ sở dữ liệu bằng cách chạy các 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;

Thả pdb_plug_move cơ sở dữ liệu bằng cách chạy lệnh sau:

drop pluggable database pdb_plug_move;

Cắm pdb1 cơ sở dữ liệu trở lại TEST12 CDB bằng cách chạy các 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');

Cắm pdb2 cơ sở dữ liệu trở lại TEST12 CDB bằng cách chạy lệnh sau:

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

Mở pdb1pdb2 bằng cách chạy các lệnh sau:

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

Kết luận

Việc rút và cắm các PDB có thể đơn giản hóa việc chuyển các tệp tin giữa các máy chủ và giảm khả năng xảy ra lỗi do con người gây ra. Ví dụ:bạn có thể áp dụng một bản vá cho tất cả các cơ sở dữ liệu PDB, trong khi trong môi trường không chứa, bạn cần áp dụng một bản vá cho tất cả các cơ sở dữ liệu một cách riêng biệt. Sao lưu và các nhiệm vụ bảo trì khác dễ dàng hơn nhiều trong môi trường vùng chứa và PDB. Việc có một tệp duy nhất để vận chuyển giữa các máy chủ sẽ đơn giản hơn vì bạn không thể vô tình quên chuyển một hoặc nhiều tệp.

Hy vọng rằng blog này đã cung cấp cho bạn ý tưởng tốt hơn về PDB phiên bản 12c và Lợi ích của CDB đối với cơ sở dữ liệu không chứa.

Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.

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