oracle processes参数值设为1重启后的问题
昨天在群里有人遇到windows版本的11gR2数据库在将processes设置为1后,重启数据库启动不了的问题,我分别在windows和linux环境下对11gR2数据库做了测试。
linux版本的11gR2数据库是没有问题的,测试如下:
- 当前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
- 备份spfile
SQL> create pfile from spfile; File created.
- 修改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的数据库。
- 先还原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
- 使用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数据库会是什么情况。
- 当前数据库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
- 备份spfile。
SQL> create pfile from spfile; 文件已创建。
- 修改processes参数为1。
SQL> alter system set processes=1 scope=spfile; 系统已更改。
- 重启数据库。
SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORA-00444: background process "DIAG" failed while starting ORA-00020: maximum number of processes () exceeded
- 查看告警日志。
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服务。
重启服务后,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—————————————