当前位置: 首页 > news >正文

Oracle RAC 环境下数据文件误建在本地目录的处理过程

问题描述

在 Oracle RAC 环境中,有时会误将数据文件创建在本地目录,导致其他节点无法访问该数据文件,从而报出 ORA-01157 和 ORA-01110 错误。

问题分析

  1. 错误日志

    Mon Nov 16 19:02:38 2021
    Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_m000_27416.trc:
    ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
    ORA-01110: data file 9: '/u01/app/oracle/11.2.0/db1/dbs/testnew'
    Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_m000_27416.trc:
    ORA-01157: cannot identify/lock data file 10 - see DBWR trace file
    ORA-01110: data file 10: '/u01/app/oracle/11.2.0/db1/dbs/testfilenew'
    
  2. 查询数据文件路径

    SQL> SELECT file#, name FROM v$datafile;--输出示例:FILE# NAME
    ---------- -------------------------------------------------1 +DATA/orcl/datafile/system.259.8552443412 +DATA/orcl/datafile/sysaux.260.8552443453 +DATA/orcl/datafile/undotbs1.261.8552443454 +DATA/orcl/datafile/undotbs2.263.8552443535 +DATA/orcl/datafile/users.264.8552443556 +DATA/orcl/datafile/egapp.293.8748592117 +DATA/orcl/datafile/loop_test.294.8790933498 +DATA/orcl/datafile/loop_file_test.295.87909 /u01/app/oracle/11.2.0/db1/dbs/testnew10 /u01/app/oracle/11.2.0/db1/dbs/testfilenew

解决方法

1. 确定数据文件的位置

  1. 确定数据文件在哪个节点上

    -- 在节点2上执行
    ls -l /u01/app/oracle/11.2.0/db/dbs/
    

2. 将数据文件下线

  1. 登录到 SQL\Plus

    sqlplus / as sysdba
    
  2. 将数据文件下线

    SQL> ALTER DATABASE DATAFILE 9 OFFLINE;
    SQL> ALTER DATABASE DATAFILE 10 OFFLINE;
    
  3. 确认数据文件状态

    SQL> COL NAME FOR A45
    SQL> SET LINESIZE 234
    SQL> SELECT NAME, FILE#, STATUS FROM V$DATAFILE;
    

3. 复制数据文件到共享目录

  1. 登录到 RMAN

    rman target /
    
  2. 复制数据文件

    RMAN> COPY DATAFILE '/u01/app/oracle/11.2.0/db/dbs/goa31new' TO '+DATA';
    RMAN> COPY DATAFILE '/u01/app/oracle/11.2.0/db/dbs/goafilenew' TO '+DATA';
    

4. 更改数据文件路径

  1. 重命名数据文件

    SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/11.2.0/db1/dbs/testnew' TO '+DATA/orcl/datafile/testnew.339.895952649';
    SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/11.2.0/db1/dbs/testfilenew' TO '+DATA/orcl/datafile/testfilenew.340.895952749';
    
  2. 确认数据文件状态

    SQL> SELECT NAME, FILE#, STATUS FROM V$DATAFILE;
    

5. 恢复数据文件

  1. 恢复数据文件

    SQL> RECOVER DATAFILE '+DATA/orcl/datafile/testnew.339.895952649';
    SQL> RECOVER DATAFILE '+DATA/orcl/datafile/testfilenew.340.895952749';
    
  2. 确认数据文件状态

    SQL> SELECT NAME, FILE#, STATUS FROM V$DATAFILE;
    

6. 将数据文件上线

  1. 将数据文件上线

    SQL> ALTER DATABASE DATAFILE 9 ONLINE;
    SQL> ALTER DATABASE DATAFILE 10 ONLINE;
    
  2. 确认数据文件状态

    SQL> SELECT NAME, FILE#, STATUS FROM V$DATAFILE;
    

特殊情况:系统表空间数据文件创建在本地

