随笔-13  评论-28  文章-63  trackbacks-0
  2006年8月24日

在Linux系统中我一般采用编译源码的方式来安装Apache,有两种方法可以让Apache在系统启动时自动启动。

1. 在/etc/rc.d/rc.local中增加启动apache的命令,例如:/usr/local/httpd/bin/apachectl start

2. 将apache注册为系统服务

首先将apachectl命令拷贝至/etc/rc.d/init.d目录下,改名为httpd

使用编辑器打开httpd文件,并在第一行#!/bin/sh下增加两行文字如下

# chkconfig: 35 70 30
# description: Apache

接着注册该服务

chkconfig --add httpd

一切OK了,启动服务

service httpd start

其中所增加的第二行中三个数字第一个表示在运行级别3和5下启动apache,第二、三是关于启动和停止的优先级配置,无关紧要。

posted @ 2008-08-07 16:51 七匹狼 阅读(272) | 评论 (0)编辑 收藏
70EW-TH17Q1-PM-C01-S1W2QD-MEM-NUYY
posted @ 2006-11-02 13:51 七匹狼 阅读(572) | 评论 (0)编辑 收藏
当使用9205以前版本的exp程序去9205及以上的数据库中去导出带LOB字段的表时, 会遇到一个错误, 错误信息为"EXP-00003 : 没找到段的存贮定义 .....", 事实上这是一个Oracle的Bug, 可以通过监时地更改视图"exu9tne"的定义来临时解决问题, 如下所示:

    在导出前, 连接到SYS用户, 运行以下SQL:

CREATE OR REPLACE VIEW exu9tne (
tsno, fileno, blockno, length) AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1
UNION ALL
SELECT * FROM SYS.EXU9TNEB
/

    导出完成后, 运行以下命令来还原视图的定义, 下面贴的是Oracle 9用的, 10g的还是请访问Metalink来确定, 或者在运行前一个命令之前, 从USER_VIEWS中将原视图的定义查出来, 这样做也是DBA一个很好的习惯.

CREATE OR REPLACE VIEW exu9tne (
tsno, fileno, blockno, length) AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1
/
posted @ 2006-09-07 11:35 七匹狼 阅读(579) | 评论 (0)编辑 收藏
         1) 创建用户 :

   create user username identified by pwd default tablespace users Temporary TABLESPACE Temp;

   2) 用户授权

   grant connect,resource,dba to business;   
     
         3) 提交

   commit;

创建角色:
   1:CREATE ROLE role_name IDENTIFIED BY password
         CREATE ROLE role_name IDENTIFIED EXTERNALLY
         CREATE ROLE role_name IDENTIFIED GLOBALLY

         缺省情况下建立的角色没有password或者其他的识别。如果使用IDENTIFIED BY 子句建立,那么角色不会自动响应,必须用SET ROLE激活。

SET ROLE role_name IDENTIFIED BY password

EXTERNALLY和GLOBALLY类型的角色由操作系统和ORACLE Service server验证。通常用户需要权限修改应用程序中使用的表单中的数据,但是只有在应用程序运行时而不是在使用ad hoc工具时,这种上下文敏感安全可以通过有PASSWORD的角色来实现。当用户在应用程序内部连结数据库时,代码将执行SET ROLE命令,通过安全验证。所以用户不需要知道角色的password,也不需要自己输入SET ROLE命令。

对象权限

  对象权限就是指在表、视图、序列、过程、函数或包等对象上执行特殊动作的权利。有九种不同类型的权限可以授予给用户或角色。如下表:
权限ALTERDELETEEXECUTEINDEXINSERTREAD REFERENCESELECT UPDATE
Directoryno no no no no yesnono no
functionnonoyesno nonononono
procedureno noyesnonono nonono
packagenonoyesnononononono
DB Objectno no yesnono nononono
Libary nonoyes nonono no nono
Operation no no yesno no no no no no
Sequenceyes no no no no no no no no
Table yes yes noyesyes no yes yes yes
Typeno no yes no no no no no no
View no yes no no yes no no yes yes
 对象由不止一个权限,特殊权限ALL可以被授予或撤销。如TABLE的ALL权限就包括:

