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

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

原创 codePanda 云和恩墨 2025-03-05
211

上周业务操作表空间没加 “+” 直接把数据文件加在了本地,另一个节点识别不到数据文件,导致业务访问报错: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'

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

  1. 可能导致不可预估的bug,上周遇到数据文件加在本地,第二天自动备份导致数据库宕机,参考我导师(大佬级别)写的一篇文章:oracle bct触发ORA-600 [krccfl_chunk] 导致数据库宕无法启动 - 墨天轮
最后修改时间:2025-03-06 04:24:42
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论