数据导入时遭遇 ORA-01187 ORA-01110

最近的数据导入(IMP)时碰到了ORA-01187 ORA-01110 错误,由于这个数据库是使用热备恢复过来的,且恢复也是成功的,因为数据库能够成功open,那到底是哪里有遗漏呢?如你有类似的问题,不妨往下看。

1、故障现象

IMP-00003: ORACLE error 1187 encountered
ORA-01187: cannot read from file 202 because it failed verification tests
ORA-01110: data file 202: '/u02/database/EC0320/temp/EC0320_tempEC0320.dbf'
IMP-00017: following statement failed with ORACLE error 1187:
 "CREATE INDEX "IDX_GOAAH1" ON "GO_GA_ACC_HIST_TBL" ("GOAAHACCNUM" )  PCTFREE"
 " 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 142606336 FREELISTS 1 FREELIST "
 "GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "GOEX_ACCOUNT_IDX" LOGGING"

SQL> select FILE_NAME,STATUS,AUTOEXTENSIBLE from dba_temp_files;
select FILE_NAME,STATUS,AUTOEXTENSIBLE from dba_temp_files
                                            *
ERROR at line 1:
ORA-01187: cannot read from file 201 because it failed verification tests
ORA-01110: data file 201: '/u02/database/EC0320/temp/tempEC0320.dbf'

2、故障分析

--上面的ORA错误时和临时表空间数据文件有关的错误,无法读取temp数据文件
--查看一下ora-01187错误信息描述,下面的描述中告诉我们使用LTER SYSTEM CHECK DATAFILES
oracle@vmdb01p:/u02/database/EC0320/BNR/full> oerr ora 01187
01187, 00000, "cannot read from file %s because it failed verification tests"
// *Cause:  The data file did not pass the checks to insure it is part of the
//         database. Reads are not allowed until it is verified.
// *Action: Make the correct file available to the database. Then, either open
//         the database, or execute ALTER SYSTEM CHECK DATAFILES.

--检查一下对应的数据文件是否存在,下面的检查发现数据文件都在
SQL> ho ls -hltr /u02/database/EC0320/temp/
total 603M
-rw-r----- 1 oracle oinstall 201M 2013-06-08 04:42 tempEC0320.dbf
-rw-r----- 1 oracle oinstall 404M 2013-06-08 06:40 EC0320_tempEC0320.dbf
-rw-r----- 1 oracle oinstall 101M 2013-06-09 13:25 EC0320_temp.dbf

--检查一下日志文件的相关信息
--下面的查询貌似临时表空间下的数据文件都处于 online 状态,这个查询来自控制文件,而前面的哪个查询来自数据字典,查询数据字典报错
SQL> col name format a60
SQL> set linesize 160
SQL> select s.name tbsname,t.name,(t.bytes/1024/1024) bytes,status
  2  from v$tablespace s,v$tempfile t
  3  where s.ts# = t.ts#;

TBSNAME       NAME                                                              BYTES STATUS
------------- ------------------------------------------------------------ ---------- -------
TEMP          /u02/database/EC0320/temp/tempEC0320.dbf                            200 ONLINE
GOEX_TEMP     /u02/database/EC0320/temp/EC0320_tempEC0320.dbf                     403 ONLINE
FIX_TEMP      /u02/database/EC0320/temp/EC0320_temp.dbf                           100 ONLINE

--看一下缺省的临时表空间配置,此处的配置为temp,也就是说系统缺省的临时表空间为temp
SQL> col PROPERTY_VALUE format a20
SQL> select property_name,property_value from database_properties
  2  where property_name like 'DEFAULT%';

  PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DEFAULT_TEMP_TABLESPACE        TEMP
DEFAULT_PERMANENT_TABLESPACE   GOEX_ACCOUNT_TBL
DEFAULT_TBS_TYPE               SMALLFILE

--查看一下GOEX_TEMP临时表空间属于哪个用户
SQL> select username,TEMPORARY_TABLESPACE from dba_users where username='GOEX_ADMIN';

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
GOEX_ADMIN                     GOEX_TEMP

3、故障解决

--从上面的情形来看,应该是热备恢复之后,由于临时表空间不需要做restore,所以导致了控制文件中临时表空间的相关信息与数据字典中记录的不一致
--下面我们来为临时表空间GOEX_TEMP增加一个数据文件
SQL> alter tablespace GOEX_TEMP add tempfile '/u02/database/EC0320/temp/EC0320_tempEC0320_2.dbf' size 100m autoextend on;

Tablespace altered.

--删除之前的数据文件
SQL> alter tablespace GOEX_TEMP drop tempfile '/u02/database/EC0320/temp/EC0320_tempEC0320.dbf';

Tablespace altered.

