oracle12c 有一个很大的变动就是引入了pdb可插入数据库,而且在cdb中只能创建c##或者C##开头的用户,只有在pdb数据库中才能创建我们习惯性命名的用户,oracle称之为Local User,前者称之为Common User。Oracle 12c 开始支持 PLUGGABLE DATABASE,并且提供了一个方法在CDB和PDB之间切换。
1. 使用 show pdbs 可以确认当前有哪些PDB?
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 TESTP1 MOUNTED
SQL>
上图中 PDB$SEED 并不是一个 PDB 而是一个 PDB的模板,状态始终是 READ ONLY。TESTP1 是一个PDB。
2. 切换到 TESTP1。
SQL> alter session set container=TESTP1;
Session altered.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 TESTP1 MOUNTED
SQL>
3. 切回到 CDB。
SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 TESTP1 MOUNTED
验证
su oracle #进入到Oracle用户下
lsnrctl start #开启监听
lsnrctl status #查看监听
lsnrctl stop #关闭监听
因为CDB和PDB的servicename可能是不一样,先查询pdb的service_name
SQL> select name,pdb from v$services;
NAME PDB
-------------------- --------------------
orcl ORCL
vi tnsnames.ora 编辑tnsnames文件,添加下面内容
ORCL = #这是连接串
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost )(PORT = 1521))
#localhost是所要连接的数据库主机名,尽量写IP,不容易出错,port是端口,Oracle的默认连接端口就是1521
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) #把查询到pdb名称写到对应的service_name这里
)
)
必须要加上tnsnames的连接串才可以连接用户:
SQL> sqlplus 用户名/密码@ORCL #连接串
Connected.
SQL> show user
USER is "SCOTT"
连接成功!