温馨提示×

如何在Ubuntu上配置Oracle多实例

小樊
52
2025-10-12 09:37:57
栏目: 云计算

在Ubuntu上配置Oracle多实例的步骤

一、前置准备

在配置Oracle多实例前,需完成以下基础工作:

  1. 安装Oracle Database软件:确保已在Ubuntu上安装Oracle Database(如11gR2、19c等版本),且安装时选择“单实例”模式(多实例需后续手动配置)。
  2. 创建Oracle用户与组:创建oinstalldba组及oracle用户,设置密码并赋予sudo权限。
  3. 配置环境变量:编辑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

初始化第二个实例(orcl2)

使用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)

监听器负责接收客户端连接请求并转发至对应实例。需修改listener.ora文件(位于$ORACLE_HOME/network/admin目录):

# 编辑listener.ora文件
vi $ORACLE_HOME/network/admin/listener.ora

添加第二个实例的SID描述(以orclorcl2为例):

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)

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值。

五、启动与停止多实例

1. 启动监听器

lsnrctl start

验证监听器状态:

lsnrctl status

应显示监听器正在运行,且包含orclorcl2两个实例的SID描述。

2. 启动实例

切换至目标实例(通过ORACLE_SID环境变量指定),然后启动:

# 启动orcl实例
export ORACLE_SID=orcl
sqlplus / as sysdba
SQL> startup

# 启动orcl2实例
export ORACLE_SID=orcl2
sqlplus / as sysdba
SQL> startup

3. 关闭实例

# 关闭orcl实例
export ORACLE_SID=orcl
sqlplus / as sysdba
SQL> shutdown immediate

# 关闭orcl2实例
export ORACLE_SID=orcl2
sqlplus / as sysdba
SQL> shutdown immediate

# 关闭监听器
lsnrctl stop

4. 快速切换实例

可通过以下命令快速切换实例(无需重复输入export):

alias orcl="export ORACLE_SID=orcl; sqlplus / as sysdba"
alias orcl2="export ORACLE_SID=orcl2; sqlplus / as sysdba"

添加至~/.bashrc文件后,直接输入orclorcl2即可切换至对应实例。

六、验证多实例连接

1. 本地连接(通过SID)

# 连接orcl实例
sqlplus sys/change_on_install@orcl as sysdba

# 连接orcl2实例
sqlplus sys/change_on_install@orcl2 as sysdba

2. 本地连接(通过服务名)

# 连接orcl实例
sqlplus sys/change_on_install@ORCL as sysdba

# 连接orcl2实例
sqlplus sys/change_on_install@ORCL2 as sysdba

3. 远程连接(需配置防火墙和监听器)

若需远程连接,需确保:

  • Ubuntu防火墙开放监听器端口(如1521):
    sudo ufw allow 1521/tcp
    
  • 客户端tnsnames.ora文件中配置正确的连接信息(与服务器端一致)。

注意事项

  1. 资源分配:多实例共享服务器CPU、内存等资源,需根据实例负载调整Oracle内存参数(如SGA_TARGETPGA_AGGREGATE_TARGET)。
  2. 监听器端口冲突:若多个实例使用同一端口,需确保监听器能正确路由请求(静态注册或动态注册)。
  3. 实例状态监控:使用ps -ef | grep pmon查看实例进程,lsnrctl status查看监听器状态,确保实例正常运行。
  4. 备份策略:为每个实例单独配置备份(如RMAN),避免数据丢失。

0