ORACLE数据库从WINDOWS环境迁移到LINUX环境并升级的方案步骤

  • 迁移概述

XX公司由于随着业务的不断发展,对XXX系统数据库的稳定性及性能的要求不断提升,需要将三套数据库迁移到LINUX环境,并将oracle数据库版本升级,来支持未来的业务高速增长和发展。

代维科技工程师在接到支持需求后,及时与各方沟通协调,目前先计划进行对XXX系统(DCYX)(X.X.X.161) 搭建DG到新服务器1生成ORCl实例,后续进行切换升级;后续再将XXX系统(有限)X.X.X.162 搭建DG到新服务器3生成ORCl实例,后续进行切换升级;最后在将XXX系统(稀土)X.X.X.163 搭建DG到新服务器3生成ORCl实例,后续进行切换升级;。结合 ORACLE 最佳实践及我司丰富的实施经验,我们整理本次迁移的操作方案。

  • 数据库迁移操作过程
    1. 原数据库配置信息

|----|----------|-----------|-------|----------|---------|---------|------|
| 序号 | 系统名(实例名) | 数据库IP信息 | 数据库架构 | 数据库版本 | 操作系统 | 数据量(GB) | 归档模式 |
| 1 | XXX系统 | X.X.X.161 | 单机 | 11.2.0.1 | Windows | 25G | 未开 |
| 2 | XXX系统 | X.X.X.162 | 单机 | 11.2.0.1 | Windows | 81G | 未开 |
| 3 | XXX系统 | X.X.X.163 | 单机 | 11.2.0.1 | Windows | 41G | 未开 |

    1. 迁移后数据库配置信息

|----|-----------|-----------|------------|--------------------------------|
| 序号 | 源系统名(实例名) | 源数据库IP信息 | 目标数据库(实例名) | 目标服务器 |
| 1 | XXX系统(AA) | X.X.X.161 | ORCL | 数据盘为100G,内存32G,CPU为8C的linux服务器 |
| 2 | XXX系统(A) | X.X.X.162 | ORCL | 数据盘为200G,内存32G,CPU为8C的linux服务器 |
| 3 | XXX系统(B) | X.X.X.163 | ORCL | 数据盘为150G,内存32G,CPU为8C的linux服务器 |

    1. 迁移方案

|----|---------|------------------------------|-------|--------|
| 序号 | 实施项目 | 实施内容 | 时间 | 是否中断业务 |
| 1 | 准备服务器 | 准备三台linux服务器,详细配置在迁移数据库配置信息中 | 已完成 | 否 |
| 2 | 环境搭建 | 搭建11.2.0.4版本的oracle数据库软件 | 已完成 | 否 |
| 3 | 归档开启 | 三套数据库生产环境归档开启 | 10min | 是 |
| 4 | DG搭建 | 搭建三套XXX系统的dg环境(备库为mount状态) | 2天 | 否 |
| 5 | 切换测试 | 将新服务器虚拟机创建快照,XXX系统()切主 | 20min | 否 |
| 6 | 数据库升级测试 | 将数据库11.2.0.1版本升级至11.2.0.4 | 40min | 否 |
| 7 | 业务测试 | 进行XXX系统(DCYX)测试是否可以兼容及正常使用 | 1天 | 否 |
| 8 | 测试回退 | 将虚拟机回退到快照时间点或重新搭建DG库 | 8h | 否 |
| 9 | DG切换 | XXX系统()切主 | 10min | 是 |
| 10 | 数据库升级 | 将数据库11.2.0.1版本升级至11.2.0.4 | 30min | 是 |
| 11 | IP切换 | 将业务IP切换到新服务器环境 | 5min | 是 |
| 12 | 验证数据库 | 验证XXX系统(DCYX)业务是否正常使用 | 0.5h | 否 |
| 13 | 切换测试 | 将新服务器虚拟机创建快照,XXX系统()切主 | 20min | 否 |
| 14 | 数据库升级测试 | 将数据库11.2.0.1版本升级至11.2.0.4 | 40min | 否 |
| 15 | 业务测试 | 进行XXX系统(有限)测试是否可以兼容及正常使用 | 1天 | 否 |
| 16 | 测试回退 | 将虚拟机回退到快照时间点或重新搭建DG库 | 8h | 否 |
| 17 | DG切换 | XXX系统()切主 | 10min | 是 |
| 18 | 数据库升级 | 将数据库11.2.0.1版本升级至11.2.0.4 | 30min | 是 |
| 19 | IP切换 | 将业务IP切换到新服务器环境 | 5min | 是 |
| 20 | 验证数据库 | 验证XXX系统(有限)业务是否正常使用 | 0.5h | 否 |
| 21 | 切换测试 | 将新服务器虚拟机创建快照,XXX系统()切主 | 20min | 否 |
| 22 | 数据库升级测试 | 将数据库11.2.0.1版本升级至11.2.0.4 | 40min | 否 |
| 23 | 业务测试 | 进行XXX系统()测试是否可以兼容及正常使用 | 1天 | 否 |
| 24 | 测试回退 | 将虚拟机回退到快照时间点或重新搭建DG库 | 8h | 否 |
| 25 | DG切换 | XXX系统()切主 | 10min | 是 |
| 26 | 数据库升级 | 将数据库11.2.0.1版本升级至11.2.0.4 | 30min | 是 |
| 27 | IP切换 | 将业务IP切换到新服务器环境 | 5min | 是 |
| 28 | 验证数据库 | 验证XXX系统()业务是否正常使用 | 0.5h | 否 |

  • 操作系统及数据库配置
    1. 设置内核参数

