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

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1202|回复: 3

创建代理PDB

[复制链接]
发表于 2021-5-28 17:22:42 | 显示全部楼层 |阅读模式
本帖最后由 郑全 于 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:43 | 显示全部楼层
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里面的内容的。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 13:51:50 | 显示全部楼层

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

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-2-28 23:27 , Processed in 0.109071 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表