zoukankan      html  css  js  c++  java
  • Some ORAs (32001, 00106)

    因为参数sessions / processes 关系到能连接到instance的并发session数,因此想尝试增大这些参数的值,但是杯具之旅就此开始了...

    尝试修改下参数sessions

    SQL> alter system set sessions=150 scope=spfile;
    alter system set sessions=150 scope=spfile
    *
    ERROR at line
    1:
    ORA
    -32001: write to SPFILE requested but no SPFILE specified at startup

    居然发现当前的instance不是通过spfile方式启动的!God...我用的可是10.2的数据库啊,没道理还是用pfile方式启动的吧。但是通过如下SQL可以验证当前instance确实不是通过spfile启动的...


    SQL
    > select count(*) from v$spparameter where value is not null;

    COUNT(*)
    ----------
    0

    因为如果是用spfile来启动instance的话,视图v$spparameter中的值不会都是NULL. 

    好吧,查看下数据库相关文件吧,因为是在windows操作系统上,初始化参数有文件是放在%ORACLE_HOME%\database目录下,而不是%ORACLE_HOME%\dbs下面。10g默认的情况是database目录下放的是pfile-- init<sid>.ora, database目录下放的是spfile -- spfile<sid>.ora, 而init<sid>.ora中其实是没有参数信息的,放置的是spfile的路径信息,比如

    SPFILE='C:\oracle\product\10.2.0\db_1/dbs/spfileorcl.ora'

    这样虽然instance启动的时候是到database目录下查找参数文件,最后用到的还是dbs目录下的spfile, 最后用的就是spfile来启动instance。

    但是杯具的是,我查看了下我访问的数据的相关信息,database目录下的init<sid>.ora文件中就是实实在在的参数信息,而不是spfile的路径信息,也就难怪用的不算spfile来启动instance了。  解决这个问题很简单,可以通过create spfile from pfile把pfile的内容写到spfile中,然后把spfile放到database目录下,也就是跟pfile放到同一个目录下,那么oracle会优先使用spfile了。

    做了相关修改,我决定来检验下效果如何,首先shutdown数据库...

    SQL> shutdown immediate
    ORA
    -00106: cannot startup/shutdown database when connected to a dispatcher

    结果居然遇到这么一个错误,很是奇怪,我怎么会以shared server的方式连接到数据呢,数据库连接不是用dedicated server方式的吗?神马个情况!

    我当前是以EZCONNECT方式连接到数据的,我决定先通过tnsname方式连上看一下,因为tnsname中可以设置连接方式为dedicated, 如下...

    ORCL_VM =
    (DESCRIPTION
    =
    (ADDRESS
    = (PROTOCOL = TCP)(HOST = 10.80.15.117)(PORT = 1521))
    (CONNECT_DATA
    =
    (SERVER
    = DEDICATED)
    (SERVICE_NAME
    = orcl)
    )
    )

    SQL> conn sys/a@ORCL_VM as sysdba
    Connected.
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL
    > startup
    ORACLE instance started.

    Total System Global Area
    612368384 bytes
    Fixed Size
    1298208 bytes
    Variable Size
    171966688 bytes
    Database Buffers 432013312 bytes
    Redo Buffers
    7090176 bytes
    Database mounted.
    Database opened.

     可以看到数据库成功重启了,现在再来检查下当前instance是不是以spfile来启动的...

    SQL> select count(*) from v$spparameter where value is not null;

    COUNT(*)
    ----------
    32

     从查询结果来看,当前的instance应该是以spfile来启动的。

    现在再回头看看shared server的问题,从alert文件中刚才数据库启动的日志可以看到如下内容...

    Thu Apr 07 14:33:16 2011
    starting up
    1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
    MMNL started
    with pid=12, OS id=1284
    Thu Apr
    07 14:33:16 2011
    starting up
    1 shared server(s) ...

     居然真的有shared server 和 dispatcher存在,这个又是在啥时候设置的,一点印象都没有, 可能是很早之前做的测试:(

    关于dispatcher也可以从listener的services信息看到...

    Instance "orcl", status READY, has 2 handler(s) for this service...
    Handler(s):
    "DEDICATED" established:
    6 refused:0 state:ready
    LOCAL SERVER
    "D000" established:
    132 refused:0 current:66 max:1002 state:ready
    DISPATCHER
    <machine: SZV-DEV-RF-002, pid: 1200>
    (ADDRESS
    =(PROTOCOL=tcp)(HOST=szv-dev-rf-002)(PORT=3814))

    看一下相关参数shared_server, dispatcher的设置情况...

    SQL> show parameter shared_server;

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    max_shared_servers integer 20
    shared_server_sessions
    integer
    shared_servers
    integer 1
    SQL
    > show parameter dispatcher

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    dispatchers string (protocol=TCP)
    max_dispatchers
    integer 20

     通过设置参数shared_servers为0来禁止掉shared server...

    SQL> alter system set shared_servers=0;
    System altered.
    SQL
    > alter system set dispatchers='';
    System altered.

     重启instance之后会发现shared server和dispatcher不会启动了...

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

    COUNT(*)
    ----------
    0

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

    COUNT(*)
    ----------
    0

  • 相关阅读:
    性能战术
    易用性
    可操作性
    软件架构师如何工作
    idea安装
    Windows下安装TensorFlow
    进度十四(11.01)
    进度十三(10.31)
    进度十二(10.30)
    进度十一(10.29)
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/2007920.html
Copyright © 2011-2022 走看看