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.最后再查询磁盘空间,检查是否释放空间。

posted @ 2016-09-09 23:31  当年亦如是  阅读(410)  评论(0)    收藏  举报