Oracle多租户环境直接登录PDB总结

我们在多租户架构(multitenant architecture)环境中使用下面命令登录数据库时,一般默认是登录到CDB$ROOT下面。如下所示

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Feb 6 15:10:16 2023
Version 19.3.0.0.0

Copyright (c) 19822019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQLshow con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL>

一般情况下,我们使用ALTER命令在容器间切换,如下所示:

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
SQL> alter session set container=PDB1;

Session altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1                           READ WRITE NO
SQL> alter session set container=PDB2;

Session altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         4 PDB2                           READ WRITE NO
SQL>

那么多租户架构(multitenant architecture )下直接连接多租户PDB的方法有哪一些呢?下面简单总结了Oracle直接登录PDB的一些方法,希望对你有用。

1:使用环境变量ORACLE_PDB_SID

[oracle@kerrydb ~]$ export ORACLE_PDB_SID=PDB1
[oracle@kerrydb ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Feb 6 15:12:04 2023
Version 19.3.0.0.0

Copyright (c) 19822019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQLshow pdbs;

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

注意:ORACLE_PDB_SID没有在公开的官方文档中找到描述,但是从MOS上有不少文档都有提及这个环境变量。例如如下链接文章:

Export ORACLE_PID_SID=PDBSID Connects To CBD$ROOT instead of PDB (Doc ID 2826170.1)

Performing bequeath direct connections to PDB as SYS and SYSTEM (Doc ID 2728684.1)

另外需要注意的是,这个环境变量是从Oracle 18c 开始支持的,Oracle 12下使用ORACLE_PDB_SID环境变量无效

2:使用环境变量TWO_TASK

在Unix和Linux环境下,可以设置TWO_TASK环境变量,当用户连接数据库且没有指定服务名时,会自动利用TWO_TASK的设置作为环境变量连接数据库。使用环境变量TWO_TASK配置tnsnames.ora 的别名(alias_name), 并在监听服务正常的情况下,使用no-sys和sys密码的方式是可以登录的,但是 sqlplus / as sysdba这种认证方式是不允许的。

首先,在tnsname.ora中增加如下配置

PDB1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.9.98)(PORT = 15021))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PDB1)
    )
  )

然后设置环境变量TWO_TASK

[oracle@kerrydb ~]$ export TWO_TASK=PDB1
[oracle@kerrydb ~]$ sqlplus sys/xxxxxx as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Feb 6 16:11:01 2023
Version 19.3.0.0.0

Copyright (c) 19822019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQLshow pdbs;

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

当配置了TWO_TASK环境变量后,就无法使用操作系统验证来登录数据库了,会报“ORA-01017: invalid username/password; logon denied”的错误。如下所示:

[oracle@kerrydb ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Feb 6 16:12:17 2023
Version 19.3.0.0.0

Copyright (c) 19822019, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name:

如果你要取消环境变量设置,可以使用下面命令设置:

unset TWO_TASK

在windows平台,可以用Windows环境下的变量LOCAL

set LOCAL=xxxx

3:使用TNS配置直接连接到PDB

使用TNS配置连接到PDB,这个比较简单,就是像上面例子,在tnsnames.ora中配置好tns,然后使用tns的网络别名登录PDB

[oracle@kerrydb ~]$ echo $TWO_TASK
PDB1
[oracle@kerrydb ~]$ unset TWO_TASK
[oracle@kerrydb ~]$ echo $TWO_TASK

[oracle@kerrydb ~]$ sqlplus sys/xxxx@PDB1 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Feb 6 20:42:12 2023
Version 19.3.0.0.0

Copyright (c) 19822019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQLshow pdbs

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


原文始发于微信公众号(DBA闲思杂想录):Oracle多租户环境直接登录PDB总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/228067.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!