Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239129
  • 博文数量: 59
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 592
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-01 12:51
个人简介

你们都是我的客户,所以,我对你们是透明的

文章分类

全部博文(59)

文章存档

2016年(29)

2015年(30)

分类: Oracle

2016-01-13 23:37:08

没有通过drop tablespace 或者drop user 去删除没用的数据文件,而是从操作系统层面rm,就可以这样解决,记录一下。想要恢复的话另当谈论了,方法源自网络,自己试验了一下。

创建表空间test和用户sb

SQL> create tablespace test
  2  datafile '/oracle/oradata/orcl/test.dbf'
  3  size 10M autoextend on
  4  next 10M maxsize unlimited;
Tablespace created.

SQL> SQL> create user sb identified by oracle default tablespace test;
User created.
SQL>

授权
SQL> grant connect,resource to sb;
Grant succeeded.

SQL> conn sb/oracle
Connected.

查看默认表空间
SQL> select default_tablespace from user_users;
DEFAULT_TABLESPACE
------------------------------
TEST

创建一个test1表
SQL> create table test1(
  2  a number,
  3  b varchar2(4)
  4  );
Table created.

插入一行数据
SQL> insert into test1 values(1,'nish');
1 row created.

查看一下
SQL> select * from test1;
         A B
---------- ----
         1 nish
SQL>

模拟删除数据文件(这时候数据库是打开的)
[root@10g ~]# su - oracle
[oracle@10g ~]$ cd /oracle/oradata/orcl

total 1377668
-rw-r-----. 1 oracle oinstall  52429312 Dec 13 16:19 redo01.log
-rw-r-----. 1 oracle oinstall  52429312 Jan 13 16:25 redo03.log
-rw-r-----. 1 oracle oinstall  52429312 Jan 13 16:25 redo01_a.log
-rw-r-----. 1 oracle oinstall   5251072 Jan 13 16:25 users01.dbf
-rw-r-----. 1 oracle oinstall 157294592 Jan 13 16:25 ant_1.dbf
-rw-r-----. 1 oracle oinstall  10493952 Jan 13 16:25 EPICARD.DBF
-rw-r-----. 1 oracle oinstall  20979712 Jan 13 16:30 temp1.dbf
-rw-r-----. 1 oracle oinstall 178266112 Jan 13 16:42 undotbs01.dbf
-rw-r-----. 1 oracle oinstall  10493952 Jan 13 17:21 test.dbf
-rw-r-----. 1 oracle oinstall  20979712 Jan 13 17:35 undo2.dbf
-rw-r-----. 1 oracle oinstall 283123712 Jan 13 17:39 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 471867392 Jan 13 17:39 system01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Jan 13 17:40 redo02.log
-rw-r-----. 1 oracle oinstall   7061504 Jan 13 17:43 control02.ctl
-rw-r-----. 1 oracle oinstall   7061504 Jan 13 17:43 control03.ctl
-rw-r-----. 1 oracle oinstall   7061504 Jan 13 17:43 control01.ctl
[oracle@10g orcl]$ rm test.dbf
[oracle@10g orcl]$ ll test.dbf
ls: cannot access test.dbf: No such file or directory
[oracle@10g orcl]$

shutdown数据库
SQL> show user
USER is "SB"
SQL> conn sys / as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL> shutdown immediate
ORA-01116: error in opening database file 2
ORA-01110: data file 2: '/oracle/oradata/orcl/test.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL>
SQL> select name,open_mode from v$database;
NAME      OPEN_MODE
--------- ----------
ORCL      READ WRITE
SQL>

abort数据库
SQL> shutdown abort
ORACLE instance shut down.
SQL> select name,open_mode from v$database;
select name,open_mode from v$database
*
ERROR at line 1:
ORA-01034: ORACLE not available
SQL>

再startup
[oracle@10g ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Wed Jan 13 23:10:41 2016
Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
Connected to an idle instance.

SQL> startup
ORACLE instance started.
Total System Global Area  201326592 bytes
Fixed Size                  2095056 bytes
Variable Size             146802736 bytes
Database Buffers           46137344 bytes
Redo Buffers                6291456 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oracle/oradata/orcl/test.dbf'
SQL>

看看alert日志
...
Successful mount of redo thread 1, with mount id 1428838517
Wed Jan 13 23:10:49 CST 2016
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT
Wed Jan 13 23:10:49 CST 2016
ALTER DATABASE OPEN
Wed Jan 13 23:10:49 CST 2016

ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oracle/oradata/orcl/test.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-1157 signalled during: ALTER DATABASE OPEN...
[oracle@10g bdump]$

再看看这个/oracle/admin/orcl/bdump/orcl_dbw0_3163.trc
[oracle@10g bdump]$ more /oracle/admin/orcl/bdump/orcl_dbw0_3163.trc
/oracle/admin/orcl/bdump/orcl_dbw0_3163.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /oracle/product/10.2.0/db_1
System name:    Linux
Node name:      10g
Release:        2.6.32-358.el6.x86_64
Version:        #1 SMP Tue Jan 29 11:47:41 EST 2013
Machine:        x86_64
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 5
Unix process pid: 3163, image: oracle@10g (DBW0)

*** SERVICE NAME:() 2016-01-13 23:10:49.504
*** SESSION ID:(167.1) 2016-01-13 23:10:49.504
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oracle/oradata/orcl/test.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
[oracle@10g bdump]$
说的都一样的

网上有人说这样
1. 在mount下
alter database datafile 'xxxxxxxx' offline drop;
2. alter database open
3. drop user
4. drop tablespace xxxx including contents;
 
448


SQL> alter database datafile '/oracle/oradata/orcl/test.dbf' offline drop;
Database altered.

SQL> alter database open;
Database altered.

SQL> drop user sb cascade;
User dropped.

SQL> drop tablespace test including contents;
Tablespace dropped.
SQL>

看起来像那么回事,重启数据库看看
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.
Total System Global Area  201326592 bytes
Fixed Size                  2095056 bytes
Variable Size             146802736 bytes
Database Buffers           46137344 bytes
Redo Buffers                6291456 bytes
Database mounted.
Database opened.

SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/oracle/oradata/orcl/temp1.dbf
/oracle/oradata/orcl/users01.dbf
/oracle/oradata/orcl/sysaux01.dbf
/oracle/oradata/orcl/system01.dbf
/oracle/oradata/orcl/undo1.dbf
/oracle/oradata/orcl/ant_1.dbf
/oracle/oradata/orcl/EPICARD.DBF
/oracle/oradata/orcl/undo2.dbf
8 rows selected.

好像成了
阅读(1633) | 评论(0) | 转发(0) |
0

上一篇:重建undo和temp

下一篇:日常搬砖

给主人留下些什么吧!~~