IT评测·应用市场-qidao123.com

标题: 办理表空间题目:ORA-01537 无法添加文件该文件已是数据库的一部分 [打印本页]

作者: 汕尾海湾    时间: 2024-9-8 18:55
标题: 办理表空间题目:ORA-01537 无法添加文件该文件已是数据库的一部分
oracle表空间题目处置惩罚记录

oracle表空间占用越来越大,增长了很多表空间文件,在不能删除表空间情况下处置惩罚表空间中无用的用户数据,腾出表空间文件后,在删除空余表空间文件(删除前查一下确认无数据的情况下),在删除表空间物理文件后发现还能查询到表空间物理文件,同时在建同名表空间文件后报错 “ORA-01537 无法添加文件该文件已是数据库的一部分”。
正常处置惩罚表空间最好且最安全的办法是,删除表空间后重建,但数据文件大重建不太实际。题目:我用命令正常删除表空间文件将该数据文件从逻辑删除,物理文件还存在,在用手工删除物理文件后利用命令还能查询到已删除的物理文件,记录一下怎么彻底删除掉这个表空间文件。
彻底删除记录

虽然命令上逻辑删除后可以手动删撤除表空间物理文件,这样做实际硬盘空间已经腾出来了,但你查询表空间还给显示这个被删撤除的文件信息,同时新建同名被删撤除的表空间文件会报错ORA-01537。
  1. select b.file_name 物理文件名,
  2.       b.tablespace_name 表空间,
  3.       b.bytes / 1024 / 1024 大小M,
  4.       (b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用M,
  5.       substr((b.bytes - sum(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) 利用率
  6. from dba_free_space a, dba_data_files b
  7. where a.file_id = b.file_id
  8. group by b.tablespace_name, b.file_name, b.bytes
  9. order by b.tablespace_name;
复制代码
  1. SELECT DISTINCT a.SEGMENT_NAME    对象名,
  2.                 PARTITION_NAME    分区名,
  3.                 a.SEGMENT_TYPE    类型,
  4.                 a.TABLESPACE_NAME 表空间名,
  5.                 a.FILE_ID         文件ID,
  6.                 b.NAME            文件名
  7.   FROM DBA_EXTENTS a
  8.   JOIN V$DATAFILE b
  9.     ON a.FILE_ID = b.FILE#
  10. WHERE b.NAME = 'D:\APP\ADMIN\ORADATA\ORCL\XXX03.DBF';
复制代码
  正常清算完用户下数据库信息后这个表空间对象查询效果应该是空的,如果有查询效果证明表空间数据文件没有清算干净。
  
  1. alter database datafile 'D:\APP\ADMIN\ORADATA\ORCL\XXX03.DBF' offline drop;  
复制代码
  这个删除命令有局限,只是数据库对表空间数据文件的逻辑删除,物理文件还是存在的,执行完这个命令后我直接去存储表空间文件的地给物理文件删除了(这个删除条件是需要确认表空间数据文件下已经没有任何信息了)
  
  1. SELECT T1.NAME 表空间, T2.NAME 数据文件
  2.   FROM V$TABLESPACE T1, V$DATAFILE T2
  3. WHERE T1.TS# = T2.TS#
  4.    AND T1.NAME LIKE 'DSY%';
复制代码
  用表空间数据文件删除命令举行删除后,检查数据文件中还可以查询到已删除过的表空间信息
  
  1. SELECT file_id, file_name, status, online_status FROM Dba_Data_Files;
复制代码
  DBA_DATA_FILES 是记录数据库中所有数据文件的详细信息的系统视图,其中ONLINE_STATUS字段体现“文件的状态”,‘ONLINE’(在线状态),‘RECOVER’(离线状态)。查询效果显示已被删除的表空间数据文件被置于离线状态,还存在视图中。

`
上面是我的截图,可以看到03.DBF这个已删除的表空间数据文件还是存在的,后面要删撤除它。
  
  1. select file#,status$ from file$;
复制代码

  1. delete file$ where file# = 9;
复制代码

  1. SELECT file_id, file_name, status, online_status FROM Dba_Data_Files;
复制代码
最终实际检查时还是有题目,可以查询到数据文件的存在,根据网上的发起需要“重置控制文件”(目前重置控制文件失败了,重启了服务还是用的以前的控制文件…这个后续重新试一下重置控制文件)
8. 检查oracle设置文件,查看控制文件的个数、名称和位置
  1. show parameter control_files
复制代码

查看 v$controlfile 视图
  1. select name,block_size,file_size_blks from v$controlfile;
复制代码
查看控制文件的内容### 导入
参考博客
[1]: https://www.cnblogs.com/colaclicken/p/11347737.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4