数据文件坏了

[复制链接]
查看11 | 回复9 | 2014-2-18 16:42:02 | 显示全部楼层 |阅读模式
好事旺 超市一数据文件损坏,模拟 数据文件损坏 做 恢复测试

创建一个表空间好事旺
create tablespacehsw datafile'c:\hsw01.dbf' size 1m;
Tablespace created.
查询好事旺 数据文件的状态
select file_name,status,online_status from dba_data_files wherefile_name like '%HSW%';
FILE_NAME STATUSONLINE_STATUS
---------------- -------------- --------------
C:\HSW01.DBFAVAILABLE ONLINE

DROP数据文件好事旺
alter database datafile 'C:\HSW01.DBF' offline fordrop;
Database altered.
select name from v$dbfile where name like '%HSW%';
NAME
---------------------------------------------------------------------------
C:\HSW01.DBF

创建 一个用户默认表空间就是 好事旺
create user hswidentified byhsw default tablespace hsw;
User created.
grant dba to hsw;
Grant succeeded.

alter session set nls_language=american;
Session altered.

创建一张表报错,表示此数据文件已经不可读写了
create table hsw (name char(20));
create table hsw (name char(20))
*
ERROR at line 1:
ORA-01658: unable to create INITIAL extent for segment in tablespace HSW


好事旺数据文件当前的状态为recover
SYS >select file_name,status,online_status from dba_data_files wherefile_name like '%HSW%';
FILE_NAME
STATUS
ONLINE_STATUS
--------------------------------------------- ---------------------------------------- --------------
C:\HSW01.DBF
AVAILABLE
RECOVER

好事旺 数据文件的 编号为6
select file_id,file_name,online_status from dba_data_files where file_name like'%HSW%';
FILE_ID FILE_NAME
ONLINE_STATUS
---------- --------------------------------------------- --------------
6 C:\HSW01.DBF
RECOVER

试试 这种方法能 恢复 好事旺 数据文件不
alter database create datafile 'C:\HSW01.DBF';
Database altered.
好事旺依然是recover的
select file_id,file_name,online_status from dba_data_files where file_name like'%HSW%';
FILE_ID FILE_NAME
ONLINE_STATUS
---------- --------------------------------------------- --------------
6 C:\HSW01.DBF
RECOVER



看来还是得靠RMAN 啊
RMAN> restore datafile 6;
启动 restore 于 14-2月 -14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=274 devtype=DISK
创建数据文件 fno = 6 名称 = C:\HSW01.DBF
没有完成恢复; 所有文件均为只读或脱机文件或者已经恢复
完成 restore 于 14-2月 -14
RMAN> recover datafile 6;
启动 recover 于 14-2月 -14
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:02
完成 recover 于 14-2月 -14


select file_id,file_name,online_status from dba_data_files where file_name like'%HSW%';
FILE_ID FILE_NAME
ONLINE_STATUS
---------- --------------------------------------------- --------------
6 C:\HSW01.DBF
OFFLINE

alterdatabasedatafile 'C:\HSW01.DBF' online;
数据库已更改。
select file_id,file_name,online_status from dba_data_files where file_name like'%HSW%';
FILE_ID FILE_NAME
ONLINE_STATUS
---------- --------------------------------------------- --------------
6 C:\HSW01.DBF
ONLINE


connecthsw/hsw
已连接。
showuser
USER 为 "HSW"
create table hsw (name char(200));
表已创建。
insert into hsw values ('hsw');
已创建 1 行。
commit;
提交完成。
select * fromhsw;
NAME
--------------------------------------------------
hsw

来看看问题:
1、alter database datafile 'hsw.dbf' for offline drop;是从 控制文件中删除的数据文件的信息还是在数据字典删除的?
回车后,硬盘上的物理文件依然存在。
2、alter database createdatafile'hsw.dbf'; 前提是要配置归档,那这句命令的作用 是恢复 到控制文件中DBF的位置 信息还是执行了哪些操作呢?








回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
唉。。。。。坏了就 坏了呗,估计也没人理
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
加我Q 7437313 恢复
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
要多少钱恢复 啊?
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
alter database datafile 'hsw.dbf' for offline drop;还有这种语法FOR
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
jason_xiong 发表于 2014-2-14 11:24
要多少钱恢复 啊?

这种,公司级别可能几万,个人级别可能几千吧
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
1、alter database datafile 'hsw.dbf' for offline drop;是从 控制文件中删除的数据文件的信息还是在数据字典删除的?
回车后,硬盘上的物理文件依然存在。
物理文件不会删,语法还错了吧
2、alter database createdatafile'hsw.dbf'; 前提是要配置归档,那这句命令的作用 是恢复 到控制文件中DBF的位置 信息还是执行了哪些操作呢?

创建了一个空的数据文件.
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
来看看问题:
1、alter database datafile 'hsw.dbf' for offline drop;是从 控制文件中删除的数据文件的信息还是在数据字典删除的?
回车后,硬盘上的物理文件依然存在。
--> offline drop基本等同与offline,非归档模式时要用offline drop
但是以前做强制恢复是发现offline和offline drop还是有一些差别的,但是具体差别没研究。
offline drop可以在mount下操作,所以控制文件里面肯定会修改,但是不是删除。

2、alter database createdatafile'hsw.dbf'; 前提是要配置归档,那这句命令的作用 是恢复 到控制文件中DBF的位置 信息还是执行了哪些操作呢?
-->这个就是把数据文件恢复到add或create时的那个SCN点,里面没有任何数据。所以需要从文件被添加进来开始SCN以后的所有归档/redo。
不一定需要配置归档,current,active,inactive的redo里面包括SCN点以后的所有redo信息,也可以恢复。
简单例子:非归档模式,9:00添加这个文件,10点文件被干掉,数据库3个redo,中间切换了1次,redo肯定没有被覆盖,用create datafile --> recover datafile可以恢复。


回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
本帖最后由 bfc99 于 2014-2-14 14:15 编辑
1、alter database datafile .... offline for drop 中的 for drop 子句对于运行在非归档模式的数据库而言,如果你希望把一个数据文件OFFLINE,这个子句是必须要写的。但它的目的也仅仅是为了使OFFLINE的动作可以成功完成,并不会去删除数据文件。而如果数据库工作在归档模式,for drop则可有可无。如果你写了,系统也是忽略掉。
详细说明请见:
http://docs.oracle.com/cd/E11882 ... 1004.htm#SQLRF52478
2、alter database create datafile 'hsw.dbf'的作用是创建一个名为hsw.dbf的数据文件。前提是你的数据库上曾经有过一个这样的文件,只不过现在这个文件丢失了。通过dba_data_files视图去查看,一定是有这样一个文件,只不过其状态为OFFLINE或RECOVER. 用这条命令去创建这样一个数据文件时,数据文件的大小和属性与最初的,被标记为OFFLINE(或RECOVER)的文件是相同的。但新创建出来的文件内容是空的,需要用recover命令去恢复这个文件中的内容。
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
感谢楼上 众亲的回帖,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行