1. 模拟创建

  1. 在节点一上创建系统表空间数据文件

    SQL> ALTER TABLESPACE SYSTEM ADD DATAFILE '/u02/app/oracle/datafile/system02.dbf' SIZE 10M AUTOEXTEND OFF;
    
  2. 检查数据文件

    SQL> COL TABLESPACE_NAME FOR A20
    SQL> COL FILE_NAME FOR A50
    SQL> SELECT FILE_NAME, FILE_ID, ONLINE_STATUS, TABLESPACE_NAME FROM DBA_DATA_FILES;
    SQL> SELECT FILE#, NAME FROM V$DATAFILE;FILE# NAME
    ---------- -------------------------------------------------4 +DATA/orcl/datafile/users.257.9013336873 +DATA/orcl/datafile/undotbs1.264.9013336872 +DATA/orcl/datafile/sysaux.256.9013336851 +DATA/orcl/datafile/system.265.9013336855 +DATA/orcl/datafile/undotbs2.266.9013339436 +DATA/orcl/datafile/testdb.dbf7 /u02/app/oracle/datafile/system02.dbf
    

2. 处理系统表空间数据文件

  1. 将数据文件下线

    SQL> ALTER DATABASE DATAFILE 7 OFFLINE;
    

    注意:系统表空间数据文件无法下线,需要停机时间。

    ORA-01541: system tablespace cannot be brought offline; shut down if necessary
    
  2. 关闭问题节点

    SQL> SHUTDOWN IMMEDIATE;
    
  3. 在另一个节点上检查数据文件状态

    SQL> SELECT OPEN_MODE FROM GV$DATABASE;
    
  4. 使用 ASM 命令将本地文件移动到 ASM

    ASMCMD [+data/orcl/datafile] > CP /u02/app/oracle/datafile/system02.dbf ./
    copying /u02/app/oracle/datafile/system02.dbf -> +data/orcl/datafile/system02.dbf
    
  5. 启动节点一数据库到 mount 状态

    SQL> STARTUP MOUNT;
    
  6. 修改数据文件路径

    SQL> ALTER DATABASE RENAME FILE '/u02/app/oracle/datafile/system02.dbf' TO '+data/orcl/datafile/system02.dbf';
    
  7. 启动数据库

    SQL> ALTER DATABASE OPEN;
    
  8. 在另一个节点上检查数据文件状态

    SQL> SELECT FILE_NAME, FILE_ID, ONLINE_STATUS, TABLESPACE_NAME FROM DBA_DATA_FILES;
    
  9. 重启另一个节点

    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP;
    
  10. 确认数据文件状态

    SQL> SELECT FILE_NAME, FILE_ID, ONLINE_STATUS, TABLESPACE_NAME FROM DBA_DATA_FILES;
    

总结

通过上述步骤,可以有效地解决 Oracle RAC 环境中数据文件误建在本地目录的问题,特别是系统表空间的数据文件。

http://www.lryc.cn/news/495213.html

相关文章:

  • 新质驱动·科东软件受邀出席2024智能网联+低空经济暨第二届湾区汽车T9+N闭门会议
  • windows11 使用体验记录
  • 202页MES项目需求方案深入解读,学习MES系统设计规划
  • 前端css实例
  • YOLO的框架及版本迭代
  • PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕
  • JavaScript零基础入门速通(中)
  • 【Yarn Bug】 yarn 安装依赖出现的网络连接问题
  • 字节青训Marscode_5:寻找最大葫芦——最新题解
  • MySQL —— MySQL 程序
  • LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率
  • 不玩PS抠图了,改玩Python抠图
  • 三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)
  • Linux零基础入门--Makefile和make--纯干货无废话!!
  • vim编辑器的一些配置和快捷键
  • 电子应用设计方案-31:智能AI音响系统方案设计
  • 【设计模式】【结构型模式(Structural Patterns)】之装饰模式(Decorator Pattern)
  • 【AI】JetsonNano启动时报错:soctherm OC ALARM
  • QT:生成二维码 QRCode
  • 【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)
  • 神经网络中常见的激活函数Sigmoid、Tanh和ReLU
  • 适用于学校、医院等低压用电场所的智能安全配电装置
  • 基于python爬虫的智慧人才数据分析系统
  • LeetCode-315. Count of Smaller Numbers After Self
  • 根据导数的定义计算导函数
  • WPF关于打开新窗口获取数据的回调方法的两种方式
  • 复杂网络(四)
  • 用MATLAB符号工具建立机器人的动力学模型
  • SQL优化与性能——数据库设计优化
  • FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现