==========================================
Oracle 11.2.0.1 升级到 11.2.0.4
主库: 192.168.100.73
备库: 192.168.100.74
==========================================
==========================================
一、升级前检查
==========================================
-- 1.1 检查当前版本
select * from v$version;
-- 1.2 检查组件状态
select comp_name, version, status from dba_registry;
-- 1.3 检查归档模式 (确保归档开启)
archive log list;
-- 1.4 检查备库状态
-- 备库执行
select status, open_mode, database_role from v$database;
select process, status from v$managed_standby;
==========================================
二、停止Data Guard
==========================================
-- 2.1 停止备库MRP (备库执行)
set ORACLE_SID=orcldg
sqlplus / as sysdba
alter database recover managed standby database cancel;
shutdown immediate;
exit;
-- 2.2 停止主库
sqlplus / as sysdba
shutdown immediate;
exit;
==========================================
三、备份数据库 (在主库执行)
==========================================
-- 3.1 备份控制文件
rman target /
backup current controlfile format 'C:\app\Administrator\backup\control_%d_%s.bak';
-- 3.2 备份参数文件
create pfile='C:\app\Administrator\backup\initorcl_bak.ora' from spfile;
-- 3.3 备份数据文件 (可选,若有足够空间)
backup database format 'C:\app\Administrator\backup\full_%d_%s.bak';
==========================================
四、安装11.2.0.4软件
==========================================
-- 4.1 下载安装包
-- p13390677_112040_MSWIN-x86-64_1of7.zip (基础数据库软件,必需)
-- p13390677_112040_MSWIN-x86-64_2of7.zip (示例数据库,可选)
-- p13390677_112040_MSWIN-x86-64_3of7.zip (客户端,可选)
-- p6880880_112000_MSWIN-x86-64.zip (Opatch最新版本)
-- 4.2 在主库服务器上安装Oracle 11.2.0.4软件
-- 安装到新目录: C:\app\Administrator\product\11.2.0\dbhome_2
-- 4.3 在备库服务器上安装Oracle 11.2.0.4软件
-- 安装到相同路径: C:\app\Administrator\product\11.2.0\dbhome_2
-- 4.3 配置新HOME的监听 (主备库执行)
-- 复制tnsnames.ora到新目录的network/admin下
==========================================
五、升级主库
==========================================
-- 5.1 设置新ORACLE_HOME环境变量
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set ORACLE_SID=orcl
set PATH=%ORACLE_HOME%\bin;%PATH%
本次卡住了,到配置监听这一步了。
关闭当前窗口
打开新的CMD,进入新软件目录配置监听
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
netca
然后检查软件是否安装成功:
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
sqlplus / as sysdba
如果能正常运行,说明软件已安装成功,只是监听没配置而已。
-- 然后再运行DBUA
dbua
-- 5.2 使用DBUA升级 (推荐方式)
-- 关闭原数据库后运行:
cd %ORACLE_HOME%\bin
dbua
-- 或使用手动升级 (备选方式):
sqlplus / as sysdba
shutdown immediate;
exit;
-- 然后手动升级:
cd %ORACLE_HOME%\bin
sqlplus / as sysdba
startup upgrade;
@?/rdbms/admin/catupgrd.sql
-- 5.3 升级后检查
select * from v$version;
select comp_name, version, status from dba_registry;
-- 5.4 重新编译失效对象
@?/rdbms/admin/utlrp.sql
-- 5.5 开启归档 (如果之前未开启)
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
-- 5.6 检查并启用归档传输到备库
select dest_id, status, target from v$archive_dest;
-- 如果DEST 2状态是DEFERRED,需要启用:
alter system set log_archive_dest_state_2=ENABLE scope=both;
-- 5.7 强制日志切换测试
alter system switch logfile;
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
==========================================
六、升级备库
==========================================
-- 6.1 复制必要文件到新目录 (备库执行)
xcopy /E /Y C:\app\Administrator\product\11.2.0\dbhome_1\database\* C:\app\Administrator\product\11.2.0\dbhome_2\database\
-- 6.2 设置新环境变量
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set ORACLE_SID=orcldg
set PATH=%ORACLE_HOME%\bin;%PATH%
-- 6.3 删除旧服务,创建新服务 (如需要)
oradim -DELETE -SID orcldg
oradim -NEW -SID orcldg
-- 6.4 启动备库到mount状态 (新软件会自动跟随主库升级)
sqlplus / as sysdba
startup mount;
-- 6.5 启动MRP (备库会自动通过同步完成升级)
alter database recover managed standby database disconnect from session;
-- 6.6 检查状态 (等待同步完成后版本会自动变成11.2.0.4.0)
select * from v$version;
select open_mode, database_role from v$database;
select process, status from v$managed_standby;
-- 6.7 验证组件
select comp_name, version, status from dba_registry;
==========================================
七、验证Data Guard
==========================================
-- 7.1 主库执行日志切换
sqlplus / as sysdba
alter system switch logfile;
-- 7.2 备库检查
select sequence#, applied from v$archived_log order by sequence# desc;
-- 7.3 检查Data Guard状态
select database_role, protection_mode, protection_level from v$database;
-- 7.4 检查同步进程状态
select process, status, sequence# from v$managed_standby;
-- 7.5 检查延迟
select name, value from v$dataguard_stats;
==========================================
八、配置新版本监听 (可选)
==========================================
-- 8.1 更新listener.ora使用新ORACLE_HOME
-- 主库
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_2)
(SID_NAME = orcl)
)
)
-- 备库
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldg)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_2)
(SID_NAME = orcldg)
)
)
-- 8.2 重启监听
lsnrctl stop
lsnrctl start
==========================================
九、升级后检查
==========================================
-- 检查版本
select * from v$version;
-- 检查组件
select comp_name, version, status from dba_registry;
-- 检查数据文件
select name, file#, status from v$datafile;
-- 检查日志
select group#, sequence#, status, bytes from v$log;
-- 检查备库同步
select * from v$archive_gap;
select sequence#, applied from v$archived_log order by sequence# desc;
-- 检查Data Guard状态
select open_mode, database_role, log_mode from v$database;
select process, status, sequence# from v$managed_standby;
select name, value from v$dataguard_stats;
==========================================
十、升级失败回退方案
==========================================
-- 如果升级失败,可以按以下步骤回退到11.2.0.1
-- 10.1 停止备库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_1
set ORACLE_SID=orcldg
set PATH=%ORACLE_HOME%\bin;%PATH%
sqlplus / as sysdba
shutdown immediate;
exit;
-- 10.2 停止主库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_1
set ORACLE_SID=orcl
set PATH=%ORACLE_HOME%\bin;%PATH%
sqlplus / as sysdba
shutdown immediate;
exit;
-- 10.3 恢复参数文件 (从备份)
rman target /
restore spfile from pfile='C:\app\Administrator\backup\initorcl_bak.ora';
-- 10.4 使用旧软件启动数据库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_1
set ORACLE_SID=orcl
set PATH=%ORACLE_HOME%\bin;%PATH%
sqlplus / as sysdba
startup;
-- 10.5 恢复备库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_1
set ORACLE_SID=orcldg
set PATH=%ORACLE_HOME%\bin;%PATH%
-- 删除新服务,创建旧服务
oradim -DELETE -SID orcldg
oradim -NEW -SID orcldg
-- 使用旧软件启动备库
sqlplus / as sysdba
startup mount;
alter database recover managed standby database disconnect from session;
-- 10.6 验证回退
select * from v$version;
select open_mode, database_role from v$database;
==========================================
十一、升级成功后的常规操作
==========================================
-- 11.1 删除旧软件 (可选,确认升级成功后再操作)
-- 确保新软件正常运行后再删除旧软件目录
-- 11.2 更新客户端连接
-- 客户端连接时可能会自动选择新版本,或更新tnsnames.ora指向新端口
-- 11.3 定期检查Data Guard状态
select open_mode, database_role from v$database;
select process, status from v$managed_standby;
select name, value from v$dataguard_stats;
==========================================
==========================================
十二、升级后打补丁 (Windows Bundle Patch)
==========================================
-- 12.1 下载补丁
-- 补丁号: 31659823 (11.2.0.4.201020)
-- 需要下载: p31659823_112040_MSWIN-x86-64.zip
-- 12.2 检查OPatch版本 (需要11.2.0.3.5或更高)
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set PATH=%ORACLE_HOME%\bin;%PATH%
opatch version
-- 如需更新OPatch (当前版本太旧)
-- 下载: p6880880_112000_MSWIN-x86-64.zip
-- 解压覆盖OPatch目录
-- 或者直接运行:
xcopy /E /Y C:\6880880\OPatch\* C:\app\Administrator\product\11.2.0\dbhome_2\OPatch\
==========================================
十二、打补丁前提条件和注意事项
==========================================
-- 前提条件:
-- 1. OPatch版本必须 >= 11.2.0.3.5
-- 2. Oracle数据库版本必须是11.2.0.4.0 (已安装11.2.0.4软件)
-- 3. current_scn < 15169738620928 (查询: select current_scn from v$database;)
-- 4. 必须先安装: Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC
-- - 下载: vcredist_x64.exe 或 vcredist2005sp1_x64.exe
-- - 安装后再执行opatch apply
-- 注意事项:
-- 1. 必须完全停止所有Oracle服务,包括:
-- - 所有Oracle数据库实例: net stop OracleServiceORCL
-- - 所有Oracle监听器: net stop "OracleOraDb11g_home1TNSListener"
-- - OracleRemExecService: net stop OracleRemExecService
-- - OracleMTSRecoveryService: net stop OracleMTSRecoveryService
-- - msdtc (分布式事务协调器): net stop msdtc
-- - winmgmt (Windows管理工具,需禁用并停止):
-- sc config Winmgmt start= disabled
-- net stop winmgmt
-- - 如果遇到 "CheckActiveFilesAndExecutables" 错误,需要:
-- tasklist | findstr oracle
-- taskkill /F /IM oracle.exe
-- 2. 打补丁顺序: 主库先打,打完后备库再打
-- 3. 打补丁后必须执行: @catbundle.sql PSU apply
-- 4. 打好补丁后需要重启系统
==========================================
十二、打补丁步骤 (继续)
==========================================
-- 12.3 停止Data Guard
-- 备库执行
set ORACLE_SID=orcldg
sqlplus / as sysdba
alter database recover managed standby database cancel;
shutdown immediate;
exit;
-- 主库执行
set ORACLE_SID=orcl
sqlplus / as sysdba
shutdown immediate;
exit;
-- 主库执行
set ORACLE_SID=orcl
sqlplus / as sysdba
shutdown immediate;
exit;
-- 停止监听
lsnrctl stop
-- 停止msdtc服务 (Windows)
net stop msdtc
-- 12.4 打补丁 (主库执行)
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set PATH=%ORACLE_HOME%\bin;%PATH%
-- 解压补丁
cd C:\31659823
-- 执行补丁
opatch apply
-- 12.5 打补丁 (备库执行)
-- 先复制补丁到备库相同目录
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set PATH=%ORACLE_HOME%\bin;%PATH%
cd C:\31659823
opatch apply
-- 12.6 启动数据库和监听
-- 主库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set ORACLE_SID=orcl
set PATH=%ORACLE_HOME%\bin;%PATH%
lsnrctl start
sqlplus / as sysdba
startup;
exit;
-- 备库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set ORACLE_SID=orcldg
set PATH=%ORACLE_HOME%\bin;%PATH%
sqlplus / as sysdba
startup mount;
alter database recover managed standby database disconnect from session;
exit;
-- 12.7 运行catbundle.sql加载SQL文件
-- 主库执行
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set ORACLE_SID=orcl
set PATH=%ORACLE_HOME%\bin;%PATH%
cd %ORACLE_HOME%\rdbms\admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> @catbundle.sql PSU apply
SQL> QUIT
-- 12.8 验证补丁安装成功
opatch lsinventory
select * from v$version;
select patch_id, patch_description, status from dba_registry_patch;
-- 12.9 检查Data Guard状态
-- 主库
alter system switch logfile;
-- 备库
select sequence#, applied from v$archived_log order by sequence# desc;
select process, status from v$managed_standby;
select name, value from v$dataguard_stats;
==========================================
十三、补丁回退 (如需回退)
==========================================
-- 13.1 停止数据库和监听
-- 主库
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
set ORACLE_SID=orcl
set PATH=%ORACLE_HOME%\bin;%PATH%
sqlplus / as sysdba
shutdown immediate;
exit;
lsnrctl stop
-- 备库
set ORACLE_SID=orcldg
sqlplus / as sysdba
shutdown immediate;
exit;
-- 13.2 回退补丁
set ORACLE_HOME=C:\app\Administrator\product\11.2.0\dbhome_2
cd 31659823
opatch rollback -id 31659823
-- 备库相同操作
opatch rollback -id 31659823
-- 13.3 运行回退脚本
-- 主库
cd %ORACLE_HOME%\rdbms\admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> @catbundle_PSU_<SID>_ROLLBACK.sql
SQL> QUIT
-- 13.4 启动数据库
lsnrctl start
sqlplus / as sysdba
startup;