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

日常小插曲-ASM下建表空间路径中忘记写+号会发生什么

原创 狗剩儿 2022-04-14
1546

项目场景:

提示:这里简述项目相关背景:

客户的ORACLE RAC 集群服务器,周巡检发现表空间不足,巡检同事在追加数据库文件时候不小心敲错了路径位置


问题描述

提示:这里描述项目中遇到的问题:

表空间应该建立在ASM中,执行语句中应是'+DATA',但写为'DATA',导致数据文件位置建立错误



问题分析:

提示:这里填写问题的分析:

之前也是写过类似文章哈,可以通过rman来重新恢复:
https://www.modb.pro/db/336360
但是,同事反馈很及时,心想可以尝试下较为简单的方法,认为新加表空间文件没有数据,直接offline drop。(当时脑子不知道为啥会这样想......应该直接drop datafile)
测试脚本如下:

TABLESPACE_NAME      SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M)
-------------------- ------------ ---------- ------------- ------------ -------------
SYSTEM			      910     116480	    901.94	  99.11 	 8.06
SYSAUX			      580      74240	    550.44	   94.9 	29.56
USERS				5	 640	      2.69	   53.8 	 2.31
UNDOTBS1		      340      43520	     36.31	  10.68        303.69
TEMP			       32	4096			      0

SQL> alter tablespace users add datafile '/u01/user02.dbf'  size 100m ;

Tablespace altered.

SQL> 
SQL> 
SQL> @tbs

TABLESPACE_NAME      SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M)
-------------------- ------------ ---------- ------------- ------------ -------------
SYSTEM			      910     116480	    901.94	  99.11 	 8.06
SYSAUX			      580      74240	    550.44	   94.9 	29.56
UNDOTBS1		      340      43520	     36.31	  10.68        303.69
USERS			      105      13440	      3.69	   3.51        101.31
TEMP			       32	4096			      0

SQL> alter database datafile '/u01/user02.dbf' offline drop;

Database altered.

SQL> 
SQL> 
SQL> @tbs

TABLESPACE_NAME      SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M)
-------------------- ------------ ---------- ------------- ------------ -------------
SYSTEM			      910     116480	    901.94	  99.11 	 8.06
SYSAUX			      580      74240	    550.44	   94.9 	29.56
USERS				5	 640	      2.69	   53.8 	 2.31
UNDOTBS1		      340      43520	     36.31	  10.68        303.69
TEMP			       32	4096			      0

SQL> desc dba_data_files
 Name									  Null?    Type
 ------------------------------------------------------------------------ -------- -------------------------------------------------
 FILE_NAME									   VARCHAR2(513)
 FILE_ID									   NUMBER
 TABLESPACE_NAME								   VARCHAR2(30)
 BYTES										   NUMBER
 BLOCKS 									   NUMBER
 STATUS 									   VARCHAR2(9)
 RELATIVE_FNO									   NUMBER
 AUTOEXTENSIBLE 								   VARCHAR2(3)
 MAXBYTES									   NUMBER
 MAXBLOCKS									   NUMBER
 INCREMENT_BY									   NUMBER
 USER_BYTES									   NUMBER
 USER_BLOCKS									   NUMBER
 ONLINE_STATUS									   VARCHAR2(7)
 LOST_WRITE_PROTECT								   VARCHAR2(7)

SQL> col FILE_NAME for a60
SQL> select FILE_NAME,file_id from dba_data_files;

FILE_NAME							FILE_ID
------------------------------------------------------------ ----------
/u01/app/oracle/oradata/UMCAREYL/system01.dbf			      1
/u01/app/oracle/oradata/UMCAREYL/sysaux01.dbf			      3
/u01/app/oracle/oradata/UMCAREYL/undotbs01.dbf			      4
/u01/app/oracle/oradata/UMCAREYL/users01.dbf			      7
/u01/user02.dbf 						     21

SQL> delete file$ where file#=21;

1 row deleted.

SQL> 
SQL> 
SQL> select FILE_NAME,file_id from dba_data_files;

FILE_NAME							FILE_ID
------------------------------------------------------------ ----------
/u01/app/oracle/oradata/UMCAREYL/system01.dbf			      1
/u01/app/oracle/oradata/UMCAREYL/sysaux01.dbf			      3
/u01/app/oracle/oradata/UMCAREYL/undotbs01.dbf			      4
/u01/app/oracle/oradata/UMCAREYL/users01.dbf			      7
SQL>!rm /u01/users02.dbf

解决方案:

提示:这里填写该问题的具体解决方案:

但是!但是!但是!

兄弟们 这方法不太行哈,offine drop只是将文件状态更改为recover状态了,并非真正意义上的删除


如果是刚建立的建议直接使用:alter tablesapce tablespace_name drop datafile '[datafile_name]'语句删除

[datafile_name] 可以是文件的绝对路径或者是FILE#号

如果数据文件有数据以后了还是要按标准方法处理(rman切换方式)


以上,如有不足请指出。谢谢~

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

评论