12c后的sqlprompt显示设置的研究
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,如大家所了解的,oracle 12c的CDB,PDB新特性中可以通过alter session set container=XXX的方式来变更当前容器,我就在想,那么有没有直观的办法在sqlpromp
千家信息网最后更新 2025年11月12日12c后的sqlprompt显示设置的研究如大家所了解的,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就会发生改变
大家加油!
首先,我们需要了解怎么判断当前容器
第一种: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就会发生改变
大家加油!
容器
方式
变化
直观
结果
实验
登陆
不同
成功
办法
可以通过
就是
情况
意识
文件
时候
特性
而是
跟着
面的
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全法第十二条怎么处罚
怎样实施工程化软件开发
java mvc数据库
惠州无限软件开发报价行情
lol福建服务器
四川自贡网络安全周活动
网络安全检测服务活动策划
软件开发各阶段内容
软件开发接口变量管理
网络安全环境由哪三个部分组成
慈溪软件开发生产商
军地两用网络安全防空考试
光宝服务器电源
服务器与机柜的关系
杭州西奥手持服务器下载参数
关系数据库中最基础的对象是
网络安全服务上岗证有效期为
计算机软件开发工资高吗贴吧
深圳友能网络技术有限公司
人类享受了网络技术带来的方便
无线网络技术导论卷子
无线网络安全系统是什么
涉密专用服务器安全策略
应用程序缺少数据库
批量数据库技巧
网络安全包括什么领域
您不能在安全服务器上游戏
多个数据库共用一个实例
数据库实现过期检测
计算机二级考试试题数据库