当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

oracle processes参数值设为1重启后的问题

昨天在群里有人遇到windows版本的11gR2数据库在将processes设置为1后,重启数据库启动不了的问题,我分别在windows和linux环境下对11gR2数据库做了测试。

linux版本的11gR2数据库是没有问题的,测试如下:

  1. 当前processes参数值为150。
SQL> show parameter processes
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     150
  1. 备份spfile
SQL> create pfile from spfile;
File created.
  1. 修改processes参数为1,重启数据库。
SQL> alter system set processes=1 scope=spfile;
System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  523108352 bytes
Fixed Size                  1346052 bytes
Variable Size             343934460 bytes
Database Buffers          171966464 bytes
Redo Buffers                5861376 bytes
Database mounted.
Database opened.

linux环境下的11gR2数据库,processes被修改为1后用spfile可以直接启动的,而processes参数并不是1。

SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     40

可见,processes参数被修改为40,而不是1,下面在看下用pfile是否可以启动processes为1的数据库。

  1. 先还原spfile。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> create spfile from pfile;

File created.

现在spfile已经被还原,processes参数值为150,修改pfile的processes参数的值为1。

[oracle@secdb2 ~]$ cd $ORACLE_HOME/dbs
[oracle@secdb2 dbs]$ vi initstream.ora
将processes参数值改成1
  1. 使用pfile启动数据库,看看数据库是否可以打开。
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initstream.ora' 
ORACLE instance started.

Total System Global Area  523108352 bytes
Fixed Size                  1346052 bytes
Variable Size             343934460 bytes
Database Buffers          171966464 bytes
Redo Buffers                5861376 bytes
Database mounted.
Database opened.

此时,processes的值应该也是40,查看下。

SQL> show parameter spfile

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

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     40

实验证明,无论是用spfile还是pfile在processes被改成1之后,linux环境下的ORACLE11gR2数据库都可以启动,如果观察告警日志就在在启动日志的最前面看到重置processes的信息。

Tue Aug 06 16:42:56 2013
Adjusting the default value of parameter parallel_max_servers
from 40 to 25 due to the value of parameter processes (40)

下面再看以下windows环境下的11gR2数据库会是什么情况。

  1. 当前数据库processes值是150。
SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
aq_tm_processes                      integer     0
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     150
  1. 备份spfile。
SQL> create pfile from spfile;

文件已创建。
  1. 修改processes参数为1。
SQL> alter system set processes=1 scope=spfile;

系统已更改。
  1. 重启数据库。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-00444: background process "DIAG" failed while starting
ORA-00020: maximum number of processes () exceeded
  1. 查看告警日志。
Tue Aug 06 17:04:07 2013
Adjusting the default value of parameter parallel_max_servers
from 40 to 0 due to the value of parameter processes (1)

oracle并没有将processes参数设置为40,而是1,接下来启动pid=2的进程时报错。

PMON started with pid=2, OS id=3944 
OER 7451 in Load Indicator : Error Code = OSD-04500: 指定了非法选项 !
ORA-00020: No more process state objects available
ORA-20 errors will not be written to the alert log for
 the next minute. Please look at trace files to see all
 the ORA-20 errors.
Process DIAG submission failed with error = 20
USER (ospid: 3976): terminating the instance due to error 444

此时windows版本的ORACLE已经不能用了,想用pfile启动也是不行的。

SQL> startup pfile='D:\app\stream\product\11.2.0\dbhome_1\database\INITdbdream.ORA'
ORA-03113: 通信通道的文件结尾

尝试重建spfile也报ORA-03113错误。

SQL> create spfile from pfile;
create spfile from pfile
              *
第 1 行出现错误:
ORA-03113: 通信通道的文件结尾
进程 ID: 0
会话 ID: 0 序列号: 0

此时用pfile启动和重建spfile都报ORA-03113错误,肿么办?我遇到这个问题的时候,一直在想肯定是哪个地方记住了processes=1了,可是就没想到是windows的服务搞的鬼。

重启windows的ORACLE服务。

2015-11-04-00002

重启服务后,ORACLE还是关闭状态,此时spfile中的processes参数值仍然是1,尝试使用pfile启动数据库。

SQL> startup pfile='D:\app\stream\product\11.2.0\dbhome_1\database\INITdbdream.ORA'
ORACLE 例程已经启动。

Total System Global Area 1071333376 bytes
Fixed Size                  1375792 bytes
Variable Size             587203024 bytes
Database Buffers          478150656 bytes
Redo Buffers                4603904 bytes
数据库装载完毕。
数据库已经打开。

重启windows的oracle服务,问题就可以解决了,经过测试,重启windows相关服务后,也可以直接还原spfile启动数据库。

SQL> create spfile from pfile;

文件已创建。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 1071333376 bytes
Fixed Size                  1375792 bytes
Variable Size             587203024 bytes
Database Buffers          478150656 bytes
Redo Buffers                4603904 bytes
数据库装载完毕。
数据库已经打开。

重启服务后,这两种方法都可以解决这个问题,windows的服务真恶心,下面还是测试下直接修改pfile中的processes参数为1是不是也是这样。

此时,刚还原的spfile中processes参数值为150,直接修改pfile中的processes参数值为1,然后用pfile启动数据库。

SQL> startup pfile='D:\app\stream\product\11.2.0\dbhome_1\database\INITdbdream.ORA'
ORA-00444: background process "DIAG" failed while starting
ORA-00020: maximum number of processes () exceeded

抛出了一样的错误,那么看看此时可不可以用正确参数值的spfile启动数据库呢。

SQL> startup
ORA-03113: 通信通道的文件结尾

一样的问题,只能用一样的方式解决,再重启一次oracle服务,问题就解决了(因为spfile中processes参数值是150,oracle在启动时优先使用spfile,所以在重启oracle服务时,数据库直接被打开了),windows的服务对像我这样不熟悉windows的人来说,还真头疼。

————————————end—————————————

 

本文固定链接: http://www.dbdream.com.cn/2013/08/oracle-processes%e5%8f%82%e6%95%b0%e5%80%bc%e8%ae%be%e4%b8%ba1%e9%87%8d%e5%90%af%e5%90%8e%e7%9a%84%e9%97%ae%e9%a2%98/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2013年08月16日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: oracle processes参数值设为1重启后的问题 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , , , , , ,

oracle processes参数值设为1重启后的问题:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter