• Plugging an Unplugged Pluggable Database


    1.unplug

    To unplug a PDB, you first close it and then generate an XML manifest file. The XML file contains information about the names and the full paths of the tablespaces, as well as data files of the unplugged PDB. The information will be used by the plugging operation.

    In this section, you unplug two PDBs to plug them with different methods.

    Use SQL*Plus to close the PDBs before they can be unplugged. Note: The pdb2 database may not have been opened, so you may receive an error that the PDB is already closed.

    . oraenv

    [enter cdb1 at the prompt]

    1. 操作步骤如下:(预先检查cdb 和plug pdb 兼容性,发现一旦不兼容,plug pdb 只能以受限制模式打开)


    source

      exec dbms_pdb.describe (‘PDB1_Unplug.xml’, ‘PtestDEV’);
     
      --localtion is D:appOra12cAdministratorproduct12.1.0dbhome_1database
     
      
    step 2:

    target


     set serveroutput on
     
     begin
      if dbms_pdb.check_plug_compatibility('C:appsoftwarePDB1_Unplug.xml','PtestDEV') then
        dbms_output.put_line('no violations found');
      else
        dbms_output.put_line('violations found');
      end if;
    end;




    create table pdb_plug_back as select * from  pdb_plug_in_violations;
    delete from  pdb_plug_in_violations;

    set linesize 999
    set pagesize 999
    SELECT name,type, message, action
      FROM pdb_plug_in_violations
     --make no row feedback or check mos

     

    2.begin work

    sqlplus / as sysdba

    alter pluggable database pdb1 close immediate;

    alter pluggable database pdb2 close immediate;

    Unplug the closed PDB and then specify the path and name of the XML file.

    alter pluggable database pdb1 unplug into '/u01/app/oracle/oradata/pdb1.xml';

    alter pluggable database pdb2 unplug into '/u01/app/oracle/oradata/pdb2.xml';

    Drop the closed PDB and keep the data files.

    drop pluggable database pdb1 keep datafiles;

    drop pluggable database pdb2 keep datafiles;

    Verify the status of the unplugged PDB.

    select pdb_name, status from cdb_pdbs where pdb_name in ('PDB1', 'PDB2');

    [you should see no rows]

    exit

    The unplugging operation makes changes in the PDB data files to record that the PDB was properly and successfully unplugged. Because the PDB is still part of the CDB, you can back it up in Oracle Recovery Manager (Oracle RMAN). This backup provides a convenient way to archive the unplugged PDB. After backing it up, you then remove it from the CDB catalog. But, of course, you must preserve the data files for the subsequent plugging operation.

     

    2.plug to same cdb or another cdb

    n this section, you plug the unplugged PDB into another CDB by using different methods.  

    Checking the Compatibility of the Unplugged PDB with the Host CDB

    Before starting the plugging operation, make sure that the to-be-plugged-in PDB is compatible with the new host CDB. Execution of the PL/SQL block raises an error if it is not compatible.

    Execute the following PL/SQL block:

    . oraenv

    [enter cdb2 at the prompt]

    sqlplus / as sysdba

    [if cdb2 is not started up, start it up now.]

    set serveroutput on

    DECLARE
       compatible BOOLEAN := FALSE;
    BEGIN  
       compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
            pdb_descr_file => '/u01/app/oracle/oradata/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;
    /

    DECLARE
       compatible BOOLEAN := FALSE;
    BEGIN   
       compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
            pdb_descr_file => '/u01/app/oracle/oradata/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;
    /

     

    Plugging the Unplugged PDB: NOCOPY Method

    Use the data files of the unplugged PDB to plug the PDB into another CDB without any copy.

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

    This operation lasts a few seconds. The original data files of the unplugged PDB now belong to the new plugged-in PDB in the new host CDB. A file with the same name as the temp file specified in the XML file exists in the target location. Therefore, the TEMPFILE_REUSE clause is required.

    Verify the status and open mode of the plugged PDB. Proceed to the next section, "Opening the Plugged PDB," to finalize the plugging operation.

    select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_NOCOPY';

    select open_mode from v$pdbs where name='PDB_PLUG_NOCOPY';

    List the data files of the plugged PDB.

    select name from v$datafile where con_id=3;

    exit

     

    Plugging the Unplugged PDB: COPY Method

    Create and define a destination for the new data files, plug the unplugged PDB into the CDB, and then copy the data files of the unplugged PDB.

    mkdir /u01/app/oracle/oradata/cdb2/pdb_plug_copy

    sqlplus / as sysdba

    Use the data files of the unplugged PDB to plug the PDB into the CDB and copy the data files to a new location.

    create pluggable database pdb_plug_copy using '/u01/app/oracle/oradata/pdb2.xml'
    COPY
    FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_copy');

    Verify the status and open mode of the plugged PDB. Proceed to the next section, "Opening the Plugged PDB," to finalize the plugging operation.

    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=4;

    exit



     

    Plugging the Unplugged PDB: AS CLONE MOVE Method

    Create and define a destination for the new data files, use the data files of the unplugged PDB to plug the PDB into another CDB, and then move the data files to another location.

    mkdir /u01/app/oracle/oradata/cdb2/pdb_plug_move

    sqlplus / as sysdba

     

    Plug the PDB into the CDB and move the data files to a new location.

    create pluggable database pdb_plug_move using '/u01/app/oracle/oradata/pdb2.xml'
    MOVE
    FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_move');

    An error message is returned because of the non-uniqueness of the GUID. This is a good example of using the AS CLONE clause.

    create pluggable database pdb_plug_move
    AS CLONE using '/u01/app/oracle/oradata/pdb2.xml'
    MOVE
    FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb2','/u01/app/oracle/oradata/cdb2/pdb_plug_move');

    Verify the status and open mode of the plugged PDB. Proceed to the next section, "Opening the Plugged PDB," to finalize the plugging operation.

    select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_MOVE';

    select open_mode from v$pdbs where name='PDB_PLUG_MOVE';

    List the data files of the plugged PDB.

    select name from v$datafile where con_id=5;

     
     

    3.seting

    Open and check the availability of the plugged PDB. 

    Open the plugged-in PDBs.

    alter pluggable database pdb_plug_nocopy open;

    alter pluggable database pdb_plug_copy open;

    alter pluggable database pdb_plug_move open;

    Connect to the plugged-in PDBs and verify the container name that you are connected to.

    connect sys/oracle@localhost:1521/pdb_plug_nocopy AS SYSDBA

    show con_name

    connect sys/oracle@localhost:1521/pdb_plug_copy AS SYSDBA

    show con_name

    connect sys/oracle@localhost:1521/pdb_plug_move AS SYSDBA

    show con_name

    exit

     ####sample:

    source: 12.1.0.2.160419 cdb + 2pdb

    target   12.1.0.2.161019 cdb + 0pdb

    目标 迁移souce a pdb to target

    step 1:



    #####################

    select con_id,name, OPEN_MODE from v$pdbs;
    alter pluggable database PtestDEV close immediate;
    alter pluggable database PtestDEV open;
    alter pluggable database PtestDEV close immediate;

    (the step unplug need 15 minutes)
    alter pluggable database PtestDEV unplug into 'c:apporacleDEV.xml';
    drop pluggable database PtestDEV keep datafiles;
    select pdb_name, status from cdb_pdbs where pdb_name in ('PtestDEV');
    exit

    @the source host and target host datafile location should be same. (it will avoid omf and file covert issue)
    @the source host and target host datafile opatch version should be same. (it will avoid omf and file covert issue)

    step2:

    ####

    set serveroutput on

    DECLARE
       compatible BOOLEAN := FALSE;
    BEGIN   
       compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
            pdb_descr_file => 'C:appsoftwaredev.xml');
       if compatible then
          DBMS_OUTPUT.PUT_LINE('Is pluggable ptestdev compatible? YES');
       else DBMS_OUTPUT.PUT_LINE('Is pluggable ptestdev compatible? NO');
       end if;
    END;
    /

    NO                               -even if it is no, we can go ahead
    PL/SQL 过程已成功完成。

     step 3:
    create pluggable database ptestdev using 'C:appsoftwaredev.xml' NOCOPY TEMPFILE REUSE;


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

    issue 1: (sugest not use zip method to move data from souce to target ,using it is orinal file)


    create pluggable database ptestdev using
    ORA-27070: 异步读取/写入失败

    SQL> create pluggable database ptestdev using 'C:appsoftwaredev.xml' NOCOPY TEMPFILE REUSE;
    create pluggable database ptestdev using 'C:appsoftwaredev.xml' NOCOPY TEMPFI
    LE REUSE
    *
    第 1 行出现错误:
    ORA-01119: 创建数据库文件
    'D:ORA12CDATAORADATA estUAT12CA645A206A1E24A79BB8B3C9DA55D36ADDATAFILEO1_M

    F_SYSTEM_DBWZ3L9R_.DBF' 时出错
    ORA-27070: 异步读取/写入失败
    OSD-04008: WriteFile() ??? ???д????
    O/S-Error: (OS 5) ???????


    ###solution:
    http://www.dba-oracle.com/t_os_error_os5_access_denied.htm

    1.give window user oracle with administrator privileges
    2.restart windows oracle service
     
     I would change your OracleService<SID> to logon explicitly as an Oracle user with admin privileges. In the ControlPanel services:  

        Right click on service

        Select 'properties'

        Select 'logon'

        Change the default user ID to an Oracle user with Windows administrator privileges

    http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/pdb/pdb_unplug_plug/pdb_unplug_plug.html?cid=6768&ssid=106107405091384

  • 相关阅读:
    UPC12617 卡片
    mcmf的dijkstra板子(来自PHY学长)
    UPC9630 Mad Veterinarian
    UPC8173【 哈希和哈希表】Three Friends
    UPC9655 Plug It In!
    UPC8428 网格VI
    UPC4248【数论】数字迷阵
    UPC4247【数论】普通递归关系
    SPOJ
    hdu 5992 Finding Hotels (kdTree)
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/6433284.html
Copyright © 2020-2023  润新知