合作伙伴的oracle无法访问。本机也不行,排除是防火墙之类的原因。

但是windows的服务列表上,service 、listener都好好的啊。

增加监听地址,搞来搞去,都不行。百思不得姐。

无聊中,在命令行方式下,用sqlplus,不指定数据库名,凭dba身份进入,查看里面的插件数据库情况:

show pdbs;

结果提示数据库不可用。那用"startup"命令强行启动吧,说sga_target太小了,说起码要多少多少才行。有提示就好,并且还说得那么露骨。

按照网上的指导,

1、先把spfile文件(应该就是oracle启动时的默认配置文件)拷贝、创建一份,

sql> create pfile='e:\hyhdjg\temp\init.ora' from spfile;

2、然后修改pfile里面的sga_target,sga_max_size

这些值都是byte为单位,数字特别大,计算的时候,如果要设为2000M,那么就是

2000 * 1024 * 1024 = 2097152000

oracle sga_target参数值过小导致无法启动问题_sql


3、用修改过的配置文件进行启动

SQL> startup pfile='e:\hyhdjg\temp\init.ora';

成功,数据库起来了。

oracle sga_target参数值过小导致无法启动问题_重启_02

但事情没有这么快就完了:

1、这只是临时性的举措
因为我们临时用的这份配置文件进行启动,但默认的那份配置文件(spfile)并没有修改。所以,如果重启机器,或者是在windows的服务列表里刷新oracle,那么oracle仍然会出问题。

2、不敢修改默认配置
一劳永逸就是修改spfile。但是,这是一份二进制文件,不能直接用记事本进行修改。而且,oracle的参数是不能随便更改的,能不改就不改,我记得以前就是听信了网上什么教程,调整了这个sga的参数,结果数据库直接就起不来了。项目时间很紧,我不敢冒这个险。先这样,反正重启机器的机会不多,重启了的话到时再说。

最好的方法,是有个虚拟机,oracle安装在虚拟机下。修改前先备份下虚拟机,然后再试。

3、这个配置文件很神秘
这个spfile好像一直在修改当中,它的最后修改时间一直有更新,说明在运行过程中会有些东西被修改。也可以解释,为什么复制的这份pfile是一次性的,你下次再用来重启,会报错,可能是因为数据不断在变化。

4、为啥sga会突然不合适
不知道。我是oralce的外行,安装oracle永远都是按下一步,默认就好,不了解那么多。没设置和修改过啥参数。之前在许多项目用过好多oracle,都没啥问题。为啥合作伙伴这个会有问题?而且它之前也没有啥问题。也许,是有人改了吧。或者是这个参数之前没有问题,现在可能环境变了,比如内存不够,就不行啦?(但内存是16G,应该是足够了)

这是一个谜。

5、修改配置的命令
如果真的要修改这个默认的sga_target值,那么可以用以下命令:

--1-1查看当前sga大小
SQL> show parameter sga

--1-2修改sga_max_size为24G
SQL> alter system set sga_max_size=24G scope=spfile;

--1-3修改sga_target为24G
SQL> alter system set sga_target=24G scope=spfile;

--1-4重启生效
SQL> shutdown immediate

SQL> startup

SQL> show

scope有三个选项,含义不言自明:
1)memory
2)spfile
3)both

momory的话,是临时性举措,没有修改到物理文件,重启后就消失了。但是,修改sga这些参数,本来我想先在内存上试试,结果提示说不支持。那估计要scope=spfile。