数据文件被误删除后,启动的时候报错,提示文件丢失,如果是无所谓的数据库,那么可以如下折腾。
sys@TEST> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE 例程已经启动。
Total System Global Area 523108352 bytes
Fixed Size 1337632 bytes
Variable Size 390072032 bytes
Database Buffers 125829120 bytes
Redo Buffers 5869568 bytes
数据库装载完毕。
数据库已经打开。
sys@TEST> create tablespace test datafile '/opt/oracle/db/oradata/TEST/test/test01.dmp' size 10m,'/opt/oracle/db/oradata/TEST/test/test02.dmp' size 10m;
表空间已创建。
sys@TEST> !ls /opt/oracle/db/oradata/TEST/test
test01.dmp test02.dmp
sys@TEST> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@TEST> !mv /opt/oracle/db/oradata/TEST/test/test02.dmp /opt/oracle/db/oradata/TEST/test/test02.dmp.bak
sys@TEST> !ls /opt/oracle/db/oradata/TEST/test
test01.dmp test02.dmp.bak
sys@TEST> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE 例程已经启动。
Total System Global Area 523108352 bytes
Fixed Size 1337632 bytes
Variable Size 390072032 bytes
Database Buffers 125829120 bytes
Redo Buffers 5869568 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 8: '/opt/oracle/db/oradata/TEST/test/test02.dmp'
sys@TEST> alter database datafile '/opt/oracle/db/oradata/TEST/test/test02.dmp' offline drop;
数据库已更改。
sys@TEST> alter database open;
数据库已更改。
sys@TEST> select * from dual;
D
-
X
sys@TEST>
现在加入要重新添加刚才同名的数据文件怎么办呢?如下处理。
sys@TEST> alter tablespace test add datafile '/opt/oracle/db/oradata/TEST/test/test02.dmp' size 10m;
alter tablespace test add datafile '/opt/oracle/db/oradata/TEST/test/test02.dmp' size 10m
*
第 1 行出现错误:
ORA-01537: 无法添加文件 '/opt/oracle/db/oradata/TEST/test/test02.dmp' - 该文件已是数据库的一部分
sys@TEST> alter database create datafile '/opt/oracle/db/oradata/TEST/test/test02.dmp' as '/opt/oracle/db/oradata/TEST/test/test02.dmp' size 10m reuse;
数据库已更改。
sys@TEST> recover datafile '/opt/oracle/db/oradata/TEST/test/test02.dmp';
完成介质恢复。
sys@TEST> alter database datafile '/opt/oracle/db/oradata/TEST/test/test02.dmp' online;
数据库已更改。
sys@TEST> Select a.TABLESPACE_NAME,b.FILE_NAME From DBA_TABLESPACES a,dba_data_files b Where a.TABLESPACE_NAME=b.TABLESPACE_NAME And a.TABLESPACE_NAME='TEST';
TABLESPACE_NAME
------------------------------
FILE_NAME
----------------------------------------------------------------------------------------------------
TEST
/opt/oracle/db/oradata/TEST/test/test01.dmp
TEST
/opt/oracle/db/oradata/TEST/test/test02.dmp
sys@TEST>
小结
数据库的数据保护是个很重要的事情,如果是正式环境,千万不要这么干!