欢迎访问机房运维工作室

爱数知识库

AnyBackup-Oracle 数据库备份失败,执行输出提示 ORA-12504 错误

频道:爱数知识库 日期: 浏览:25

AnyBackup-Oracle 数据库备份失败,执行输出提示 ORA-12504 错误

关键字

ORA-12504

适用产品

· AnyBackup 7.0.x

· AnyBackup 6.0.x

· AnyBackup 5.0.x

· 超易备 5.0.x

问题描述

AnyBackup 管理控制台上,执行 Oracle 数据库备份失败,查看执行输出,显示如下错误信息:

Oracle 备份出现异常。(错误提供者:oracleBackup,错误值:e0500009,错误位置:ncOracleBackupSchedule.cpp:60)(附加信息:ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA (错误提供者:Unknown Provider,错误值:12504,错误位置:ncOciSession.cpp:159))


问题影响

AnyBackup 无法完成 Oracle 数据库备份。

问题原因

Oracle 的 TNS(Transparent Network Substrate)配置文件 tnsnames.ora 中 SERVICES_NAME 字段缺失,导致 AnyBackup 客户端执行备份时无法通过监听连接本机数据库上的 Oracle 实例。

解决方案

为了解决此问题,请在配置文件 tnsnames.ora 中添加正确的 SERVICE_NAME 字段。以 Linux 操作系统下修改 TNS 配置为例,具体步骤如下:

1.通过 SSH 登录数据库服务器,执行以下命令,查询数据库的 service_names 参数值。

su - oracle

sqlplus / as sysdba

show parameter service_names;


2.执行命令 cat $ORACLE_HOME/network/admin/tnsnames.ora查看 tnsnames.ora 文件内容:

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
)
)

3.执行命令 sqlplus sys/password@orcl as sysdba ,使用监听的方式连接数据库实例。


注意:上图示例中, "ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA " 表示无法使用监听正常连接数据库实例。

4.执行命令 vi $ORACLE_HOME/network/admin/tnsnames.ora ,添加正确的 SERVICE_NAME 字段,修正后的内容如下:

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

警告:修改配置文件前,请先备份 tnsnames.ora 文件。

5.执行命令 sqlplus sys/password@orcl as sysdba ,检查使用监听的方式是否能正常连接数据库实例。


6.监听正常连接数据库实例后,在 AnyBackup 管理控制台重新发起 Oracle 数据库备份任务。

更多信息

关于 ORA-12504 错误代码具体含义,请参考 Oracle 官方文档:ORA-12504