系统权限

  系统权限需要授予者有进行系统级活动的能力,如连接数据库,更改用户会话、建立表或建立用户等等。你可以在数据字典视图SYSTEM_PRIVILEGE_MAP上获得完整的系统权限。对象权限和系统权限都通过GRANT语句授予用户或角色。需要注意的是在授予对象权限时语句应该是WITH GRANT OPTION子句,但在授予系统权象时语句是WITH ADMIN OPTION,所以在你试图授予系统权限时,使用语句WITH GRANT OPTION系统会报告一个错误:ONLY ADMIN OPTION can be specified。在考试中要特别注意这个语法和错误信息。

posted @ 2006-09-03 16:33 七匹狼 阅读(2095) | 评论 (1)编辑 收藏

一、系统环境:

(1)、操作系统:Windows 2000 professional,机器内存512M

(2)、数据库: Oracle 8i R2 (8.1.6) for 2000 企业版

(3)、安装路径:D:\ORACLE

二、卸载步骤:

(1)、开始->设置->控制面板->管理工具->服务

停止所有Oracle服务。

(2)、开始->程序->Oracle - OraHome81->Oracle Installation Products->Universal Installer

卸装所有Oracle产品

(3)、运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。

(4)、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口

(5)、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标

(6)、重新启动计算机,重起后才能完全删除Oracle所在目录

(7)、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,

  并从Windows 2000目录(一般为C:\WINNT)下删除以下文件

  ORACLE.INI、oradim80.INI

(8)、WIN.INI文件中若有[ORACLE]的标记段,删除该段

注:第8步可有可无

如果是在unix或linux下那就更方便了,只要删除$ORACLE_HOME下的所以文件,以及所有数据文件,最后删除日志文件就可以了

