IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Oracle误删除dbf文件和表空间恢复 -> 正文阅读

[大数据]Oracle误删除dbf文件和表空间恢复

Oracle物理删除dbf文件和表空间恢复

参考:
https://www.iteye.com/blog/java-mans-1642954
https://blog.csdn.net/qq_42774325/article/details/82353266
https://www.cnblogs.com/l10n/p/9406052.html

今天在dmp数据时入错了;想着把表空间文件直接删了,重新入;这想当然的操作,导致后面浪费了时间;
题目说恢复并非指“恢复数据”,确切来说指的是“修复”或“复原”表空间;

环境:
oracle数据库版本:oracle11g EE 11.2.0.4.0 64bit Production

表空间路径:
/home/oracle/oradata/xxspace/
文件名:
xyz202203_1.dbf
xyz202203_2.dbf
xyz202203_3.dbf

就在服务器上直接rm,把xyz202203_*.dbf文件删了;再重建表空间:

CREATE TABLESPACE 'XYZ202203' DATAFILE '/home/oracle/oradata/xxspace/xyz202203_1.dbf' SIZE 5g AUTOEXTEND ON NEXT 1g MAXSIZE UNLIMITED;

ORA-01543:报错,提示表空间XYZ202203已存在;

-- 查看所有表空间
SELECT * FROM DBA_TABLESPACES;
-- 查看表空间数据文件
SELECT * FROM DBA_DATA_FILES;
-- 删除指定schema
DROP USER XYZ_202203 CASCADE;

查询看了表空间还存在;

删除表空间语法:

--oracle 删除表空间及数据文件方法
--删除空的表空间,但是不包含物理文件
drop tablespace tablespace_name;
--删除非空表空间,但是不包含物理文件
drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

报错IO错误,找不到/home/oracle/oradata/xxspace/xyz202203_1.dbf文件;百度看了有好多是要重装oracle啥得,感觉代价太大没必要,目前这部分数据丢失影响不大,重入一遍;
于是我简单的想去服务器上补上试试:

ALTER TABLESPACE 'XYZ202203' ADD DATAFILE '/home/oracle/oradata/xxspace/xyz202203_4.dbf' SIZE 5g AUTOEXTEND ON NEXT 1g MAXSIZE 20g;
cp xyz202203_4.dbf xyz202203_1.dbf
cp xyz202203_4.dbf xyz202203_2.dbf
cp xyz202203_4.dbf xyz202203_3.dbf
# ls
xyz202203_1.dbf
xyz202203_2.dbf
xyz202203_3.dbf
xyz202203_4.dbf
# 试了还是不行,以为是未授权。安排
chmod 755 xyz202203_*
chown -R oracle xyz202203_*
chgrp -R oracle xyz202203_*

再试了下依然是IO错误,找不到文件。
搜索到一个方法,进服务器sqlplus关了数据库,重启可以恢复;

# https://blog.csdn.net/qq_42774325/article/details/82353266
sqlplus /nolog
conn sys /as sysdba
shutdown immediate
...

第一步就报错,文件损坏,想关都关不了……
虽然不影响其他正常使用,但是以后肯定有大隐患,不能埋坑必需解决掉。

只能另辟蹊径了。

经过观察发现,DBA_TABLESPACES/DBA_DATA_FILES这两表是视图,可以到sys模式下看到对应实际得表;

-- 查看所有表空间
SELECT * FROM DBA_TABLESPACES;
-- 查看表空间数据文件
SELECT * FROM DBA_DATA_FILES;
-- 实际得表或视图
DBA_TABLESPACES	
DBA_DATA_FILES 
sys.file$	
sys.ts$	
sys.v$dbfile
sys.x$kccfe
sys.x$ktfbhc
sys.x$kcfistsa

DBA_DATA_FILES 有个字段叫ONLINE_STATUS,来自sys.x$kccfe的fetsn和festa字段解码计算出的值:SYSOFFSYSTEMOFFLINEONLINERECOVER
会不会是ONLINE状态表示表空间正在被使用,但实际文件已经被物理删除了,导致drop tablespace 语句报错失效;
能否把ONLINE变为OFFLINE试试?还真找到了;

# offline
ALTER DATABASE DATAFILE '/home/oracle/oradata/xxspace/xyz202203_1.dbf'  OFFLINE DROP;
ALTER DATABASE DATAFILE '/home/oracle/oradata/xxspace/xyz202203_2.dbf'  OFFLINE DROP;
ALTER DATABASE DATAFILE '/home/oracle/oradata/xxspace/xyz202203_3.dbf'  OFFLINE DROP;
ALTER DATABASE DATAFILE '/home/oracle/oradata/xxspace/xyz202203_4.dbf'  OFFLINE DROP;

-- 查看表空间数据文件,`ONLINE_STATUS`由`ONLINE`变成了`RECOVER`;
SELECT * FROM DBA_DATA_FILES;

# 删掉表空间文件
drop tablespace XYZ202203 including contents and datafiles;

再次查看DBA_DATA_FILESsys.v$dbfile和服务器/home/oracle/oradata/xxspace/目录,会发现表空间文件都没了。

再重建表空间:

CREATE TABLESPACE 'XYZ202203' DATAFILE '/home/oracle/oradata/xxspace/xyz202203_1.dbf' SIZE 5g AUTOEXTEND ON NEXT 1g MAXSIZE UNLIMITED;

OK

总结教训:
1.如果一开始多查查sql,直接使用drop tablespace就没这么多事了。
2.操作要规范,使用标准sql标准流程操作数据库。
3.做的操作每一步都要明确清楚后果再动手;特别是删除前,多思考最好备份。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:28:13  更:2022-04-09 18:28:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:00:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码