本文最后更新于 2024-07-13T22:38:59+08:00
原理简单,懂之前觉得麻烦。
前言
做数据库的大作业了,要求自己设计一个数据库。之前用的HR数据库姑且是通过改权限强行让CDB能够添加不以C##开头的用户名了。
然而大作业也要求搞一个以自己名字命名的用户名,想了想还是试试PDB的结构吧。试了半天终于搞定了。
正文
我是默认就有了一个自带的叫orclpdb
的PDB数据库了,所以就没有新建一个PDB数据库了。
环境
- Oracle Database 19.3c
- Windows10
登录到CDB
就用你的账号登录就好啦,下面我就以testuser
作为用户名,pswd
作为密码来演示吧。
1
| sqlplus testuser as sysdba/pswd@localhost:1521/orcl
|
切换到PDB
先查看你是否已经有了PDB
之后大概会弹出这样的结果
1 2 3 4
| CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO
|
这了的 ORCLPDB
就是我们已经有了的默认PDB啦。接下来我们就登录进去吧。
打开PDB
现在我们切换到PDB ORCLPDB
中去。
1
| SQL> alter session set container=orclpdb;
|
正常的会显示如下的字样
我们检查一下是否已经切换成功了
1 2 3 4 5
| SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
3 ORCLPDB READ WRITE NO
|
然后就把这个PDB打开吧
为PDB创建用户
下面我们来创建用于专门连接这个PDB的用户。
1 2 3 4
| SQL> create user test identified by pswd;
用户已创建。
|
授予用户该PDB的DBA权限
1 2 3
| SQL> grant dba to test;
授权成功。
|
配置listener.ora
这里找到listener.ora
这个文件,它的地址是在ORACLE_HOME/network/admin/listener.ora
这里。
先找到下面这一段
1 2 3 4 5 6 7 8 9
| 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") ) )
|
然后加上这样一段配置就行了
1 2 3 4
| (SID_DESC = (GLOBAL_DBNAME = orclpdb) (SID_NAME = orcl) )
|
整体的结果是类似于这样的
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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然后打开,为了简单我们就用触发器来自动打开吧。
1 2 3 4 5 6 7
| 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