• Oracle诊断:在程序的运行中,有时候数据库会断开连接


    在程序的运行中,有时候数据库会断开连接,然后报下面错误:

    ORA-12519: TNS:no appropriate service handler found  可用的服务处理程序没有找到。

    1. 简单解释下什么是service handler,以及service handler是什么时候被调用的?

    在客户端和数据库oracle进行通信时,oracle需要进行完成一个过程"服务注册 (service registration)" . 服务注册是将数据库提供的服务名称,实例名,可用服务处理程序,端口号等告知listener 的过程。 当客户端的请求到达listener时,listenser将会选择一个合适的service handlers为之服务。可用的服务处理程序(service handlers)用于调度和派生子程序。

    下面是参考的一篇文章http://blog.chinaunix.net/uid-20802110-id-4153116.html

    2. 排查和解决

    //查看所配置的processes最大连接数量

    SQL> show parameter process;  
    

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    aq_tm_processes                      integer     1

    cell_offload_processing              boolean     TRUE

    db_writer_processes                  integer     2

    gcs_server_processes                 integer     0

    global_txn_processes                 integer     1

    job_queue_processes                  integer     1000

    log_archive_max_processes            integer     4

    processes                            integer     550  (配置最大连接进程550)

    processor_group_name                 string

    SQL> select value from v$parameter where name ='processes';
    

    VALUE

    --------------------------------------------------------------------------------

    550

    //查看所配置sessions最大连接数量

    SQL> show parameter session;
    

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    java_max_sessionspace_size           integer     0

    java_soft_sessionspace_limit         integer     0

    license_max_sessions                 integer     0

    license_sessions_warning             integer     0

    session_cached_cursors               integer     50

    session_max_open_files               integer     10

    sessions                             integer     848  (配置最大连接sessions 550)

    shared_server_sessions               integer

    //查看实际process的连接数量 (包括oracle自身本地连接进程数和非本地的连接进程数)

    SQL> select count(*) from v$process;
    

      COUNT(*)

    ----------

            45

    //查看非本地连接数量

    oracle@sha-oracle-04:~/export/dmpfiles/temp> ps -ef|grep LOCAL=NO|wc -l
    

    15

    oracle连接常见的有带LOCAL=NO参数或带LOCAL=YES的进程。

    LOCAL=NO:非本地连接,即网络连接。它是通过Listener 连接到服务器的。客户端的应用通过客户端的监听向服务器的监听发送请求,服务器的监听接收后,在与数据库连接,执行相关操作,在把结果返回给客户端。这是通过监听的流程。 所以在客户端需要配置监听,即配置tnsnames.ora。

    LOCAL=YES:本地连接。 本地连接不走监听,所以在服务监听没有启动的情况下,通过本地的sqlplus 还是可以连上数据库的。

    //查看处于活动状态的进程列表(用户名和进程名)

    SQL> select spid,username,program from v$process;
    

    SPID                     USERNAME

    ------------------------ ---------------

    PROGRAM

    ------------------------------------------------

    PSEUDO

    5747                     oracle

    oracle@sha-oracle-04 (PMON)

    5752                     oracle

    oracle@sha-oracle-04 (PSP0

    46 rows selected.

    //更改最大进程数量

    SQL> alter system set processes = 550 scope = spfile;
    

    System altered.

    修改system表的processes字段为550,

    Oracle 里面有个叫做spfile的东西,就是动态参数文件,里面设置了Oracle 的各种参数。所谓的动态,就是说你可以在不关闭数据库的情况下,更改数据库参数,记录在spfile里面。更改参数的时候,有4种scope选项。scope就是范围

    ++ scope=spfile 仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效。有一些参数只允许用这种方法更改

    ++ scope=memory 仅仅更改内存,不改spfile。也就是下次启动就失效了

    ++ scope=both 内存和spfile都更改

    ++ 不指定scope参数,等同于scope=both.

    //关闭数据库instance

    SQL> shutdown immediate;
    

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

     

    //启动数据库instance

    SQL> startup 
    

    ORACLE instance started.

     

  • 相关阅读:
    关于ARM CM3的启动文件分析
    curl 基本使用简介
    在windows下获取硬盘序列号(win7 32位,Windows Server 64位测试,希望在其他平台测试,遇到问题的网友留言分享)
    oracle 数据库用户登录相关
    ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)
    ubuntu下安装postgres
    python 中变量的命名规范
    python 各模块
    python中的model模板中的数据类型
    python编程中在ubuntu中安装虚拟环境及环境配置
  • 原文地址:https://www.cnblogs.com/recognition/p/5356345.html
Copyright © 2020-2023  润新知