[Oracle]メモ:複数インスタンスへの接続をaliasで切り替える。
1台のサーバに複数のインスタンスが同居している環境だと、sqlplus / as sysdbaでデータベースに接続する際、都度接続したいデータベースに合わせて環境変数ORACLE_SIDを切り替えなければなりません。これは面倒です。そんなときはaliasに登録してしまうと楽になります。
alias登録
コマンド
alias ufo='(export ORACLE_SID=UFO1; sqlplus / as sysdba)'
※ここでalias名をufoとしていますが特に決まりはありません。ただし、既存のコマンド等と同じ名前にすると予期せぬ挙動をするので避けましょう。
実際にはこれを.bash_profileに登録しておきます。そうするとufoと打ち込むだけでデータベースに接続できます。
では実際にやってみます。
実行例
[oracle@rac-z1 ~]$ cat .bash_profile
# .bash_profile
# 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
if [ -t 0 ]; then
stty intr ^C
fi
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export NLS_LANG=Japanese_Japan.AL32UTF8
export PATH=$ORACLE_HOME/bin:$PATH
alias ufo='(export ORACLE_SID=UFO1; sqlplus / as sysdba)'
alias ufos='(export ORACLE_SID=UFOS1; sqlplus / as sysdba)'
[oracle@rac-z1 ~]$
[oracle@rac-z1 ~]$ ps -ef | grep ora_smon
oracle 6622 1 0 00:14 ? 00:00:00 ora_smon_UFO1
oracle 6751 1 0 00:14 ? 00:00:00 ora_smon_UFOS1
oracle 19097 7311 0 00:59 pts/0 00:00:00 grep --color=auto ora_smon
[oracle@rac-z1 ~]$
[oracle@rac-z1 ~]$ echo $ORACLE_SID
[oracle@rac-z1 ~]$ ufo
SQL*Plus: Release 19.0.0.0.0 - Production on 金 10月 18 00:59:37 2019
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
UFO1
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
[oracle@rac-z1 ~]$ echo $ORACLE_SID
[oracle@rac-z1 ~]$
[oracle@rac-z1 ~]$ ufos
SQL*Plus: Release 19.0.0.0.0 - Production on 金 10月 18 01:00:33 2019
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
UFOS1
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
[oracle@rac-z1 ~]$ echo $ORACLE_SID
[oracle@rac-z1 ~]$
ポイントはコマンドを()で包むことです。こうすることでコマンドが子シェル上で実行され、実行後に環境変数 ORACLE_SID が残らない事です。
[root@rac-z1 ~]# pstree -p 7311
bash(7311)───bash(26270)───sqlplus(26271)─┬─oracle_26272_uf(26272)
└─{sqlplus}(26273)
[root@rac-z1 ~]#
応用編
アラートログをtailする場合などもailasを活用すると楽に実施できます。
alias ufolog='(export ORACLE_SID=UFO1; tail -f /u01/app/oracle/diag/rdbms/`echo ${ORACLE_SID%[1,2]} | tr [A-Z] [a-z]`/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log)'
[oracle@rac-z1 ~]$ ufolog
Closing scheduler window
Closing Resource Manager plan via scheduler window
Clearing Resource Manager CDB plan via parameter
2019-10-21T03:00:17.862706+09:00
Thread 1 advanced to log sequence 80 (LGWR switch)
Current log# 2 seq# 80 mem# 0: +DATA/UFO/ONLINELOG/group_2.265.1015629631
2019-10-21T03:00:18.064622+09:00
TT02 (PID:7994): SRL selected for T-1.S-80 for LAD:2
2019-10-21T03:00:18.451689+09:00
ARC1 (PID:7794): Archived Log entry 244 added for T-1.S-79 ID 0xcdfaf77c LAD:1