dbca新建数据库时processes这个参数的默认是150,一般没有会蛋疼关心其最小取,只是看到《2 day dba》和dbca中说最小乎是6,因为它包括了数据库实例的几个必须启动的后台进程,是5个,加上至少一个的用户进程,乎就是这么得出6的,但是根据上一博文,设为6是
dbca新建数据库时processes这个参数的默认值是150,一般没有会蛋疼关心其最小取值,只是看到《2 day dba》和dbca中说最小值似乎是6,因为它包括了数据库实例的几个必须启动的后台进程,是5个,加上至少一个的用户进程,似乎就是这么得出6的,但是根据上一博文,设为6是必然不行的,报错ora-03113,新建无法完成,那么这个实际的最小值是多少呢?可能不会有人关心这个,我也只是好奇。
动手验证,环境是windows下oracle10.2。首先试图通过重建数据库的方法指定尝试的processes值,做着做着想到我这是有多笨啊,为什么不用alter system set processes=int 去改,一开始发现这么改报错,提示无法修改参数,后来想到没有添加scope选项,试着加上scope=both,结果还是报错,这才明白这是个静态参数,只能使用scope=spfile来修改,且修改后重启有效。
于是就这么试了几个值,发现在processes的值在20或十几的时候无法打开数据库,只能到mount阶段,不过这个时候忘了关闭其他连接。值为30的时候可以正常打开数据库。这是想到通过不断增加客户端的连接来验证这个参数对连接的限制:使用SQL>select count(*) from v$process可以查看当前连接数,当这个数字到达29时,无法连接普通用户,然而这时候连接sysdba用户时,可以连接,但是上面的查询结果依然是29。在最新的验证中发现,sysdba连接后显示“连接到空闲例程”,且无法进行数据库操作。不管那么多,总之知道连接数到达指定值-1时,连接受限。
这时候想到可以关闭所有客户端,重启数据库,到nomount阶段,发现当前连接数15,到mount阶段依然15,再到open状态,是19,初步推断所需最小连接数是19,经过多次重启,依然是这个值,最后将processes的值修改为20,成功启动数据库,查看当前连接值还是19。最后将processes的值修改为19,重启数据库,就在我将要认为那个实际的最小值是19的时候,数据库竟然重启成功,当前连接数是18!继续将processes的值改为18,重启数据库,终于发现没有打开,提示ora-01092:oracle实例终止。这时修改processes到较大值,就可以正常打开了,打开后查看当前连接数发现时23。
总结一下,processes这个参数决定着oracle服务最大连接数,包括数据库后台进程和用户进程,服务器进程也可能包括。要让数据库正常启动(windows下10g企业版),这个参数的最小值在19附近。