解决oracle服务占用内存过高的问题

方法一:修改Oracle最大占用内存

通常我们在自己电脑上搭建项目环境时,都免不了要安装Oracle。不管你硬件多强悍,都会发现,Oracle服务一旦启用,内存立马吃紧。笔者内存8G,启动一个VS,启动一个Eclipse,启动一个虚拟机,开一个Tomcat,再开一个PL/SQL,内存基本就耗去了一大半。再启用Oracle服务,内存马上飙升五六百兆,程序便会频繁出现假死。

其实这是因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大。而通常,我们自己的环境并不需要分配那么大的内存来支持Oracle,这种情况下,我们可以通过修改sga值来减少系统中oracle占用内存过大问题。

用dba身份进入oracle,本人使用sqlplus修改(sqlplus sys/密码 as sysdba),若使用PL/SQL,可以在Command Window执行:

(1)show parameter sga; --显示内存分配情况

(2)alter system set sga_max_size=200m scope=spfile; --修改占用内存的大小

修改后重启Oracle服务,再查看资源管理器,Oracle占用资源便会降至200M以下。不过如此修改所付出的代价就是数据库性能的下降,因此修改时不宜调得太小。

方法二:不用时关闭Oracle服务

Oracle启动之后占用了大量内存。所以解决这个问题就是关闭oracle的一些开机启动服务就可以。等你用oracle的时候在手动开启就可以了。下面我们就一起来具体看一下如何去关闭和开启oracle服务程序

一:右击我的电脑—》服务,找到如下的几个服务程序:

把上面几个服务程序通通关闭。然后设置启动方式为手动启动。如果你想用oracle的时候在启动这几个服务就可以了。

二:利用脚本的形式关闭和打开服务

建立“打开或关闭oracle服务.bat”,添加如下代码:

@echo off
title Oracle服务管理
cls
color 2f
goto MENU
:MENU
cls
echo. =-=-=-=-=Oracle服务管理=-=-=-=-=
echo.
echo. 1 开启服务
echo.
echo. 2 关闭服务
echo.
echo. 3 退 出
echo.
echo. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
echo. 请输入选择项目的序号:
set /p ID=
if "%id%"=="1" goto cmd1
if "%id%"=="2" goto cmd2
if "%id%"=="3" exit
echo 请输入正确序号!&ping -n 2 127.1>nul&goto MENU
:cmd1
echo.
echo 开启Oracle服务中...
net start|findstr /i /c:"OracleDBConsoleorcl">nul&&set k=1||set k=0
if %k%==0 (net start "OracleDBConsoleorcl")
net start|findstr /i /c:"OracleOraDb10g_home1iSQL*Plus">nul&&set k=1||set k=0
if %k%==0 (net start "OracleOraDb10g_home1iSQL*Plus")
net start|findstr /i /c:"OracleOraDb10g_home1TNSListener">nul&&set k=1||set k=0
if %k%==0 (net start "OracleOraDb10g_home1TNSListener")
net start|findstr /i /c:"OracleServiceORCL">nul&&set k=1||set k=0
if %k%==0 (net start "OracleServiceORCL")
echo.
echo Oracle服务已经成功开启...
echo.
pause
exit
:cmd2
echo.
echo 关闭Oracle服务中...
net start|findstr /i /c:"OracleDBConsoleorcl">nul&&set k=1||set k=0
if %k%==1 (net stop "OracleDBConsoleorcl")
net start|findstr /i /c:"OracleOraDb10g_home1iSQL*Plus">nul&&set k=1||set k=0
if %k%==1 (net stop "OracleOraDb10g_home1iSQL*Plus")
net start|findstr /i /c:"OracleOraDb10g_home1TNSListener">nul&&set k=1||set k=0
if %k%==1 (net stop "OracleOraDb10g_home1TNSListener")
net start|findstr /i /c:"OracleServiceORCL">nul&&set k=1||set k=0
if %k%==1 (net stop "OracleServiceORCL")
echo.
echo Oracle服务已经成功关闭...
echo.
pause
exit

注意:记得手动更改具体服务名称!

运行这个文件,你就可以看到如下界面:

原文发布于微信公众号 - 浩Coding(gh_c4a2e63d2ca7)

原文发表时间:2019-05-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券