Thứ Sáu, 24 tháng 7, 2020

Chuyển đổi non-container database thành multitenant pluggable database

Oracle® phiên bản 12c cung cấp các tùy chọn multitenant database  để lưu trữ nhiều cơ sở dữ liệu có thể cắm (PDB) với một cơ sở dữ liệu container (CDB). Đôi khi, bạn cần chuyển đổi cơ sở dữ liệu không phải CDB thành cơ sở dữ liệu có thể cắm CDB. Blog này mô tả các phương pháp mà bạn có thể sử dụng để chuyển đổi cơ sở dữ liệu không phải CDB thành cơ sở dữ liệu CDB.

Thiết lập trường hợp thử nghiệm

Kịch bản thử nghiệm này bắt đầu với một phiên bản cơ sở dữ liệu non-CDB noncdb12c, đang chạy trên máy ABC123.xyz.comNhiệm vụ là tạo cơ sở dữ liệu CDB cdb12c, trên cùng một máy. Bạn cần đảm bảo có đủ dung lượng đĩa để chứa cơ sở dữ liệu CDB đã chuyển đổi.

Máy chủ lưu trữ : ABC123.xyz.com

Cơ sở dữ liệu không phải CDB : noncdb12c

Phiên bản Oracle : 12.1.0.2

Hình ảnh sau đây cho thấy kịch bản thử nghiệm:

Kiểm tra chuyển đổi

Sử dụng các bước trong phần này để chuyển đổi cơ sở dữ liệu Non-CDB sang cơ sở dữ liệu CDB.

BƯỚC 1: THỰC HIỆN TẮT MÁY SẠCH SẼ (CLEAN SHUTDOWN)

Thực hiện các bước sau để tắt sạch cơ sở dữ liệu không phải CDB:

  • Đặt môi trường thành noncdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    shutdown immediate
    

BƯỚC 2: MỞ CƠ SỞ DỮ LIỆU DƯỚI DẠNG CHỈ ĐỌC ( READ-ONLY)

Sau khi bạn tắt máy cơ sở dữ liệu một cách sạch sẽ, hãy thực hiện các bước sau để khởi động cơ sở dữ liệu ở chế độ độc quyền gắn kết và mở cơ sở dữ liệu ở chế độ chỉ đọc:

  • Đặt môi trường thành noncdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    startup mount exclusive
    
    alter database open read only;
    

BƯỚC 3: TẠO TỆP KÊ KHAI PDB

Thực hiện các bước sau để tạo tệp kê khai PDB từ non-CDB:

  • Đặt môi trường thành noncdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    exec dbms_pdb.describe (pdb_descr_file=>'/tmp/noncdb12c_manifest_file.xml');
    

BƯỚC 4: TẮT MÁY NON-CDB

Thực hiện các bước sau khi Bước 3 hoàn tất để tắt tệp non-CDB.

  • Đặt môi trường thành noncdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    shutdown immediate
    

BƯỚC 5: BẮT ĐẦU CDB

Nếu CDB chưa chạy, hãy thực hiện các bước sau để khởi động nó và kiểm tra tính tương thích:

  • Đặt môi trường thành cdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    startup
    SET SERVEROUTPUT ON;
     DECLARE
     Compatible CONSTANT VARCHAR2(3) :=CASE  DBMS_PDB.CHECK_PLUG_COMPATIBILITY
     (pdb_descr_file => '/tmp/noncdb12c_manifest_file.xml')
     WHEN TRUE THEN 'YES'
     ELSE 'NO'
     END;
     BEGIN
        DBMS_OUTPUT.PUT_LINE(compatible);
     END;
     /
    

BƯỚC 6: KIỂM TRA LỖI

Sau khi khởi động cơ sở dữ liệu CDB, hãy thực hiện các bước sau để kiểm tra lỗi trong dạng PDB_PLUG_IN_VIOLATIONSxem:

  • Đặt môi trường thành cdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    startup
    SELECT name, cause, type, message, status FROM PDB_PLUG_IN_VIOLATIONS
    WHERE name='NONCDB12C';
    

Lưu ý : Nếu có bất kỳ lỗi nào, hãy sửa chúng trước khi tiếp tục.

