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/manager@saas_sales_ac
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN upgrade '1.0' to '2.0';
CONNECT saas_sales_adm/manager@saas_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;
后试试