免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2780 | 回复: 6

[转贴]ORACLE表空间恢复方案 [复制链接]

论坛徽章:
0
发表于 2003-12-23 22:19 |显示全部楼层
一)用户表空间
错误:
在启动数据库时出现ORA-01157,ORA-01110或操作系统级错误例如ORA-07360,
在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA
-01116,ORA-01110以及操作系统级错误ORA-07368
解决:
以下有两种解决方案:
1.用户的表空间可以被轻易地重建
即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等.在
这种情况下,最简单的方法是offline并删除该数据文件,删除表空间并
重建表空间以及所有的对象.
svrmgrl>; startup mount
svrmgrl>; alter database datafile filename offline drop;
svrmgrl>; alter database open;
svrmgrl>; drop tablespace tablespace_name including contents;
重建表空间及所有对象.
2.用户的表空间不能够被轻易地重建
在大多数情况下,重建表空间是不可能及太辛苦的工作.方法是倒备份及做介
质恢复.如果您的系统运行在NOARCHIVELOG模式下,则只有丢失的数据
在online redo log中方可被恢复。
步骤如下:
1)Restore the lost datafile from a backup
2)svrmgrl>; startup mount
3)svrmgrl>; select v1.group#,member,sequence#,first_change#
>; from v$log v1,v$logfile v2
>; where v1.group#=v2.group#;
4)如果数据库运行在NOARCHIVELOG模式下则:
svrmgrl>; select file#,change# from v$recover_file;
如果 CHANGE# 大于最小的FIRST_CHANGE#则数据文件可以被恢复。
如果 CHANGE# 小于最小的FIRST_CHANGE#则数据文件不可恢复。 恢复最近一
次的全备份或采用方案一.
5)svrmgrl>; recover datafile filename;
6)确认恢复成功
7)svrmgrl>; alter database open resetlogs;
3.只读表空间无需做介质恢复,只要将备份恢复即可.唯一的例外是:
表空间在最后一次备份后被改为read-write 模式
表空间在最后一次备份后被改为read-only 模式
在这种情况下,均需进行介质恢复

二)临时表空间
临时表空间并不包含真正的数据,恢复的方法是删除临时表空间并重建即可.

三)系统表空间
如果备份不可用,则只能采用重建数据库的方法

四)回滚表空间
有两种情况:
1、数据库已经完全关闭(使用shutdown immediate或shutdown命令)
1) 确认数据库完全关闭
2) 修改init.ora文件,注释"rollback-segment"
3) svrmgrl>; startup restrict mount
4) svrmgrl>; alter database datafile filename offline drop;
5) svrmgrl>; alter database open;
基于出现的结果:
"statement processed" 转(7)
"ORA-00604,ORA-00376,ORA-01110"转(6)
6) svrmgrl>; shutdown immediate
修改init.ora文件,增加如下一行:
_corrupted_rollback_segments = (,...)
svrmgrl>; startup restrict
7) svrmgrl>; drop tablespace tablespace_name including contents;
8) 重建表空间及回滚段
9) svrmgrl>; alter system disable restricted session;
10) 修改init.ora文件
2、数据库未完全关闭(数据库崩溃或使用shutdown abort命令关闭数据库)
1) 恢复备份
2) svrmgrl>; startup mount
3) svrmgrl>; select file#,name,status from v$datafile;
svrmgrl>; alter database datafile filename online;
4) svrmgrl>; select v1.group#,member,sequence#,first_change#
>; from v$log v1,v$logfile v2
>; where v1.group#=v2.group#;
5) svrmgrl>; select file#,change# from v$recover_file;
见一方案2-4
6) svrmgrl>; recover datafile filename;
7) svrmgrl>; alter database open;
3、数据库处于打开状态
1) 删除回滚段和表空间
2) 重建表空间和回滚段

五)控制文件恢复
1.所有的控制文件均被破坏
将备份的控制文件拷贝至原目录下
对于RAW DEVICE,则:
dd if='con.bak' of='/dev/rdrd/drd1' seek=128
2.并非所有的控制文件均被破坏
用其他的控制文件启动数据库

论坛徽章:
0
发表于 2003-12-24 21:47 |显示全部楼层

[转贴]ORACLE表空间恢复方案

很有用的。

论坛徽章:
0
发表于 2004-01-08 06:19 |显示全部楼层

[转贴]ORACLE表空间恢复方案


我没有执行svrmgrl>; drop tablespace tablespace_name including contents;  这句命令是否有影响?
这句好像是解除那个被删除的表空间的关系。
同时执行了后需要做什么操作?
我的情况是这样的:
我原来有个表空间a(a.dbf)放在A目录下,我又给它增加了表空间
(a.dbf)被系统自动放在B目录下,但我嫌增加的表空间不够,我就
把B目录下的a.dbf删除了,A目录下的没动,这时我就发现数据库
服务起来时有错误,同时在监听服务起来后发现sqlplus连不上去,
后来按照你的文档我执行了前面3句,没有执行最后一句,发现
数据库服务能正常起来了,同时在监听服务起来后sqlplus也能
连上去了,但是在我执行select name from v$datafile;和
select name from v$tablespace;这两句sql语句时都出错,
提示v$datafile和v$tablespace不存在,这是怎么回事?望给予帮助,
谢谢!

论坛徽章:
0
发表于 2004-01-08 08:10 |显示全部楼层

[转贴]ORACLE表空间恢复方案

挺有用的

论坛徽章:
0
发表于 2004-01-08 10:08 |显示全部楼层

[转贴]ORACLE表空间恢复方案

原帖由 "helloracle" 发表:

我没有执行svrmgrl>; drop tablespace tablespace_name including contents;  这句命令是否有影响?
这句好像是解除那个被删除的表空间的关系。
同时执行了后需要做什么操作?
我的情况是这样的:
我..........


你这样乱搞一气想达到什么目的?能起来才叫奇怪。
把oracle的恢复原理搞清楚先。

论坛徽章:
0
发表于 2004-04-13 22:57 |显示全部楼层

[转贴]ORACLE表空间恢复方案

那位老兄是不是想试一下那段文章能使数据恢复到什么程度

论坛徽章:
0
发表于 2004-04-13 22:59 |显示全部楼层

[转贴]ORACLE表空间恢复方案

那位老兄是不是想试一下那段文章能使数据恢复到什么程度
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP