当数据库的规模太大时,一般会将这个库独立出来单独管理。相反如果有很多规模小于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 functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin;export PATH
umask 022
ORACLE_SID=his1;export ORACLE_SID
ORACLE_BASE=/u01/app/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1;export ORACLE_HOME
ORACLE_TREM=xterm;export ORACLE_TERM
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOMR/rdbms/jlib;export CLASSPATH
NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss";export NLS_DATE_FORMAT
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:/usr/sbin;export PATH
复制
19c 的 bash 环境:
# .bash_profile_19c
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin;export PATH
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export 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 grep
oracle 89472 1 0 Aug11 ? 01:03:40 ora_pmon_his1
oracle 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 REL
release 1102000400
SQL> ? show
SHOW
----
Shows the value of a SQL*Plus system variable, or the current
SQL*Plus environment. SHOW SGA requires a DBA privileged login.
SHO[W] option
where option represents one of the following terms or clauses:
system_variable
ALL
BTI[TLE]
ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER
| VIEW | TYPE | TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]
LNO
PARAMETERS [parameter_name]
PNO
RECYC[LEBIN] [original_name]
REL[EASE]
REPF[OOTER]
REPH[EADER]
SGA
SPOO[L]
SPPARAMETERS [parameter_name]
SQLCODE
TTI[TLE]
USER
复制
而到了 19c ,除了支持之前的 show user, show sga 还加了 cdb、pdb 相关的指令:
SQL> show rel
release 1915000000
SQL> ? show
SHOW
----
Shows the value of a SQL*Plus system variable, or the current
SQL*Plus environment. SHOW SGA requires a DBA privileged login.
SHO[W] option
where option represents one of the following terms or clauses:
system_variable
ALL
BTI[TLE]
CON_ID
CON_NAME
EDITION
ERR[ORS] [{ANALYTIC VIEW | ATTRIBUTE DIMENSION | HIERARCHY | FUNCTION
| PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER | VIEW | TYPE
| TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]
LNO
PARAMETERS [parameter_name]
PDBS
PNO
RECYC[LEBIN] [original_name]
REL[EASE]
REPF[OOTER]
REPH[EADER]
SGA
SPOO[L]
SPPARAMETERS [parameter_name]
SQLCODE
TTI[TLE]
USER
复制
19c 多出来的指令:
SQL> show con_id
CON_ID
------------------------------
1
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 HLWSDB READ WRITE NO
4 PACSDB READ WRITE NO
5 ZZXTDB READ WRITE NO
6 TMIS READ WRITE NO
7 TXDBNQ READ WRITE NO
8 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 即可:
$ whoami
grid
$ 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
复制
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。