今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。
环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。
在回复的时候,回复的方法跟数据库的版本关系不大(因为是物理文件),只是跟操作系统有一定的关系,如:Red hat Linux , Solaris Linux 等等。
下面进行演示:
删除users表空间.
1、我们首先进入Sqlplus,然后执行SQL语句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
select
name
from
v
$
datafile
;
NAME
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk4
/
system01
.
dbf
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk2
/
undotbs01
.
dbf
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk5
/
sysaux01
.
dbf
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk5
/
bigtbs01
.
dbf
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk5
/
indx01
.
dbf
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk2
/
users01
.
dbf
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk3
/
oltp01
.
dbf
7
rows
selected
.
SQL
>
!
rm
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk2
/
users01
.
dbf
|
2、此时,users表空间已经被删除了,我们已经无法在users表空间上建立表了。
尝试在users表空间上建立名字为abcd123的表,已经没法建立了。
1
2
3
4
5
6
7
8
9
|
SQL
>
create
table
abcd123
tablespace
users
as
select *
from
v
$
instance
;
create
table
abcd123
tablespace
users
as
select *
from
v
$
instance
*
ERROR
at
line
1
:
ORA
-
01116
:
error
in
opening
database
file
6
ORA
-
01110
:
data
file
6
:
'/u01/app/oracle/oradata/prod/disk2/users01.dbf'
ORA
-
27041
:
unable
to
open
file
Linux
Error
:
2
:
No
such
file
or
directory
Additional
information
:
3
|
3、确认dbwr进程PID
通过命令,我们可以看到当前数据库实例的dbwr的PID。因为我同一台主机上有两个实例,故有2个。
一个为prod,另一个为oms。
1
2
3
|
$
ps
-
ef
|
grep
dbw0
|
grep
-
v
grep
oracle
11872
1
0
21
:
46
?
00
:
00
:
00
ora_dbw0_prod
oracle
11951
1
0
21
:
47
?
00
:
00
:
01
ora_dbw0_oms
|
4、因为dbwr会打开所有数据文件的句柄。所以可以进入proc目录进行查找,格式为:
cd /prod/PID/fd
此处,fd为文件描述符。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
[
oracle
@
prod
fd
]
$
cd
/
proc
/
11872
/
fd
[
oracle
@
prod
fd
]
$
ls
-
l
total
30
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
0
->
/
dev
/
null
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
1
->
/
dev
/
null
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
10
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
rdbms
/
audit
/
ora_11859
.
aud
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
11
->
/
dev
/
zero
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
12
->
/
dev
/
zero
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
13
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
rdbms
/
mesg
/
oraus
.
msb
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
14
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
dbs
/
hc_prod
.
dat
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
15
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
dbs
/
lkPROD
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
16
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk1
/
control01
.
ctl
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
17
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk2
/
control02
.
ctl
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
18
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk3
/
control03
.
ctl
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
19
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk4
/
system01
.
dbf
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
2
->
/
dev
/
null
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
20
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk2
/
undotbs01
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
21
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk5
/
sysaux01
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
22
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk5
/
bigtbs01
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
23
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk5
/
indx01
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
24
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk2
/
users01
.
dbf
(
deleted
)
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
25
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk3
/
oltp01
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
26
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk1
/
temp01
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
27
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk3
/
lmtemp201
.
dbf
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
28
->
/
u01
/
app
/
oracle
/
oradata
/
prod
/
disk4
/
lmtemp201
.
dbf
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
29
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
rdbms
/
mesg
/
oraus
.
msb
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
3
->
/
dev
/
null
lr
-
x
--
--
--
1
oracle
dba
64
May
14
22
:
47
4
->
/
dev
/
null
l
-
wx
--
--
--
1
oracle
dba
64
May
14
22
:
47
5
->
/
u01
/
app
/
oracle
/
admin
/
udump
/
prod_ora_11859
.
trc
l
-
wx
--
--
--
1
oracle
dba
64
May
14
22
:
47
6
->
/
u01
/
app
/
oracle
/
admin
/
bdump
/
alert_prod
.
log
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
7
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
dbs
/
hc_prod
.
dat
l
-
wx
--
--
--
1
oracle
dba
64
May
14
22
:
47
8
->
/
u01
/
app
/
oracle
/
admin
/
bdump
/
alert_prod
.
log
lrwx
--
--
--
1
oracle
dba
64
May
14
22
:
47
9
->
/
u01
/
app
/
oracle
/
product
/
10.2.0
/
db_1
/
dbs
/
lkinstprod
(
deleted
)
[
oracle
@
prod
fd
]
$
|
我们可以清楚的看到 /u01/app/oracle/oradata/prod/disk2/users01.dbf (deleted) 的字样,表示此文件已经被删掉了。
5、进行恢复
通过cp命令,把语句柄拷贝回原来的位置。
cp 24 /u01/app/oracle/oradata/prod/disk2/users01.dbf
此处的24为其给出的编号。
6、进入recovery
执行以下SQL命令:
1
2
3
4
5
6
7
8
9
10
11
|
SQL
>
alter
database
datafile
6
offline
;
Database
altered
.
SQL
>
recover
datafile
6
;
Media
recovery
complete
.
SQL
>
alter
database
datafile
6
online
;
Database
altered
.
SQL
>
|
至此,回复完成!
7、测试
我们重新尝试在users 表空间上建立一个table。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
SQL
>
create
table
abcd123
tablespace
users
as
select *
from
v
$
instance
;
Table
created
.
SQL
>
select *
from
abcd123
;
INSTANCE_NUMBER
INSTANCE_NAME
--
--
--
--
--
--
--
-
--
--
--
--
--
--
--
--
HOST_NAME
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
VERSION
STARTUP_T
STATUS
PAR
THREAD
# ARCHIVE LOG_SWITCH_WAIT
--
--
--
--
--
--
--
--
-
--
--
--
--
-
--
--
--
--
--
--
--
-
--
--
--
--
--
--
--
--
-
--
--
--
--
--
--
--
-
LOGINS
SHU
DATABASE_STATUS
INSTANCE_ROLE
ACTIVE_ST
BLO
--
--
--
--
--
--
-
--
--
--
--
--
--
--
--
-
--
--
--
--
--
--
--
--
--
--
--
--
--
-
--
-
1
prod
prod
10.2.0.1.0
16
-
APR
-
12
OPEN
NO
1
STARTED
ALLOWED
NO
ACTIVE
PRIMARY_INSTANCE
NORMAL
NO
SQL
>
|
我们可以发现,建立成功了,说明回复成功,