项目场景:
提示:这里简述项目相关背景:
客户的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 7SQL>!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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