BƯỚC 7: KẾT NỐI VỚI CDB VÀ CẮM VÀO PDB

Thực hiện các bước sau để kết nối với CDB và cắm vào cơ sở dữ liệu PDDB12C bằng cách sử dụng tệp kê khai không phải CDB:

  • Đặt môi trường thành cdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    CREATE PLUGGABLE DATABASE pdb12c USING '/tmp/noncdb12c_manifest_file.xml'
     COPY
     FILE_NAME_CONVERT = ('<Datafile_Location_for_noncdb>', 'Datafile_Location_for_pdb');
    

Lưu ý : Các tùy chọn sau được hỗ trợ và bạn có thể chọn một tùy chọn dựa trên môi trường của mình:

  • COPY : Các tệp dữ liệu của dữ liệu noncdbvẫn còn nguyên và noncdbđược sao chép để tạo PDB tại vị trí mới và giữ nguyên các tệp dữ liệu gốc ở vị trí ban đầu. Điều này có nghĩa là cơ sở dữ liệu noncdb vẫn hoạt động sau khi tạo PDB.
  • MOVE : Các tệp dữ liệu của noncdbđược di chuyển đến một vị trí mới để tạo PDB. Trong trường hợp này, noncdbcơ sở dữ liệu không có sẵn sau khi PDB được tạo.
  • NOCOPY : Các tệp dữ liệu của noncdbđược sử dụng để tạo PDB2 và nó sử dụng cùng một vị trí với noncdbTrong trường hợp này, noncdbcơ sở dữ liệu không có sẵn sau khi PDB được tạo.

Bạn có thể sử dụng FILE_NAME_CONVERTtham số để chỉ định vị trí mới của các tệp dữ liệu trong khi sử dụng tùy chọn COPY hoặc MOVE .

BƯỚC 8: CHẠY TẬP LỆNH CHUYỂN ĐỔI

Sau khi hoàn thành bước 7, hãy thực hiện các bước sau để chuyển sang bộ chứa PDB và chạy tập lệnh chuyển đổi , $ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql:

  • Đặt môi trường thành cdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    alter session set container=pdb12c
    @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
    

BƯỚC 9: KHỞI ĐỘNG PDB VÀ XÁC MINH CHẾ ĐỘ

Thực hiện các bước sau để khởi động PDB và xác minh rằng chế độ đang mở :

  • Đặt môi trường thành cdb12c.
  • Thực hiện lệnh sau:

    sqlplus / as sysdba
    
  • Chạy đoạn mã sau tại dấu nhắc SQL:

    alter pluggable database open;
    SELECT name, open_mode FROM v$pdbs;
    

Phần kết luận


Khi bạn chuyển đổi cơ sở dữ liệu non-CDB sang cơ sở dữ liệu pluggable CDB, bạn có thể chọn từ một số tùy chọn tùy thuộc vào kích thước của cơ sở dữ liệu.

Nếu cơ sở dữ liệu rất lớn, bạn có thể sử dụng tùy chọn NOCOPY . Điều này giảm thiểu lượng không gian thừa cần thiết và giảm thời gian cần thiết để thực hiện thao tác chuyển đổi. Các NOCOPY lựa chọn là rủi ro, tuy nhiên, bởi vì bạn không giữ tập tin cơ sở dữ liệu ban đầu nguyên vẹn. Vì vậy, nếu bạn cần khôi phục cơ sở dữ liệu về trạng thái trước đó, bạn phải khôi phục cơ sở dữ liệu bằng cách sử dụng các bản sao lưu được thực hiện trước khi hoạt động chuyển đổi.

Nếu kích thước cơ sở dữ liệu nhỏ hơn, bạn nên sử dụng tùy chọn COPY để nếu có bất kỳ vấn đề nào, việc dự phòng cho CDB cũ không đơn giản vì các tệp gốc luôn còn nguyên vẹn.

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

@ Trần Văn Bình - Founder of "Oracle DBA Việt Nam" #OracleTutorial #OracleDBA #OracleDatabaseAdministration #học oracle database #oca #ocp #oce #ocm

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master