关键字
副本数据管理、数据备份、ORA-01157
适用产品
- AnyBackup CDM 7.0.x
- AnyBackup Enterprise 7.0.x
问题描述
在 AnyBackup 管理控制台上,执行 Oracle 数据库副本数据管理模块数据备份任务时,执行输出中显示如下错误信息:
任务执行异常, 原因:接口调用失败(ORA-01157: cannot identify/lock data file 201 - see DBWR trace file ORA-01110: data file 201: '/opt/oracle/app/oradata/orcl/temp01.dbf' ).

问题影响
AnyBackup 无法成功完成对 Oracle 数据库的备份。
问题原因
AnyBackup 在执行 Oracle 数据库数据备份时,需要访问数据库的临时表空间,当临时表空间对应的 TEMPFILE 无法访问时,会导致 Oracle 数据库数据备份任务执行失败。
解决方案
为了解决此问题,需要重建错误提示中数据库临时表空间的 TEMPFILE,然后再使用 AnyBackup 进行备份。请按照以下步骤执行:
1.通过 SSH 工具登录需要备份的数据库实例所在的服务器,切换至 Oracle 数据库安装用户,以 Oracle 数据库安装用户为 oracle 为例。
su - oracle

2.查看当前环境默认登录实例的实例名是否与要备份的数据库实例是否一致。
echo $ORACLE_SID

若查询结果与要备份的数据库实例不一致,则执行如下命令修改默认登录实例,此处图中以要备份的数据库实例名为 orcl 为例:
export ORACLE_SID=<恢复目标数据库实例名>

3.确认当前环境默认登录实例为要备份的数据库实例名后,进入数据库查看当前数据库默认临时表空间名称。
sqlplus / as sysdba
SELECT USERNAME,TEMPORARY_TABLESPACE FROM DBA_USERS;

其中 TEMPORARY_TABLESPACE 字段值即为当前数据库默认临时表空间名称。
4.执行以下命令为默认临时表空间新增 TEMPFILE。
注意:Oracle 数据库启动用户需要对指定的文件路径具有读写权限。
ALTER TABLESPACE <当前数据库默认临时表空间名称> ADD TEMPFILE '<新增 TEMPFILE 文件名称> SIZE 2G';
以上图中查到的默认临时表空间名称为 TEMP ,新增 TEMPFILE 为 /oracle/oradata/orcl/temp02.dbf 为例。
ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/oradata/orcl/temp02.dbf' SIZE 2G';

5.执行以下命令删除错误提示中默认临时表空间对应的无法访问的 TEMPFILE。
警告:删除操作不可逆,请确认后再执行。
ALTER TABLESPACE TEMP DROP TEMPFILE '/opt/oracle/app/oradata/orcl/temp01.dbf';

6.重新使用 AnyBackup 执行 Oracle 数据库数据备份任务。
更多信息
ORA-01157 的错误是由于 Oracle 读取不了数据文件,数据文件可能损坏或者丢失,更多关于 ORA-01157 问题的故障排除以及解决方案,请参考 My Oracle Support 文档:How to Recover from a Lost or Deleted Datafile with Different Scenarios (Doc ID 198640.1)。