Oracle 19c 之多租户 PDB 连接与访问(三)

作者 | JiekeXu

来源 | JiekeXu之路(ID: JiekeXu_IT)

转载请联系授权 | (微信ID:xxq1426321293)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享下 Oracle 19c 之多租户 PDB 连接与访问。本文首发于微信公众号【JiekeXu之路】,欢迎点击上方蓝字关注我吧!

前面已经说过创建多租户以及多租户体系架构了,感兴趣的小伙伴可查看历史文章。今天下午微信公众号又有重大的更新了,底部出现了分享、点赞、再看三个按钮,所以发一篇试试新功能。首先看下图,基本上就可以看懂了 CDB、PDB 之间的访问了。

使用 sqlplus / as sysdba 直接连接到根容器,或者通过网络( sqlplus sys/oracle@IP:端口号/服务名)轻松连接方式等均可连接到根容器。

下面看一下如何直接登录到 PDB

为了演示,先使用模板在建立一个 JIEKEPDB1 吧,语法后面再具体介绍。

#使用如下命令创建一个 JIEKEPDB1
create pluggable database JIEKEPDB1 admin
user pdbadmin identified by pdbadmin
roles=(DBA) default tablespace users
file_name_convert =
('/u01/app/oracle/oradata/JIEKECDB/pdbseed','/u01/app/oracle/oradata/JIEKECDB/JIEKEPDB1');

–注意,如果 file_name_convert 后边不写全路径,如上图所示创建,默认会在 $ORACLE_HOME/dbs 下创建一个名为 JIEKEPDB1 的目录存放数据文件。

当然也可删除后在使用上面命令重建
alter pluggable database JIEKEPDB1 close immediate;
drop pluggable database JIEKEPDB1 including datafiles;

**使用如下命令打开 JIEKEPDB1 **

SYS@JIEKECDB> alter pluggable database JIEKEPDB1 open;
SYS@JIEKECDB> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JIEKEPDB                         READ WRITE NO
         5 JIEKEPDB1                       READ WRITE NO

--注意 CON_ID 没有出现 4 是由于前面创建出现错误导致。

然后具体看一下直接连接到多租户 PDB 的方法:

1)export ORACLE_PDB_SID=JIEKEPDB1

不可以使用 export ORACLE_SID=JIEKEPDB1 的方式连接 PDB,因为实例只有一个,对应的 SID 是 JiekeCDB,不存在 Jiekepdb1 实例。但是 18c 、19c 可以使用  ORACLE_PDB_SID 来连接到 PDB,直接登录到数据库。

export ORACLE_PDB_SID=JIEKEPDB1
sqlplus / as sysdba 
sho pdbs

2)ALTER 命令直接连接到 JIEKEPDB

当然也可以使用 alter session set container=JIEKEPDB,如下图演示。

3)export TWO_TASK=JIEKEPDB1

TWO_TASK 这个变量和前面的 ORACLE_PDB_SID 未在官方文档中有过说明,但很多技术文档中均使用这种方法,前提是 TWO_TASK 需要配置 tnsnames.ora 别名加用户、密码才可以登录。

vim $ORACLE_HOME/network/admin/tnsnames.ora 

配置和连接如下图所示:

4)使用 tns 直接连接连接到 PDB

最后就是通过上面配置的 tns 网络别名加用户、密码直接登录到 PDB。

sqlplus sys/oracle@JIEKEPDB1 as sysdba

如上图,当我使用 sqlplus 连接到 PDB 时,每行 SQL 前均会显示所连接到的容器租户以及用户名称,如 SYS@JIEKEPDB1> .这个命令提示符是可以配置的。在 $ORACLE_HOME/sqlplus/admin 目录下有一个 glogin.sql 文件,在最后添加 sqlprompt 相关的提示便可以了。

set linesize 200
set pagesize 999
define _editor=vi
set sqlprompt "_user'@'_connect_identifier> "

那么,当连接到 PDB 后怎么回切到 CDB 呢?很简单,直接使用命令:conn / as sysdba  即可。注意:show 命令我这里简写成了 sho 是没有任何问题的。

最最后,亲测,export ORACLE_PDB_SID 在12c 中不可用,不过 TWO_TASK=JIEKEXUPDB1 到时可以使用。如上结果均为新装单机 RPM 包的 19.3 环境,无任何补丁包具体安装可查看微信文章[Oracle 19c 之 RPM 包安装初体验(一)]

[oracle@JiekeXu admin]$ export ORACLE_PDB_SID=JIEKEXUPDB
[oracle@JiekeXu admin]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 星期二 6月 23 09:15:52 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

连接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SYS@JiekeXu> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JIEKEXUPDB                     READ WRITE NO
         4 JIEKEXUPDB1                    READ WRITE NO
SYS@JiekeXu> show con_name

CON_NAME
------------------------------
CDB$ROOT

总结:有时候,通过根容器然后在切换到某个 PDB,是比较麻烦的,那么如果想直接连接到 PDB ,便可以配置环境变量 ORACLE_PDB_SID 它无疑是最方便的了,不过官方没有直接说明可以这么用,但从各种技术论坛文章中看到还是没有任何问题的。TWO_TASK 和直接通过 tns 别名登录到 PDB 的,需要多租户容器 SYS 密码,当不知道密码时比较麻烦;那么只有通过 sqlplus 先登录到根容器然后再使用 alter session set container 命令切换到某个具体的 PDB。

好了,今天就到先这里了,那么,对于容器数据库的切换,连接就说这么多了,小伙伴们再见了。写作不易,此文如果对你有帮助,请支持“在看”与转发,您的支持便是我不断写作的最大的动力,实在吝啬点个赞也行,微信公众号以前的点赞又回来了,加油,让我们一起努力做更好的自己!

 

Oracle 软件包及补丁包免费下载及简单说明

Oracle 19c 之 RPM 包安装初体验(一)

Oracle 12C 最新补丁下载与安装操作指北

关于 Oracle ACFS 相关知识的简单学习

Oracle 12CR2 安装配置与基础学习

Windows 环境下安装 Oracle 19C


点亮在看,你最好看!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值