posted @ 2006-09-03 14:52 七匹狼 阅读(336) | 评论 (0)编辑 收藏
本文所涉及到的Oracle_Database_10g运行在操作系统Red Flag Linux DC 4.1下。
    8月1日至8月19日,CALIS第三期系统管理员培训班在上海交通大学闵行校区图书馆成功举行。作为这期培训班的管理人员之一,笔者旁听了红旗Linux 和Oracle Database 10g的全部讲课。10g的培训内容基本涉及到了该数据库的各个方面,但是在实际部署CALIS产品的时候,除了要了解Red Flag Linux DC 4.1下有方便10g安装的Oracle Install Navigator(系统命令oranavi),以下三个问题值得注意。一、RESOURCE角色的UNLIMITED TABLESPACE权限问题
    在10g中,RESOURCE角色包含了CREATE TRIGGER、CREATE INDEXTYPE和CREATE PROCEDURE等常用的系统权限,因此在10g中创建新用户的时候除了默认的CONNECT角色,一般还要赋予RESOURCE角色。
    现在,使用Enterprise Manager(EM)或者下面的SQL语句创建一个新用户:
    CREATE USER "TEST" PROFILE "DEFAULT" IDENTIFIED BY "TESTPASS" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
    GRANT "CONNECT" TO "TEST";
    GRANT "RESOURCE" TO "TEST";
    下边,在SQL*PLUS中以该用户身份登录:
    [liuxg@localhost liuxg]$ su - oracle
    [oracle@localhost oracle]$ sqlplus /nolog
    SQL> connect test/testpass
    查询该用户所拥有的全部权限:
    SQL> select * from session_privs;
    PRIVILEGE
    --------------------------------------------------------------------------------
    CREATE SESSION
    ALTER SESSION
    UNLIMITED TABLESPACE
    CREATE TABLE
    CREATE CLUSTER
    CREATE SYNONYM
    CREATE VIEW
    CREATE SEQUENCE
    CREATE DATABASE LINK
    CREATE PROCEDURE
    CREATE TRIGGER
    PRIVILEGE
    --------------------------------------------------------------------------------
    CREATE TYPE
    CREATE OPERATOR
    CREATE INDEXTYPE
    14 rows selected.
    从结果中可以看到,该用户拥有UNLIMITED TABLESPACE系统权限。但是如果使用select privilege from role_sys_privs where role='CONNECT'以及select privilege from role_sys_privs where role='RESOURCE'查询CONNECT和RESOURCE角色却找不到UNLIMITED TABLESPACE这个系统权限。
    从Oracle MetaLink得知,UNLIMITED TABLESPACE是为了使10g保持向后兼容性而隐含在RESOURCE角色中的一个系统权限。从安全性的角度来考虑,在创建用户并且授予RESOURCE角色之后应该回收UNLIMITED TABLESPACE这个系统权限。这里推荐创建一个新角色,比如CALIS_RESOURCE,该角色拥有select privilege from role_sys_privs where role='RESOURCE'查询语句所列出的全部系统权限,而在创建新用户的时候则将赋予这个新角色。二、8080端口和2100端口被占用问题
    很多用户发现,在10g运行的时候,如果启动默认端口为8080的Tomcat,不能访问Tomcat所提供的Web应用程序,通过命令lsof -i:8080会发现该端口已经被10g占用;同样,如果启动默认端口为2100的CALIS Z-Server,该服务也不能够被访问,再通过lsof -i:2100会发现该端口也是被10g占用。
    当然可以通过改变Tomcat和CALIS Z-Server默认端口的方式来避免端口冲突。通过调查发现10g中是XML DB在使用8080和2100,而XML DB目前在CALIS各项产品中还未使用到,因此,建议通过关闭XML DB来解决问题。具体可参考如下几步操作:
    [liuxg@localhost liuxg]$ su - oracle
    [oracle@localhost oracle]$ sqlplus /nolog
    SQL> connect / as sysdba
    SQL> alter system set dispatchers='' scope=both;
    SQL> shutdown immediate
    SQL> startup 三、 Enterprise Manager(EM)的使用问题
    10g提供了使用浏览器以Web方式访问数据库的工具Enterprise Manager,EM极大的方便了数据库管理员对数据库的管理。与此同时,EM默认使用的协议是HTTP,数据库用户密码以及对数据库进行的各项操作都是在网络上明文传输,这无疑是极大的安全隐患。针对这个问题,建议使用安全性较高的HTTPS协议使用EM。具体可参考如下几步操作:
    [liuxg@localhost liuxg]$ su - oracle
    [oracle@localhost oracle]$ emctl stop dbconsole
    [oracle@localhost oracle]$ secure dbconsole
    [oracle@localhost oracle]$ emctl start dbconsole
    其中为10g中sysman用户的密码。需要说明的是,在这之后,用Microsoft Internet Explorer和Red Flag Linux DC 4.1自带的Mozilla可以正常通过HTTPS协议访问EM,但是使用Firefox则会出现invalid certificate的提示,无法正常访问,需要进一步试验来解决。
    对于EM的中文界面出现乱码的情况,解决方法请参考这个网址:
    http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm。由于EM的中文界面有很多翻译不够准确的地方,因此最好是设置浏览器的默认语言为英文,使用英文操作界面。
    另外,如果使用DBCA新建立了一个库并配置了EM,那么访问该库的EM的时候端口不再是5500,而是5501。如果再新建立另外的多个库,则端口号依次增加1,iSQL*PLUS等具有相同的规律
posted @ 2006-09-01 15:34 七匹狼 阅读(302) | 评论 (0)编辑 收藏
1:打包:
      tar -c (文件名.tar.gz) (要被打包的目录)
2:解压:
      tar -xvzf  file.tar.gz
3:传输文件到另台机器上:
      scp filename compname:/directory
4:复制文件和目录
      cp 文件名或目录 文件名称或目录/路径
5:删除文件或目录
      rm -rf  file/directory
6:文字编辑
      vi filename
7:查看进程
       ps -a
8:查看开放的端口
       netstat -a
9:让程序永远后台运行
   nohup /root/test.php &

posted @ 2006-09-01 00:50 七匹狼 阅读(391) | 评论 (4)编辑 收藏
1:> 用root用户登陆:
 a:启动ftp:
      目录:/etc/init.d
      命令: ./vsfrpd start
 b:启动apatch:
      目录:/usr/local/apache2/bin
      命令:/apachectl start
 c:关闭防火墙:
     命令:iptables -F

2:> 切换用户,启动oracle数据库
    a:切换用户
      命令:su 用户名。
    b:启动oracle数据库
      目录:/usr/app/oracle/product/10.1.0/db-1/bin
      命令:startup
   c:关闭oracle数据库 
         命令:shutdown
   d:启动监听器
         命令:lsnrctl

3:> 启动tomcat
a:切换用户到common
    目录:/usr/local/tomcat/bin
    命令:./startup.sh
 b:关闭tomcat
    命令:./shutdown.sh

