在配置Oracle多实例前,需完成以下基础工作:
oinstall、dba组及oracle用户,设置密码并赋予sudo权限。oracle用户的~/.bashrc文件,添加以下内容(替换为实际安装路径):export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=orcl # 默认实例SID,后续启动多实例时需修改
执行source ~/.bashrc使变量生效。每个实例需要独立的数据文件目录、控制文件目录和重做日志目录。以创建orcl(默认实例)和orcl2(第二个实例)为例:
# 创建实例根目录
sudo mkdir -p /u01/app/oracle/oradata/{orcl,orcl2}
sudo mkdir -p /u01/app/oracle/fast_recovery_area/{orcl,orcl2}
# 设置目录权限(仅oracle用户可访问)
sudo chown -R oracle:oinstall /u01/app/oracle/oradata
sudo chown -R oracle:oinstall /u01/app/oracle/fast_recovery_area
sudo chmod -R 750 /u01/app/oracle/oradata
sudo chmod -R 750 /u01/app/oracle/fast_recovery_area
使用dbca(Database Configuration Assistant)图形化工具或命令行创建第二个实例:
# 切换至oracle用户
su - oracle
# 启动dbca(图形化界面)
dbca
# 或使用命令行(非交互式,需提前准备响应文件)
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbName orcl2 \
-sid orcl2 \
-createAsContainerDatabase false \
-datafileDestination /u01/app/oracle/oradata/orcl2 \
-recoveryAreaDestination /u01/app/oracle/fast_recovery_area/orcl2 \
-emConfiguration NONE \
-characterSet AL32UTF8 \
-memoryPercentage 40 \
-databaseType MULTIPURPOSE
等待初始化完成,确保orcl2实例成功创建。
监听器负责接收客户端连接请求并转发至对应实例。需修改listener.ora文件(位于$ORACLE_HOME/network/admin目录):
# 编辑listener.ora文件
vi $ORACLE_HOME/network/admin/listener.ora
添加第二个实例的SID描述(以orcl和orcl2为例):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
(ORACLE_HOME = $ORACLE_HOME)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl2)
(SID_NAME = orcl2)
(ORACLE_HOME = $ORACLE_HOME)
)
)
说明:
LISTENER部分定义监听器的地址(IP、端口),1521为默认端口,可根据需求修改。SID_LIST_LISTENER部分列出监听器管理的所有实例,每个实例需指定GLOBAL_DBNAME(全局数据库名,可与SID不同)、SID_NAME(实例SID)和ORACLE_HOME(Oracle安装目录)。tnsnames.ora文件用于客户端通过服务名连接实例。编辑tnsnames.ora文件:
vi $ORACLE_HOME/network/admin/tnsnames.ora
添加两个实例的连接配置:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl2)
)
)
说明:
SERVICE_NAME需与实例的GLOBAL_DBNAME一致(或根据实例配置调整)。orcl用1521,orcl2用1522),需修改ADDRESS部分的PORT值。lsnrctl start
验证监听器状态:
lsnrctl status
应显示监听器正在运行,且包含orcl和orcl2两个实例的SID描述。
切换至目标实例(通过ORACLE_SID环境变量指定),然后启动:
# 启动orcl实例
export ORACLE_SID=orcl
sqlplus / as sysdba
SQL> startup
# 启动orcl2实例
export ORACLE_SID=orcl2
sqlplus / as sysdba
SQL> startup
# 关闭orcl实例
export ORACLE_SID=orcl
sqlplus / as sysdba
SQL> shutdown immediate
# 关闭orcl2实例
export ORACLE_SID=orcl2
sqlplus / as sysdba
SQL> shutdown immediate
# 关闭监听器
lsnrctl stop
可通过以下命令快速切换实例(无需重复输入export):
alias orcl="export ORACLE_SID=orcl; sqlplus / as sysdba"
alias orcl2="export ORACLE_SID=orcl2; sqlplus / as sysdba"
添加至~/.bashrc文件后,直接输入orcl或orcl2即可切换至对应实例。
# 连接orcl实例
sqlplus sys/change_on_install@orcl as sysdba
# 连接orcl2实例
sqlplus sys/change_on_install@orcl2 as sysdba
# 连接orcl实例
sqlplus sys/change_on_install@ORCL as sysdba
# 连接orcl2实例
sqlplus sys/change_on_install@ORCL2 as sysdba
若需远程连接,需确保:
sudo ufw allow 1521/tcp
tnsnames.ora文件中配置正确的连接信息(与服务器端一致)。SGA_TARGET、PGA_AGGREGATE_TARGET)。ps -ef | grep pmon查看实例进程,lsnrctl status查看监听器状态,确保实例正常运行。