为 OracleDatabase 配置 PDB 登录

本文最后更新于:2020年8月16日 下午

原理简单,懂之前觉得麻烦。

前言

做数据库的大作业了,要求自己设计一个数据库。之前用的 HR 数据库姑且是通过改权限强行让 CDB 能够添加不以 C## 开头的用户名了。
然而大作业也要求搞一个以自己名字命名的用户名,想了想还是试试 PDB 的结构吧。试了半天终于搞定了。

正文

我是默认就有了一个自带的叫 orclpdb 的 PDB 数据库了,所以就没有新建一个 PDB 数据库了。

环境

  • Oracle Database 19.3c
  • Windows10

登录到 CDB

就用你的账号登录就好啦,下面我就以 testuser 作为用户名,pswd作为密码来演示吧。

sqlplus testuser as sysdba/[email protected]:1521/orcl

切换到 PDB

先查看你是否已经有了 PDB

SQL> show pdbs;

之后大概会弹出这样的结果

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

这了的 ORCLPDB就是我们已经有了的默认 PDB 啦。接下来我们就登录进去吧。

打开 PDB

现在我们切换到 PDB ORCLPDB中去。

SQL> alter session set container=orclpdb;

正常的会显示如下的字样

会话已更改。

我们检查一下是否已经切换成功了

SQL> show pdbs;

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

然后就把这个 PDB 打开吧

SQL> startup;

为 PDB 创建用户

下面我们来创建用于专门连接这个 PDB 的用户。

SQL> create user test identified by pswd;  

用户已创建。

授予用户该 PDB 的 DBA 权限

SQL> grant dba to test;

授权成功。

配置 listener.ora

这里找到 listener.ora 这个文件,它的地址是在 ORACLE_HOME/network/admin/listener.ora 这里。
先找到下面这一段

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Oracle\WINDOWS.X64_193000_db_home)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\WINDOWS.X64_193000_db_home\bin\oraclr19.dll")
    )
  )

然后加上这样一段配置就行了

(SID_DESC =
(GLOBAL_DBNAME = orclpdb)
(SID_NAME = orcl)
)

整体的结果是类似于这样的

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Oracle\WINDOWS.X64_193000_db_home)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\WINDOWS.X64_193000_db_home\bin\oraclr19.dll")
    )
    (SID_DESC =
    (GLOBAL_DBNAME = orclpdb)
    (SID_NAME = orcl)
    )
  )

优化

设置 PDB 自动启动

每次要用 PDB 的时候都得从 CDB 切换到 PDB 然后打开,为了简单我们就用触发器来自动打开吧。

SQL>
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/

这样就搞定了。

参考

Oracle 12c 中新建 pdb 用户登录问题分析

oracle 12c 多租户下的日常操作变化

Oracle 12C 创建用户连接 pdb