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

模拟数据文件少写“+”加在本地如何恢复?

上周业务操作表空间没加 “+” 直接把数据文件加在了本地,另一个节点识别不到数据文件,导致业务访问报错:ORA-01157和ORA-01110,并且在恢复之后触发了bct的一个bug导致数据库宕机。
今天在测试环境 模拟错把数据文件加在本地该如何恢复? 先看解决方法:

1、解决方法

方法一: Online move datafile

适用12.1以上版本,做之前要做 backup datafile

alter database move datafile '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/DATA' to '+DATA';

在另一个节点执行:

ALTER SYSTEM CHECK DATAFILES;

语法的文本描述如下所示:

ALTER DATABASE MOVE DATAFILE ( 'filename' | 'ASM_filename' | file_number )
 [ TO ( 'filename' | 'ASM_filename' ) ]
 [ REUSE ] [ KEEP ]

keep 保留原有数据文件

reuse 重用数据文件

默认就是重用数据文件

方法二: rename file

在低版本中可以通过 rename file 的方式

1、检查加错位置的表空间
SQL> @ls bctspace

TABLESPACE_NAME                   FILE_ID FILE_NAME                                                                        EXT         MB      MAXSZ
------------------------------ ---------- -------------------------------------------------------------------------------- --- ---------- ----------
BCTSPACE                               32 +DATA/SXPTA/DATAFILE/bctspace.263.1194803527                                     NO          10
BCTSPACE                               33 /oracle/app/oracle/product/19.0.0/db_1/dbs/DATA                                  NO        1024

2、先对该数据文件进行备份,并offline
[oracle@sxpta1:/home/oracle]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Mon Mar 3 17:45:54 2025
Version 19.9.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
RMAN> backup datafile 33;


SQL> alter database datafile '/oracle/app/oracle/product/19.0.0/db_1/dbs/DATA' offline; 

Database altered.


3、rename file
su - grid
[grid@sxpta1:/home/grid]$ asmcmd
ASMCMD>  cp '/oracle/app/oracle/product/19.0.0/db_1/dbs/DATA'  '+DATA/SXPTA/DATAFILE/bctspace.264.dbf'
copying /oracle/app/oracle/product/19.0.0/db_1/dbs/DATA -> +DATA/SXPTA/DATAFILE/bctspace.264.dbf

SQL>  alter database rename file '/oracle/app/oracle/product/19.0.0/db_1/dbs/DATA' to '+DATA/SXPTA/DATAFILE/bctspace.264.dbf';

Database altered.

4、恢复,online
SQL> alter database recover datafile 33;

Database altered.

SQL> alter database datafile 33 online;

Database altered.

SQL> select name,status from v$datafile where file#=33;
+DATA/SXPTA/DATAFILE/bctspace.264.dbf ONLINE

5、在另一个节点检查
SQL> @ls bctspace

TABLESPACE_NAME     FILE_ID FILE_NAME                                      EXT         MB      MAXSZ
---------------- ---------- ---------------------------------------------- --- ---------- ----------
BCTSPACE                 32 +DATA/SXPTA/DATAFILE/bctspace.263.1194803527   NO          10
BCTSPACE                 33 +DATA/SXPTA/DATAFILE/bctspace.264.dbf          NO        1024

2、环境模拟

19c RAC + ADG + 开归档 + 开块跟踪

--创建测试表空间 bctspace
SQL> create tablespace bctspace datafile '+DATA' size 10G autoextend off; 

Tablespace created.

--创建测试用户 bct
SQL> create user bct identified by "oracle" 
  2  temporary tablespace temp
  3  default tablespace bctspace;
User created.

SQL> @us bct
Show database usernames from dba_users matching %bct%

USERNAME  DEFAULT_TABLESPACE TEMPORARY_TABLESPACE    USER_ID CREATED           PROFIL
--------- ------------------ -------------------- ---------- ----------------- -------
BCT       BCTSPACE           TEMP                        139 20250303 17:53:02 DEFAUL

--授权 dba
SQL> grant dba to bct;

Grant succeeded.

SQL> conn bct/oracle
Connected.