root@XXX \~# cat /etc/sysctl.conf

kernel.shmall = 16766992384

kernel.shmmax = 16766992384

fs.file-max = 6815744

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.aio-max-nr = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter = 2

net.ipv4.ip_local_port_range = 9000 65500

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

    1. 设置limit参数

root@XXX \~# cat /etc/security/limits.conf

oracle soft stack 10240

oracle soft nproc 32768

oracle hard nproc 65536

oracle soft nofile 65536

oracle hard nofile 65536

oracle soft memlock unlimited

oracle hard memlock unlimited

    1. 设置PAM参数

root@XXX \~# cat /etc/pam.d/login

添加如下:

session required pam_limits.so

root@XXX \~# cat /etc/profile

在文件末尾增加如下:

if $USER = "oracle" || $USER = "grid" ; then

if $SHELL = "/bin/ksh" ; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

umask 022

fi

    1. 设置ORACLE用户环境变量

oracle@XXX \~$ cat .bash_profile

.bash_profile

Get the aliases and functions

if -f \~/.bashrc ; then

. ~/.bashrc

fi

User specific environment and startup programs

PATH=PATH:HOME/.local/bin:$HOME/bin

export PATH

export ORACLE_BASE=/home/oracle/app

export ORACLE_HOME=/home/oracle/app/product/11.2.0/db_1

export ORACLE_SID=orcl

export PATH=ORACLE_HOME/bin:PATH

export PATH=ORACLE_HOME/bin:ORACLE_HOME/OPatch:$PATH

    1. 数据库参数检查及优化

检查数据库参数(去除_clusterwide_global_transactions=FALSE参数)

    1. 数据库tnsname.ora同步

将正式环境的tnsname.ora复制到备库环境。

    1. 监听连接及兼容参数检查

检查监听SERVICE状态。

检查兼容性参数

    1. 检查数据库文件路径

检查数据文件路径

检查控制文件路径

检查SPFILE路径

检查REDO日志文件

检查临时文件路径

检查归档日志路径

    1. 数据库同步状态检查

查看ALERT日志

查看数据库同步进程状态

select process,status,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby;

    1. 数据库切换步骤

