温馨提示×

如何在centos上配置oracle的多实例

小樊
40
2025-12-13 12:50:40
栏目: 云计算

在 CentOS 上配置 Oracle 多实例


一 准备与规划

  • oracle 用户操作,确认 ORACLE_HOME、ORACLE_SID 等环境变量正确;同一台服务器可并行运行多个实例,每个实例拥有独立的 SID/数据库名/数据文件
  • 规划实例的 监听方式:常见为“一个监听在一个 IP 的一个端口上监听多个实例”,也可按业务需要配置“同 IP 不同端口”或“多个监听”。监听与实例的关系可通过动态注册(默认)或静态注册实现。

二 创建第二个实例(两种方式)

  • 方式 A 图形化 DBCA(推荐)
    • 以 oracle 用户执行:dbca,选择“创建数据库”,设置 数据库名/SID、字符集、口令等;完成后会在 $ORACLE_BASE/oradata 下生成对应实例目录,且通常会自动更新 $ORACLE_HOME/network/admin/tnsnames.ora 的客户端连接串。
  • 方式 B 静默方式(示例)
    • 准备响应文件(如 create_db.rsp),关键项包括:createDatabase=true、globalDatabaseName=TEST、sid=TEST、characterSet=AL32UTF8、templateName=General_Purpose.dbc、datafileDestination=/u01/app/oracle/oradata、sysPassword=YourSysPwd、systemPassword=YourSysPwd
    • 执行:dbca -silent -responseFile /u01/soft/create_db.rsp;完成后同样会在 oradata 下生成 TEST 目录。

三 配置监听与客户端解析

  • 动态注册优先:数据库启动后由 PMON 自动向默认监听(端口 1521)注册服务,通常无需修改监听即可连通多实例。
  • 静态注册示例(可选,便于明确控制):编辑 $ORACLE_HOME/network/admin/listener.ora,为多个实例添加 SID_DESC;一个监听即可托管多实例。
    • 示例:
      SID_LIST_LISTENER =
        (SID_LIST =
          (SID_DESC =
            (GLOBAL_DBNAME = ORCL)
            (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/db_1)
            (SID_NAME = ORCL)
          )
          (SID_DESC =
            (GLOBAL_DBNAME = TEST)
            (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/db_1)
            (SID_NAME = TEST)
          )
        )
      LISTENER =
        (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
          )
        )
      
    • 使配置生效:lsnrctl stop → lsnrctl start(或 lsnrctl reload)。
  • 客户端解析:在 tnsnames.ora 增加条目,便于应用按服务名连接。
    • 示例:
      ORCL =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = ORCL)
          )
        )
      TEST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = TEST)
          )
        )
      
  • 验证监听:lsnrctl status 应能看到多个实例的 SERVICE(状态 READY 为动态注册;UNKNOWN 常见于静态注册)。

四 启动停止与日常运维

  • 启动顺序建议:先启动监听,再启动各实例;停止顺序相反。
    • 启动监听:lsnrctl start
    • 启动实例(两个实例示例):
      su - oracle
      export ORACLE_SID=ORCL
      sqlplus / as sysdba
      SQL> startup
      
      export ORACLE_SID=TEST
      sqlplus / as sysdba
      SQL> startup
      
    • 停止实例:
      export ORACLE_SID=TEST
      sqlplus / as sysdba
      SQL> shutdown immediate
      
  • 常用检查:
    • 查看当前实例:select instance_name from v$instance;
    • 查看监听状态:lsnrctl status(确认各实例 SERVICE/INSTANCE 状态)。

五 开机自启动与常见问题

  • 开机自启动(传统 SysV 方案,适用于 CentOS 6/7
    • 修改 $ORACLE_HOME/bin/dbstart:将 ORACLE_HOME_LISTNER=$1 改为 ORACLE_HOME_LISTNER=$ORACLE_HOME。
    • 修改 /etc/oratab:将需要自启的实例行末尾改为 Y,如:ORCL:/u01/app/oracle/product/12.1.0.2/db_1:Y。
    • /etc/rc.d/rc.local 增加(路径按实际调整):
      su - oracle -lc "$ORACLE_HOME/bin/lsnrctl start"
      su - oracle -lc "$ORACLE_HOME/bin/dbstart"
      
    • 赋予执行权限:chmod +x /etc/rc.d/rc.local;重启验证。
  • 常见问题
    • 连接串错误:确认 tnsnames.oraSERVICE_NAME 与数据库实际服务名一致,或使用 EZCONNECT:sqlplus sys/口令@//主机:1521/服务名 as sysdba。
    • 监听未发现实例:优先依赖 动态注册;确需静态注册时,按上文 listener.ora 示例添加 SID_DESC 并 reload 监听。
    • 实例未启动:以对应 ORACLE_SID 登录 sqlplus 执行 startup;必要时检查告警日志($ORACLE_BASE/diag/rdbms///trace/alert_.log)。

0