USERNAME             INST_NAME            HOST_NAME                 SID   SERIAL#  VERSION    STARTED  SPID            OPID  CPID            SADDR            PADDR
-------------------- -------------------- ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
BCT                  sxpta1               sxpta1                    5568  43004    19.0.0.0.0 20241127 43025           126   40699           00000005626C4538 00000005A1A55C08


SQL> @df

TABLESPACE_NAME                   TotalMB     UsedMB     FreeMB % Used Ext Used
------------------------------ ---------- ---------- ---------- ------ --- ----------------------
BCTSPACE                            10240          1      10239     1% NO  |#                   |
DATADG                              30720       5963      24757    20% NO  |####                |
DATA_IFRS                           30720        206      30514     1% NO  |#                   |
HBYDTS                             552960      50578     502382    10% NO  |##                  |
IDX_IFRS                            30720          2      30718     1% NO  |#                   |
SYSAUX                               2820       2742         78    98% YES |####################|
SYSTEM                               3870       3626        244    94% YES |################### |
TEMP                                32050       1331      30719     5% YES |#                   |
TEMP1                                2048       1198        850    59% NO  |############        |
TS1                                  1024          1       1023     1% NO  |#                   |
UNDOTBS1                            18610       6520      12090    36% YES |########            |
UNDOTBS2                              800        460        340    58% YES |############        |
USERS                               79111      79077         34   100% YES |####################|

13 rows selected.

resize 给小点表空间 测试一下加错后二节点能不能读写

SQL> alter database datafile '+DATA/SXPTA/DATAFILE/bctspace.263.1194803527' resize 10M;

Database altered.

SQL> @ls bct

TABLESPACE_NAME                   FILE_ID FILE_NAME                                                                        EXT         MB      MAXSZ
------------------------------ ---------- -------------------------------------------------------------------------------- --- ---------- ----------
BCTSPACE                               32 +DATA/SXPTA/DATAFILE/bctspace.263.1194803527                                     NO          10

SQL> alter tablespace bctspace add datafile 'DATA' size 1G;

Tablespace altered.

SQL> create table tabbct as select * from dba_objects;

Table created.

SQL> @ls bctspace

TABLESPACE_NAME                   FILE_ID FILE_NAME                                                                        EXT         MB      MAXSZ
------------------------------ ---------- -------------------------------------------------------------------------------- --- ---------- ----------
BCTSPACE                               32 +DATA/SXPTA/DATAFILE/bctspace.263.1194803527                                     NO          10
BCTSPACE                               33 /oracle/app/oracle/product/19.0.0/db_1/dbs/DATA                                  NO        1024

加一些测试数据,把bctspace第一个10M的数据文件加满


SQL> begin
  2     for i in 1..10 LOOP
  3     insert into tabbct select * from dba_objects;
  4     commit;
  5     end LOOP;
  6  end;
  7  /

PL/SQL procedure successfully completed.
SQL> @seg bct.tab

    SEG_MB OWNER                SEGMENT_NAME                   SEG_PART_NAME                  SEGMENT_TYPE         SEG_TABLESPACE_NAME                BLOCKS     HDRFIL     HDRBLK
---------- -------------------- ------------------------------ ------------------------------ -------------------- ------------------------------ ---------- ---------- ----------
       368 BCT                  TABBCT                                                        TABLE                BCTSPACE                            47104         33        130

此时,另一个节点是无法对加错的表空间进行读写的,随之应用也会随之报错节点二检查不到数据文件

ORA-01157: cannot identify/lock data file 16 - see DBWR trace file

ORA-01110: data file 16: '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/DATA'

SQL> select count(*) from bct.tabbct;
select count(*) from bct.tabbct
                         *
ERROR at line 1:
ORA-01157: cannot identify/lock data file 33 - see DBWR trace file
ORA-01110: data file 33: '/oracle/app/oracle/product/19.0.0/db_1/dbs/DATA'

ORA-01537    无法添加数据文件'' - 文件已是数据库的一部分
ORA-01157    无法标识/锁定数据文件 - 请参阅 DBWR 跟踪文件
ORA-01110    数据文件 : ''
ORA-03113    通信通道的文件结束错误说明:数据库连接中断。
 

3、影响范围

表空间加到本地有什么影响?

1、RAC共享存储如果加在本地会导致节点二无法识别数据文件,进而导致无法对数据进行读写,报错

SQL> select count(*) from bct.tabbct;
select count(*) from bct.tabbct
                         *
