【跟我學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;
後試試