演習: アプリケーションPDBでの複数のアプリケーションの同期

この演習では、アプリケーションPDBで複数のアプリケーションを同期させる必要がある場合に、同期文の数を減らす方法を示します。以前のバージョンのOracle Databaseでは、アプリケーションと同じ数の同期文を実行する必要がありました。

  1. 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
  2. /home/oracle/labs/M104780GC10/setup_apps.shシェル・スクリプトを使用して、ROBOTSDOLLSの両方のアプリケーションPDBのTOYS_ROOTアプリケーション・コンテナにTOYS_APPおよびSALES_TOYS_APPアプリケーションをインストールします。このスクリプトでは、アプリケーション・コンテナを定義し、アプリケーション・コンテナに2つのアプリケーションをインストールし、最後にアプリケーション・コンテナに2つのアプリケーションPDBを作成します。
    1. シェル・スクリプトの実行中にTOYS_ROOTROBOTSおよびDOLLSに接続できるようにするには、演習の環境の説明に従って、tnsnames.oraファイルにエントリを作成します。
    2. シェル・スクリプトを実行します。
      $ cd /home/oracle/labs/M104780GC10
      $ /home/oracle/labs/M104780GC10/setup_apps.sh
      ...
      SQL> ALTER PLUGGABLE DATABASE toys_root CLOSE IMMEDIATE;
      
      Pluggable database altered.
      
      SQL> DROP PLUGGABLE DATABASE robots INCLUDING DATAFILES;
      
      Pluggable database dropped.
      
      SQL> DROP PLUGGABLE DATABASE dolls INCLUDING DATAFILES;
      
      Pluggable database dropped.
      
      SQL> DROP PLUGGABLE DATABASE toys_root INCLUDING DATAFILES;
      
      Pluggable database dropped.
      
      SQL> ALTER SESSION SET db_create_file_dest='/home/oracle/labs/toys_root';
      
      Session altered.
      
      SQL> CREATE PLUGGABLE DATABASE toys_root AS APPLICATION CONTAINER
        2    ADMIN USER admin IDENTIFIED BY password  ROLES=(CONNECT);
      
      Pluggable database created.
      
      SQL> alter PLUGGABLE DATABASE toys_root open;
      
      Pluggable database altered.
      
      SQL> exit
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL*Plus: Release 20.0.0.0.0 - Production on Fri Nov 29 03:03:18 2019
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2019, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL> ALTER PLUGGABLE DATABASE APPLICATION toys_app begin install '1.0';
      
      Pluggable database altered.
      
      SQL>
      SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='/home/oracle/labs/toys_root';
      
      System altered.
      
      SQL> CREATE TABLESPACE toys_tbs DATAFILE SIZE 100M autoextend on next 10M maxsize 200M;
      
      Tablespace created.
      
      SQL> create user toys_owner identified by password container=all;
      
      User created.
      
      SQL> grant create session, dba to toys_owner;
      
      Grant succeeded.
      
      SQL>
      SQL> CREATE TABLE toys_owner.categories SHARING=DATA (c1 number, category varchar2(20));
      
      Table created.
      
      SQL> INSERT INTO toys_owner.categories VALUES (1,'GAMES');
      
      1 row created.
      
      SQL> INSERT INTO toys_owner.categories VALUES (2,'PUPPETS');
      
      1 row created.
      
      SQL> INSERT INTO toys_owner.categories VALUES (3,'VEHICLES');
      
      1 row created.
      
      SQL> COMMIT;
      
      Commit complete.
      
      SQL>
      SQL> ALTER PLUGGABLE DATABASE APPLICATION toys_app end install '1.0';
      
      Pluggable database altered.
      
      SQL>
      SQL> ALTER PLUGGABLE DATABASE APPLICATION sales_toys_app BEGIN INSTALL '1.0';
      
      Pluggable database altered.
      
      SQL>
      SQL> CREATE USER sales_toys IDENTIFIED BY password CONTAINER=ALL;
      
      User created.
      
      SQL> GRANT create session, dba TO sales_toys;
      
      Grant succeeded.
      
      SQL> ALTER USER sales_toys DEFAULT TABLESPACE toys_tbs;
      
      User altered.
      
      SQL> CREATE TABLE sales_toys.sales_data sharing=extended data
        2  (year       number(4),
        3   region     varchar2(10),
        4   quarter    varchar2(4),
        5   revenue    number);
      
      Table created.
      
      SQL> INSERT INTO sales_toys.sales_data VALUES (2019,'US','Q1',100000);
      
      1 row created.
      
      SQL> INSERT INTO sales_toys.sales_data VALUES (2019,'US','Q2',400000);
      
      1 row created.
      
      SQL> INSERT INTO sales_toys.sales_data VALUES (2019,'EU','Q2',50000);
      
      1 row created.
      
      SQL> INSERT INTO sales_toys.sales_data VALUES (2019,'ASIA','Q3',300000);
      
      1 row created.
      
      SQL> INSERT INTO sales_toys.sales_data VALUES (2019,'EU','Q3',20000);
      
      1 row created.
      
      SQL> COMMIT;
      
      Commit complete.
      
      SQL>
      SQL> ALTER PLUGGABLE DATABASE APPLICATION sales_toys_app END INSTALL '1.0';
      
      Pluggable database altered.
      
      SQL>
      SQL> exit
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL*Plus: Release 20.0.0.0.0 - Production on Fri Nov 29 03:03:37 2019
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2019, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL>
      SQL> ALTER SESSION SET DB_CREATE_FILE_DEST='/home/oracle/labs/toys_root/robots';
      
      Session altered.
      
      SQL> CREATE PLUGGABLE DATABASE robots ADMIN USER admin identified by password ROLES=(CONNECT);
      
      Pluggable database created.
      
      SQL> ALTER SESSION SET DB_CREATE_FILE_DEST='/home/oracle/labs/toys_root/dolls';
      
      Session altered.
      
      SQL> CREATE PLUGGABLE DATABASE dolls ADMIN USER admin identified by password ROLES=(CONNECT);
      
      Pluggable database created.
      
      SQL>
      SQL> alter pluggable database robots open;
      
      Pluggable database altered.
      
      SQL> alter pluggable database dolls open;
      
      Pluggable database altered.
      
      SQL>
      SQL> exit
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      $
  3. アプリケーション・コンテナにインストールされているアプリケーションを表示します。
    $ sqlplus / AS SYSDBA
    
    SQL*Plus: Release 20.0.0.0.0 - Production on Mon Mar 16 05:29:42 2020
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2020, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    SQL> COL app_name FORMAT A16
    SQL> COL app_version FORMAT A12
    SQL> COL pdb_name FORMAT A10
    SQL> SELECT app_name, app_version, app_status, p.pdb_name
         FROM   cdb_applications a, cdb_pdbs p
         WHERE  a.con_id = p.pdb_id
         AND    app_name NOT LIKE '%APP$%'
         ORDER BY 1;
    
    APP_NAME         APP_VERSION  APP_STATUS   PDB_NAME
    ---------------- ------------ ------------ ----------
    SALES_TOYS_APP   1.0          NORMAL       TOYS_ROOT
    TOYS_APP         1.0          NORMAL       TOYS_ROOT
    
    SQL> 

    アプリケーションtoys_appおよびsales_toys_appがバージョン1.0のアプリケーション・コンテナにインストールされていることに注目します。

  4. アプリケーションPDBを、インストールされている新しいアプリケーションtoys_appおよびsales_toys_appと同期させます。
    SQL> CONNECT sys@robots AS SYSDBA
    Enter password: password
    SQL> ALTER PLUGGABLE DATABASE APPLICATION toys_app, sales_toys_app SYNC;
    
    Pluggable database altered.
    
    SQL> SELECT app_name, app_version, app_status, p.pdb_name
         FROM   cdb_applications a, cdb_pdbs p
         WHERE  a.con_id = p.pdb_id
         AND    app_name NOT LIKE '%APP$%'
         ORDER BY 1;
    
    APP_NAME         APP_VERSION  APP_STATUS   PDB_NAME
    ---------------- ------------ ------------ ----------
    SALES_TOYS_APP   1.0          NORMAL       ROBOTS
    TOYS_APP         1.0          NORMAL       ROBOTS
    
    SQL> CONNECT sys@dolls AS SYSDBA
    Enter password: password
    SQL> ALTER PLUGGABLE DATABASE APPLICATION toys_app, sales_toys_app SYNC;
    
    Pluggable database altered.
    
    SQL> SELECT app_name, app_version, app_status, p.pdb_name
         FROM   cdb_applications a, cdb_pdbs p
         WHERE  a.con_id = p.pdb_id
         AND    app_name NOT LIKE '%APP$%'
         ORDER BY 1;
    
    APP_NAME         APP_VERSION  APP_STATUS   PDB_NAME
    ---------------- ------------ ------------ ----------
    SALES_TOYS_APP   1.0          NORMAL       DOLLS
    TOYS_APP         1.0          NORMAL       DOLLS
    
    SQL> CONNECT / AS SYSDBA
    Connected.
    SQL> SELECT app_name, app_version, app_status, p.pdb_name
         FROM   cdb_applications a, cdb_pdbs p
         WHERE  a.con_id = p.pdb_id
         AND    app_name NOT LIKE '%APP$%'
         ORDER BY 1;  
    
    APP_NAME         APP_VERSION  APP_STATUS   PDB_NAME
    ---------------- ------------ ------------ ----------
    SALES_TOYS_APP   1.0          NORMAL       DOLLS
    SALES_TOYS_APP   1.0          NORMAL       ROBOTS
    SALES_TOYS_APP   1.0          NORMAL       TOYS_ROOT
    TOYS_APP         1.0          NORMAL       DOLLS
    TOYS_APP         1.0          NORMAL       TOYS_ROOT
    TOYS_APP         1.0          NORMAL       ROBOTS
    
    6 rows selected.
    
    SQL> EXIT
    $