当数据库的规模太大时,一般会将这个库独立出来单独管理。相反如果有很多规模小于500G的小库零零散散的分布在各个单机环境中,此时推荐使用CDB、PDB 的形式集中管理。
对于医院的应用场景,核心数据库HIS规模已经超10T,此时将数据库由11g升级到 12c 或之后的 19c 可插拔数据库架构已经没有太大必要,相反还需要将所有的客户端版本升级到 11.2.0.4 以上。目前医院的数据库重新规划之后决定只用保留两套库,其中规模比较大的HIS库还是延用11g,避免因升级造成的动荡,其它的数据规模小的数据库全部以 PDB 形式合并到 19c 中。
在服务器硬件性能足够的情况下,一套硬件可以用来跑两套不同版本的数据库。通过定义不同的 ORACLE_HOME,可以将不同版本的数据库安装到不同的目录中。此时需要定义两套 bash 的环境参数,默认 shell 调用的顺序为 /etc/bash.bashrc -> etc/bash_profile -> ~/.bash_profile -> ~/.bashrc ,通过保留两套 .bash_profile 即可实现 11g 和 19c 的版本切换。
11g 的 bash 环境:
# .bash_profile_11g# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/.local/bin:$HOME/bin;export PATHumask 022ORACLE_SID=his1;export ORACLE_SIDORACLE_BASE=/u01/app/oracle;export ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1;export ORACLE_HOMEORACLE_TREM=xterm;export ORACLE_TERMLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATHCLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOMR/rdbms/jlib;export CLASSPATHNLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss";export NLS_DATE_FORMATPATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:/usr/sbin;export PATH
19c 的 bash 环境:
# .bash_profile_19c# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/.local/bin:$HOME/bin;export PATHumask 022export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatchexport LD_LIBRARY_PATH=$ORACLE_HOME/libexport LANG=en_US#export NLS_LANG=american_america.ZHS16GBK#export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"export ORACLE_SID=xycdb1
可以保留一套 .bash_profile 让其成为默认设置,另一套重命名为 .bash_profile_11g,当需要切环境时执行 source .bash_profile_11g 切换 Oracle 环境。
在两套库共存的系统上,同样可以通过 ps 命令查看当前两套库的 SID :
$ ps -eaf| grep ora_pmon | grep -v greporacle 89472 1 0 Aug11 ? 01:03:40 ora_pmon_his1oracle 89562 1 0 Aug11 ? 00:20:05 ora_pmon_xycdb1
连接数据库还是通过设置 ORACLE_SID 来指定需要连接的数据库,同样可以将 ORACLE_SID 配置在 .bash_profile 中,随数据库版本环境一起切换。使用前可以使用 env 命令确认当前的 Oracle 环境变量。
当一个操作系统上部署了多套库,我们一般通过 ORACLE_SID 来区分连接的是哪套库。如果不同库还用的是不同的 Oracle 版本,此时除了区分 ORACLE_SID,还要重新设置 PATH 等环境变量,因为不同版本用的客户端也是不同的。高版本 sqlplus 客户端,连带的命令也是不一样的。
比如 11g 的 sqlplus,其上 show 命令支持的子命令为:
SQL> show RELrelease 1102000400SQL> ? showSHOW----Shows the value of a SQL*Plus system variable, or the currentSQL*Plus environment. SHOW SGA requires a DBA privileged login.SHO[W] optionwhere option represents one of the following terms or clauses:system_variableALLBTI[TLE]ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER| VIEW | TYPE | TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]LNOPARAMETERS [parameter_name]PNORECYC[LEBIN] [original_name]REL[EASE]REPF[OOTER]REPH[EADER]SGASPOO[L]SPPARAMETERS [parameter_name]SQLCODETTI[TLE]USER
而到了 19c ,除了支持之前的 show user, show sga 还加了 cdb、pdb 相关的指令:
SQL> show relrelease 1915000000SQL> ? showSHOW----Shows the value of a SQL*Plus system variable, or the currentSQL*Plus environment. SHOW SGA requires a DBA privileged login.SHO[W] optionwhere option represents one of the following terms or clauses:system_variableALLBTI[TLE]CON_IDCON_NAMEEDITIONERR[ORS] [{ANALYTIC VIEW | ATTRIBUTE DIMENSION | HIERARCHY | FUNCTION| PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER | VIEW | TYPE| TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]LNOPARAMETERS [parameter_name]PDBSPNORECYC[LEBIN] [original_name]REL[EASE]REPF[OOTER]REPH[EADER]SGASPOO[L]SPPARAMETERS [parameter_name]SQLCODETTI[TLE]USER
19c 多出来的指令:
SQL> show con_idCON_ID------------------------------1SQL> show con_nameCON_NAME------------------------------CDB$ROOTSQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 HLWSDB READ WRITE NO4 PACSDB READ WRITE NO5 ZZXTDB READ WRITE NO6 TMIS READ WRITE NO7 TXDBNQ READ WRITE NO8 WALLASON READ WRITE NO
不同版本的 sqlplus 客户端可执行文件所在的目录:
[19c]$ which sqlplus/u01/app/oracle/product/19.3.0/dbhome_1/bin/sqlplus[11g]$ which sqlplus/u01/app/oracle/product/11.2.0/dbhome_1/bin/sqlplus
对于组成 RAC 的 11g 和 19c,监听、ASM等集群组件可以共用,高版本兼容低版本,所以使用一套 grid 即可:
$ whoamigrid$ which lsnrctl/u01/app/19.3.0/grid/bin/lsnrctl$ which asmcmd/u01/app/19.3.0/grid/bin/asmcmd$ which crsctl/u01/app/19.3.0/grid/bin/crsctl
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。