--再次查询dba_temp_files,可以看到下面的错误提示是一样的,只不过指向了不同的数据文件,依然需要修改
SQL> select FILE_NAME,STATUS,AUTOEXTENSIBLE from dba_temp_files;
select FILE_NAME,STATUS,AUTOEXTENSIBLE from dba_temp_files
*
ERROR at line 1:
ORA-01187: cannot read from file 201 because it failed verification tests
ORA-01110: data file 201: '/u02/database/EC0320/temp/tempEC0320.dbf'

SQL> alter tablespace TEMP add tempfile '/u02/database/EC0320/temp/tempEC0320_2.dbf' size 100m autoextend on;

Tablespace altered.

SQL> alter tablespace TEMP drop tempfile '/u02/database/EC0320/temp/tempEC0320.dbf';

Tablespace altered.

SQL> alter tablespace FIX_TEMP add tempfile '/u02/database/EC0320/temp/EC0320_temp_fix.dbf' size 100m autoextend on;

Tablespace altered.

SQL> alter tablespace FIX_TEMP drop tempfile '/u02/database/EC0320/temp/EC0320_temp.dbf';

Tablespace altered.

SQL> select FILE_NAME,STATUS,AUTOEXTENSIBLE from dba_temp_files;

FILE_NAME                                                    STATUS    AUT
------------------------------------------------------------ --------- ---
/u02/database/EC0320/temp/EC0320_temp_fix.dbf                AVAILABLE YES
/u02/database/EC0320/temp/tempEC0320_2.dbf                   AVAILABLE YES
/u02/database/EC0320/temp/EC0320_tempEC0320_2.dbf            AVAILABLE YES
--上述操作之后,对应的文件在文件系统中并没有删除,需要手动删除
--应该可以通过reuse方式来重新使用临时表空间的数据文件,而无需通过添加删除方式来解决,此未测试

4、小结 a、对于数据库恢复之后,除了能够正常open之外,应考虑临时表空间是否处于可用状态 b、对于ORA之类的错误,最快的了解错误的详细信息是系统命令提示符下输入oerr ora <err_no> c、相关临时表空间的文章可参考: 临时表空间的管理与受损恢复 收缩临时表空间

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

关于dual表的破坏性测试(r3笔记第60天)

关于dual表的破坏性测试,既然是破坏性测试,就需要确定这个测试仅限于测试或者个人学习所用,可能有些sql看似极为简单,但是一旦运行就会导致整个业务系统崩溃。 ...

409130
来自专栏cloudskyme

使用oracle的大数据工具ODCH访问HDFS数据文件

软件下载 Oracle Big Data Connectors:ODCH 下载地址: http://www.oracle.com/technetwork/bdc...

39580
来自专栏杨建荣的学习笔记

创建index 使用Online导致的问题(95天)

在本地的测试库中,本来空间就不足,结果创建了一个表有600多万条记录,想创建一个index. 物理段有340多M. 临时段大小有100M,结果想创建一个索引,总...

383130
来自专栏乐沙弥的世界

MySQL抑制binlog日志中的BINLOG部分

    MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库。MySQL binlog日志记录有3...

15910
来自专栏乐沙弥的世界

Oracle 角色、配置文件

增加或删除角色中的某一权限,被授予该角色的所有用户或角色自动地获得新增权限或删除旧的权限

11620
来自专栏杨建荣的学习笔记

insert中启用错误日志的问题及分析(r2第10天)

在平时的工作中,有时候需要insert一批数据,这些数据可能是临时表,外部表,普通表,子查询等形式,类似下面的格式 insert into xxxx (sele...

33790
来自专栏杨建荣的学习笔记

关于exp/imp的总结学习(r4笔记第26天)

关于exp/imp,是很常用的数据导出导入工具,在10g开始推出的数据泵datapump相当于是exp/imp的补充和升级版本。在后续章节再做一个总结。 exp...

31870
来自专栏乐沙弥的世界

ORA-02019 错误处理

       ORA-02019 错误提示是未找到远程数据库的连接说明,通常发生在本地数据库无法连接到远程数据库。引发该问题的原因很多,比如网络连接,连接方式(...

14110
来自专栏数据库新发现

在Mac上通过Docker部署Oracle Database 12.2版本

Oracle 已经宣布支持了Docker部署,这也让我们在Mac上部署 Oracle 数据库有了多一个选择,这是我的第一个Docker应用,非常简便快速的就完...

39460
来自专栏杨建荣的学习笔记

一个普通数据库用户所能查到的"意料之外"的信息(r2笔记98天)

有时候限于工作环境的情况,大多数开发人员只得到了一个权限收到限制的数据库用户。 可能你都不知道你所拥有的数据库用户都能查到哪些你想象不到的数据库信息,其实你知道...

34980

扫码关注云+社区

领取腾讯云代金券