【Oracle不停库迁移, 迁移完成无法启动】

MD@Oracle不停库迁移, 迁移完成无法启动

Oracle不停库迁移, 迁移完成无法启动

说明: 1. 在企业上云的大背景下, 自建数据库迁移到云服务器内, 场景较为常见。本文意在解决Oracle迁移到云服务器内,无法启动的问题。

  1. 用云厂商的迁移服务(如, 华为云SMS),迁移到云服务器上, 目的端会重启。

  2. 该文档可解决Oracle故障码: ORA-00214, ORA-00742, ORA-00312, ORA-01547, ORA-01152, ORA-01110, ORA-01194, ORA-00279, ORA-00289, ORA-00280, ORA-01507

1. 启动监听

复制代码
(1) 检查监听器状态
[oracle@sjclinux ~]$ lsnrctl status
(2) 启动监听器
[oracle@sjclinux ~]$ lsnrctl start
(3) 停止监听器
[oracle@sjclinux ~]$ lsnrctl stop

2. 调整控制文件ctl一致 (ORA-00214)

ORA-00214: control file '/.../control02.ctl'version 906 inconsistent with file '/.../control01.ctl'
问题描述 :启动Oracle实例时显示错误, SQL> startup;
问题分析 :该故障码是说控制文件版本不一致。控制文件原理为维护数据库的当前物理状态,为二进制文件,数据库打开的时候控制文件一致变化。主要记录数据库名字、标示、当前日志SCN、表空间信息等。理论上3个控制文件应该一致。
解决办法 :备份control01.ctl,复制一个control02.ctl改名为control01.ctl,直接根据报错信息找文件位置即可。
脚本语句oracle@sjclinux \~$ cp /oracledata/fast_recovery_area/XXXXX/control02.ctl /oracledata/oradata/XXXXX/control01.ctl
尝试启动,sqlplus登录后, SQL> startup, 如果启动成功不用继续

3. 调整日志文件log一致 (ORA-00742) , 重置redolog

3.1 接上面的尝试启动, 如果出现以下报错:

ORA-00742: Log read detects lost write in thread 1 sequence 1202 block 137840

ORA-00312: online log 18 thread 1: '/u01/app/oracle/oradata/orcl/redo18.log'
问题分析 :迁移服务器,目的端会需要重新启动,若正好有业务在运行,相当于宕机。数据库本身应当支持这样的宕机恢复,不必担心。
解决办法 :尝试recover (可能会失败, 失败继续往下)
脚本语句

SQL> RECOVER DATABASE UNTIL CANCEL; //尝试recover

3.2 如果尝试启动, 出现以下报错

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误

ORA-01152: 文件 1 没有从过旧的备份中还原

ORA-01110: 数据文件 1: '/oracle/oradata/orcl/system01.dbf'
问题分析 :很明显控制文件中的scn没赶上数据文件和数据头文件中的变化 然后尝试不玩全恢复
解决办法 :尝试重置日志 (可能会失败, 失败继续往下)
脚本语句 :SQL> alter database open resetlogs; //一般情况下到这里就能启动
3.3 接上一步, 如果尝试启动, 又出现以下报错

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
问题分析 :基本可以确定是日志的问题
脚本语句

SQL> recover database using backup controlfile until cancel;

ORA-00279: change 669109 generated at 09/12/2009 18:47:00 needed for thread 1

ORA-00289: suggestion :

/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2009_09_13/o1_mf_1_10_%u_.ar

c

ORA-00280: change 669109 for thread 1 is in sequence #10

Specify log: {=suggested | filename | AUTO | CANCEL}
继续执行 :输入CANCEL

根据上面提示的内容,注意到 'change 669109 ' 和 'sequence #10',执行以下语句,可以查出redo logs ,注意要用sys:

SQL> conn sys/oracle as sysdba

Connected.

SQL> select v1.group#, member, sequence#, first_change# from v l o g v 1 , v log v1, v logv1,vlogfile v2 where v1.group# = v2.group#;
情况描述 :从结果里根据 sequence# 和 first_change# 找到了要用到的log file name:

/u01/app/oracle/oradata/orcl/redo03.log。在 Specify log: {=suggested | filename | AUTO | CANCEL} 下面输入:

/u01/app/oracle/oradata/orcl/redo03.log
弹出提示

Log applied.

Media recovery complete.
再重置logs

SQL> alter database open resetlogs;

Database altered.

看到Database altered, 说明基本解决。

4. 相关命令

bash 复制代码
4.1 sqlplus:用于登录sqlplus
[oracle@sjclinux ~]$ sqlplus sys/oracle as sysdba;

4.2.1 启动数据库
SQL> startup;

4.2.2 启动数据库, 并mount, 
解决: ORA-01507: database not mounted
SQL> startup mount;

4.3 关闭数据库
SQL> shutdown immediate;

4.4 强制关闭数据库
SQL> SHUTDOWN ABORT;

4.5 创建pfile
create pfile from spfile;

4.6 创建spfile
create spfile from pfile;

4.7 退出
SQL> exit;
相关推荐
努力的小雨1 小时前
sys_basebackup 适合什么场景,先看恢复目标
数据库
这个DBA有点耶2 小时前
Redis大key“根治”指南:拆分策略与数据结构选型
数据库·mysql·架构
程序员与背包客_CoderZ2 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
进击的_鹏2 小时前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
隔窗听雨眠2 小时前
当KES遇到多租户:金仓数据库多租户架构的隔离实践与部署指南
数据库·架构
JOker_Chu_2 小时前
知识图谱详解:从图结构、关系建模到查询与应用
数据库·知识图谱·database·neo4j
tryCbest2 小时前
搭建企业知识库之Milvus 向量数据库
数据库·milvus
czhc11400756633 小时前
2026-08-24 博客:几个让你少踩坑的概念
数据库
ACP广源盛139246256733 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
oradh3 小时前
Oracle RMAN备份脚本、RMAN还原恢复测试、RMAN常用语句
数据库·oracle·rman备份脚本·rman还原恢复测试·rman常用语句