Oracle 更改SGA, Memory target

本想玩玩更改 Oracle SGA的。 没想到碰到的事情还不少。 下面就来说说这个可怕的过程。

开始, 更改sga成功。

SQL> sqlplul /nolog
SQL> conn as sysdba
SQL> alter system set sga_max_size=1500m scope=spfile;


可当我重启数据库的时候却悲剧了, 数据库启动失败。 提示某些参数设置太小。 下面就开始了恢复数据库的历程了 。

环境:
[b]Oracle: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production[/b]

[b]OS:
HP-UX B.11.31
Version: U (unlimited-user license)[/b]

刚开始, 按照数据库的错误提示, 某些值设置小,(例如 sga_max_size)。于是就在目录 。。。\admin\sid\pfile\创建了一个pfile 文件init.ora, 内容是:

SPFILE='$Oracle_HOME\dbs\spfilesid.ora'
sga_max_size=1800m


  在sqlplus 里面, 继续启动数据库


startup pfile=init.ora


大家主要路径, 我用的是相对路径。 可仍然启动失败, 说其他的参数设置的太小。

这时候, 我想如果继续这样设置下去的话, 那我的设置多少具体的参数啊。 而且每一个具体内存参数的大小, 我也不太清楚设置多少为最佳。

突然想起来, Oracle11g, 是有自动内容管理的Automatic Memory Management (AMM)的。 我只要设置MEMORY_TARGET 和 MEMORY_MAX_TARGET的值就好了.

Oracle自动帮我们优化里面每种类型的内存大小。 像SGA, PGA。 SGA中的shared pool, buffer cache, large pool, java pool 和其它。

这里简单的引入下 MEMORY_TARGET和MEMORY_MAX_TARGET的概念。
[b]MEMORY_TARGET[/b] specifies the Oracle system-wide usable memory.
[b]MEMORY_MAX_TARGET[/b] (…) decide on a maximum amount of memory that you would want to allocate to the database for the foreseeable future.

其实这写值的大小限制, 还跟我们mount上的资源大小有关。 这个就飘过。 大家可以看看这篇文章, 关于那两个值大小可以设置为多大及可能空间不足的情况下的解决方案 [url] http://www.ora600.be/news/oracle-11g-memorytarget-memorymaxtarget-and-devshm[/url]

接下来, 把pfile里面的sga_max_size=1800m 删掉。 现在的内容是:

SPFILE='$ORACLE_HOME/dbs/spfileslamdev.ora'
memory_max_target=3000M
memory_target=2800M



改好后, 在sqlplus里 启动数据库:

SQL> startup pfile=init.ora


这下数据库终于可以成功启动了。 哈哈


SQL> show parameter sga

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 3008M
sga_target big integer 2512M




但别高兴的太早, 还是shutdown 再 startup 下比较保险。


SQL> shutdown immediate

数据库成功停掉。

SQL> shartup


这次, 数据库更第一次一样, 还是失败。 这下是因为没有把更改的东西写进spfile。 只要重来:

SQL>startup pfile=init.ora


但这次也有错误, 提示share空间不够。 问题还挺多哈。

我以前有看过类似的错误, 大概是 share里的东西还在运行。 这个有workaround.

先把spfile copy 一份, 然后打开spfile进行更改保存。 随便改, 因为我们就是要破坏spfile。 改好后, 启动数据库

SQL>startup

这时肯定是失败的。 然后把我们之前备份的那个spfile恢复。 从pfile启动:

SQL>startup pfile=init.ora


这下可以成功启动了。 把内容更改进spfile:


SQL>alter system set memory_max_target=3000m scope=spfile;
... 成功更改
SQL>alter system set memory_target=2800m scope=spfile;
... 成功更改


这下都做好了, 停掉数据库再启动。 一切ok了。 随便玩玩, 害的我晚饭推迟3个小时。


  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值