暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Every Day of a DBA,第147期: Oracle rac 错误的添加数据文件

原创 ByteHouse 2026-07-04
68

作者:bytehouse Oracle ACE、PostgreSQL ACE
10+年数据库架构与运维实战经验
公众号:bytehouse
墨天轮专栏:bytehouse
CSDN:Young DBA

摘要:还需要DBA吗?DBA有未来吗?这种神奇的操作还有很多的。

1.故障现场

数据库无法正常启动,打开数据库提示 “ORA-01157: cannot identify/lock data file 171 - see DBWR trace file
ORA-01110: data file 171: ‘/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF’”

[root@wnjj-01 trace]# tail -n 500 alert_wnjj1.log 
Fri Jul 03 10:18:27 2026
Decreasing number of real time LMS from 8 to 0
Fri Jul 03 10:28:20 2026
ALTER DATABASE RECOVER  datafile 171  
Media Recovery Start
Serial Media Recovery started
Fri Jul 03 10:28:20 2026
Errors in file /u01/app/oracle/diag/rdbms/wnjj/wnjj1/trace/wnjj1_dbw0_24023.trc:
ORA-01157: cannot identify/lock data file 171 - see DBWR trace file
ORA-01110: data file 171: '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Media Recovery failed with error 1110
ORA-283 signalled during: ALTER DATABASE RECOVER  datafile 171  ...
Fri Jul 03 10:29:37 2026
ALTER DATABASE RECOVER  datafile 171  
Media Recovery Start
Serial Media Recovery started
Fri Jul 03 10:29:37 2026

2.故障根因

数据库启动时找不到171号数据文件,文件路径是Windows格式路径 G:\ORADATA\wnrm4\SYSAUX05.DBF,却存放在Linux本地文件系统目录 /u01/app/oracle/product/11.2.0/dbhome_1/dbs/ 下,文件已迁移至ASM,控制文件记录的旧路径失效,打开数据库报ORA-01157。

3.故障修复

step 1.启动数据库到MOUNT状态

# 登录sqlplus sqlplus / as sysdba shutdown immediate; startup mount;

step 2.把本地旧文件迁移到ASM:

场景1:如果本地还有原文件

[root@wnjj-02 ~]# ls -la /u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF
-rw-r----- 1 oracle asmadmin 31457288192 Jul  3 18:50 /u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF
[root@wnjj-02 ~]# cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[root@wnjj-02 dbs]# ls -la
total 30720028
drwxr-xr-x   2 oracle oinstall         115 Jul  3 18:51 .
drwxr-xr-x. 76 oracle oinstall        4096 Jun  7  2023 ..
-rw-r-----   1 oracle asmadmin 31457288192 Jul  3 18:50 G:ORADATAwnrm4SYSAUX05.DBF
-rw-rw----   1 oracle asmadmin        1544 Jul  3 18:53 hc_wnjj2.dat
-rw-r--r--   1 oracle oinstall        2851 Jun  7  2023 init.ora
-rw-r-----   1 oracle oinstall          35 Jun  7  2023 initwnjj2.ora
-rw-r-----   1 oracle oinstall        1536 Jun  7  2023 orapwwnjj2
[root@wnjj-02 dbs]# 

两种正确拷贝方案

方案1:RMAN copy(推荐,数据库文件拷贝最优,支持校验)

登录Oracle数据库用户(oracle)执行RMAN:

rman target /
copy datafile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF' to '+DATA/wnjj/datafile/SYSAUX05.DBF';

RMAN> copy datafile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF' to '+DATA/wnjj/datafile/SYSAUX05.DBF';

Starting backup at 2026-07-04 09:40:16
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1057 instance=wnjj2 device type=DISK
channel ORA_DISK_1: starting datafile copy
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/04/2026 09:40:20
ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode

RMAN> 

说明:RMAN不会把G:识别为远程串,专门处理数据文件拷贝,自带完整性校验。

方案2:ASMCMD 规避盘符冒号报错

操作系统层面先复制到无冒号路径,再进ASMCMD

# oracle/grid用户均可 cp "/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF" /u01/app/oracle/product/11.2.0/dbhome_1/dbs/SYSAUX05.DBF chown oracle:asmadmin SYSAUX05.DBF asmcmd ASMCMD> cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/SYSAUX05.DBF +DATA/wnjj/datafile/SYSAUX05.DBF copying /u01/app/oracle/product/11.2.0/dbhome_1/dbs/SYSAUX05.DBF -> +DATA/wnjj/datafile/SYSAUX05.DBF ASMCMD>

文件权限问题:

ASMCMD> cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/SYSAUX05.DBF +DATA/wnjj/datafile/SYSAUX05.DBF
ASMCMD-8014: file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/SYSAUX05.DBF' does not exist
ASMCMD> 

补充说明

  1. ASMCMD cp 对路径中**:** 有特殊解析逻辑,只要路径含X:就判定为远程连接字符串,无法直接使用;
  2. 生产环境优先用 RMAN copy,ASMCMD仅适合小文件、归档、日志拷贝,数据文件推荐RMAN。

查看控制文件,该文件已经在控制文件:

alter database backup controlfile to trace as '/home/oracle/ctl_trace.sql';

场景2:本地旧文件已删除,仅ASM有文件

直接执行alter database rename即可,不需要copy。

场景3:rename执行报错路径不匹配

核对报错日志里完整旧文件名:
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF
字符串必须一字不差复制到rename左侧,不能漏字符、不能改分隔符。

step 3.RMAN修改数据文件171路径至ASM

rman target /
# 修改171号文件路径
RMAN> alter database rename file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF' to '+DATA/wnjj/datafile/SYSAUX05.DBF';

# sqlplus
alter database rename file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/G:ORADATAwnrm4SYSAUX05.DBF' to '+DATA/wnjj/datafile/SYSAUX05.DBF';

# 重启实例后,查看文件
select name from v$datafile where name like '%sysaux05%';

说明:

  • 左边是报错里完整旧路径原样复制
  • 右边 +DATA/wnjj/datafile/SYSAUX05.DBF 替换为你真实ASM路径

step 4.校验控制文件数据文件信息

select file#, name, status from v$datafile where file#=171;

正常结果:NAME列显示ASM路径,不再是旧Linux本地路径。

RMAN校验文件(可选,确保ASM文件存在)

RMAN> crosscheck datafile 171;
RMAN> list datafile 171;

step 5.打开数据库

alter database open;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论