﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-共同学习java-随笔分类-数据库</title><link>http://www.blogjava.net/huanghuizz/category/14532.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:07:51 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:07:51 GMT</pubDate><ttl>60</ttl><item><title>Oracle Bug EXP-00003 : 找不到段的存贮定义...</title><link>http://www.blogjava.net/huanghuizz/archive/2006/09/07/68212.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 07 Sep 2006 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/09/07/68212.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/68212.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/09/07/68212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/68212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/68212.html</trackback:ping><description><![CDATA[当使用9205以前版本的exp程序去9205及以上的数据库中去导出带LOB字段的表时, 会遇到一个错误, 错误信息为"EXP-00003 : 没找到段的存贮定义 .....", 事实上这是一个Oracle的Bug, 可以通过监时地更改视图"exu9tne"的定义来临时解决问题, 如下所示: 
<p>    在导出前, 连接到SYS用户, 运行以下SQL:</p><blockquote class="prefont">CREATE OR REPLACE VIEW exu9tne (<br />tsno, fileno, blockno, length) AS<br />SELECT ts#, segfile#, segblock#, length<br />FROM sys.uet$<br />WHERE ext# = 1<br />UNION ALL<br />SELECT * FROM SYS.EXU9TNEB<br />/ </blockquote><p>    导出完成后, 运行以下命令来还原视图的定义, 下面贴的是Oracle 9用的, 10g的还是请访问<a href="https://metalink.oracle.com/" target="_blank">Metalink</a>来确定, 或者在运行前一个命令之前, 从USER_VIEWS中将原视图的定义查出来, 这样做也是DBA一个很好的习惯.</p><blockquote class="prefont">CREATE OR REPLACE VIEW exu9tne (<br />tsno, fileno, blockno, length) AS<br />SELECT ts#, segfile#, segblock#, length<br />FROM sys.uet$<br />WHERE ext# = 1<br />/ </blockquote><img src ="http://www.blogjava.net/huanghuizz/aggbug/68212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-07 11:35 <a href="http://www.blogjava.net/huanghuizz/archive/2006/09/07/68212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中的用户创建和权限的分配 </title><link>http://www.blogjava.net/huanghuizz/archive/2006/09/03/67411.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 03 Sep 2006 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/09/03/67411.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/67411.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/09/03/67411.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/67411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/67411.html</trackback:ping><description><![CDATA[         1） 创建用户 : <br /><br />　　 create user username identified by pwd <a class="bluekey" href="http://www.yesky.com/key/3854/393854.html" target="_blank"><font color="#002c99">default</font></a> tablespace users Temporary TABLESPACE Temp; <br /><br />　　 2） 用户授权 <br /><br />　　 <a class="bluekey" href="http://www.yesky.com/key/1872/211872.html" target="_blank"><font color="#002c99">grant</font></a> connect,resource,dba to business;   <br />     <br />         3） 提交 <br /><br />　　 commit; <br /><br />创建角色：<br />   1：CREATE ROLE role_name IDENTIFIED BY password<br />         CREATE ROLE role_name IDENTIFIED EXTERNALLY<br />         CREATE ROLE role_name IDENTIFIED GLOBALLY<br /><br />         缺省情况下建立的角色没有password或者其他的识别。如果使用IDENTIFIED BY 子句建立，那么角色不会自动响应，必须用SET ROLE激活。<br /><br /><table cellpadding="0" width="100%" bgcolor="#ffffff" border="0"><tbody><tr><td>SET ROLE role_name IDENTIFIED BY password</td></tr></tbody></table><br />EXTERNALLY和GLOBALLY类型的角色由操作系统和ORACLE Service server验证。通常用户需要权限修改应用程序中使用的表单中的数据，但是只有在应用程序运行时而不是在使用ad hoc工具时，这种上下文敏感安全可以通过有PASSWORD的角色来实现。当用户在应用程序内部连结数据库时，代码将执行SET ROLE命令，通过安全验证。所以用户不需要知道角色的password,也不需要自己输入SET ROLE命令。<br /><br /><strong>对象权限<br /><br /></strong>　　对象权限就是指在表、视图、序列、过程、函数或包等对象上执行特殊动作的权利。有九种不同类型的权限可以授予给用户或角色。如下表：<br /><table cellspacing="0" cellpadding="0" width="100%" border="1"><tbody><tr><td width="13%">权限</td><td width="7%">ALTER</td><td width="8%">DELETE</td><td width="10%">EXECUTE</td><td width="7%">INDEX</td><td width="8%">INSERT</td><td width="7%">READ </td><td width="10%">REFERENCE</td><td width="12%">SELECT </td><td width="18%">UPDATE</td></tr><tr><td width="13%">Directory</td><td width="7%">no </td><td width="8%">no </td><td width="10%">no </td><td width="7%">no </td><td width="8%">no </td><td width="7%">yes</td><td width="10%">no</td><td width="12%">no </td><td width="18%">no</td></tr><tr><td width="13%">function</td><td width="7%">no</td><td width="8%">no</td><td width="10%">yes</td><td width="7%">no </td><td width="8%">no</td><td width="7%">no</td><td width="10%">no</td><td width="12%">no</td><td width="18%">no</td></tr><tr><td width="13%">procedure</td><td width="7%">no </td><td width="8%">no</td><td width="10%">yes</td><td width="7%">no</td><td width="8%">no</td><td width="7%">no </td><td width="10%">no</td><td width="12%">no</td><td width="18%">no</td></tr><tr><td width="13%">package</td><td width="7%">no</td><td width="8%">no</td><td width="10%">yes</td><td width="7%">no</td><td width="8%">no</td><td width="7%">no</td><td width="10%">no</td><td width="12%">no</td><td width="18%">no</td></tr><tr><td width="13%">DB Object</td><td width="7%">no </td><td width="8%">no </td><td width="10%">yes</td><td width="7%">no</td><td width="8%">no </td><td width="7%">no</td><td width="10%">no</td><td width="12%">no</td><td width="18%">no</td></tr><tr><td width="13%">Libary </td><td width="7%">no</td><td width="8%">no</td><td width="10%">yes </td><td width="7%">no</td><td width="8%">no</td><td width="7%">no </td><td width="10%">no </td><td width="12%">no</td><td width="18%">no</td></tr><tr><td width="13%">Operation </td><td width="7%">no </td><td width="8%">no </td><td width="10%">yes</td><td width="7%">no </td><td width="8%">no </td><td width="7%">no </td><td width="10%">no </td><td width="12%">no </td><td width="18%">no</td></tr><tr><td width="13%">Sequence</td><td width="7%">yes </td><td width="8%">no </td><td width="10%">no </td><td width="7%">no </td><td width="8%">no </td><td width="7%">no </td><td width="10%">no </td><td width="12%">no </td><td width="18%">no</td></tr><tr><td width="13%">Table </td><td width="7%">yes </td><td width="8%">yes </td><td width="10%">no</td><td width="7%">yes</td><td width="8%">yes </td><td width="7%">no </td><td width="10%">yes </td><td width="12%">yes </td><td width="18%">yes</td></tr><tr><td width="13%">Type</td><td width="7%">no </td><td width="8%">no </td><td width="10%">yes </td><td width="7%">no </td><td width="8%">no </td><td width="7%">no </td><td width="10%">no </td><td width="12%">no </td><td width="18%">no</td></tr><tr><td width="13%">View </td><td width="7%">no </td><td width="8%">yes </td><td width="10%">no </td><td width="7%">no </td><td width="8%">yes </td><td width="7%">no </td><td width="10%">no </td><td width="12%">yes </td><td width="18%">yes</td></tr></tbody></table>　对象由不止一个权限，特殊权限ALL可以被授予或撤销。如TABLE的ALL权限就包括：<br /><br /><strong>系统权限<br /><br /></strong>　　系统权限需要授予者有进行系统级活动的能力，如连接数据库，更改用户会话、建立表或建立用户等等。你可以在数据字典视图SYSTEM_PRIVILEGE_MAP上获得完整的系统权限。对象权限和系统权限都通过GRANT语句授予用户或角色。需要注意的是在授予对象权限时语句应该是WITH GRANT OPTION子句，但在授予系统权象时语句是WITH ADMIN OPTION，所以在你试图授予系统权限时，使用语句WITH GRANT OPTION系统会报告一个错误：ONLY ADMIN OPTION can be specified。在考试中要特别注意这个语法和错误信息。<br /><br /><img src ="http://www.blogjava.net/huanghuizz/aggbug/67411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-03 16:33 <a href="http://www.blogjava.net/huanghuizz/archive/2006/09/03/67411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>卸载Oracle在windwos平台及unix平台</title><link>http://www.blogjava.net/huanghuizz/archive/2006/09/03/67406.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 03 Sep 2006 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/09/03/67406.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/67406.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/09/03/67406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/67406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/67406.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">一、系统环境： 
</p>
		<p style="TEXT-INDENT: 2em">(1)、操作系统：Windows 2000 professional，机器内存512M 
