重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在UNIX或者LINUX中可以比较方便的管理ORACLE运行的进程,但在WINDOWS中ORACLE的每个会话是采用线程的机制进行管理,所以通过普通的任务管理器不能查看到具体的ORACLE用户线程。
创新互联10多年成都企业网站建设服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,成都企业网站建设及推广,对除甲醛等多个领域拥有丰富的网站运维经验的网站建设公司。
当然,通过专用的线程管理工具是可以看到的,如WINDOWS附加工具箱中的Qslice(线程分析器)就可以。
查看ORACLE最大进程数:
SQL select count(*) from v$session #连接数
SQL Select count(*) from v$session where status='ACTIVE' #并发连接数
SQL show parameter processes #最大连接
SQL alter system set processes = value scope = spfile;重启数据库 #修改连接
unix 1个用户session 对应一个操作系统 process
而 windows体现在线程
------------------------------------------------------------------------------
修改ORACLE最大进程数:
使用sys,以sysdba权限登录:
SQL show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150
SQL alter system set processes=300 scope = spfile;
系统已更改。
SQL show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150
SQL create pfile from spfile;
文件已创建。
重启数据库,
SQL show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 300
查询数据库当前进程的连接数
select count(*) from v$process;
查看数据库当前会话的连接数
elect count(*) from v$session;
查看数据库的并发连接数
select count(*) from v$session where status= ACTIVE ;
查看当前数据库建立的会话情况
select sid serial# username program machine status from v$session;
查询数据库允许的最大连接数
select value from v$parameter where name = processes ;
或者命令 show parameter processes;
修改数据库允许的最大连接数
alter system set processes = scope = spfile;
(需要重启数据库才能实现连接数的修改)
重启数据库
SQLshutdown immediate;
SQLstartup;
查看当前有哪些用户正在使用数据
SQLselect osuser a username cpu_time/executions/ || s sql_fulltext machine
SQLfrom v$session a v$sqlarea b
SQLwhere a sql_address = b address
SQLorder by cpu_time/executions desc;
备注 UNIX 个用户session对应一个操作系统process 而Windows体现在线程
启动oracle
su oracle
SQLsqlplus system/pwd as sysdba //进入sql
SQLstartup //启动数据库
SQLlsnrctl start //启动监听
sqlplus /as sysdba
SQLshutdown immediate; //关闭数据库
SQLstartup mount;
lishixinzhi/Article/program/Oracle/201311/18867
1. 先通过top命令查看产用资源较多的spid号
2.查询当前耗时的会话ID,用户名,sqlID等:
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('5648612','256523'));
3. 如果上一步sql_id或者 hash_value不为空,则可用v$sqlarea查出当前正在使用的sql
select sql_text
from v$sqltext_with_newlines
where hash_value = hash_value
order by piece;
也可直接使用:
select a.*,b.SQL_TEXT from (
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('23226'))
) a,v$sql b
where a.sql_id = b.SQL_ID(+)
4.kill占用大资源的session
Alter system kill session 'SID,SERIAL#'
解锁:
1.查询哪些对象被锁:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
2.下面的语句用来杀死一个进程:
alter system kill session '524,1095'; (其中24,111分别是上面查询出的sid,serial#)
3.再一次查询目前锁定的对象,若发现以上方法不能解除锁定的表,则用以下方法:
3.1 执行下面的语句获得进程(线程)号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=524 (524是上面的sid)
windows里所有oracle事务统一由一个oracle.exe进程管理,pmon、smon等表现为oracle.exe内的线程。
linux系统里pmon、smon都是独立的进程。
线程是进程的组成部分,进程中的资源由多个线程共享。你可以把它们想象成:
进程是老大,手上有的是钞票、棍棒;
线程是他的小弟们,身无分文;
老大提供棍棒给小弟们出去办事,办事需要钱的时候由老大分配,小弟们抢来的钞票归老大统一支配。
1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。
2、在命令行下输入shell指令:whereis oracle。
3、最后,按下回车键执行shell指令,此时会看到数据库oracle的具体位置被打印了出来。