Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35963
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5
  • 用 户 组: 普通用户
  • 注册时间: 2017-09-11 08:57
文章分类
文章存档

2013年(16)

分类: Oracle

2013-04-27 14:39:52

当用户需要连接一个oracle数据库时可以分为几种情况

先来看下oracle官方教材的连接示意图,

1、  在数据库所在主机直接连接数据库,也就是在本地连接访问,这种情况我们在服务器端只需要启动数据库就可以了,不需要启动监听程序(lsnrctl),甚至连net配置文件都不需要的。

2、  远程访问数据库,就是通过网络访问,通过网络一般都是使用TCP/IP协议的,这时服务端的监听就是必须的了,但是在客户端是不是一定必须有oracle的客户端软件呢?答案是否定的,一般我们在安装一个oracle客户端的时候的目的是什么呢?你肯定会说是为了配置tnsnames.ora文件啊,对了,实质上也就是需要这个文件来解析你连接串中的那个服务名,如:

这里的testbilling就是服务名,他在tnsnames.ora文件中是这样的

testbilling =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = testbilling)

    )

  )

其实只需要用文件中的连接串就可以直接连接的,不需要安装oracle的客户端,如

把连接串写成一行贴进去就行,这只是这种工具的用法,其他类似的,也有用J/ODBC连的也是不需要oracle客户端的。说这些不是鼓励不使用客户端,还是用的方便先,只是介绍下网络访问oracle数据库的机制。

 

当用户连接上数据库后,服务器进程会产生一个会话,在主机上也会有相应的进程,我们需要关心下数据库到底有哪些用户连接了,产生了哪些会话,以及相应的如何结束这些会话(这关系到如何解锁)

涉及到的系统视图有

v$session,v$process,v$lock

1、查询某sessionsidserial#以及spid

select a.username,a.sid,a.serial#,b.pid,b.spid

from v$session a,v$process b

where a.paddr=b.addr;

3、  如何杀掉某session

alter system kill session ‘sid,serial#’;

4、  如果温柔的杀不掉怎么办,在第一条中还可以查出spid,在操作系统环境下使用

kill spid

5、  如何查出数据库目前的锁

SELECT s.username,decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',NULL) LOCK_LEVEL,

o.owner,o.object_name,o.object_type,s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser

FROM v$session s,v$lock l,dba_objects o

WHERE l.sid = s.sid AND l.id1 = o.object_id(+) AND s.username is NOT Null;

阅读(1243) | 评论(0) | 转发(0) |
0

上一篇:timesten重建datastore

下一篇:oracle_参数文件

给主人留下些什么吧!~~