oracle 容器切换,oracle 12c切换容器及查询当前容器 | 信春哥,系统稳,闭眼上线不回滚!...

刚开始学习12C,很多地方用着都不是很顺手,特别是PDB,感觉特别扭,可能是刚开始学还没学到PDB带来的好处吧,这里总结下怎么查看当前在哪个容器、怎么切换容器的一些基础命令。

在12C的CONNECT角色里,多出一个SET CONTAINER权限,这个权限用来控制是否可以通过SET CONTAINER来切换容器。

SQL> select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='CONNECT';

GRANTEE PRIVILEGE

-------------------- --------------------

CONNECT SET CONTAINER

CONNECT CREATE SESSION

在知道可以通过SET CONTAINER来切换容器之前,我都是通过TNS的方法来切换容器。

[oracle@dbdream ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Fri Aug 16 02:28:46 2013

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT

SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

CON_ID DBID NAME OPEN_MODE

---------- ---------- ---------- --------------------

2 4063594514 PDB$SEED READ ONLY

3 1587020587 STREAM READ WRITE

4 676818932 WIND READ WRITE

SQL> conn dbdream/dbdream@localhost/stream

Connected.

SQL> show con_name

CON_NAME

------------------------------

STREAM

下面在看下用SET CONTAINER来切换容器。

[oracle@dbdream ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Fri Aug 16 02:35:57 2013

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT

SQL> alter session set container=wind;

Session altered.

SQL> show con_name

CON_NAME

------------------------------

WIND

这样就切换过去了,而且用的是切换前登录数据库的用户(sys)。

SQL> show user

USER is "SYS"

PDB和PDB之间是不可以用SET CONTAINER的方式切换的。我的wind、stream两个PDB中都存在wind用户,密码也一样,下面测试下用wind用户从wind容器切换到stream容器。

SQL> conn wind/wind@localhost/wind

Connected.

SQL> alter session set container=stream;

ERROR:

ORA-01031: insufficient privileges

PDB和PDB之间切换我只知道可以用TNS的方式,SET CONTAINER的方式只能是PDB和CDB之间切换,而且要求切换的用户在PDB和CDB都存在,这也就是说只有在CDB中创建的用户(COMM USER)才可以用SET CONTAINER方式切换容器(系统用户除外),因为在CDB中创建的用户以C##开头,并且在每个PDB中都可以看到CDB中创建的用户(COMM USER),而PDB中创建的用户(LOCAL USER)只能在当前PDB中看到,还不能以C##开头,那就只有COMM USER才可以用SET CONTAINER的方式切换容器了(系统用户除外),太局限了。

上文总结了怎样切换容器,在记录下怎么查看当前在哪个容器,从上文可以看到可以用show con_name的方式很方便的看到当前在哪个容器里,还可以用SYS_CONTEXT函数来查看。

SQL> SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;

SYS_CONTEXT('USERENV','CON_NAME')

--------------------------------------------------------------------------------

WIND

SQL> conn sys/oracle@localhost/dbdream as sysdba

Connected.

SQL> SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;

SYS_CONTEXT('USERENV','CON_NAME')

--------------------------------------------------------------------------------

CDB$ROOT

这两种方法功能相同,但是show con_name的方式要少敲好几个单词,我比较喜欢。

小结:

切换容器:

TNS的方式比较实用,不但可以实现CDB和PDB之间的切换,还可以实现PDB与PDB之间的切换,并且可以在切换时直接切换用户。

SET CONTAINER方式切换容器只能是CDB与PDB之间切换,而且只能使用COMM USER(系统用户除外),范围比较局限。

查看当前容器:

show con_name相对简单,单次比较好记,不容易忘记。SYS_CONTEXT函数相对麻烦些,时间长不用可能会忘记。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值