武汉做网站哪家最好互联网营销师怎么做
上周业务操作表空间没加 “+” 直接把数据文件加在了本地,另一个节点识别不到数据文件,导致业务访问报错: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 bctspaceTABLESPACE_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 10242、先对该数据文件进行备份,并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.0Copyright (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.dbfSQL> 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 ONLINE5、在另一个节点检查
SQL> @ls bctspaceTABLESPACE_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 temp3 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 00000005A1A55C08SQL> @dfTABLESPACE_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 bctTABLESPACE_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 bctspaceTABLESPACE_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> begin2 for i in 1..10 LOOP3 insert into tabbct select * from dba_objects;4 commit;5 end LOOP;6 end;7 /PL/SQL procedure successfully completed.
SQL> @seg bct.tabSEG_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] 导致数据库宕无法启动 - 墨天轮