2023年8月1日发(作者:)

Oracle常见错误及解决办法Ø

简介本⽂主要记录 Oracle 常见错误及解决办法,包括以下内容:1.

ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效2.

ORA-01034: ORACLE not available3.

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)4.

ORA-12154: TNS: ⽆法解析指定的连接标识符5.

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor6.

ORA-12541: TNS:no listener7.

ORA-12560: TNS: 协议适配器错误8.

ORA-27125: unable to create shared memory segment(启动数据库报错)9.

ORA-28040: 没有匹配的验证协议((11g dblink 连接 12c 时)

1.

ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效n

错误原因由于其他 Session 已经对⽬标表做了操作,并且已经有排他锁在表上了,所以新的 Session ⽆法再对表进⾏DDL操作。

n

解决办法以 system ⽤户登录:1)

查询被锁的会话IDselect session_id from v$locked_object;

2)

查询 sid, serial# 字段SELECT sid, serial#, username, osuser FROM v$session where sid = 9;

3)

将锁定的会话关闭ALTER SYSTEM KILL SESSION '9,99';

2.

ORA-01034: ORACLE not available1)

检查当前数据库实例是否启动

3.

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)n

错误描述SQL> startup

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translatedORA-01262: Stat failed on a file destination directoryLinux-x86_64 Error: 2: No such file or directory

n

解决办法(没有效果)不知道是什么原因,导致 $ORACLE_BASE/fast_recovery_area 少了这个⽬录,⽽导致了这个错误。# 查看 Oracle 初始化⽂件vi /opt/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/⾥⾯有这样⼀句:db_recovery_file_dest='/fast_recovery_area'# 如果没有 fast_recovery_area ⽬录创建即可$ mkdir $ORACLE_BASE/fast_recovery_area

4.

ORA-12154: TNS: ⽆法解析指定的连接标识符该错误发⽣于 C# 采⽤ 程序集中的 onnection 类连接⽅式时。由于该⽅式需要依赖 Oracle 客户端,⽽客户端中没配置“Net 服务名配置”。配置⽹络服务名可以采⽤以下两种⽅式:1)

直接编辑 ⽂件,路径为:D:Oracleproduct10.2.0client_1NETWORKADMIN,新增⼀个⽹络服务名,加⼊如下配置:CL01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = CL01) ) )

或者(配置远程) ORCL2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 47.96.186.196)(PORT = 11521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) 对应的连接字符串:

2)

或者使⽤ Net Configuration Assistant(⽹络配置助⼿)注意:以管理员⾝份运⾏ 3)

两中配置结果如下:

5.

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor1)

检查当前数据库实例是否启动

6.

ORA-12541: TNS:no listener1)

检查监听是否启动lsnrctl status

7.

ORA-12560: TNS: 协议适配器错误1)

错误描述2)

解决办法⾸先确保"OracleOraDb11g_home1TNSListener"和"OracleServiceORCL"服务是开启的。1.

该问题很可能是因为 Oracle 环境变量配置有误,确保为以下顺序即可:注意:环境变量设置好后,需要重新打开⼀个“命令窗⼝”,重新运⾏命令。

2.

如果还是不⾏,再检查注册表,ORACLE_SID 的值是否正确。运⾏ regedit,依次展开:HKEY_LOCAL_MACHONESOFTWAREORACLEKEY_OraDb11g_home1,确保数据库实例名是存在的,⽐如:orcl因为我之前使⽤"Database Configuration Assistant"将⼀个数据库实例删除后,就出现这个问题了。⽽这⾥指定的实例名,已经被删除了,所以找不到了!恩,问题就是这样。友情提⽰:这⾥指定的数据库实例名,就是采⽤ sqlplus "/as sysdba" 命令登录的默认实例。

8.

ORA-27125: unable to create shared memory segment(启动数据库报错)n

错误描述SQL> startupORA-27125: unable to create shared memory segmentLinux-x86_64 Error: 28: No space left on device

n

错误分析这个问题在 linux 64位中⽐较常见,当数据库的 SGA 值⼤于共享内存就会报这个错。共享内存由 /etc/ ⽂件中的 shmall 参数中指定,shmall 的单位为页。在之前安装数据库服务时,将 shmall 设置为缺省值2097152,其实是不对的,应该根据 shmmax 的值进⾏计算得出,⽐如以 16G 的内存为例:#由计算得出:16*1024*1024*1024-1 = = #再计算得出: / 4096(PAGE_SIZE) = = 4194304

可以根据以下公式效验 shmall 的值是否正确,就是反过来换算为内存⼤⼩:如shmall=4194304,内存⼤⼩应为:(4194304*4096(PAGE_SIZE))/(1024*1024*1024)=16G

l

查看分页⼤⼩getconf PAGE_SIZE4096

n

解决办法# vi /etc/ = 4194304 #将之前的2097152改为4194304# sysctl -p #保存后使配置⽣效# cat /proc/sys/kernel/shmall #查看 shmall 的值4194304SQL> startup #再次启动

9.

ORA-28040: 没有匹配的验证协议((11g dblink 连接 12c 时)1)

错误描述ORA-28040:没有匹配的验证协议ORA-02063:紧接着 line (起⾃ DBLINK01)2)

解决办法修改 配置⽂件,路径:D:oracle12cproduct12.2.0dbhome_,加⼊以下配置:D_LOGON_VERSION_CLIENT = D_LOGON_VERSION_SERVER = 11

2023年8月1日发(作者:)