4:>
   重启Linux服务器
       a:命令:reboot

5>
   启动oracle 10g的em
         emctl start dbconsole
   停止oracle 10g的em
         emctl stop dbconsole
posted @ 2006-08-28 10:42 七匹狼 阅读(686) | 评论 (0)编辑 收藏
在诊断数据库系统性能的过程中,总会涉及到跟踪效率低下的sql语句,现在就如何跟踪sql语句来做一个简单的总结。权做抛砖引玉之用。   如果我们可以修改应用系统的源代码,则可以直接在程序中加入如下的语句:

1)alter session set timed_statistics=true; /*适用于Oracle 7.3以后的版本*/
2)alter session set max_dump_file_size=unlimited ; /*适用于Oracle 7.3以后的版本*/
3)alter session set tracefile_identifier='POX20031031a'; /*适用于Oracle 8.1.7以后的版本*/
4)alter session set events '10046 trace name context forever, level 8'; /*在这里编写应用程序的代码*/
5)alter session set events '10046 trace name context off';   

在上述语句中,
语句1)是把该会话的时间统计打开,该参数默认为false.在Oracle 7.3之前的版本中,不能在会话级设置该参数,只能修改初始化文件然后重新启动数据库,这样将在实例级打开时间统计。
  
语句2)是把跟踪文件的大小设置成操作系统所允许的最大尺寸,这样可以防止跟踪文件在完成所需要的跟踪之前被填充满,此外需要注意的是确保存放跟踪文件的目录要有足够的空间,否则将会收到“文件系统已满”错误。  

语句3)的作用是使生成的跟踪文件名称中包含'POX20031031a'字符串,这样可以使你很容易的找到所需的跟踪文件,该参数在Oracle 8.1.7之后可用。  语句4)和语句5)的作用分别是打开和关闭跟sql跟踪,你可以在这两个语句之间写入应用程序的代码,这些代码的执行情况都将被跟踪。需要注意的是语句4)的level关键字,它用来指定跟踪级别,一共有0,1,2,4,8,12六个级别可以设置,0相当于关闭跟踪;1是输出一般的跟踪信息,不包括绑定变量和等待信息;2和1相同;4是在级别1的基础上增加绑定变量信息;8是在级别1的基础上增加等待信息;级别12是输出包含级别1,4,8的所有信息。
   如果应用程序的代码无法修改或者是不想去修改,则可以在其他会话中打开对特定会话的跟踪,方法如下:  
1)sys.dbms_system.set_bool_param_in_session(:sid, :serial,'timed_statistics', true); 
 
2)sys.dbms_system.set_int_param_in_session( :sid, :serial,'max_dump_file_size', 2147483647);  打开和关闭跟踪的第一种方法(oracle推荐):
 
3.1)sys.dbms_support.start_trace_in_session(:sid, :serial,waits=>true, binds=>false);  /* 在此期间运行要跟踪的应用程序*/   

4.1)sys.dbms_support.stop_trace_in_session(:sid, :serial);  
打开和关闭跟踪的第二种方法:  
3.2)sys.dbms_system.set_ev(:sid, :serial, 10046, 8, '');  /*在此期间运行要跟踪的应用程序*/   
3.2)sys.dbms_system.set_ev(:sid, :serial, 10046, 0, '');  
 