</p>
		<p style="TEXT-INDENT: 2em">(2)、数据库：　Oracle 8i R2 (8.1.6) for 2000 企业版 
</p>
		<p style="TEXT-INDENT: 2em">(3)、安装路径：D:\ORACLE 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">二、卸载步骤： 
</p>
		<p style="TEXT-INDENT: 2em">(1)、开始－＞设置－＞控制面板－＞管理工具－＞服务 
</p>
		<p style="TEXT-INDENT: 2em">停止所有Oracle服务。 
</p>
		<p style="TEXT-INDENT: 2em">(2)、开始－＞程序－＞Oracle - OraHome81－＞Oracle Installation Products－＞Universal Installer 
</p>
		<p style="TEXT-INDENT: 2em">卸装所有Oracle产品 
</p>
		<p style="TEXT-INDENT: 2em">(3)、运行regedit，选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE，按del键删除这个入口。 
</p>
		<p style="TEXT-INDENT: 2em">(4)、运行regedit，选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services，滚动这个列表，删除所有Oracle入口 
</p>
		<p style="TEXT-INDENT: 2em">(5)、从桌面上、STARTUP（启动）组、程序菜单中，删除所有有关Oracle的组和图标 
</p>
		<p style="TEXT-INDENT: 2em">(6)、重新启动计算机，重起后才能完全删除Oracle所在目录 