Oracle常见错误及解决办法Ø

简介本⽂主要记录 Oracle 常见错误及解决办法,包括以下内容:1.

ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效2.

ORA-01034: ORACLE not available3.

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)4.

ORA-12154: TNS: ⽆法解析指定的连接标识符5.

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor6.

ORA-12541: TNS:no listener7.

ORA-12560: TNS: 协议适配器错误8.

ORA-27125: unable to create shared memory segment(启动数据库报错)9.

ORA-28040: 没有匹配的验证协议((11g dblink 连接 12c 时)

1.

ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效n

错误原因由于其他 Session 已经对⽬标表做了操作,并且已经有排他锁在表上了,所以新的 Session ⽆法再对表进⾏DDL操作。

n

解决办法以 system ⽤户登录:1)

查询被锁的会话IDselect session_id from v$locked_object;

2)

查询 sid, serial# 字段SELECT sid, serial#, username, osuser FROM v$session where sid = 9;

3)

将锁定的会话关闭ALTER SYSTEM KILL SESSION '9,99';

2.

ORA-01034: ORACLE not available1)

检查当前数据库实例是否启动

3.

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)n

错误描述SQL> startup

ORA-01261: Parameter db_recovery_file_dest destination string cannot be translatedORA-01262: Stat failed on a file destination directoryLinux-x86_64 Error: 2: No such file or directory

n

解决办法(没有效果)不知道是什么原因,导致 $ORACLE_BASE/fast_recovery_area 少了这个⽬录,⽽导致了这个错误。# 查看 Oracle 初始化⽂件vi /opt/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/⾥⾯有这样⼀句:db_recovery_file_dest='/fast_recovery_area'# 如果没有 fast_recovery_area ⽬录创建即可$ mkdir $ORACLE_BASE/fast_recovery_area

4.

ORA-12154: TNS: ⽆法解析指定的连接标识符该错误发⽣于 C# 采⽤ 程序集中的 onnection 类连接⽅式时。由于该⽅式需要依赖 Oracle 客户端,⽽客户端中没配置“Net 服务名配置”。配置⽹络服务名可以采⽤以下两种⽅式:1)

直接编辑 ⽂件,路径为:D:Oracleproduct10.2.0client_1NETWORKADMIN,新增⼀个⽹络服务名,加⼊如下配置:CL01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = CL01) ) )

或者(配置远程) ORCL2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 47.96.186.196)(PORT = 11521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) 对应的连接字符串:

2)

或者使⽤ Net Configuration Assistant(⽹络配置助⼿)注意:以管理员⾝份运⾏ 3)

两中配置结果如下:

5.

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor1)

检查当前数据库实例是否启动

6.

ORA-12541: TNS:no listener1)

检查监听是否启动lsnrctl status

7.

ORA-12560: TNS: 协议适配器错误1)

错误描述2)

解决办法⾸先确保"OracleOraDb11g_home1TNSListener"和"OracleServiceORCL"服务是开启的。1.

该问题很可能是因为 Oracle 环境变量配置有误,确保为以下顺序即可:注意:环境变量设置好后,需要重新打开⼀个“命令窗⼝”,重新运⾏命令。

2.

如果还是不⾏,再检查注册表,ORACLE_SID 的值是否正确。运⾏ regedit,依次展开:HKEY_LOCAL_MACHONESOFTWAREORACLEKEY_OraDb11g_home1,确保数据库实例名是存在的,⽐如:orcl因为我之前使⽤"Database Configuration Assistant"将⼀个数据库实例删除后,就出现这个问题了。⽽这⾥指定的实例名,已经被删除了,所以找不到了!恩,问题就是这样。友情提⽰:这⾥指定的数据库实例名,就是采⽤ sqlplus "/as sysdba" 命令登录的默认实例。

8.

ORA-27125: unable to create shared memory segment(启动数据库报错)n

错误描述SQL> startupORA-27125: unable to create shared memory segmentLinux-x86_64 Error: 28: No space left on device

n

错误分析这个问题在 linux 64位中⽐较常见,当数据库的 SGA 值⼤于共享内存就会报这个错。共享内存由 /etc/ ⽂件中的 shmall 参数中指定,shmall 的单位为页。在之前安装数据库服务时,将 shmall 设置为缺省值2097152,其实是不对的,应该根据 shmmax 的值进⾏计算得出,⽐如以 16G 的内存为例:#由计算得出:16*1024*1024*1024-1 = = #再计算得出: / 4096(PAGE_SIZE) = = 4194304

可以根据以下公式效验 shmall 的值是否正确,就是反过来换算为内存⼤⼩:如shmall=4194304,内存⼤⼩应为:(4194304*4096(PAGE_SIZE))/(1024*1024*1024)=16G

l

查看分页⼤⼩getconf PAGE_SIZE4096

n

解决办法# vi /etc/ = 4194304 #将之前的2097152改为4194304# sysctl -p #保存后使配置⽣效# cat /proc/sys/kernel/shmall #查看 shmall 的值4194304SQL> startup #再次启动

9.

ORA-28040: 没有匹配的验证协议((11g dblink 连接 12c 时)1)

错误描述ORA-28040:没有匹配的验证协议ORA-02063:紧接着 line (起⾃ DBLINK01)2)

解决办法修改 配置⽂件,路径:D:oracle12cproduct12.2.0dbhome_,加⼊以下配置:D_LOGON_VERSION_CLIENT = D_LOGON_VERSION_SERVER = 11