办理表空间题目:ORA-01537 无法添加文件该文件已是数据库的一部分 ...

汕尾海湾  论坛元老 | 2024-9-8 18:55:47 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1043|帖子 1043|积分 3129

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这个已删除的表空间数据文件还是存在的,后面要删撤除它。
  

  • 从file$基表中把这个文件删除
  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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表