重庆思庄Oracle、Redhat认证学习论坛

标题: 创建代理PDB [打印本页]

作者: 郑全    时间: 2021-5-28 17:22
标题: 创建代理PDB
本帖最后由 郑全 于 2023-8-6 17:57 编辑

比如在CDB1中创建一个代理proxy_pdb1 ,引用ORCLCDB中PDB1
步骤如下;
1.在orclcdb中,创建通用用户,有CREATE SESSION,SYSOPER通用权限

create user c##remote_user identified by oracle_4U container=all;

grant create session , sysoper
          to c##remote_user
          container=all;

2.在cdb1 中创建DBLINK
create  database link link_cdb1
  connect to c##remote_user identified by oracle_4U
  using '192.168.133.134:1521/orclcdb';



3.在cdb1中,创建proxy pdb
  create pluggable database proxy_pdb1 as proxy from pdb1@link_cdb1;


4.验证:
  SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PROXY_PDB1                         READ WRITE NO
。。。

SQL>

  1* select PDB_NAME,IS_PROXY_PDB from cdb_pdbs

PDB_NAME                       IS_
------------------------------ ---
。。

PXPDB1                         YES
。。。




作者: 郑全    时间: 2023-8-2 18:01
1.我们直接通过操作系统认证方式登录CDB2,

SYS@cdb2 >conn / as sysdba
Connected.
SYS@cdb2 >show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PROXY_PDB1                     READ WRITE NO
SYS@cdb2 >


切换到 PROXY_PDB1代理PDB中去。
SYS@cdb2 >alter session set container=proxy_pdb1;

Session altered.

SYS@cdb2 >
SYS@cdb2 >select name from v$datafile;

NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB1/proxy_pdb1/system01.dbf
/u01/app/oracle/oradata/CDB1/proxy_pdb1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/proxy_pdb1/undotbs01.dbf

SYS@cdb2 >

现在看到是新的代理pdb自己的数据文件

查看PDB,还是PROXY_PDB1
SYS@cdb2 >show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         4 PROXY_PDB1                     READ WRITE NO
SYS@cdb2 >show con_name

CON_NAME
------------------------------
PROXY_PDB1
SYS@cdb2 >


2.我们通过服务的方式登录到PROXY_PDB1
SYS@cdb2 >CONN SYS/sztech_4U@192.168.133.120:1521/proxy_pdb1 as sysdba
Connected.
SYS@192.168.133.120:1521/proxy_pdb1 >show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1                           READ WRITE NO
SYS@192.168.133.120:1521/proxy_pdb1 >show con_name

CON_NAME
------------------------------
PDB1

我们看到了什么,这个时候,是否看到的PDB的名字为CDB1里面的那个引用PDB了。

SYS@192.168.133.120:1521/proxy_pdb1 >select name from v$datafile;

NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/tsp_pdb1_test01.dbf

SYS@192.168.133.120:1521/proxy_pdb1 >


SYS@192.168.133.120:1521/proxy_pdb1 >insert into app1 values('newpdb1');

1 row created.

SYS@192.168.133.120:1521/proxy_pdb1 >select * from app1;

NAME
--------------------
pdb1
pdb2
pdb3
newpdb1


3.再登录到CDB1/PDB1中去看,是否在代理PDB1中插入的值,在PDB1中,是否也出现了。
SYS@cdb1 >conn / as sysdba
Connected.
SYS@cdb1 >show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
SYS@cdb1 >alter session set container=pdb1;

Session altered.

SYS@192.168.133.120:1521/proxy_pdb1 >commit;

Commit complete.


SYS@cdb1 >show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1                           READ WRITE NO

SYS@cdb1 >select * from app1;

NAME
--------------------
pdb1
pdb2
pdb3

SYS@cdb1 >r
  1* select * from app1

NAME
--------------------
pdb1
pdb2
pdb3
newpdb1

SYS@cdb1 >


总结一下:通过service_name登录,直接进入代理PDB对应的应用PDB,但如果是通过操作系统方式登录CDB2,再通过alter session set container=proxy_pdb1 方式切换到代理PDB,那么,是看不到引用PDB里面的内容的。


作者: neo    时间: 2023-8-3 08:11
什么秘密~~
作者: 郑全    时间: 2023-8-4 13:51
neo 发表于 2023-8-3 08:11
什么秘密~~

通过 服务名 方式登录,才能看到应用PDB的东西,否则,通过操作系统登录方式,看到的是代理PDB自己的东西。
你可以试一下。






欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2