|--------|-------------------------------------------------------------------------------------------------|
| 步骤 | 主要操作内容 |
| 1.1 | 主备确认已是实时同步,若不同步,手工处理至同步 |
| 1.2 | 主数据库端执行: SELECT SWITCHOVER_STATUS FROM VDATABASE; 当以上查询结果为TO STANDBY或者SESSIONS ACTIVE时,执行1.3步骤 | | 1.3 | 主数据库端执行: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; | | 1.4 | 主数据库端执行: SHUTDOWN immediate STARTUP MOUNT | | 1.5 | 备数据库端执行: SELECT SWITCHOVER_STATUS FROM VDATABASE; 当以上查询结果为TO PRIMARY或者SESSIONS ACTIVE时,执行1.6步骤 |
| 1.6 | 备数据库端执行: 激活DG备机 SQL> alter database activate standby database; |
| 1.7 | 备数据库端执行: ALTER DATABASE OPEN; |

主库开启日志同步

SQL> alter system set log_archive_dest_state_2=enable;

System altered

备库启动DG日志应用

在备库MOUNT状态下执行如下命令:

开启数据同步:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.

SQL> select process,status,thread#,sequence#,block# from v$managed_standby;

PROCESS STATUS THREAD# SEQUENCE# BLOCK#


ARCH CONNECTED 0 0 0

ARCH CONNECTED 0 0 0

ARCH CONNECTED 0 0 0

ARCH CLOSING 1 41738 2048

MRP0 APPLYING_LOG 1 41739 391

RFS IDLE 0 0 0

RFS IDLE 1 41739 391

RFS IDLE 0 0 0

RFS IDLE 0 0 0

9 rows selected.

SQL> /

PROCESS STATUS THREAD# SEQUENCE# BLOCK#


ARCH CONNECTED 0 0 0

ARCH CONNECTED 0 0 0

ARCH CONNECTED 0 0 0

ARCH CLOSING 1 41738 2048

MRP0 APPLYING_LOG 1 41739 409

RFS IDLE 0 0 0

RFS IDLE 1 41739 409

RFS IDLE 0 0 0

RFS IDLE 0 0 0

9 rows selected.

检查兼容性参数及监听连接tnsnames.ora

  • 数据库升级
    1. 进行数据库升级

运行升级脚本:--注意使用稳定的网络
SQL> @?/rdbms/admin/catupgrd.sql

SQL> @?/rdbms/admin/utlrp.sql 编译失效对象

6.重启正常open打开,open模式下运行脚本:

@?/rdbms/admin/catuppst.sql

7 .升级后检查组件有效性脚本:

@?/rdbms/admin/utlu112s.sql

      1. 数据库升级后的检查

SQL> select open_mode,name,DATABASE_ROLE from v$database;

OPEN_MODE NAME DATABASE_ROLE


READ WRITE MLHBDB PRIMARY

SQL> set linesize 180 pagesize 1000

SQL> col comp_name for a40

SQL> col status for a15

SQL> col version for a15

SQL> select comp_name,status,version from dba_server_registry;

COMP_NAME STATUS VERSION


OWB VALID 11.2.0.1.0

Oracle Application Express VALID 3.2.1.00.10

Oracle Enterprise Manager VALID 11.2.0.4.0

OLAP Catalog VALID 11.2.0.4.0

Spatial VALID 11.2.0.4.0

Oracle Multimedia VALID 11.2.0.4.0

Oracle XML Database VALID 11.2.0.4.0

Oracle Text VALID 11.2.0.4.0

Oracle Expression Filter VALID 11.2.0.4.0

Oracle Rules Manager VALID 11.2.0.4.0

Oracle Workspace Manager VALID 11.2.0.4.0

Oracle Database Catalog Views VALID 11.2.0.4.0

Oracle Database Packages and Types VALID 11.2.0.4.0

JServer JAVA Virtual Machine VALID 11.2.0.4.0

Oracle XDK VALID 11.2.0.4.0

Oracle Database Java Packages VALID 11.2.0.4.0

OLAP Analytic Workspace VALID 11.2.0.4.0

Oracle OLAP API VALID 11.2.0.4.0

18 rows selected.

