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