以上语句中的:sid和:serial分别代表所要跟踪的会话的ID和序列号,这些信息可以从V$SESSION视图的SID和SERIAL#列获得。打开关闭跟踪中第一种方法的好处是你不用自己写10046这个事件号,这样可以减少错误,但是dbms_support程序包在你的数据库中可能会不存在,这样就只有用第二种方法了。   到现在为止,我们已经生成了所需要的跟踪文件,然后我们需要找到该文件来进行分析。跟踪文件的存放位置只有两种可能,Oracle参数USER_DUMP_DEST 或者BACKGROUND_DUMP_DEST或者是oracle_home\udump指定的目录;文件名称根据不同的平台会有所不同,但是在文件名中都会包含会话所对应的操作系统进程(线程)号,也就是V$PROCESS的SPID列(V$PROCESS.SPID) ,该信息可以通过 v$process.addr和v$session.paddr做表连接查询得到。例如:select spid from v$process p,v$session s where p.addr=s.paddr and s.sid=:sid and s.serial#=:serial.   本文只对Oracle在使用专用服务器进程(Dedicated Server)模式做了总结,至于的共享服务器(Shared Server)模式和在应用级使用连接池的情况下,收集sql跟踪信息的方法会比较复杂,希望有相关经验的高手来总结。
posted @ 2006-08-28 00:19 七匹狼 阅读(419) | 评论 (0)编辑 收藏
视图 作用
ALL_COL_PRIVS 表示列上的授权,用户和PUBLIC是被授予者
ALL_COL_PRIVS_MADE 表示列上的授权,用户是属主和被授予者
ALL_COL_RECD 表示列上的授权,用户和PUBLIC是被授予者
ALL_TAB_PRIVS 表示对象上的授权,用户是PUBLIC或被授予者或用户是属主
ALL_TAB_PRIVS_MADE 表示对象上的权限,用户是属主或授予者
ALL_TAB_PRIVS_RECD 表示对象上的权限, 用户是PUBLIC或被授予者
DBA_COL_PRIVS 数据库列上的所有授权
DBA_ROLE_PRIVS 显示已授予用户或其他角色的角色
DBA_SYS_PRIVS 已授予用户或角色的系统权限
DBA_TAB_PRIVS 数据库对象上的所有权限
ROLE_ROLE_PRIVS 显示已授予用户的角色
ROLE_SYS_PRIVS 显示通过角色授予用户的系统权限
ROLE_TAB_PRIVS 显示通过角色授予用户的对象权限
SESSION_PRIVS 显示用户现在可利用的所有系统权限
USER_COL_PRIVS 显示列上的权限,用户是属主、授予者或被授予者
USER_COL_PRIVS_MADE 显示列上已授予的权限,用户是属主或授予者
USER_COL_PRIVS_RECD 显示列上已授予的权限,用户是属主或被授予者
USER_ROLE_PRIVS 显示已授予给用户的所有角色
USER_SYS_PRIVS 显示已授予给用户的所有系统权限
USER_TAB_PRIVS 显示已授予给用户的所有对象权限
USER_TAB_PRIVS_MADE 显示已授予给其他用户的对象权限,用户是属主
USER_TAB_PRIVS_RECD 显示已授予给其他用户的对象权限,用户是被授予者
posted @ 2006-08-28 00:04 七匹狼 阅读(619) | 评论 (1)编辑 收藏
1:先在oracle数据库中找到锁住的对象:
select xidusn, object_id, session_id, locked_mode from v$locked_object;

2:得到session_id。再根据session_id找到v$session对应的sid号和serial#:
select username,sid,serial# from v$session where sid=session_id;

3:用oracle的slq kill掉相关的session sql语句:
   alter system kill session 'sid,serial#';

4:如果不能kill掉,报ora-00031错:说明之前有kill过,这样找到这个进程spid slq语句:
   select pro.spid from v$session ses,v$process pro where ses.sid=129 and ses.paddr=pro.addr;

5:根据这个spid对应linux下的进程pid
   linux命令:
   ps -ef  | gre | 'ora' (找到所有ora开头的进程)

   kill  -9 (pid)

6:搞定收工。



   
posted @ 2006-08-25 10:46 七匹狼 阅读(2426) | 评论 (3)编辑 收藏
DML会产生行锁,只有该行的锁解开后才可继续对改行进行其他的DML,若新的DML和旧的DML操作的行相同,且旧DML以把行改变,则新DML不起作用

准备工作:
SQL>create table lck (a number, b number);
SQL>insert into lck values (1,1);
SQL>insert into lck values (2,2);
SQL>insert into lck values (3,3);
SQL>insert into lck values (4,4);
SQL>insert into lck values (5,5);
SQL>insert into lck values (6,6);
SQL>insert into lck values (7,7);
SQL>commit;

实验过程:

步 骤Session 14Session 10说明
1SQL> select sid from v$session
where audsid=
userenv('SESSIONID');

SID
----------
14
SQL> select sid from v$session
where audsid=
userenv('SESSIONID');

SID
----------
10
获得当前session的SID
2SQL> insert into lck values (1000,1001);

1 row created.
 未提交
3SQL> select sid,type,id1,lmode,request from v$lock
where sid in (10,14);

