前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 19c 之多租户 PDB 连接与访问(三)

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

作者头像
JiekeXu之路
发布2020-07-02 15:19:24
3.8K0
发布2020-07-02 15:19:24
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路

作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293)

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

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

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

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

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

代码语言:javascript
复制
#使用如下命令创建一个 JIEKEPDB1
代码语言:javascript
复制
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 的目录存放数据文件。

代码语言:javascript
复制
当然也可删除后在使用上面命令重建
alter pluggable database JIEKEPDB1 close immediate;
drop pluggable database JIEKEPDB1 including datafiles;

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

代码语言:javascript
复制
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,直接登录到数据库。

代码语言:javascript
复制
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 相关的提示便可以了。

代码语言:javascript
复制
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 包安装初体验(一)]

代码语言:javascript
复制
[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。

好了,今天就到先这里了,那么,对于容器数据库的切换,连接就说这么多了,小伙伴们再见了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 然后具体看一下直接连接到多租户 PDB 的方法:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档