oracle中表空间中的文件已经损坏 如何删除 或解决 表空间问题

2024-11-30 02:23:07
推荐回答(3个)
回答1:

有几种情况,我列一下哈。。。希望可以解决LZ的问题。。

情况1:非system表空间数据文件损坏但备份存在
(a)>startup open //报错但是Database mounted
(b)>select * from v$recover_file;
>alter database datafile N offline drop; //查出待恢复的数据文件,将其脱机
>alter database open;
(c)>!cp /bak/XXXXX.dbf /u01/XXXXX/ora10/ //此处是假定备份存在,将备份文件拷回
>recover datafile N;
(d)>alter database datafile N online; -------搞定

情况2:非system表空间数据文件损坏且没有备份
比如:
(a)>host rm /u01/user02.dbf //删除user02.dbf数据文件模拟文件丢失
(b)>alter system checkpoint; //触发checkpoint,虽然此时user02文件丢失,但是进程仍然知道写盘的目的地址,所以可以触发成功
(c)>alter database datafile '/u01/user02.dbf' offline;
>alter database create datafile '/u01/user02.dbf'; //将user02文件脱机并重建
(d)>recover datafile N; //恢复文件
(e)>alter database datafile '/u01/user02.dbf' online; //搞定

情况3:system表空间数据文件或大量数据文件受损
(a)>startup open; //报错,Database mounted
(b)>host cp /bak/system01.dbf /u01/XXXXX/ora10/ //拷回数据文件
>recover database;
(c)>alter database open;

情况4:回滚表空间数据文件损坏
(a)修改回滚表空间的管理方式为手动管理并重启数据库使修改生效,即可离线原回滚文件并开启数据库。
(b)删掉原回滚表空间进行重建,并指定新回滚数据文件。
(c)再改回滚空间为自动管理方式,重启生效。

情况5:临时表空间数据文件受损
(a)直接offline drop原临时表空间数据文件,并打开数据库
(b)drop原临时表空间再重建并指定新数据文件
(c)搞定。。。。

或者如果有所有表空间数据文件的备份,并且知道数据未丢失的时间,可以使用基于time或SCN的不完全恢复。。。

回答2:


如果归档模式并且有rman备份:
1 alter tablespace cc offline;
2 rman target / nocatalog
restore tablespace cc;
recover tablespace cc;
alter tablespace online;

二 如果有冷备备份文件:
1 shutdown immediate
2 cp 备份/表空间目录
3 startup

回答3:

要看是什么做的备份啦,如果是rman热备份的话,做恢复吧。如果是冷备份,直接拷贝恢复左右文件即可。一句话,只要有备份,一切都OK