温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

12c后的sqlprompt显示设置的研究

发布时间:2020-08-04 21:19:57 来源:ITPUB博客 阅读:231 作者:Thinkbase 栏目:关系型数据库
如大家所了解的,oracle 12c的CDB,PDB新特性中可以通过alter session set container=XXX的方式来变更当前容器,我就在想,那么有没有直观的办法在sqlprompt中直观的显示出这种容器的变化呢,以此为由有了下面的一系列实验。

首先,我们需要了解怎么判断当前容器

第一种:show con_name

SQL> alter session set container=pdb1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
PDB1

第二种:SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;

SQL> alter session set container=pdb2;

Session altered.

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

SYS_CONTEXT('USERENV','CON_NAME')
--------------------------------------------------------------------------------
PDB2

于是我就在考虑怎么在sqlprompt中直观的显示这种容器上的变化

首先是修改glogin.sql文件
[oracle@home01 admin]$ vi glogin.sql
Define _editor = 'vi'
set time on
set termout off
column propmt_c new_value propmt_c
SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') as propmt_c FROM DUAL;
set sqlprompt "_user'@'_connect_identifier(&propmt_c)> "

然后登入sqlplus测试
[oracle@home01 admin]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sun Oct 15 15:34:40 2017

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Advanced Analytics
and Real Application Testing options

15:34:40 SYS@PRODCDB(CDB$ROOT)> alter session set container=pdb1;

Session altered.

15:35:12 SYS@PRODCDB(CDB$ROOT)> show con_name

CON_NAME
------------------------------
pdb1
结果是虽然容器被改变了,但是sqlprompt仍然显示的是旧的CDB$ROOT

用connect的方式登陆不同的容器
15:37:16 SYS@PRODCDB(CDB$ROOT)> conn sys/oracle@pdb2 as sysdba
Connected.
15:37:42 SYS@pdb2(PDB2)> show con_name


CON_NAME
------------------------------
PDB2
15:37:49 SYS@pdb2(PDB2)> 
这次成功了,通过connect的方式登陆的情况下,sqlprompt的显示发生了变化,但是connect_identifier也对应的变成了容器库。。。

实验总结:
可以看出来这个sqlprompt,只在刚进sqlplus的时候作校验,之后不会再发生变动,如果使用alter session set container的方式来修改当前容器的话,结果就是sqlprompt不会跟着意识到容器的变化,而是维持刚登入时获得的con_name,但是如果用conn sys/oracle@pdbprod1 as sysdba的方式重新登入,sqlprompt就会发生改变




大家加油!
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI