由ORA-12519、ORA-12520错误进而修改oracle的最大连接数

最近Oracle服务经常性的无法连接,当时也没看日志,就凭经验处理查看来数据文件,发件文件空间满了,就新增了一个数据文件。但是没用,没用,没用,一段时间后又登录不上了。然后就去查日志,结果发现英文错误提示:
ORA-12519:TNS:no appropriate service handler found
ORA-12520:TNS:listener could not find available handler for requested type of server
中文错误提示:
ORA-12519: TNS: 没有找到适用的服务处理
ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序
ORA-12518:TNS:监听程序无法为客户机分配可用连接
这种错误有两种可能性:
1:数据库是专用服务器,但是在tnsname.ora配置文件中设置的连接方式是shared,这种情况需要修改tnsname.ora配置文件,这种错误情况一般发生在第一次连接数据库服务器。

2:运行正常的数据库服务器,突然报ORA-12519、ORA-12520、ORA-12518这种错误,一般是因为process不够引起的。需要增大processes参数的值。
检查后发现是第二种情况,那么处理步骤来了。。。

1、登录系统

使用sys,以sysdba权限登录:
在命令窗口输入sqlplus / as sysdba登陆服务,如果报错ORA-12519、或者ORA-12520,请重启任务管理器中的OracleService[SID]服务。

SQL>select count(*) from v$process --当前的数据库连接数

2、登陆成功后查询最大进程数

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

或者使用show parameter processes命令

SQL> show parameter processes;

NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer    1
db_writer_processes                  integer    1
job_queue_processes                  integer    10
log_archive_max_processes            integer    1
processes                            integer    150
SQL>

结果是150,逗呢,这么少!赶紧的增加。

3、更改最大进程数,给个1000(不能太大,详情看备注,需要重启数据库)。

SQL>alter system set processes = 1000 scope = spfile;--也可以写成scope=both
alter system set job_queue_processes=10 scope=spfile
ORA-32001: write to SPFILE requested but no SPFILE specified atstartup

好家伙,报错了,翻译过来就是
ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE。
简单来说就是:数据库不是根据spfile文的内容来启动的,改了也白搭。
那么问题来了,该怎么办尼,方法如下!

4、确定数据库是以spfile启动的还是pfile启动

SQL> show parameter spfile;
NAME                                TYPE       VALUE
------------------------------------ -----------------------------------------
spfile                              string   

执行结果中的value是空的,意味着oracle数据库是使用pfile启动的,否则就是spfile了。
那么这时候就要将数据库的启动方式切换成spfile了。方法继续如下:

5、修改数据库的启动方式(pfile还是spfile)

  1. 进入数据库的安装文件夹下,我的是D:\app\oracle\product\10.2.0\db_1\dbs有没有存在spfile之类的文件,备份一下(这是好习惯)。

  2. 执行create spfile from pfile

    SQL>create spfile from pfile;
    文件已创建。
    
  3. 执行 shutdown immediate;

    SQL>shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL>
    
  4. 执行startup命令

    扫描二维码关注公众号,回复: 12276254 查看本文章
    SQL> startup
    ORACLE 例程已经启动。
    
    Total System Global Area 5.1310E+10 bytes
    Fixed Size                  2187728 bytes
    Variable Size            2.4562E+10 bytes
    Database Buffers         2.6709E+10 bytes
    Redo Buffers               36147200 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> 
    
  5. 执行show parameters spfile

    SQL> show parameters spfile;
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string      D:\ORACLE\PRODUCT\10.2.0\DB_1\
                                                 DATABASE\SPFILECW.ORA
    

value有值了,这时候就可以执行更改最大进程连接数了。

6、更改oracle数据库允许的最大连接数

alter system set processes = 1000 scope = spfile;--也可以写成scop=both
已更改

开始的时候最大连接数只有150,修改为1000,重启数据库。

7、重启数据库方式

第一种:进入操作系统的服务任务管理器中,手动重启oracle…server
第一种:使用命令

SQL>shutdown immediate;
......

完成后再启动数据库。

SQL> startup
	ORACLE 例程已经启动。
	Total System Global Area  612368384 bytes
	Fixed Size                  1332348 bytes
	Variable Size             229288836 bytes
	Database Buffers          377487360 bytes
	Redo Buffers                4259840 bytes
	数据库装载完毕。
	数据库已经打开。

好了,到此完成,还显的高大上!

备注

processes这个数值也不能改的很大,大了会导致内存不足。
Oracle 里面有个叫做spfile的动态参数文件,里面设置了Oracle 的各种参数。所谓的动态,就是说你可以在不关闭数据库的情况下,更改数据库参数,记录在spfile里面。更改参数的时候,有4种scope选项。scope就是范围
++ scope=spfile 仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效。有一些参数只允许用这种方法更改
++ scope=memory 仅仅更改内存,不改spfile。也就是下次启动就失效了
++ scope=both 内存和spfile都更改
++ 不指定scope参数,等同于scope=both.

猜你喜欢

转载自blog.csdn.net/sinat_31633205/article/details/108124325
今日推荐