Oracle 多实例配置操作笔记
1. Oracle 11gR2 (11204) 多实例配置
1.1 环境准备
1.1.1 系统要求检查
free -g
df -h
echo $ORACLE_HOME
echo $ORACLE_BASE
1.1.2 创建必要的目录结构
mkdir -p /u01/app/oracle/admin/ORCL2/{adump,bdump,cdump,dpdump,pfile,udump}
mkdir -p /u01/app/oracle/oradata/ORCL2
mkdir -p /u01/app/oracle/fast_recovery_area/ORCL2
1.2 创建密码文件
cd $ORACLE_HOME/dbs
orapwd file=orapwORCL2 password=your_password entries=5
1.3 创建参数文件
1.3.1 复制并修改参数文件
cp $ORACLE_HOME/dbs/initORCL1.ora $ORACLE_HOME/dbs/initORCL2.ora
1.3.2 修改参数文件内容
db_name='ORCL2'
instance_name='ORCL2'
db_domain=''
control_files=('/u01/app/oracle/oradata/ORCL2/control01.ctl','/u01/app/oracle/fast_recovery_area/ORCL2/control02.ctl')
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
memory_target=1G
processes=150
audit_file_dest='/u01/app/oracle/admin/ORCL2/adump'
audit_trail='db'
db_block_size=8192
db_domain=''
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCL2XDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
compatible='11.2.0.4.0'
1.4 创建实例
1.4.1 设置环境变量
export ORACLE_SID=ORCL2
1.4.2 启动实例到nomount状态
sqlplus / as sysdba
STARTUP NOMOUNT PFILE='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initORCL2.ora';
1.4.3 执行CREATE DATABASE命令
CREATE DATABASE ORCL2
USER SYS IDENTIFIED BY your_password
USER SYSTEM IDENTIFIED BY your_password
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/ORCL2/redo01.log') SIZE 100M,GROUP 2 ('/u01/app/oracle/oradata/ORCL2/redo02.log') SIZE 100M,GROUP 3 ('/u01/app/oracle/oradata/ORCL2/redo03.log') SIZE 100M
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXLOGHISTORY 100
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/ORCL2/system01.dbf'SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/ORCL2/sysaux01.dbf'SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE usersDATAFILE '/u01/app/oracle/oradata/ORCL2/users01.dbf'SIZE 50M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempTEMPFILE '/u01/app/oracle/oradata/ORCL2/temp01.dbf'SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1DATAFILE '/u01/app/oracle/oradata/ORCL2/undotbs01.dbf'SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;
1.5 创建数据字典和必要对象
1.5.1 运行数据字典脚本
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/help/hlpbld.sql helpus.sql
@?/sqlplus/admin/pupbld.sql
1.5.2 创建SPFILE
CREATE SPFILE FROM PFILE='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initORCL2.ora';
SHUTDOWN IMMEDIATE
STARTUP
1.6 配置监听器
1.6.1 修改listener.ora
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = ORCL1)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME = ORCL1))(SID_DESC =(GLOBAL_DBNAME = ORCL2)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME = ORCL2)))
1.6.2 重启监听器
lsnrctl stop
lsnrctl start
1.7 创建网络服务名
1.7.1 修改tnsnames.ora
ORCL2 =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORCL2)))
1.8 验证多实例配置
1.8.1 检查实例状态
sqlplus sys/your_password@ORCL1 as sysdba
SELECT instance_name, status, database_status FROM v$instance;sqlplus sys/your_password@ORCL2 as sysdba
SELECT instance_name, status, database_status FROM v$instance;
1.8.2 检查监听器状态
lsnrctl status
2. Oracle 19c 多实例配置区别
2.1 架构变化
2.1.1 多租户架构
CREATE DATABASE ORCL2
USER SYS IDENTIFIED BY your_password
USER SYSTEM IDENTIFIED BY your_password
ENABLE PLUGGABLE DATABASE
SEED
SYSTEM TABLESPACE SYSTEM DATAFILE '/u01/app/oracle/oradata/ORCL2/seed_system01.dbf' SIZE 325M REUSE AUTOEXTEND ON
SYSAUX DATAFILE '/u01/app/oracle/oradata/ORCL2/seed_sysaux01.dbf' SIZE 550M REUSE AUTOEXTEND ON
UNDO TABLESPACE undotbs1 DATAFILE '/u01/app/oracle/oradata/ORCL2/seed_undotbs01.dbf' SIZE 125M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE temp TEMPFILE '/u01/app/oracle/oradata/ORCL2/seed_temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/ORCL2/redo01.log') SIZE 200M,GROUP 2 ('/u01/app/oracle/oradata/ORCL2/redo02.log') SIZE 200M,GROUP 3 ('/u01/app/oracle/oradata/ORCL2/redo03.log') SIZE 200M
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/ORCL2/system01.dbf'SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/ORCL2/sysaux01.dbf'SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE usersDATAFILE '/u01/app/oracle/oradata/ORCL2/users01.dbf'SIZE 50M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempTEMPFILE '/u01/app/oracle/oradata/ORCL2/temp01.dbf'SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1DATAFILE '/u01/app/oracle/oradata/ORCL2/undotbs01.dbf'SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;
2.2 参数文件差异
2.2.1 19c特定参数
db_name='ORCL2'
db_unique_name='ORCL2'
enable_pluggable_database=true
pdb_name='ORCL2_PDB1'
2.3 创建PDB
2.3.1 在CDB中创建PDB
ALTER SESSION SET CONTAINER = CDB$ROOT;
CREATE PLUGGABLE DATABASE ORCL2_PDB1
ADMIN USER pdbadmin IDENTIFIED BY password
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/ORCL2/pdbseed/','/u01/app/oracle/oradata/ORCL2/ORCL2_PDB1/');
ALTER PLUGGABLE DATABASE ORCL2_PDB1 OPEN;
2.4 服务注册差异
2.4.1 19c服务注册
SELECT name, pdb FROM v$services;
2.5 内存管理改进
2.5.1 19c内存参数
memory_target=2G
sga_target=0
pga_aggregate_target=0
2.6 配置差异总结
特性 | Oracle 11gR2 | Oracle 19c |
---|
数据库架构 | 非CDB | CDB+PDB(默认) |
实例创建 | CREATE DATABASE | CREATE DATABASE + CREATE PLUGGABLE DATABASE |
内存管理 | SGA_TARGET + PGA_AGGREGATE_TARGET | MEMORY_TARGET(推荐) |
服务注册 | 手动配置监听器 | 自动服务注册 |
参数文件 | 基本相同,新增CDB相关参数 | 新增CDB/PDB相关参数 |
目录结构 | 传统目录结构 | 支持PDB文件隔离 |
3. 常见问题排查
3.1 连接问题
lsnrctl status
tnsping ORCL2
iptables -L
3.2 实例启动问题
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';
SELECT instance_name, status FROM v$instance;
3.3 权限问题
SELECT * FROM dba_directories;
SELECT * FROM dba_sys_privs WHERE grantee = 'SYSTEM';
4. 维护操作
4.1 备份策略
rman target /
BACKUP DATABASE PLUS ARCHIVELOG;
4.2 监控脚本
SELECT inst_id, instance_name, host_name, status, database_status
FROM gv$instance;