表空间的物理文件被完全删除,导致ORACLE无法连接,如何恢复?

nibh 2003-08-28 10:34:30
先创建表空间文件,再创建用户,接着删除用户,停止ORACEL服务器,手工删除创建的表空间文件.再重新启动ORACLE,连接时提示:ORACLE NOT AVAILABLE.有什么办法使ORACLE恢复?
...全文
824 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nibh 2003-08-30
  • 打赏
  • 举报
回复
感谢阿木和飘,我的数据库已恢复.
使用leeshow的方法,数据库提示:ora-01034:oracle not availabled.
tiangou 2003-08-29
  • 打赏
  • 举报
回复
请输入用户名: sys/sys@zhou as sysdba

连接到:
Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production

SQL> create tablespace test datafile 'c:\test.dbf' size 1M;

表空间已创建。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 9: 'C:\TEST.DBF'


SQL> shutdown immediate
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 83886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
数据库装载完毕。

SQL> alter database datafile 'C:\TEST.DBF' offline drop;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL>
l2g32003 2003-08-29
  • 打赏
  • 举报
回复
不用恢复数据文件的话 上面的就可以解决

1.查看归档情况
SQL> connect internal
已连接。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\oracle\oradata\ora8i\archive
最早的概要信息日志序列 501
下一个存档日志序列 503
当前日志序列 503
SQL>

2.创建测试的数据文件及表空间
SQL> show user
USER 为"SYSTEM"
SQL> select file_name, tablespace_name from dba_data_files;

FILE_NAME TABLESPACE_NAM
-------------------------------------------------- --------------
D:\ORACLE\ORADATA\ORA8I\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\ORA8I\RBS01.DBF RBS
D:\ORACLE\ORADATA\ORA8I\USERS01.DBF USERS
D:\ORACLE\ORADATA\ORA8I\TEMP01.DBF TEMP
D:\ORACLE\ORADATA\ORA8I\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\ORA8I\INDX01.DBF INDX
D:\ORACLE\ORADATA\ORA8I\OEM_REPOSITORY.ORA OEM_REPOSITORY
D:\ORACLE\ORADATA\ORA8I\TTS_EX1.DBF TTS_EX1
D:\ORACLE\ORADATA\ORA8I\TTS_EX2.DBF TTS_EX2

已选择9行。

SQL> create tablespace table_data
2 datafile 'd:\oracle\oradata\ora8i\table_data.dbf' size 2M;

表空间已创建。

3.创建测试的用户和表
SQL> create user aa identified by aa
2 default tablespace table_data
3 temporary tablespace temp;

用户已创建

SQL> grant connect, resource to aa;

授权成功。
SQL> grant alter system to aa;

授权成功。
SQL> conn aa/aa;
已连接。
SQL> create table test(a int);

表已创建。

4.创建测试的表数据
SQL> insert into test values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。
SQL> insert into test values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into test values(3);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into test values(4);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

A
----------
1
2
3
4

因为都commit了,所以如果成功恢复的话,应该可以看到全部4条数据。

5.物理删除文件d:\oracle\oradata\ora8i\table_data.dbf
SVRMGR> connect internal
连接成功。
SVRMGR> shutdown immediate;
已关闭数据库。
已卸下数据库。
已关闭 ORACLE 实例。

D:\>del d:\oracle\oradata\ora8i\table_data.dbf
D:\oracle\oradata\ora8i>dir *.dbf/w
驱动器 D 中的卷没有标签。
卷的序列号是 C822-4715

D:\oracle\oradata\ora8i 的目录

INDX01.DBF RBS01.DBF SYSTEM01.DBF TEMP01.DBF TOOLS01.DBF
TTS_EX1.DBF TTS_EX2.DBF USERS01.DBF
8 个文件 736,165,888 字节
0 个目录 1,280,155,648 可用字节

6.启动数据库报错
SVRMGR> startup
ORACLE instance started.
Total System Global Area 54761500 bytes
Fixed Size 75804 bytes
Variable Size 19685376 bytes
Database Buffers 34922496 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 10 - see DBWR trace file
ORA-01110: data file 10: 'D:\ORACLE\ORADATA\ORA8I\TABLE_DATA.DBF'

7.开始进行恢复
SVRMGR> alter tablespace TABLE_DATA offline immediate;
alter tablespace TABLE_DATA offline immediate
*
ORA-01109: database not open
SVRMGR> select * from v$recover_file;
FILE# ONLINE ERROR CHANGE# TIME
---------- ------- ------------------ ---------- ---------
10 ONLINE FILE NOT FOUND 0
1 row selected.

SVRMGR> alter database datafile 10 offline;
Statement processed.

SVRMGR> alter database open;

Statement processed.

SVRMGR> alter database create datafile 'D:\ORACLE\ORADATA\ORA8I\TABLE_DATA.DBF'
as 'D:\ORACLE\ORADATA\ORA8I\TABLE_DATA.DBF' size 2M;

Statement processed.
SVRMGR> recover tablespace table_data;
ORA-00279: change 760836 generated at 08/25/2003 17:41:31 needed for thread 1
ORA-00289: suggestion : D:\ORACLE\ORADATA\ORA8I\ARCHIVE\ORA8IT001S00503.ARC
ORA-00280: change 760836 for thread 1 is in sequence #503
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
ORA-00279: change 760874 generated at 08/25/2003 17:47:07 needed for thread 1
ORA-00289: suggestion : D:\ORACLE\ORADATA\ORA8I\ARCHIVE\ORA8IT001S00504.ARC
ORA-00280: change 760874 for thread 1 is in sequence #504
ORA-00278: log file 'D:\ORACLE\ORADATA\ORA8I\ARCHIVE\ORA8IT001S00503.ARC' no lon
ger needed for this recovery
Log applied.
Media recovery complete.
SVRMGR> alter tablespace table_data online;
Statement processed.

8.测试是否恢复完整
SQL> conn aa/aa;
Connected.
SQL> select * from test;

A
----------
1
2
3
4
6liuy 2003-08-29
  • 打赏
  • 举报
回复
同意 tiangou(阿木)
LGQDUCKY 2003-08-29
  • 打赏
  • 举报
回复
手工删除创建的表空间文件,以后操作要在数据库里面做,
因为你物理删除数据文件,并不是数据库的行为。
因为你这个数据文件不需要,这种方法恢复简单。例如:
上面的兄弟也提到了:
用SVRMGRL
SVRMGRL>CONNECT internal
SVRMGRL>startup mount
SVRMGRL> alter database datafile <删除的文件名,全路径> offline drop;
SVRMGRL>alter database open;
chanet 2003-08-29
  • 打赏
  • 举报
回复
以oracle身份登陆:
1.
$sqlplus /nolog
sql>connect internal
sql>startup

2.
$sqlplus internal
sql>startup

3.
$sqlplus /nolog
sql>connect /as sysdba
sql>startup

4.
$svrmgr
svrmgr>connect internal
svrmgr>startup

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