暂无图片
19C APPLICATION PDB SYNC 问题
我来答
分享
Thomas
2022-10-07
19C APPLICATION PDB SYNC 问题

19C新特性,application root/pdb, 为什么建表时指明了SHARING=METADATA, 但app_pdb1做了sync后,仍然把application root里的数据也同步过来了?

SQL> create pluggable database app_con1 as application container admin user pdbadmin identified by pdbadmin roles=(connect);


Pluggable database created.

SQL> SQL> alter pluggable database app_con1 open;

Pluggable database altered.

SQL> alter session set container=app_con1;

Session altered.

SQL> create pluggable database app_pdb1 admin user pdbadmin identified by pdbadmin roles=(connect);

Pluggable database created.

SQL> ALTER PLUGGABLE DATABASE APPLICATION ref_app BEGIN INSTALL '1.0';

Pluggable database altered.

SQL> CREATE TABLESPACE ref_app_ts DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M;

Tablespace created.

CREATE USER ref_app_user IDENTIFIED BY ref_app_user
DEFAULT TABLESPACE 2 ref_app_ts
QUOTA UNLIMITED ON ref_app_ts
CONTAINER=ALL;

GRANT CREATE SESSION, CREATE TABLE TO ref_app_user;

User created.

SQL> SQL>
Grant succeeded.

CREATE TABLE ref_app_user.reference_data SHARING=METADATA (
id NUMBER,
description VARCHAR2(50),
CONSTRAINT t1_pk PRIMARY KEY (id)
);

INSERT INTO ref_app_user.reference_data
SELECT level,
'Description of ' || level
FROM dual
CONNECT by level <= 5;
COMMIT;

Table created.

5 rows created.

SQL>
Commit complete.

SQL>
SQL> ALTER PLUGGABLE DATABASE APPLICATION ref_app END INSTALL;

Pluggable database altered.

SQL> show pdbs;

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 APP_CON1 READ WRITE NO
6 APP_PDB1 MOUNTED
SQL> alter pluggable database app_pdb1 open;

Pluggable database altered.

SQL> alter session set container=app_pdb1;

Session altered.

SQL> alter pluggable database application all sync;

Pluggable database altered.

SQL> select count(*) from ref_app_user.reference_data;

COUNT(*)
----------
5

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
Thomas

自己找到原因了:

For metadata-linked application common objects, the metadata for the object is stored once in the application root. A metadata link is a dictionary object whose object type is the same as the metadata it is sharing.

The description of a metadata link is stored in the data dictionary of the PDB in which it is created. A metadata link must be owned by an application common user. You can only use metadata links to share metadata of common objects owned by their creator in the CDB root or an application root.

原来这个SHARING=METADATA是指在application pdb里不真正创建表,而是建立一个metadata-link,类似软链接,指向application root里的表。

暂无图片 评论
暂无图片 有用 0
暂无图片
农夫三拳
2022-10-07
👍
愤怒的蜗牛
2022-10-08
超越无限D
2022-10-08
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