1、打开sqlplus

connect /as sysdba

2、

显示资源限定是否开启,value为true是开启,为false是关闭

show parameter resource_limit;

如果未开启,则使用此命令开启资源限定功能

alter system set resource_limit=true;


创建profile文件,profileName任意起,connect_time设置连接超过多少分钟后强制释放,idle_time设置连续不活动的会话超过多少分钟后强制释放  

create profile profileName limit connect_time 60 idle_time 30;


将profile文件作用于指定用户;

alter user oracleUser profile profileName;

通过多方资料

处理方式不外乎两种:扩大oracle最大session数以及清除inactive会话,当然还有,就是从数据库连接池和程序bug上面下手。


查看当前会话的语句

1、查看当前总会话数和进程数,这两个视图就是跟会话及进程有关的重要视图啦,信息都是从这里面取的。

select count(*) from v$session;
select count(*) from v$process;


2、查询那些应用的连接数此时是多少

select  b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b where a.ADDR = b.PADDR and  b.USERNAME is not null   group by  b.MACHINE  , b.PROGRAM order by count(*) desc;

3、查询是否有死锁

select * from v$locked_object;

如果查询结果为no rows selected,说明数据库中没有死锁。否则说明数据库中存在死锁。


接下来说明一下会话的状态:

1.active 处于此状态的会话,表示正在执行,处于活动状态。

2.killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。还有一点就是,killed的状态一般会持续较长时间,而且用windows下 的工具pl/sql developer来kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' ;

3.inactive 处于此状态的会话表示不是正在执行的,比如select语句已经完成。我一开始以为,只要是inactive状态的会话,就是该杀,为什么不释放呢。其 实,inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。解决inactive的方法最好的就是在 oracle中直接设置超时时间,也是有两种方法,区别暂时还不清楚:  

 1.修改sqlnet.ora文件,新增expire_time=x(单位是分钟)  

 我的sqlnet.ora位置在D:/oracle/ora92/network/admin

2.通过ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,记得重启下oracle。

修改ORACLE 中的SESSION和PROCESS

会话sessions和进程pocesses的关系 
一个process可以有0个、1个或者多个session,一个session也可以存在若干个process中,并行同样是一个session对应一 个process,主session是coordinator session,每个parallel process同样会对应数据库里一个单独的session。可以从v$px_session和v$session中验证这点。 
连接connects,会话sessions和进程pocesses的关系

每个sql login称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,一个会话对应一个服务器进程(process),如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。

Oracle的sessions和processes的数量关系是:sessions=1.1 * processes + 5

下面我们用两种方法修改PROCESS的最大值 
一、通过Oracle Enterprise Manager Console在图形化管理器中修改 
以系统管理员的身份登入,进入界面 数据库的例程 - 配置 - 一般信息 - 所有初始化参数,修改processes的值

二、在SQLPLUS中修改 
以DBA权限登录,修改PROCESS的值(SESSION的值会跟着改);创建pfile;重新启动数据库。输入的SQL命令如下,回显信息省略了 

SQL> connect sys/sys as sysdba 
 SQL> alter system set processes=400 scope = spfile; 
 SQL> create pfile from spfile; 
 SQL> shutdown immediate; 
 SQL> startup

-----------------------------------------------------------------------------------------------

另外还可以登录网页版的控制器操作

https://地址:1158/em/console/logon/logon

在使用dba用户密码登录

-----------------------------------------------------------------------------------------------

如何修改链接数据?从网上收集了一些资料真理一下,以免以后忘记

  1. select count(*) from v$process --当前的连接数  
  2. select value from v$parameter where name = 'processes' --数据库允许的最大连接数  
  3.   
  4. 修改最大连接数:  (默认好像300,更具自己的需要调整)
  5. alter system set processes = 300 scope = spfile;  
  6.   
  7. 重启数据库:  
  8. shutdown immediate;  关闭
  9. startup;启动
  10. select instance_name,status from v$instance;查看Oracle启动状态是否正常
  11. 重启数据库监听:
  12. lsnrctl stop 关闭
  13. lsnrctl start 启动
  14. lsnrctl status 状态查看
  15. 关于数据库的主程序和监听启动关闭的先后问题
  16. 1、监听是提供远程链接服务的,关闭是先关闭监听,让外部无法访问数据库,在关闭数据库主程序。
  17. 2、启动时没有太多讲究,但我一般是先启动主程序再启动监听。