ORA-1157与ORA-01110错误实践(一)

2014-11-24 16:22:22 · 作者: · 浏览: 0
ORA-1157与ORA-01110错误实践
在做备份实验中经常遇到相关的ORA-1157OR1110错误,相关的错误信息,无非就是数据文件,日志文件,和控制文件等一系列相关文件的问题,总体来说只要让我们把各个文件相关的关系衔接好,当然也必须让oracle系统认可我们所使用的相关文件,这ORA错误信息会大大减少!
10.14做了个offline 不同选项的测试(NORMAL,TEMPORARY,IMMEDIATE)的实验,数据文件总是出问题,要么oracle不识别我重构的数据文件,要么就是控制文件的检查点过旧,无法OPEN 数据库,总体来说做下来这些实验还是有些体会的,以下是相关的记录,共享之!
ORA-1157, "cannot identify/lock data file %s - see DBWR trace file"
引起的原因:
因为数据文件已经在被使用了从而导致数据库的后台进程不能找到相应的数据文件或者不能锁定相应的数据文件,这样数据库将禁止访问这些数据文件而其他的数据文件则没有影响。伴随这
个错误操作系统将会提示是哪个数据文件不能被识别。
ORA-01157错误一般和ORA-01110错误一起出现,往往还有操作系统级别上的错误,例如ORA-07360,同时一个DBWR的trace文件会在background_dump_dest的目录下生成。例如,在Solaris的平
台上,会有如下的错误信息显示:
more..
less..
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/export/home/ Oracle/oradata/817/users01.dbf'
然后查看DBWR的trace文件内容,会有如下的内容:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/export/home /Oracle/oradata/817/users01.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
下面就几个容易产生ORA-1157错误的方面详细谈谈:
二. 通常引起ORA-1157错误的原因和解决方法
如果你是使用Oracle9i,就用SQLPLUS代替SVRMGRL执行以下的命令。
1. 数据文件存在,但是Oracle认不到它
这种情况可能是在操作 系统级上数据文件被重命名了或者移动到了一个新的分区或者位置,这种情况比较简单,只是需要将数据文件恢复成原始的数据文件名字或者重新命名数据文件到一个
新的位置/目录就可以解决问题了。
重新命名数据文件到一个新的位置/目录的方法:
A. 数据库是打开状态的
1)查看那个数据文件所在的表空间还包含有哪些数据文件,执行以下查询:
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES 
WHERE TABLESPACE_NAME = '';

2)确定所有数据文件的状态都是可用的。
3)把表空间变成只读表空间:
ALTER TABLESPACE READ ONLY;

4)确定在数据字典中表空间是显示为只读的:
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES 
WHERE TABLESPACE_NAME = ''; 
TABLESPACE_NAME STATUS 
------------------------------ --------- 
READ ONLY 

5)用操作系统命令拷贝数据文件到一个新的位置,拷贝完成后把整个表空间OFFLINE,这个时候用户是不能访问这个表空间的:
ALTER TABLESPACE OFFLINE;

6)重命名这个数据文件到一个新的位置了,这个操作会自动的更新控制文件中的内容:
ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF'; 

7)ONLINE这个表空间:
ALTER TABLESPACE YOUR_TABLESPACE_NAME ONLINE;

8)把这个表空间置成可读写的状态:
ALTER TABLESPACE YOUR_TABLESPACE_NAME READ WRITE;

9)在操作系统级上删除原来旧的数据文件。
B.数据库是关闭状态的
1) 先正常关闭数据库。
2) 用操作系统命令拷贝数据文件到一个新的位置。
3) MOUNT数据库,这样将读取控制文件,但是不会读取数据文件:
STARTUP MOUNT
4) 重命名这个数据文件到一个新的位置了,这个操作会自动的更新控制文件中的内容:
ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF'; 

5) 打开数据库:
ALTER DATABASE OPEN;

2. 数据文件不存在或者对于Oracle来说是不可用的
数据文件被物理的移走了或者损坏导致Oracle不能再认到了,例如数据文件被截断或者覆盖了,一般会出现ORA-27046、ORA-1157的错误提示:
ORA-27046: file size is not a multiple of logical block size
这种情况下可以有两种选择去解决问题:
A. 重建数据文件所属的那个表空间
这种方法比较适用于USERS、TEMP、INDEX表空间,如果数据库是正常关闭的,也就是说回滚段中没有激活的表空间事务,也推荐使用这种方法。如果是SYSTEM表空间,则要重建数据库了。
具体步骤如下:
1) MOUNT数据库:
STARTUP MOUNT PFILE='';
2) OFFLINE DROP数据文件:
ALTER DATABASE DATAFILE '' OFFLINE DROP;
3) 打开数据库:
ALTER DATABASE OPEN;
4) 删除表空间:
DROP TABLESPACE INCLUDING CONTENTS;
5) 重建表空间:
CREATE TABLESPACE DATAFILE 

' SIZE ;
6) 重建表空间中所有以前存在的对象:可以使用以前创建对象的脚本或者利用最近可用的EXPORT DUMP来重建以前