
ORA-01187
激活备用数据库后发现 ORA-01187 和 ORA-01110。
ORA-01187: cannot read from file because it failed verification tests
ORA-01110: data file 2003: '+DATA/ORCLCDB/ORCLPDB/temp01.dbf'ORA-01187 意味着您要读取的临时文件无法被服务器进程验证,很可能该文件处于另一个化身中。因此,打开数据库后,数据库无法重新创建临时文件。
同时,我们在警报日志中看到了一些错误。
ORA-01186: file 2003 failed verification tests
ORA-01122: database file 2003 failed verification check
ORA-01110: data file 2003: '+DATA/ORCLCDB/ORCLPDB/temp01.dbf'
ORA-01203: wrong incarnation of this file - wrong creation SCNORCLPDB(3):Cannot re-create tempfile +DATA/ORCLCDB/ORCLPDB/temp01.dbf, the same name file exists看来我们不能再使用与数据库中其他数据文件不同的临时文件了。此外,Oracle 尝试重新创建临时文件但没有成功,因为该文件是物理存在的。
解决方案
由于临时文件不再可用,我们采取以下步骤使所有临时文件恢复工作。
1.删除所有临时文件
第一步是删除所有临时文件。由于它是 RAC 数据库,我们通过grid将其删除。
[grid@standby01 grid]$ asmcmd rm +DATA/ORCLCDB/ORCLPDB/temp01.dbf接下来,我们有 2 个选项可以重新创建所有临时文件。
第一种方法是重启数据库,不管是普通数据库(非CDB)还是可插拔数据库(PDB)。Oracle 将在打开数据库后自动重新创建所有丢失的临时文件。第二种方法是自己手动重新创建临时文件。
虽然第一种方式更可取,但它需要重新启动。如果此时无法重新启动数据库,我们将在数据库在线时按照以下过程重新创建它们。
让我们看看我们如何手动重新创建它们。
2.创建新的临时表空间
为了在我们删除它之前从数据库的默认临时表空间中排除TEMP ,我们需要另一个临时表空间。在这种情况下,我们使用TEMP1表空间。
如果没有,请为下一步创建一个新的临时表空间。
SQL> create temporary tablespace temp1 tempfile '+DATA/ORCLCDB/ORCLPDB/temp1_01.dbf' size 10m autoextend on next 10m maxsize unlimited;
Tablespace created.3.切换默认临时表空间
我们暂时将默认临时表空间切换到TEMP1。
SQL> alter database default temporary tablespace temp1;
Database altered.如果您确实希望TEMP1成为您的默认临时表空间,您可以在这里停下来。
4. 重新创建TEMP表空间
我们删除然后创建原始的临时表空间回来。
SQL> drop tablespace temp;
Tablespace dropped.
SQL> create temporary tablespace temp tempfile '+DATA/ORCLCDB/ORCLPDB/temp01.dbf' size 10m autoextend on next 10m maxsize unlimited;
Tablespace created.5. 切换回默认临时表空间
解决 ORA-01187 的最后一步是将默认临时表空间切换回TEMP。
SQL> alter database default temporary tablespace temp;
Database altered.它现在正在工作。
原文标题:How to Resolve ORA-01187: cannot read from file
原文作者: Ed Chen
原文链接:https://logic.edchen.org/how-to-resolve-ora-01187-cannot-read-from-file/




