DBA 测试人员误删手册-data file篇
简易操作:
1.当你贱贱的右手删除了数据文件后,千万记住:
不要再对数据库做任何变更操作!不要重启数据库!
不要再对数据库做任何变更操作!不要重启数据库!
不要再对数据库做任何变更操作!不要重启数据库!
2.先了解你的库数据文件的架构
|
rman target / RMAN>report schema; |
3.找出DBWR进程号
|
ps -ef|grep dbw|grep -v grep oracle 26415 1 0 Jun08 ? 00:03:55 ora_dbw0_mdspdb oracle 26421 1 0 Jun08 ? 00:04:00 ora_dbw1_mdspdb oracle 26426 1 0 Jun08 ? 00:03:57 ora_dbw2_mdspdb |
4.找出所有对应句柄
|
格式: cd /proc/进程号/fd 例如: cd /proc/26415/fd cd /proc/26421/fd cd /proc/26426/fd |
5.找出所有标记为(deleted)的句柄
|
l|grep "(deleted)" lrwx------ 1 oracle oinstall 64 2016-06-16 10:10 10->/opt/oracle/product/11gR2/db/dbs/lkMDSPDB(deleted) lr-x------ 1 oracle oinstall 64 2016-06-16 10:10 11->/opt/oracle/product/11gR2/db/rdbms/mesg/oraus.msb(deleted) lrwx------ 1 oracle oinstall 64 2016-06-16 10:10 259->/opt/oracle/oradata/mdspdb/ora_sytem.dbf(deleted) lrwx------ 1 oracle oinstall 64 2016-06-16 10:10 260->/opt/oracle/oradata/mdspdb/ora_sysaux01.dbf(deleted) lrwx------ 1 oracle oinstall 64 2016-06-16 10:10 261>/opt/oracle/oradata/mdspdb/ora_sysaux02.dbf(deleted) |
6.复制该句柄文件名回原位置
|
格式: cp 句柄号 原位置 例如: cp 261 /opt/oracle/oradata/mdspdb/ora_sysaux02.dbf |
7.恢复数据文件
情况一:只删除了除SYSTEM,SYSAUX外个别文件
|
SQL>alter database datafile 文件号 offline; SQL>recover datafile 文件号; SQL>alter database datafile 文件号 online; |
情况二:整个目录都删了
注意:虽然最终还是很有可能要停库,但,如果你看到这里,还是先别动,找DBA确认下。
1)安全停库
SQL>alter system checkpoint;
SQL>alter system archive log current;--如果采用归档模式
SQL>shutdown immediate;
2)启动到mount
SQL>startup mount;
3)恢复数据库
SQL>recover database;
4)open数据库
SQL>alter database open;
8.再看下alert日志是否有异常
view $ORACLE_BASE/diag/rdbms/<实例名>/<实例名>/trace/alert_实例名.log
恢复原理:
在linux操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有对应的文件句柄,所执行的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得。但是要注意的是,此时如果关闭数据库,则此句柄会消失,那么除了扫描磁盘进行文件恢复之外就没有其他办法了,因此在数据库出现问题的时候,如果不确认情况的复杂程度,千万不要随便关闭数据库。重启数据库往往是没有意义的,甚至是致命的。
如果不想恢复被删掉的表空间文件,就是想删除表空间:
1.停掉数据库(因为文件被删掉了,这个时候shutdown immediate会报错,应该用shutdown abort停):
2.启动数据库startup mount;
3.offline drop数据文件
先查询下datafile路径:select name from v$datafile;
再offline drop
alter database datafile '/home/oracle/infoxdb/info_data001.dbf' offline drop;
4.再打开数据库
alter database open;
5.查询这个文件属于哪个表空间的
select tablespace_name,file_id,file_name bytes from dba_data_files order by file_id;
6.删除表空间:
drop tablespace INFOX_WEB_MAIN_INDEX including contents and datafiles;
7.最后再查询磁盘空间,检查是否释放空间。

浙公网安备 33010602011771号