Get清风Linux平台下误删oracle数据文件的恢复方法.docx
- 文档编号:10514856
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:6
- 大小:81.46KB
Get清风Linux平台下误删oracle数据文件的恢复方法.docx
《Get清风Linux平台下误删oracle数据文件的恢复方法.docx》由会员分享,可在线阅读,更多相关《Get清风Linux平台下误删oracle数据文件的恢复方法.docx(6页珍藏版)》请在冰豆网上搜索。
Get清风Linux平台下误删oracle数据文件的恢复方法
Linux平台下误删oracle数据文件的恢复方法
Linux平台下误删oracle数据文件的恢复方法
2021-03-06 0 个评论 来源:
DavidDai--FocusonOracle
收藏
我要投稿
<=""p="">
1问题描述
之前写过一篇删除oraclehome目录的blog,参考:
Linux平台误删homeoracle根目录的解决方法
本篇是这边的引深,本来应该是年前整理的,拖到年后了。
模拟现状:
数据库在正常运行,误操作,直接rm掉了数据文件。
测试环境:
[oracle@dg1trace]$cat/etc/redhat-release
RedHatEnterpriseLinuxServerrelease6.1(Santiago)
Oracle11.2.0.3单实例。
[oracle@dg1~]$sqlplus/assysdba
SQL*Plus:
Release11.2.0.3.0ProductiononWedAug2718:
36:
322021
Copyright(c)1982,2021,Oracle.Allrightsreserved.
Connectedto:
OracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions
SQL>
这个问题也要分2种情况,一种是归档模式,一种是非归档模式,归档模式处理就容易很多了。
但现在很多由开发人员管理的库是非归档,并且也缺乏专业的运维技能,误操作的概率也会增加很多。
2创立测试数据
SQL>createtablespacedropspacedatafile'/u01/dropspace01.dbf'size100m;
Tablespacecreated.
SQL>createuserahzhixinidentifiedbyahzhixindefaulttablespacedropspace;
Usercreated.
SQL>grantconnect,resource,dbatoahzhixin;
Grantsucceeded.
SQL>connahzhixin/ahzhixin
Connected.
SQL>createtabletest1asselect*fromall_users;
Tablecreated.
SQL>createtabletest2asselect*fromall_users;
Tablecreated.
SQL>createtabletest3asselect*fromall_users;
Tablecreated.
3归档模式处理
3.1模拟故障
SQL>archiveloglist;
DatabaselogmodeArchiveMode
AutomaticarchivalEnabled
Archivedestination/u01/archivelog
Oldestonlinelogsequence83
Nextlogsequencetoarchive85
Currentlogsequence85
SQL>
在操作系统上直接删除数据文件:
[oracle@dg1u01]
此时数据库还是正常运行,我们查询我们之前创立的几张表:
SQL>selectcount
(1)fromtest1;
COUNT
(1)
----------
31
SQL>selectcount
(1)fromtest2;
COUNT
(1)
----------
31
SQL>selectcount
(1)fromtest3;
COUNT
(1)
----------
31
--insert也没有问题:
SQL>insertintotest1select*fromall_users;
31rowscreated.
SQL>commit;
Commitcomplete.
SQL>selectcount
(1)fromtest1;
COUNT
(1)
----------
62
至少从目前看,一切都是正常。
这里正常也是因为我们的操作系统是Linux,当数据文件从操作系统级别被rm掉,但之前翻开该文件的进程仍然持有相应的文件句柄,所以指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得,也可以利用这个句柄恢复文件。
如果在这个时候,重启了数据库或者操作系统,那么句柄就会消失,也就只能通过扫描磁盘进行文件恢复。
3.2恢复
dbwr进程会翻开所有数据文件的句柄,在proc目录中可以查到这些数据文件的信息,目录名是进程PID,fd表示文件描述符。
检查dbwr的进程PID:
[oracle@dg1trace]$ps-ef|grepdbw0|grep-vgrep
oracle99641000:
49?
00:
00:
03ora_dbw0_dave
[oracle@dg1trace]$cd/proc/9964/fd
[oracle@dg1fd]$ls-l
<=""p=""style="border-width:
0px;padding:
0px;margin:
0px;list-style:
none;width:
630px;height:
354.48307410795974px;">
Databasealtered.
SQL>recoverdatafile'/u01/dropspace01.dbf';
Mediarecoverycomplete.
SQL>alterdatabasedatafile'/u01/dropspace01.dbf'online;
Databasealtered.
SQL>
恢复正常。
//文件存在:
//重启数据库:
SQL>shutdownimmediate
Databaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
SQL>startup
ORACLEinstancestarted.
TotalSystemGlobalArea814227456bytes
FixedSize2232760bytes
VariableSize490737224bytes
DatabaseBuffers318767104bytes
RedoBuffers2490368bytes
Databasemounted.
Databaseopened.
SQL>
也正常。
这里有2个注意的问题:
数据库是归档模式,数据库或者操作系统没有重启。
这2点非常关键。
也正式如此,才让操作比较简单。
如果是非归档模式,那就要复杂很多了。
在非归档模式下,如果删除了数据文件,并且又触发了CKPT,那么CKPT会直接把整个实例中断掉,也就是说,如果是比较繁忙的数据库,如果误删除数据文件,实例可能会中断,一旦实例中断,那么用之前讲的通过句柄恢复就没有可能性了。
当然也有另一种可能性,就是删除数据文件之后,可以先通过句柄恢复,然后用expdp导出数据,尽可能的挽救局部数据。
这个动作就是与时间赛跑的过程了。
总之生产环境,操作一定要小心,还有要开归档,除非数据允许丧失。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Get 清风 Linux 平台 下误删 oracle 数据文件 恢复 方法