一: 数据文件丢失
环境:新建表空间zhen,用户zhen,删除数据文件zhen.dbf系统报错。
错误讯息:SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 92276304 bytes
Database Buffers 188743680 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/oracle/oradata/db3/zhen.dbf'
查看报警文件:
Errors in file /oracle/admin/db3/bdump/db3_dbw0_3293.trc:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/oracle/oradata/db3/zhen.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
处理方法:
1. Startup mount
2. rman target /
3. 查看目前数据文件
RMAN> report schema;
using target database control file instead of recovery catalog
Report of database schema
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 480 SYSTEM *** /oracle/oradata/db3/system01.dbf
2 45 UNDOTBS1 *** /oracle/oradata/db3/undotbs01.dbf
3 250 SYSAUX *** /oracle/oradata/db3/sysaux01.dbf
4 5 USERS *** /oracle/oradata/db3/users01.dbf
5 100 ZHEN *** /oracle/oradata/db3/zhen.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 20 TEMP 32767 /oracle/oradata/db3/temp01.dbf
4 sql页面将数据文件offline。
SQL> alter database datafile 5 offline;
5 恢复数据文件5的数据。
RMAN> restore datafile 5
RMAN> recover datafile 5;
6 使表空间online;
SQL> alter database datafile 5 online;
恢复ok
二:临时表空间错误:
实验环境:shell下直接删除temp数据文件
shutdown immediate
startup
成功启动,没有报错,报警文件也没有报错。
因为临时表空间是排序用的,所以查一个表
Sql>select * from a oeder by id;
还是没有报错,奇怪
3 查看shell下,临时表空间已经自己建好。晕:实验失败。
三: 改实验为修改默认表空间;
新建临时表空间;
1 SQL> create temporary tablespace temp02 tempfile '/oracle/oradata/temp02.dbf' size 50m;
2 查看目前临时表空间
SQL> select * from v$tempfile;
FILE# CREATION_CHANGE# CREATION_ TS# RFILE# STATUS ENABLED
---------- ---------------- --------- ---------- ---------- ------- ----------
BYTES BLOCKS CREATE_BYTES BLOCK_SIZE
---------- ---------- ------------ ----------
NAME
--------------------------------------------------------------------------------
1 446159 03-JUL-10 3 1 ONLINE READ WRITE
20971520 2560 20971520 8192
/oracle/oradata/db3/temp01.dbf
2 634975 21-JUL-10 7 1 ONLINE READ WRITE
52428800 6400 52428800 8192
/oracle/oradata/temp02.dbf
3 修改默认临时表空间:
SQL> alter database default temporary tablespace temp02;
4 删除原临时表空间
SQL> drop tablespace temp;
5 查看目前临时表空间
SQL> select * from v$tempfile;
FILE# CREATION_CHANGE# CREATION_ TS# RFILE# STATUS ENABLED
---------- ---------------- --------- ---------- ---------- ------- ----------
BYTES BLOCKS CREATE_BYTES BLOCK_SIZE
---------- ---------- ------------ ----------
NAME
--------------------------------------------------------------------------------
2 634975 21-JUL-10 7 1 ONLINE READ WRITE
52428800 6400 52428800 8192
/oracle/oradata/temp02.dbf
实验四:undo回滚表空间坏掉:
环境:删除undo表空间数据文件,强行shutdown abort
问题:SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 92276304 bytes
Database Buffers 188743680 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oracle/oradata/db3/undotbs01.dbf'
启动时报错:只能到mount状态
解决方法一:
本打算按老师方法,重建redu表空间,突然想到我有rman备份。
直接:
1 startup mount
2 rman target /
3 report schema查看序号为2;
4 {
Restore datafile 2;
Recover datafile 2;
Sql”alter database open”
}
Ok测试成功。
方法二:重建redo,适用于没有人满备份情况。
1 关闭数据库shutdown abort
2 修改参数文件将下面两个参数注销:
# *.undo_management='AUTO'
#*.undo_tablespace='UNDO01'
3 startup mount 启动到mount状态
4 SQL> alter database datafile 2 offline;
5 alter database open;
6 重建redo表空间。
SQL> create undo tablespace undo02 datafile '/oracle/oradata/undo02.dbf' size 50m;
7 shutdown后,修改参数文件
*.undo_management='AUTO'
*.undo_tablespace='UNDO02'
8 startup
测试ok。
实验五:重建控制文件
1 SQL> alter database backup controlfile to trace;
2 $ cat db3_ora_414.trc
CREATE CONTROLFILE REUSE DATABASE "DB3" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oracle/oradata/db3/redo01.log' SIZE 50M,
GROUP 2 '/oracle/oradata/db3/redo02.log' SIZE 50M,
GROUP 3 '/oracle/oradata/db3/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oracle/oradata/db3/system01.dbf',
'/oracle/oradata/db3/undotbs01.dbf',
'/oracle/oradata/db3/sysaux01.dbf',
'/oracle/oradata/db3/users01.dbf',
'/oracle/oradata/db3/zhen.dbf',
'/oracle/oradata/undo02.dbf'
CHARACTER SET ZHS16GBK
;