• Oracle 常见错误及解决办法


    Ø  简介

    本文主要记录 Oracle 常见错误及解决办法,包括以下内容:

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

    2.   ORA-01034: ORACLE not available

    3.   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 descriptor

    6.   ORA-12541: TNS:no listener

    7.   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)   查询被锁的会话ID

    select 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 available

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

     

    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 translated

    ORA-01262: Stat failed on a file destination directory

    Linux-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/init.ora

    里面有这样一句:db_recovery_file_dest='<ORACLE_BASE>/fast_recovery_area'

    # 如果没有 fast_recovery_area 目录创建即可

    $ mkdir $ORACLE_BASE/fast_recovery_area

     

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

    该错误发生于 C# 采用 System.Data.dll 程序集中的 System.Data.OleDb.OleDbConnection 类连接方式时。由于该方式需要依赖 Oracle 客户端,而客户端中没配置“Net 服务名配置”。配置网络服务名可以采用以下两种方式:

    1)   直接编辑 tnsnames.ora 文件,路径为: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)

        )

        )

        OraOLEDB.Oracle 对应的连接字符串:

        <add name="dbconnectstring" connectionString="Provider=OraOLEDB.Oracle;

             Data Source=orcl2;User ID=aml;Password=aml;DistribTX=0;Max Pool Size=512;"/>

     

    2)   或者使用 Net Configuration Assistant(网络配置助手)

    注意:以管理员身份运行

     


    3)   两中配置结果如下:

    clip_image002

     

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

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

     

    6.   ORA-12541: TNS:no listener

    1)   检查监听是否启动

    lsnrctl status

     

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

    1)   错误描述

    clip_image004

    2)   解决办法

    首先确保"OracleOraDb11g_home1TNSListener""OracleServiceORCL"服务是开启的。

    1.   该问题很可能是因为 Oracle 环境变量配置有误,确保为以下顺序即可:

    clip_image006注意:环境变量设置好后,需要重新打开一个“命令窗口”,重新运行命令。

     

    2.   如果还是不行,再检查注册表,ORACLE_SID 的值是否正确。运行 regedit,依次展开:HKEY_LOCAL_MACHONESOFTWAREORACLEKEY_OraDb11g_home1,确保数据库实例名是存在的,比如:orcl

    clip_image008

    因为我之前使用"Database Configuration Assistant"将一个数据库实例删除后,就出现这个问题了。而这里指定的实例名,已经被删除了,所以找不到了!恩,问题就是这样。

    友情提示:这里指定的数据库实例名,就是采用 sqlplus "/as sysdba" 命令登录的默认实例。

     

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

    n  错误描述

    SQL> startup

    ORA-27125: unable to create shared memory segment

    Linux-x86_64 Error: 28: No space left on device

     

    n  错误分析

    这个问题在 linux 64位中比较常见,当数据库的 SGA 值大于共享内存就会报这个错。

    共享内存由 /etc/sysctl.conf 文件中的 shmall 参数中指定,shmall 的单位为页。在之前安装数据库服务时,将 shmall 设置为缺省值2097152,其实是不对的,应该根据 shmmax 的值进行计算得出,比如以 16G 的内存为例:

    #由计算得出:16*1024*1024*1024-1 = 17179869183

    kernel.shmmax = 17179869183

    #再计算得出:17179869183 / 4096(PAGE_SIZE) = 4194304

    kernel.shmall = 4194304

     

    可以根据以下公式效验 shmall 的值是否正确,就是反过来换算为内存大小:

    shmall=4194304,内存大小应为:(4194304*4096(PAGE_SIZE))/(1024*1024*1024)=16G

     

    l  查看分页大小

    getconf PAGE_SIZE

    4096

     

    n  解决办法

    # vi /etc/sysctl.conf

    kernel.shmall = 4194304         #将之前的2097152改为4194304

    # sysctl -p                    #保存后使配置生效

    # cat /proc/sys/kernel/shmall   #查看 shmall 的值

    4194304

    SQL> startup                   #再次启动

    clip_image010

     

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

    1)   错误描述

    ORA-28040:没有匹配的验证协议

    ORA-02063:紧接着 line (起自 DBLINK01)

    2)   解决办法

    修改 sqlnet.ora 配置文件,路径:D:oracle12cproduct12.2.0dbhome_1 etworkadminsqlnet.ora,加入以下配置:

    SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 10

    SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11

     

  • 相关阅读:
    调用https接口 报错:unable to find valid certification path
    POI生成Excel
    杂七杂八记录
    maven 打jar 包 pom.xml配置
    IDEA 全局修改项目版本
    Spring AOP的内部调用问题
    redis 中文乱码
    windows redis cluster 配置
    spring事物失效场景
    Mybatis常用示例
  • 原文地址:https://www.cnblogs.com/abeam/p/14724046.html
Copyright © 2020-2023  润新知