SID TY ID1 LMODE REQUEST
---------- -- ---------- ---------- ----------
14 TX 262153 6 0
14 TM 4145 3 0
 因为Session14的DML未提交,因此在v$lock里产生2个锁,一个为:transaction lock(TX),另一个为:DML/table lock(TM).LMODE=3代表:行排它.LMODE=6代表:对象排它
4SQL> insert into lck values (1001,1000);

1 row created.
 未提交
5SQL> select sid,type,id1,lmode,request from v$lock
where sid in (10,14);

SID TY ID1 LMODE REQUEST
---------- -- ---------- ---------- ----------
14 TX 262153 6 0
14 TM 4145 3 0
SQL> select * from lck;

A B
---------- ----------
1 2
2 4
3 6
4 8
5 3
6 5
7 7

7 rows selected.
v$lock中并不会因为对该表的再一次DML且未提交而新生成锁
6 SQL>update lck set a=2000,b=2001
where a=1;

1 row updated.
未提交
7SQL> select * from lck;

A B
---------- ----------
1 2
2 4
3 6
4 8
5 3
6 5
7 7
1000 1001
1001 1000

9 rows selected.
SQL> select sid,type,id1,lmode,request from v$lock
where sid in (10,14);

SID TY ID1 LMODE REQUEST
---------- -- ---------- ---------- ----------
10 TX 327698 6 0
10 TM 4145 3 0
14 TX 262153 6 0
14 TM 4145 3 0
v$lock中对另外session10的DML产生了锁
8SQL>update lck set a=4000,b=2001
where a=1;
 session10发出更新a=1行的SQL后,session14也发出更新a=1行的SQL,则后者的SQL悬在那里,无法结束
9SQL> select event, seconds_in_wait, sid from v$session_wait where sid in (10,14);

EVENT SECONDS_IN_WAIT SID
---------------------------------------------------------------- --------------- ----------
enq: TX - row lock contention 1593 14
SQL*Net message from client 2862 10
v$session_wait中可以看到哪个session在等待,等待原因和已经等待的时间
100 rows updated.
 
SQL>commit;

Commit complete.
只有在session10提交该DML后,session14才执行完,但更新为0行
11SQL> select * from lck;

A B
---------- ----------
1 2
2 4
3 6
4 8
5 3
6 5
7 7
1000 1001
1001 1000

9 rows selected.
SQL> select * from lck;

A B
---------- ----------
1 2
2 4
3 6
4 8
5 3
6 5
7 7
1000 1001
1001 1000

9 rows selected.
 

笔记来源: http://www.adp-gmbh.ch/ora/concepts/lock.html

posted @ 2006-08-24 13:14 七匹狼 阅读(1843) | 评论 (2)编辑 收藏
我们在操作数据库的时候,有时候会由于操作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就更难了,下面这叫查询语句可以查询出所以被锁的会话。如下:

SELECT   sn.username, m.SID,sn.SERIAL#, m.TYPE,
         DECODE (m.lmode,
                 0, 'None',
                 1, 'Null',
                 2, 'Row Share',
                 3, 'Row Excl.',
                 4, 'Share',
                 5, 'S/Row Excl.',
                 6, 'Exclusive',
                 lmode, LTRIM (TO_CHAR (lmode, '990'))
                ) lmode,
         DECODE (m.request,
                 0, 'None',
                 1, 'Null',
                 2, 'Row Share',
                 3, 'Row Excl.',
                 4, 'Share',
                 5, 'S/Row Excl.',
                 6, 'Exclusive',
                 request, LTRIM (TO_CHAR (m.request, '990'))
                ) request,
         m.id1, m.id2
    FROM v$session sn, v$lock m
   WHERE (sn.SID = m.SID AND m.request != 0)        
      OR (    sn.SID = m.SID                       
          AND m.request = 0
          AND lmode != 4
          AND (id1, id2) IN (
                        SELECT s.id1, s.id2
                          FROM v$lock s
                         WHERE request != 0 AND s.id1 = m.id1
                               AND s.id2 = m.id2)
         )ORDER BY id1, id2, m.request;
通过以上查询知道了sid和 SERIAL#就可以开杀了
   alter system kill session 'sid,SERIAL#';
posted @ 2006-08-24 11:32 七匹狼 阅读(2730) | 评论 (1)编辑 收藏