ERROR at line 1:
ORA-01157: cannot identify/lock data file 33 - see DBWR trace file
ORA-01110: data file 33: '/oracle/app/oracle/product/19.0.0/db_1/dbs/DATA'

所有在二节点访问该数据文件中的对象的应用都会报错

2、可能导致不可预估的bug,上周遇到数据文件加在本地,第二天自动备份导致数据库宕机,参考我导师(大佬级别)写的一篇文章:oracle bct触发ORA-600 [krccfl_chunk] 导致数据库宕无法启动 - 墨天轮


文章转载自:

http://XHmmi9tu.dxhdn.cn
http://IwisKr7B.dxhdn.cn
http://A6ABx7g6.dxhdn.cn
http://REcznhOp.dxhdn.cn
http://NJmZHt7K.dxhdn.cn
http://nxqPQsed.dxhdn.cn
http://cIfYdhdi.dxhdn.cn
http://IwUxDKoe.dxhdn.cn
http://RJzfsD3F.dxhdn.cn
http://T6DBOhVS.dxhdn.cn
http://52uyGfNE.dxhdn.cn
http://n5d5rVct.dxhdn.cn
http://bwCQsqoy.dxhdn.cn
http://ogq4Nvok.dxhdn.cn
http://9zdPnFd6.dxhdn.cn
http://PNCx2Vap.dxhdn.cn
http://PyAO6BKj.dxhdn.cn
http://UmUPd5bn.dxhdn.cn
http://T9cZbbaO.dxhdn.cn
http://G3XEtFtT.dxhdn.cn
http://eaOjd7f3.dxhdn.cn
http://s7EUXLcO.dxhdn.cn
http://HcnRngrI.dxhdn.cn
http://aUZ45A4T.dxhdn.cn
http://uJ2sqo2L.dxhdn.cn
http://B9oQ2aGH.dxhdn.cn
http://L92t0ZXv.dxhdn.cn
http://qvS5wB9T.dxhdn.cn
http://r9rT7kql.dxhdn.cn
http://TK7cESLK.dxhdn.cn
http://www.dtcms.com/a/52525.html

相关文章:

  • Java 实现 Oracle 的 MONTHS_BETWEEN 函数
  • 在PyCharm开发环境中,如何建立hello.py文件?
  • 小菜鸟系统学习Python-迭代实现斐波那契和汉诺塔问题
  • C语言——链表
  • 国产替代新篇章:领麦微红外测温传感器赋能3D打印精准制造
  • 开启科创服务新篇章:八月瓜科技CRM数字化管理系统成功上线
  • 永磁直驱式风力发电虚拟同步机仿真模型Matlab/Simulink模型
  • 从数据到决策,永洪科技助力良信电器“智”领未来
  • 【CV001】归一化互相关模板匹配matlab实现
  • 【漫话机器学习系列】120.参数化建模(Parametric Modeling)
  • PHP动态网站建设
  • Linux内存分页:原理、优势与实践
  • pytest框架 核心知识的系统复习
  • vulnhub靶场之【digitalworld.local系列】的mercy靶机
  • c++变量和声明的语法总结
  • 塔能物联运维:城市照明极端天气下的“定海神针”
  • 计算机毕设-基于springboot的网上商城系统的设计与实现(附源码+lw+ppt+开题报告)
  • CoreDNS 可观测最佳实践
  • /***************************所有笔记汇总目录***************************/
  • 【卫星语音通信】神经网络语音编解码算法:AudioDec
  • vtk 3D坐标标尺应用 3D 刻度尺
  • DeepSeek架构革命:动态异构计算
  • Ubuntu22.04安装Ollama部署DeepSeek-R1:32B模型
  • 《2025国内免费DeepSeek-R1自部署平台实测指南:三大运营商/腾讯/华为哪家强?附避坑清单》
  • LLM | 论文精读 | GIS Copilot : 面向空间分析的自主GIS代理
  • vLLM代码推理Qwen2-VL多模态大模型(远程服务器解决方案,无需UI)
  • 数据显示不符合用户阅读习惯
  • Qt中如何从头到尾自定义设计一个标题栏
  • libcoap在Ubuntu下的编译(基于CMake)
  • Exoplayer2源码编译FFmpeg拓展模块实现音频软解码