十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
下面我们将Oracle 11g作为一个例子来介绍一下。 Oracle本身就是一个很占资源的软件,光一个实例服务所占内存,根据其安装时分配的内存就至少要达到256MB以上,再加上其他附属服务,光内存就要占用物理内存的30%左右,至于CPU,Oracle也需要占用30%左右,因而,我们考虑在有需要使用Oracle时启用其相关服务,平时则停止该服务。 我们拿Oracle 11g作为例子。首先在“开始=〉运行”中输入“services.msc”,按回车,进入“服务”控制台,将Oracle ORCL VSSWriterService、OracleDBConsolexx(xx表示实例名称)、OracleOraDb11g_home1TNSListener及OracleServicexx(xx表示实例名称)服务的属性中启动类型修改为“手动”,然后在需要使用时启动OracleDBConsolexx(xx表示实例名称)、OracleOraDb11g_home1TNSListener及OracleServicexx(xx表示实例名称)这些服务,不使用时停止,而且这样做即使机器关机或重启后,默认系统还是不会启动这些服务的。当然我们建议将启动停止服务的操作写在一个批处理文件中方便使用。 下面我们附上启动及停止Oracle 11g服务的批处理文件内容(具体批处理文件请见附件,oracle实例名称以orcl为例):启动Oracle11g服务批处理代码如下:@echooff@ ECHO 启动 Oracle 11g 服务net start"OracleDBConsoleorcl"net start"OracleOraDb11g_home1TNSListener"net start"OracleServiceORCL" @ ECHO 启动完毕 按任意键继续pauseexit停止Oracle11g服务批处理代码如下:@echooff@ ECHO 停止 Oracle 11g 服务net stop"OracleDBConsoleorcl"net stop"OracleOraDb11g_home1TNSListener"net stop"OracleServiceORCL" @ ECHO 停止完毕
创新互联公司是专业的顺义网站建设公司,顺义接单;提供网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行顺义网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
首先启动windows命令。在开始菜单中输入cmd命令
输入启动命令:"net start oracleservieYAOYY" [Yaoyy代表实例名称,不区分大小写]
使用sqlplus方式登录数据库,测试启动是否正常。
登录成功后,会有以下页面,并且命令前缀变成:“SQL ”方式
使用简单的查询语句可以看到系统正常执行sql语句.
操作完之后,退出系统使用命令:"exit;"进行退出
停止oracle服务. 使用命令:"net stop oracleserviceyaoyy"注意后面没有分号.
1 相关表、视图 dba_jobs all_jobs user_jobs 包含登录用户所有的JOB信息 dba_jobs_running 包含正在运行job相关信息注意 须使用oracle的sys用户登录到数据库,才能查看dba_jobs_running, v$process, v$session表的信息。同时,登录操作系统时,要用oracle用户。2 问题描述为同事解决一个因为网络连接情况不佳时,执行一个超长时间的SQL插入操作。既然网络状况不好,就选择了使用一次性使用JOB来完成该插入操作。在JOB执行一段时间后,我发现被插入表有些问题(惭愧,当时也没有先检查检查就做了)。准备停止JOB,因为在JOB运行情况下,我的所有修改都会报系统资源忙的错误。强行KILL SESSION是行不通的,因为过会儿,JOB还会重新启动,如果执行的SQL也被KILL了通过重新启动的JOB还是会被再次新执行的。3 解决办法 比较好的方法应该是; 1. 首先确定要停止的JOB号 在10g中可通过Dba_Jobs_Running进行确认。 查找正在运行的JOB: select sid from dba_jobs_running; 查找到正在运行的JOB的spid: select a.spid from v$process a ,v$session b where a.addr=b.paddr and b.sid in (select sid from dba_jobs_running); 2. Broken你确认的JOB 注意使用DBMS_JOB包来标识你的JOB为BROKEN。 SQL EXEC DBMS_JOB.BROKEN(job#,TRUE); 注意:当执行完该命令你选择的这个JOB还是在运行着的。 3. Kill 对应的Oracle Session 应为BROKEN后该JOB还在运行,如果要求该JOB立刻停止,就需要找到该job的对应SESSION(SID,SERIAL#),然后执行以下命令: ALTER SYSTEM KILL SESSION 'sid,serial#'; 或者直接KILL对应的操作系统的SESSION,如果使用ALTER SYSTEM KILL SESSION执行很长时间,其实可以使用OS的命令来快速KILL掉SESSION. For Windows, at the DOS Prompt: orakill sid spid For UNIX at the command line kill –9 spid 4. 检查你的JOB是否还在运行 检查你要停止的JOB是否还在运行,其实多数情况下,应该都已经停止了。尤其执行的第三步的“杀手”命令。如果真的还是没有停止,只好从第一道第三步重新做一下了。 5. 将Job Queue Processes的数目修改为0 首先确认当前的Job Queue Processes的数目 SQL col value for a10 SQL select name,value from v$parameter where name ='job_queue_processes'; 然后将Job Queue Processes的数目修改为0 SQL ALTER SYSTEM SET job_queue_processes = 0; 保证所有的JOB都会停止。 6. 修改你要修改的任何东西,甚至是JOB内的内容。 7. 修改完成后,将job的BROKEN状态停止。SQLEXEC DBMS_JOB.BROKEN(job#,FALSE): 8. 恢复job_queue_processes的原始值 ALTER SYSTEM SET job_queue_processes = original_value; 至此整个停止并修改JOB完成. 但是需要另外注意一下的是,在MARK一个BROKEN状态的时候,因为JOB内部执行SQL的原因,所以执行时或许要“煎熬”一段时间。所以在建立JOB时一定要仔细考虑,同时如果可能可以在你设计的PL/SQL代码中,增加一些判断“停止信号”的部分。来避免费力执行上面的步骤。 毕竟,ORACLE在执行JOB时,还是很“倔强”的 -:) 4 附件:ORAKILL用法很多时候遇到某个session一直处于active,使得CPU一直处于搞使用状态,虽然kill 了,但是却不能够使得使得线程结束。 kill session只是kill这个进程,但是线程一直处于活动状态。需要真正的kill线程才能够解决cpu使用率高的问题。os :windows2003ORAKILL用法是 orakill sid spid 其中sid为实例名,spid为线程号。怎么样取得这个spid呢?以下给出查找spid的语句。select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr and s.sid = XXX;--说明:XXX为session的sid (不是数据库SID 呵呵)。自己输入就可以。orakill instance_name spid这样就能够成功解决cpu使用率高的问题
在windows里启动Oracle有两个步骤,一是先启动服务,二是再启动实例、数据库,这两个都可以设置成自动或者手动
针对数据库开机自动启动问题,解决方法有两个
方法一:在服务把oracleservice%SID%这个服务改成手动启动
方法二:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME0\ORA_%SID%_AUTOSTART的值为false,这个是控制启动服务时是否自动启动数据库(实例,占内存),默认是true
注册表还有个ORA_%SID%_shutdown它是控制你关机时是否自动关数据库的
启动服务可以用net start oracleservice%SID% 命令
停止服务可以用net start oracleservice%SID% 命令
手动启动数据库要先开始服务,不然sqlplus不能进行操作系统验证了
进入sqlplus “/as sysdba"
启动数据库是在sqlplus里输入startup
关闭数据库是在sqlplus里输入shutdown immediate
找出正在执行的JOB编号及其会话编号 SELECT SID,JOB FROM DBA_JOBS_RUNNING; 停止该JOB的执行 SELECT SID,SERIAL# FROM V$SESSION WHERE SID='SID'; ALTER SYSTEM KILL SESSION 'SID,SERIAL'; EXEC DBMS_JOB.BROKEN(JOB,TRUE);实例分析:1,查询正在运行的Job,通过查询有两个,和进程占用较多的是两个ORACLE进程符合。SQL SELECT SID,JOB FROM DBA_JOBS_RUNNING; SID JOB\x0d\x0a---------- ----------12 11616 1172,查询正在运行的job的信息SQL SELECT SID,SERIAL# FROM V$SESSION WHERE SID='12'; SID SERIAL#\x0d\x0a---------- ----------\x0d\x0a12 4SQL SELECT SID,SERIAL# FROM V$SESSION WHERE SID='16'; SID SERIAL#\x0d\x0a---------- ----------\x0d\x0a16 13,利用查询出来的job信息将job结束掉SQL ALTER SYSTEM KILL SESSION '12,4';System altered.SQL ALTER SYSTEM KILL SESSION '16,1';System altered.\x0d\x0a4,如果不希望运行上述job的话,可以将job设置为broken.EXEC DBMS_JOB.BROKEN(116,TRUE);EXEC DBMS_JOB.BROKEN(117,TRUE);