1. 程式人生 > >【跟我學oracle18c】第十八天:METADATA-LINKED專項測試

【跟我學oracle18c】第十八天:METADATA-LINKED專項測試

          METADATA-LINKED:共享公共物件的元資料給Application PDB,不可以檢視公共物件在Application root記憶體儲的資料,在Appliation PDB內可插入本地資料。

這句話整理出來幾點:

1、共享公共物件的元資料給Application PDB

2、不可以檢視公共物件在Application root記憶體儲的資料

3、在Appliation PDB內可插入本地資料

實踐活動:

環境:Appliation PDB和Application root如下(select * from v$pdbs):

CON_ID NAME APPLICATION_ROOT APPLICATION_PDB APPLICATION_ROOT_CON_ID
2 PDB$SEED NO NO  
6 SAAS_SALES_AC YES NO  
9 AMER_PDB NO YES 6
10 EURO_PDB NO
YES 6
11 ASIA_PDB NO YES 6

例項:

一、Application root 中建立METADATA表

CONNECT system/[email protected]_sales_ac

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN upgrade  '1.0' to '2.0';

CONNECT saas_sales_adm/[email protected]_sales_ac

SQL> CREATE TABLE saas_sales_adm.sales_mlt SHARING=METADATA
  2  (YEAR       NUMBER(4),
  3   REGION     VARCHAR2(10),
  4   QUARTER    VARCHAR2(4),
  5   REVENUE    NUMBER);
Table created
SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END UPGRADE TO '2.0';
Done

SQL> select * from saas_sales_adm.sales_mlt;
 YEAR REGION     QUARTER    REVENUE
----- ---------- ------- ----------
SQL> insert into saas_sales_adm.sales_mlt values(2011,'2011','2011',2011);
1 row inserted

SQL> select * from saas_sales_adm.sales_mlt;
 YEAR REGION     QUARTER    REVENUE
----- ---------- ------- ----------
 2011 2011       2011          2011

二、pdb中同步或插入資料

AMER_PDB

SQL> alter session set container=AMER_PDB;
Session altered

SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;
Done

SQL>  insert into saas_sales_adm.sales_mlt values(2012,'2012','2012',2012);
1 row inserted

SQL> select * from saas_sales_adm.sales_mlt;
 YEAR REGION     QUARTER    REVENUE
----- ---------- ------- ----------
 2012 2012       2012          2012

EURO_PDB

SQL> alter session set container=EURO_PDB;
Session altered

SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;
Done

SQL>  insert into saas_sales_adm.sales_mlt values(2013,'2013','2013',2013);
1 row inserted

SQL> select * from saas_sales_adm.sales_mlt;
 YEAR REGION     QUARTER    REVENUE
----- ---------- ------- ----------
 2013 2013       2013          2013

SQL> select * from containers(saas_sales_adm.sales_mlt);
 YEAR REGION     QUARTER    REVENUE     CON_ID
----- ---------- ------- ---------- ----------
 2013 2013       2013          2013         10



三、Application root下查詢

SQL> select * from saas_sales_adm.sales_mlt;
 YEAR REGION     QUARTER    REVENUE
----- ---------- ------- ----------
 2011 2011       2011          2011

SQL> select * from containers(saas_sales_adm.sales_mlt);
 YEAR REGION     QUARTER    REVENUE     CON_ID
----- ---------- ------- ---------- ----------
 2011 2011       2011          2011          6
 2013 2013       2013          2013         10
 2012 2012       2012          2012          9

分析:

1、從例項中可以發現,pdb內要看到Application root的METADATA表,必須在ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;後可見

2、pdb與Application root的METADATA表資料各自獨立,物件儲存與Application root下

3、Application root下也僅僅查到的是資料root部分操作的資料

4、可以通過containers語法查在Application root下查所有pdb與root下的資料,但pdb下該引數也只是自己的資料

 

相關錯誤號:

1、application root中建立APPLICATION

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN INSTALL '1.0'
ORA-65221: 應用程式 SAAS_SALES_APP 已存在

select * from dba_applications;

檢視版本號,採用升級版本即可

SQL> ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN upgrade  '1.0' to '2.0';
Done

2、pdb中查詢application root中的Common Objects

SQL> select * from saas_sales_adm.sales_mlt;
select * from saas_sales_adm.sales_mlt
ORA-00942: 表或檢視不存在

如果確認物件是存在的,可以 ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;

後試試