</p>
		<p style="TEXT-INDENT: 2em">(7)、删除与Oracle有关的文件，选择Oracle所在的缺省目录C:\Oracle，删除这个入口目录及所有子目录， 
</p>
		<p style="TEXT-INDENT: 2em">　 并从Windows 2000目录（一般为C:\WINNT）下删除以下文件 
</p>
		<p style="TEXT-INDENT: 2em">　 ORACLE.INI、oradim80.INI 
</p>
		<p style="TEXT-INDENT: 2em">(8)、WIN.INI文件中若有[ORACLE]的标记段，删除该段 
</p>
		<p style="TEXT-INDENT: 2em">注：第8步可有可无 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">如果是在unix或linux下那就更方便了，只要删除$ORACLE_HOME下的所以文件，以及所有数据文件，最后删除日志文件就可以了</p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/67406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-03 14:52 <a href="http://www.blogjava.net/huanghuizz/archive/2006/09/03/67406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何收集sql跟踪信息 </title><link>http://www.blogjava.net/huanghuizz/archive/2006/08/28/66058.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 27 Aug 2006 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/08/28/66058.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/66058.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/08/28/66058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/66058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/66058.html</trackback:ping><description><![CDATA[在诊断数据库系统性能的过程中，总会涉及到跟踪效率低下的sql语句，现在就如何跟踪sql语句来做一个简单的总结。权做抛砖引玉之用。 　　如果我们可以修改应用系统的源代码，则可以直接在程序中加入如下的语句： <br /><br />1)alter session set timed_statistics=true； /*适用于Oracle 7.3以后的版本*/<br />2)alter session set max_dump_file_size=unlimited ； /*适用于Oracle 7.3以后的版本*/ <br />3)alter session set tracefile_identifier='POX20031031a'； /*适用于Oracle 8.1.7以后的版本*/ <br />4)alter session set events '10046 trace name context forever， level 8'；　/*在这里编写应用程序的代码*/ <br />5)alter session set events '10046 trace name context off'； 　　<br /><br />在上述语句中，<br />语句1）是把该会话的时间统计打开，该参数默认为false.在Oracle 7.3之前的版本中，不能在会话级设置该参数，只能修改初始化文件然后重新启动数据库，这样将在实例级打开时间统计。<br />　　<br />语句2）是把跟踪文件的大小设置成操作系统所允许的最大尺寸，这样可以防止跟踪文件在完成所需要的跟踪之前被填充满，此外需要注意的是确保存放跟踪文件的目录要有足够的空间，否则将会收到“文件系统已满”错误。　　<br /><br />语句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的所有信息。<br /> 　　如果应用程序的代码无法修改或者是不想去修改，则可以在其他会话中打开对特定会话的跟踪，方法如下：　　<br />1）sys.dbms_system.set_bool_param_in_session（：sid， ：serial，'timed_statistics'， true）；　<br />　<br />2）sys.dbms_system.set_int_param_in_session（ ：sid， ：serial，'max_dump_file_size'， 2147483647）；　　打开和关闭跟踪的第一种方法（oracle推荐）：<br />　<br />3.1）sys.dbms_support.start_trace_in_session（：sid， ：serial，waits=&gt;true， binds=&gt;false）；　　/* 在此期间运行要跟踪的应用程序*/ 　　<br /><br />4.1）sys.dbms_support.stop_trace_in_session（：sid， ：serial）；　　<br />打开和关闭跟踪的第二种方法：　　<br />3.2）sys.dbms_system.set_ev（：sid， ：serial， 10046， 8， ''）；　　/*在此期间运行要跟踪的应用程序*/ 　　<br />3.2）sys.dbms_system.set_ev（：sid， ：serial， 10046， 0， ''）； 　<br />　<br />以上语句中的：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跟踪信息的方法会比较复杂，希望有相关经验的高手来总结。 <img src ="http://www.blogjava.net/huanghuizz/aggbug/66058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-28 00:19 <a href="http://www.blogjava.net/huanghuizz/archive/2006/08/28/66058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>权限的数据字典视图</title><link>http://www.blogjava.net/huanghuizz/archive/2006/08/28/66056.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 27 Aug 2006 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/08/28/66056.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/66056.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/08/28/66056.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/66056.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/66056.html</trackback:ping><description><![CDATA[视图 作用 <br />ALL_COL_PRIVS 表示列上的授权，用户和PUBLIC是被授予者 <br />ALL_COL_PRIVS_MADE 表示列上的授权，用户是属主和被授予者 <br />ALL_COL_RECD 表示列上的授权，用户和PUBLIC是被授予者 <br />ALL_TAB_PRIVS 表示对象上的授权，用户是PUBLIC或被授予者或用户是属主 <br />ALL_TAB_PRIVS_MADE 表示对象上的权限，用户是属主或授予者 <br />ALL_TAB_PRIVS_RECD 表示对象上的权限, 用户是PUBLIC或被授予者 <br />DBA_COL_PRIVS 数据库列上的所有授权 <br />DBA_ROLE_PRIVS 显示已授予用户或其他角色的角色 <br />DBA_SYS_PRIVS 已授予用户或角色的系统权限 <br />DBA_TAB_PRIVS 数据库对象上的所有权限 <br />ROLE_ROLE_PRIVS 显示已授予用户的角色 <br />ROLE_SYS_PRIVS 显示通过角色授予用户的系统权限 <br />ROLE_TAB_PRIVS 显示通过角色授予用户的对象权限 <br />SESSION_PRIVS 显示用户现在可利用的所有系统权限 <br />USER_COL_PRIVS 显示列上的权限，用户是属主、授予者或被授予者 <br />USER_COL_PRIVS_MADE 显示列上已授予的权限，用户是属主或授予者 <br />USER_COL_PRIVS_RECD 显示列上已授予的权限，用户是属主或被授予者 <br />USER_ROLE_PRIVS 显示已授予给用户的所有角色 <br />USER_SYS_PRIVS 显示已授予给用户的所有系统权限 <br />USER_TAB_PRIVS 显示已授予给用户的所有对象权限 <br />USER_TAB_PRIVS_MADE 显示已授予给其他用户的对象权限，用户是属主 <br />USER_TAB_PRIVS_RECD 显示已授予给其他用户的对象权限，用户是被授予者<img src ="http://www.blogjava.net/huanghuizz/aggbug/66056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-28 00:04 <a href="http://www.blogjava.net/huanghuizz/archive/2006/08/28/66056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在linux下kill oracle的死进程</title><link>http://www.blogjava.net/huanghuizz/archive/2006/08/25/65709.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Fri, 25 Aug 2006 02:46:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/08/25/65709.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/65709.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/08/25/65709.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/65709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/65709.html</trackback:ping><description><![CDATA[1:先在oracle数据库中找到锁住的对象：<br />select xidusn, object_id, session_id, locked_mode from v$locked_object;<br /><br />2:得到session_id。再根据session_id找到v$session对应的sid号和serial#：<br />select username,sid,serial# from v$session where sid=session_id;<br /><br />3:用oracle的slq kill掉相关的session sql语句：<br />   alter system kill session 'sid,serial#';<br /><br />4:如果不能kill掉，报ora－00031错：说明之前有kill过，这样找到这个进程spid slq语句：<br />   select pro.spid from v$session ses,v$process pro where ses.sid=129 and ses.paddr=pro.addr;<br /><br />5：根据这个spid对应linux下的进程pid<br />   linux命令：<br />   ps -ef  | gre | 'ora' (找到所有ora开头的进程)<br /><br />   kill  -9 (pid)<br /><br />6:搞定收工。<br /><br /><br /><br />   <img src ="http://www.blogjava.net/huanghuizz/aggbug/65709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-25 10:46 <a href="http://www.blogjava.net/huanghuizz/archive/2006/08/25/65709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 10g 解锁的相关操作</title><link>http://www.blogjava.net/huanghuizz/archive/2006/08/24/65494.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 24 Aug 2006 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/08/24/65494.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/65494.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/08/24/65494.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/65494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/65494.html</trackback:ping><description><![CDATA[
		<font face="Courier New" color="#000080" size="2">DML会产生行锁，只有该行的锁解开后才可继续对改行进行其他的DML，若新的DML和旧的DML操作的行相同，且旧DML以把行改变，则新DML不起作用<br /></font>
		<p>
				<b>
						<font face="Courier New" color="#000080">准备工作：</font>
				</b>
				<font size="2">
						<br />
						<font face="Courier New">SQL&gt;create table lck (a number, b number);<br />SQL&gt;insert into lck values (1,1);<br />SQL&gt;insert into lck values (2,2);<br />SQL&gt;insert into lck values (3,3);<br />SQL&gt;insert into lck values (4,4);<br />SQL&gt;insert into lck values (5,5);<br />SQL&gt;insert into lck values (6,6);<br />SQL&gt;insert into lck values (7,7);<br />SQL&gt;commit;</font>
				</font>
				<br />
				<font face="Courier New" color="#000080">
						<b>实验过程：<br /><br /><table id="table1" border="1"><tbody><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">步 骤</font></td><td align="middle" width="357"><font face="Courier New" color="#ff00ff" size="2">Session 14</font></td><td align="middle"><font face="Courier New" color="#008000" size="2">Session 10</font></td><td align="middle" width="205"><font face="Courier New" color="#000080" size="2">说明</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">1</font></td><td width="357"><font face="Courier New" size="2"><font color="#ff00ff">SQL&gt; select sid from v$session <br />where audsid=</font><a href="http://www.adp-gmbh.ch/ora/sql/userenv.html#sessionid"><font color="#007799">userenv</font></a><font color="#ff00ff">('SESSIONID</font><font color="#ff00ff">');<br /><br />SID<br />----------<br />14</font></font></td><td><font face="Courier New" size="2"><font color="#008000">SQL&gt; select sid from v$session <br />where audsid=</font><a href="http://www.adp-gmbh.ch/ora/sql/userenv.html#sessionid"><font color="#008000">userenv</font></a><font color="#008000">('SESSIONID');<br /><br />SID<br />----------<br />10</font></font></td><td width="205"><font face="Courier New" color="#000080" size="2">获得当前session的SID</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">2</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; insert into lck values (1000,1001);<br /><br />1 row created.</font></td><td>　</td><td width="205"><font face="Courier New" color="#000080" size="2">未提交</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">3</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; select sid,type,id1,lmode,request from v$lock <br />where sid in (10,14);<br /><br />SID TY ID1 LMODE REQUEST<br />---------- -- ---------- ---------- ----------<br />14 TX 262153 6 0<br />14 TM 4145 3 0</font></td><td>　</td><td width="205"><font face="Courier New" color="#000080" size="2">因为Session14的DML未提交，因此在v$lock里产生2个锁，一个为：transaction lock(TX)，另一个为:DML/table lock(TM).LMODE=3代表：行排它.LMODE=6代表：对象排它</font></td></tr><tr><td align="middle" width="42" height="21"><font face="Courier New" color="#000080" size="2">4</font></td><td width="357" height="21"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; insert into lck values (1001,1000);<br /><br />1 row created.</font></td><td height="21">　</td><td width="205" height="21"><font face="Courier New" color="#000080" size="2">未提交</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">5</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; select sid,type,id1,lmode,request from v$lock <br />where sid in (10,14);<br /><br />SID TY ID1 LMODE REQUEST<br />---------- -- ---------- ---------- ----------<br />14 TX 262153 6 0<br />14 TM 4145 3 0</font></td><td><font face="Courier New"><font color="#008000" size="2">SQL&gt; select * from lck;<br /><br />A B<br />---------- ----------<br /></font><font color="#ff0000" size="2">1 2</font><font color="#008000" size="2"><br />2 4<br />3 6<br />4 8<br />5 3<br />6 5<br />7 7<br /><br />7 rows selected.</font></font></td><td width="205"><font face="Courier New" color="#000080" size="2">v$lock中并不会因为对该表的再一次DML且未提交而新生成锁</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">6</font></td><td width="357">　</td><td><font face="Courier New" color="#008000" size="2">SQL&gt;update lck set a=2000,b=2001 <br />where a=1;<br /><br />1 row updated.</font></td><td width="205"><font face="Courier New" color="#000080" size="2">未提交</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">7</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; select * from lck;<br /><br />A B<br />---------- ----------<br />1 2<br />2 4<br />3 6<br />4 8<br />5 3<br />6 5<br />7 7<br />1000 1001<br />1001 1000<br /><br />9 rows selected.</font></td><td><font face="Courier New" color="#008000" size="2">SQL&gt; select sid,type,id1,lmode,request from v$lock<br />where sid in (10,14);<br /><br />SID TY ID1 LMODE REQUEST<br />---------- -- ---------- ---------- ----------<br />10 TX 327698 6 0<br />10 TM 4145 3 0<br />14 TX 262153 6 0<br />14 TM 4145 3 0</font></td><td width="205"><font face="Courier New" color="#000080" size="2">v$lock中对另外session10的DML产生了锁</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">8</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">SQL&gt;update lck set a=4000,b=2001 <br />where a=1;</font></td><td>　</td><td width="205"><font face="Courier New" color="#000080" size="2">session10发出更新a=1行的SQL后，session14也发出更新a=1行的SQL，则后者的SQL悬在那里，无法结束</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">9</font></td><td colspan="2"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; select event, seconds_in_wait, sid from v$session_wait where sid in (10,14);<br /><br />EVENT SECONDS_IN_WAIT SID<br />---------------------------------------------------------------- --------------- ----------<br />enq: TX - row lock contention 1593 14<br />SQL*Net message from client 2862 10</font></td><td width="205"><font face="Courier New" color="#000080" size="2">v$session_wait中可以看到哪个session在等待，等待原因和已经等待的时间</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">10</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">0 rows updated.<br />　</font></td><td><font face="Courier New" color="#008000" size="2">SQL&gt;commit;<br /><br />Commit complete.</font></td><td width="205"><font face="Courier New" color="#000080" size="2">只有在session10提交该DML后,session14才执行完，但更新为0行</font></td></tr><tr><td align="middle" width="42"><font face="Courier New" color="#000080" size="2">11</font></td><td width="357"><font face="Courier New" color="#ff00ff" size="2">SQL&gt; select * from lck;<br /><br />A B<br />---------- ----------<br />1 2<br />2 4<br />3 6<br />4 8<br />5 3<br />6 5<br />7 7<br />1000 1001<br />1001 1000<br /><br />9 rows selected.</font></td><td><font face="Courier New" color="#008000" size="2">SQL&gt; select * from lck;<br /><br />A B<br />---------- ----------<br />1 2<br />2 4<br />3 6<br />4 8<br />5 3<br />6 5<br />7 7<br />1000 1001<br />1001 1000<br /><br />9 rows selected.</font></td><td width="205">　</td></tr></tbody></table></b>
				</font>
		</p>
		<p>
				<font face="Courier New" size="2">
				</font>
				<font color="#000080">
						<font face="Courier New">
								<b>笔记来源：</b>
						</font>
						<font face="Courier New" size="2">http://www.adp-gmbh.ch/ora/concepts/lock.html</font>
				</font>
		</p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/65494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-24 13:14 <a href="http://www.blogjava.net/huanghuizz/archive/2006/08/24/65494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看oracle 10g 数据库中被锁定的行和表的sql</title><link>http://www.blogjava.net/huanghuizz/archive/2006/08/24/65472.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 24 Aug 2006 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/archive/2006/08/24/65472.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/65472.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/archive/2006/08/24/65472.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/65472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/65472.html</trackback:ping><description><![CDATA[我们在操作数据库的时候，有时候会由于操作不当引起数据库表被锁定，这么我们经常不知所措，不知怎么给这些表解锁，在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话，但是我们很难找到那个会话被锁定了，想找到所以被锁的会话就更难了，下面这叫查询语句可以查询出所以被锁的会话。如下：<br /><br />SELECT   sn.username, m.SID,sn.SERIAL#, m.TYPE,<br />         DECODE (m.lmode,<br />                 0, 'None',<br />                 1, 'Null',<br />                 2, 'Row Share',<br />                 3, 'Row Excl.',<br />                 4, 'Share',<br />                 5, 'S/Row Excl.',<br />                 6, 'Exclusive',<br />                 lmode, LTRIM (TO_CHAR (lmode, '990'))<br />                ) lmode,<br />         DECODE (m.request,<br />                 0, 'None',<br />                 1, 'Null',<br />                 2, 'Row Share',<br />                 3, 'Row Excl.',<br />                 4, 'Share',<br />                 5, 'S/Row Excl.',<br />                 6, 'Exclusive',<br />                 request, LTRIM (TO_CHAR (m.request, '990'))<br />                ) request,<br />         m.id1, m.id2<br />    FROM v$session sn, v$lock m<br />   WHERE (sn.SID = m.SID AND m.request != 0)         <br />      OR (    sn.SID = m.SID                        <br />          AND m.request = 0<br />          AND lmode != 4<br />          AND (id1, id2) IN (<br />                        SELECT s.id1, s.id2<br />                          FROM v$lock s<br />                         WHERE request != 0 AND s.id1 = m.id1<br />                               AND s.id2 = m.id2)<br />         )ORDER BY id1, id2, m.request;<br />通过以上查询知道了sid和 SERIAL#就可以开杀了<br />   alter system kill session 'sid,SERIAL#';<img src ="http://www.blogjava.net/huanghuizz/aggbug/65472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-24 11:32 <a href="http://www.blogjava.net/huanghuizz/archive/2006/08/24/65472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>