SQL> select * from v$version;

BANNER


Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE 11.2.0.4.0 Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 - Production

SQL> set linesize 200

SQL> col VERSION for a15

SQL> col ACTION for a15

SQL> col NAMESPACE for a15

SQL> col COMMENTS for a30

SQL> col ACTION_TIME for a30

SQL> select action_time,action,id,version,comments from dba_registry_history;

ACTION_TIME ACTION ID VERSION COMMENTS


16-JUN-25 06.05.54.515076 PM VIEW INVALIDATE 8289601 view invalidation

16-JUN-25 06.05.54.534317 PM UPGRADE 11.2.0.4.0 Upgraded from 11.2.0.1.0

16-JUN-25 06.06.46.456025 PM APPLY 0 11.2.0.4 Patchset 11.2.0.2.0

oracle@XXX \~$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 16-JUN-2025 18:07:37

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

STATUS of the LISTENER


Alias LISTENER

Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production

Start Date 16-JUN-2025 10:54:42

Uptime 0 days 7 hr. 12 min. 54 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File /u01/app/oracle/diag/tnslsnr/XXX/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.12.222)(PORT=1521)))

Services Summary...

Service "MLHBDBDR" has 1 instance(s).

Instance "mlhbdb", status READY, has 1 handler(s) for this service...

Service "mlhbdb" has 2 instance(s).

Instance "mlhbdb", status UNKNOWN, has 1 handler(s) for this service...

Instance "mlhbdb", status READY, has 1 handler(s) for this service...

Service "mlhbdbXDB" has 1 instance(s).

Instance "mlhbdb", status READY, has 1 handler(s) for this service...

The command completed successfully

  • 迁移后保障

数据库迁移完成后,需要进行持续的数据库运行状态监控、性能监控。

同时需要再进行如下配置:

      1. 数据库rman备份

参照原有配置,设置每天的rman备份。

      1. 数据库容灾检查

检查数据库容灾同步情况,保证数据库容灾可以实时同步,支持只读报表业务。

      1. 数据库性能监控

持续监控数据库运行情况,包括硬件资源的使用率,以及数据库性能指标。

  • 异常回退预案

本次项目中的数据库迁移时,现有生产环境在迁移前后都会进行保留**(可通过网络物理隔离等多种方式,在数据同步及数据库升级阶段,对原WINDOWS环境** 物流 数据库均不做操作,只需要正常关闭数据库即可。在IP修改阶段,需要关闭或更换原WINDOWS环境 物流 **数据库主机的IP);**同时在数据库迁移前,我们也会进行大量的迁移测试工作,结合我们丰富的数据库迁移等支持经验,提前做出一些可能风险的预测和制定相应解决方案,基本可以确保迁移过程的可控,完成预定的操作。考虑到一些特殊因素可能引起不可预知的问题,因此针对数据库迁移过程中可能出现的操作超时、其它原因导致的迁移失败等情形,我们也制定出如下的回退方案:

1、若迁移操作的时间超过了预定的停机时间窗口,可以立即中断数据库迁移过程;由于现有生产环境数据库在迁移操作时,并未进行任务操作,只是处于数据库关闭状态。因此可以直接启动原有生产环境数据库,启动应用程序即可。

2、如果迁移过程中出现了其它操作,并且经数据库支持人员判断无法在规定停机时间解决,也需要进行回退;回退方法与上一种情况类似,直接启用原有生产环境数据库即可。

3.如果迁移完成后,业务系统在新的目标生产环境已经运行一段时间并产生新的业务数据;若此时数据库、应用运行异常,此场景不建议进行回退;建议按照正常运维及故障处理流程,组织应用及数据库方面专家解决问题。

相关推荐
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz5 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰9 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst9 小时前
数据库知识点
数据库
雪的季节9 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s10 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)11 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick199311 小时前
索引的排序和分组
数据库·mysql
爱莉希雅&&&11 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
JohnYan11 小时前
工作笔记 - PG分组极值
数据库·后端·postgresql