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. 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. 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. 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. 1. ******数据库参数检查及优化****** 检查数据库参数(去除_clusterwide_global_transactions=FALSE参数) 1. 1. ******数据库tnsname.ora同步****** 将正式环境的tnsname.ora复制到备库环境。 1. 1. ******监听连接及兼容参数检查****** 检查监听SERVICE状态。 检查兼容性参数 1. 1. ******检查数据库文件路径****** 检查数据文件路径 检查控制文件路径 检查SPFILE路径 检查REDO日志文件 检查临时文件路径 检查归档日志路径 1. 1. ******数据库同步状态检查****** 查看ALERT日志 查看数据库同步进程状态 select process,status,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby; 1. 1. ******数据库切换步骤****** |--------|-------------------------------------------------------------------------------------------------| | **步骤** | **主要操作内容** | | 1.1 | 主备确认已是实时同步,若不同步,手工处理至同步 | | 1.2 | 主数据库端执行: SELECT SWITCHOVER_STATUS FROM V$DATABASE; 当以上查询结果为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 V$DATABASE; 当以上查询结果为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. 1. 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. 1. 1. **数据库rman备份** 参照原有配置,设置每天的rman备份。 1. 1. 1. **数据库容灾检查** 检查数据库容灾同步情况,保证数据库容灾可以实时同步,支持只读报表业务。 1. 1. 1. **数据库性能监控** 持续监控数据库运行情况,包括硬件资源的使用率,以及数据库性能指标。 * **异常回退预案** 本次项目中的数据库迁移时,现有生产环境在迁移前后都会进行保留**(可通过网络物理隔离等多种方式,在数据同步及数据库升级阶段,对原WINDOWS环境** **物流** **数据库均不做操作,只需要正常关闭数据库即可。在IP修改阶段,需要关闭或更换原WINDOWS环境** **物流** **数据库主机的IP);**同时在数据库迁移前,我们也会进行大量的迁移测试工作,结合我们丰富的数据库迁移等支持经验,提前做出一些可能风险的预测和制定相应解决方案,基本可以确保迁移过程的可控,完成预定的操作。考虑到一些特殊因素可能引起不可预知的问题,因此针对数据库迁移过程中可能出现的操作超时、其它原因导致的迁移失败等情形,我们也制定出如下的回退方案: 1、若迁移操作的时间超过了预定的停机时间窗口,可以立即中断数据库迁移过程;由于现有生产环境数据库在迁移操作时,并未进行任务操作,只是处于数据库关闭状态。因此可以直接启动原有生产环境数据库,启动应用程序即可。 2、如果迁移过程中出现了其它操作,并且经数据库支持人员判断无法在规定停机时间解决,也需要进行回退;回退方法与上一种情况类似,直接启用原有生产环境数据库即可。 3.如果迁移完成后,业务系统在新的目标生产环境已经运行一段时间并产生新的业务数据;若此时数据库、应用运行异常,此场景不建议进行回退;建议按照正常运维及故障处理流程,组织应用及数据库方面专家解决问题。

相关推荐
Absurd5872 小时前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
2301_764150562 小时前
HTML5中结合IDBKeyRange限制游标扫描的数据范围
jvm·数据库·python
Polar__Star2 小时前
mysql如何快速判断两个数据库结构差异_使用mysqldiff工具.txt
jvm·数据库·python
雪碧聊技术2 小时前
mysql表级锁的介绍
数据库·mysql
weixin_424999362 小时前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python
升鲜宝供应链及收银系统源代码服务2 小时前
系统菜单与按钮国际化升鲜宝多语言数据库设计演进对比文档(一)
数据库·多语言·生鲜配送·生鲜供应链管理系统·门店收银
2401_835956812 小时前
PHP函数怎样读取CPU频率实时数据_PHP监控处理器主频变化【操作】
jvm·数据库·python
Greyson12 小时前
JavaScript中类属性与原型属性的覆盖规则详解
jvm·数据库·python
海棠蚀omo2 小时前
从概念到实战:手把手带你吃透 MySQL 事务核心原理
数据库·mysql