﻿<?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-断点-随笔分类-Oracle</title><link>http://www.blogjava.net/tfzhu/category/43570.html</link><description>每天进步一点点！</description><language>zh-cn</language><lastBuildDate>Mon, 12 Jul 2010 20:55:49 GMT</lastBuildDate><pubDate>Mon, 12 Jul 2010 20:55:49 GMT</pubDate><ttl>60</ttl><item><title>ORA-00942: 表或视图不存在</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/10/325742.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 10 Jul 2010 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/10/325742.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/325742.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/10/325742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/325742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/325742.html</trackback:ping><description><![CDATA[<p>错误原因：在Oracle新建了一个表，名为&#8220;QueryHistory",用来保存用户的查询记录，这时，再用"Select * from QueryHistory"来查询,报 "ORA-00942: 表或视图不存在 "。<br />
<br />
错误分析：利用Google搜索找到了原因，<br />
&nbsp;<span style="color: #0000ff">oracle是大小写敏感的，如果定义表名称或列名称的时候没有用引号引起来的话 oracle会把他们全部转换为大写，这时就会出现错误了。<br />
</span><br />
解决方法：将语句改为"Select * from "QueryHistory"　或是语句全部大写。<br />
</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/325742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-10 17:36 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/10/325742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (PCISV6_TS.UI_PLY_CVRG) violated</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/10/325740.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 10 Jul 2010 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/10/325740.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/325740.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/10/325740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/325740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/325740.html</trackback:ping><description><![CDATA[PCIS[2010-07-08 18:08:02,531]&gt;&gt;<span style="color: #0000ff">ERROR</span>&gt;&gt; [BizControllerImpl异常堆栈{事务ID/用户代码}:[1278583679437325]/[00000210]:com.fwk.service.BusinessServiceException: com.fwk.dao.DaoException: 保存保单，<span style="color: #0000ff">saveOrUpdatePolicy()</span>时出错; nested exception is org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update<br />
&nbsp;at com.pcis.policy.dm.PolicyDAO.saveOrUpdatePolicy(PolicyDAO.java:193)<br />
&nbsp;at com.pcis.policy.app.newbusiness.service.PolicyAppService.savePolicy(PolicyAppService.java:343)<br />
&nbsp;at com.pcis.policy.app.underwrite.bm.UnderwriteBM.submitUnderwrite(UnderwriteBM.java:139)<br />
&nbsp;at com.pcis.policy.app.underwrite.action.UnderwriteBizAction.submitUnderwrite(UnderwriteBizAction.java:548)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;...<br />
<span style="color: #0000ff">Caused by: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update</span><br />
&nbsp;at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:624)<br />
&nbsp;at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)<br />
&nbsp;at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:379)<br />
&nbsp;at org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:841)<br />
&nbsp;at com.fwk.dao.BaseDao.flush(Unknown Source)<br />
&nbsp;at com.pcis.policy.dm.PolicyDAO.saveOrUpdatePolicy(PolicyDAO.java:174)<br />
&nbsp;... 80 more<br />
<span style="color: #0000ff">Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (PCISV6_TS.UI_PLY_CVRG) violated</span><br />
&nbsp;at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:602)<br />
&nbsp;at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9350)<br />
&nbsp;at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:210)<br />
&nbsp;at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)<br />
&nbsp;at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)<br />
&nbsp;at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)<br />
&nbsp;... 90 more<br />
<br />
分析及解决：<br />
在页面保存的时候，后台提示是违反唯一索引，通过UI_PLY_CVRG 查询相应的表，<br />
<span style="color: #0000ff">select * from user_indexes&nbsp; where index_name='UI_PLY_CVRG'<br />
</span>该表是WEB_PLY_CVRG ，而该表的唯一索引UI_PLY_CVRG 是由该表的3个字段组成<span style="color: #0000ff">C_PLY_NO、N_EDR_PRJ_NO、 N_SEQ_NO</span>，然后看下页面发现是N_SEQ_NO有4个重复，删除多余的记录即可保存成功。<br />
<br />
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/325740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-10 16:55 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/10/325740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-00600: 内部错误代码，参数: [16201], [], [], [], [], [], [], []</title><link>http://www.blogjava.net/tfzhu/archive/2010/03/06/314723.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 06 Mar 2010 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/03/06/314723.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/314723.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/03/06/314723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/314723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/314723.html</trackback:ping><description><![CDATA[<span style="color: #0000ff">IMP-00017: 由于 ORACLE 的 600 错误，以下的语句失败<br />
&nbsp;"CREATE PACKAGE BODY quest_soo_util wrapped"<br />
IMP-00003: 遇到 ORACLE 错误 600<br />
ORA-00600: 内部错误代码，参数: [16201], [], [], [], [], [], [], []<br />
IMP-00017: 由于 ORACLE 的 600 错误，以下的语句失败<br />
&nbsp;"CREATE PACKAGE BODY QUEST_SOO_PKG wrapped"<br />
<br />
<span style="color: #000000">以上是imp导入Oracle是出现的错误。</span><br />
<br />
转载，其他情况出现的ORACLE 的 600 错误：<br />
<p><span style="color: #000000">这个错误是 drop 用户时产生的，用户无法 drop。既然如此，登录该用户删除其中的procedure，结果也出现了该错误。有个帖子介绍说这是 Oracle 的一个 bug（No. 2422726）</span><span style="color: #000000">，并给出了解决办法。这里记录一下：<br />
&nbsp;1. 错误现象：<br />
SQL&gt; show user<br />
USER 为"SYS"<br />
SQL&gt; select * from v$version;<br />
&nbsp;<br />
BANNER<br />
------------------------------------------------------------<br />
Oracle8i Release 8.1.6.0.0 - Production<br />
PL/SQL Release 8.1.6.0.0 - Production<br />
CORE&nbsp;&nbsp;&nbsp; 8.1.6.0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Production<br />
TNS for 32-bit Windows: Version 8.1.6.0.0 - Production<br />
NLSRTL Version 3.4.1.0.0 - Production<br />
&nbsp;<br />
SQL&gt; drop user hos_kf_hl cascade;<br />
drop user hos_kf_hl cascade<br />
*<br />
ERROR 位于第 1 行:<br />
ORA-00600: 内部错误代码，自变量: [16201], [], [], [], [], [], [], []<br />
&nbsp;<br />
SQL&gt; conn hos_kf_hl/test@qmyb<br />
已连接。<br />
SQL&gt; drop procedure kill_session;<br />
drop procedure kill_session<br />
*<br />
ERROR 位于第 1 行:<br />
ORA-00600: 内部错误代码，自变量: [16201], [], [], [], [], [], [], [] </span></p>
<p><span style="color: #000000">&nbsp;<br />
2. 查询视图 procedure$，确认该错误：<br />
SQL&gt; select obj#,owner#,type# from sys.obj$ where name ='KILL_SESSION' and owner#=96;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJ#&nbsp;&nbsp;&nbsp;&nbsp; OWNER#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE#<br />
---------- ---------- ----------<br />
&nbsp;&nbsp;&nbsp;&nbsp; 55491&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7<br />
&nbsp;<br />
SQL&gt; select * from procedure$ where obj# = 55491;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJ# AUDIT$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STORAGESIZE&nbsp;&nbsp;&nbsp; OPTIONS<br />
---------- -------------------------------------- ----------- ---------- </span></p>
<p><span style="color: #000000">&nbsp;<br />
3. 解决<br />
SQL&gt; insert into procedure$ values (55491, '----------------', null, 2);<br />
&nbsp;<br />
1 row inserted<br />
&nbsp;<br />
SQL&gt; commit;<br />
&nbsp;<br />
Commit complete <br />
&nbsp;<br />
SQL&gt; drop procedure kill_session;<br />
&nbsp;<br />
过程已丢弃。<br />
&nbsp;<br />
SQL&gt; conn sys/password@s177 as sysdba<br />
已连接。<br />
SQL&gt; drop user hos_kf_hl cascade;<br />
&nbsp;<br />
用户已丢弃</span> </span></p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/314723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-03-06 23:03 <a href="http://www.blogjava.net/tfzhu/archive/2010/03/06/314723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-01658: 无法为表空间COREV6中的段创建 INITIAL 区</title><link>http://www.blogjava.net/tfzhu/archive/2010/03/03/314466.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 03 Mar 2010 14:30:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/03/03/314466.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/314466.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/03/03/314466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/314466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/314466.html</trackback:ping><description><![CDATA[<p>IMP-00003: 遇到 ORACLE 错误 1658<br />
<span style="color: #0000ff">ORA-01658: 无法为表空间COREV6中的段创建 INITIAL 区</span><br />
IMP-00017: 由于 ORACLE 的 1658 错误，以下的语句失败<br />
&nbsp;"CREATE TABLE "WEB_VCH_APP" ("C_APP_ID" VARCHAR2(30) NOT NULL ENABLE, "C_VCH"<br />
&nbsp;"_TYPE" VARCHAR2(30), "C_APP_DPT" VARCHAR2(30) NOT NULL ENABLE, "T_APP_TM" D"<br />
&nbsp;"ATE NOT NULL ENABLE, "C_APP_CDE" VARCHAR2(50) NOT NULL ENABLE, "N_APP_NUM" "<br />
&nbsp;"NUMBER(8, 0) NOT NULL ENABLE, "N_STORE_NUM" NUMBER(8, 0), "C_APP_REMARK" VA"<br />
&nbsp;"RCHAR2(500), "C_STATUS" CHAR(1), "N_CHK_TMS" NUMBER(4, 0), "C_CRT_CDE" VARC"<br />
&nbsp;"HAR2(30) NOT NULL ENABLE, "T_CRT_TM" DATE NOT NULL ENABLE, "C_UPD_CDE" VARC"<br />
&nbsp;"HAR2(30) NOT NULL ENABLE, "T_UPD_TM" DATE NOT NULL ENABLE, "C_TRANS_MRK" CH"<br />
&nbsp;"AR(1), "T_TRANS_TM" DATE)&nbsp; PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 ST"<br />
&nbsp;"ORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE "COREV6" LOGG"<br />
&nbsp;"ING NOCOMPRESS"<br />
<br />
<span style="color: #008000">主要是表空间已经用完，重新扩大表空间，即可。</span><br />
</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/314466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-03-03 22:30 <a href="http://www.blogjava.net/tfzhu/archive/2010/03/03/314466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>本地计算机上的OracleOraHome92TNSListener服务启动后又停止了</title><link>http://www.blogjava.net/tfzhu/archive/2010/01/22/310525.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Fri, 22 Jan 2010 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/22/310525.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/310525.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/22/310525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/310525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/310525.html</trackback:ping><description><![CDATA[<p>出现这个问题，主要是我把&#8220;我的电脑---计算机名&#8221;给改了，导致监听启动后自动退出。<br />
<br />
解决方法有以下两种：<br />
<span style="color: #0000ff">1.改配置文件。</span><br />
打开E:\oracle\ora92\network\admin\listener.ora文件,将listener.ora 中的HOST值改成现在的机器名或IP 地址，然后再启动监听。<br />
</p>
<p><span style="color: #0000ff">2.通过图形界面设置。<br />
</span>打开Net Manager，如下图把&#8220;主机&#8221;改成现在新的机器名，就OK啦。</p>
<img style="width: 714px; height: 529px" height="529" alt="" src="http://www.blogjava.net/images/blogjava_net/tfzhu/NetManager.jpg" width="714" border="0" /><br />
<img src ="http://www.blogjava.net/tfzhu/aggbug/310525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-22 15:08 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/22/310525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL进阶 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309570.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:58:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309570.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309570.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309570.html</trackback:ping><description><![CDATA[<p>具体业务中用到的sql。</p>
<p><span style="color: red">1.这个是查找最近标志为1，且有多条记录的数据。&nbsp;(这个sql查找错误比较有用。)</span><br />
&nbsp; select a.c_ply_no ,count(1) from web_ply_base a<br />
where&nbsp; a.c_latest_mrk='1'<br />
group by&nbsp; a.c_ply_no<br />
having count(1)&gt;1</p>
<p>&nbsp;</p>
<p>背景count(*)&nbsp;&nbsp; count(1)&nbsp;&nbsp; 两者比较，主要还是要count(1)所相对应的数据字段：&nbsp;</p>
<p>&nbsp; 如果你的数据表没有主键，那么count(1)比count(*)快&nbsp;&nbsp; <br />
&nbsp; 如果有主键的话，那主键（联合主键）作为count的条件也比count(*)要快&nbsp;&nbsp; <br />
&nbsp; 如果你的表只有一个字段的话那count(*)就是最快的啦<br />
&nbsp; 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。&nbsp;&nbsp; <br />
&nbsp; 因为count(*),自动会优化指定到那一个字段。所以没必要去count(?)，用count(*),sql会帮你完成优化的.</p>
<p><br />
其他语句：select * from 表名 where 条件 order by 字段名 asc\desc&nbsp;&nbsp;&nbsp;&nbsp; // asc 升序&nbsp;&nbsp;&nbsp; desc&nbsp; 降序</p>
<br />
posted @ 2009-11-28 18:36 断点 阅读(27) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:58 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的锁机制 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309569.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309569.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309569.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309569.html</trackback:ping><description><![CDATA[<p>数据库使用锁（lock）来保证任何给定时刻最多只有一个事务在修改给定的一段数据。实质上讲，正是锁机制才使并发控制成为可能。</p>
<p>ORACLE的封锁策略：&nbsp;&nbsp; <br />
&nbsp; 1、只有当修改时，Oracle在行级上锁定数据，不要把锁定上升到块或表级。&nbsp;&nbsp; <br />
&nbsp; 2、Oracle决不会为读取而锁定数据，简单读取不能在数据行上设置锁定。&nbsp;&nbsp; <br />
&nbsp; 3、数据的写入器不会阻塞数据读取器。&nbsp;&nbsp; <br />
&nbsp; 4、只有当另一个数据写入器已经锁定了某行数据后，才阻塞其他人对该行数据的写入。数据的读取器决不会阻塞数据的写入器。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>-------------------------------------------------------------------------<br />
Oracle并发处理机制的简单看法。<a href="http://www.51testing.com/html/97/n-131297.html" target="_blank">http://www.51testing.com/html/97/n-131297.html</a></p>
<p>转载内容如下：</p>
<p>在Oracle开发过程中，如果你只是独立地测试你的应用，然后部署，并交给数十个并发用户使用，就很有可能痛苦地遭遇原先未能检测到的并发问题。例如，2个用户同时修改某张订单，首先他们会查询这张订单存在不存在，如果存在，那么修改它的状态。在并发操作中，用户1会很奇怪的发现他的修改丢失了。当然，除此之外，在未能够很好的处理并发问题可能遭遇的情况还有： </p>
<p>　　◆破坏数据的完整性。</p>
<p>　　◆随着用户数的增多，应用的运行速度减慢。</p>
<p>　　◆不能很好地扩缩应用来支持大量用户。</p>
<p>　　为解决这些问题。首先要引入的是ORACLE的锁机制。数据库使用锁（lock）来保证任何给定时刻最多只有一个事务在修改给定的一段数据。实质上讲，正是锁机制才使并发控制成为可能。对ORACLE的锁机制可以查看ORACLE官方文档介绍。以下是对ORACLE锁的一点总结。</p>
<p>　　Oracle只在修改时才对数据加行级锁。正常情况下不会升级到块级锁或表级锁（不过两段提交期间的一段很短的时间内除外，这是一个不常见的操作）。</p>
<p>　　◆如果只是读数据，Oracle绝不会对数据锁定。不会因为简单的读操作在数据行上锁定。</p>
<p>　　◆写入器（writer）不会阻塞读取器（reader）。换种说法：读（read）不会被写（write）阻塞。这一点几乎与其他所有数据库都不一样。在其他数据库中，读往往会被写阻塞。尽管听上去这个特性似乎很不错（一般情况下确实如此），但是，如果你没有充分理解这个思想，而且想通过应用逻辑对应用施加完整性约束，就极有可能做得不对。</p>
<p>　　◆写入器想写某行数据，但另一个写入器已经锁定了这行数据，此时该写入器才会被阻塞。读取器绝对不会阻塞写入器。</p>
<p>　　开发人员要尽可能的考虑以上因素。而且还要意识到这些事ORACLE独有的。针对其他数据库，在锁的应用上略有不同。</p>
<p>　　<strong>以DB2为例</strong></p>
<p>　　1.Oracle通过具有意向锁的多粒度封锁机制进行并发控制，保证数据的一致性。其DML锁（数据锁）分为两个层次（粒度）：即表级和行级。通常的DML操作在表级获得的只是意向锁（RS或RX），其真正的封锁粒度还是在行级；DB2也是通过具有意向锁的多粒度封锁机制进行并发控制，保证数据的一致性。</p>
<p>　　其DML锁（数据锁）分为两个层次（粒度）：即表级和行级。通常的DML操作在表级获得的只是意向锁（IS，SIX或IX），其真正的封锁粒度也是在行级；另外，在Oracle数据库中，单纯地读数据（SELECT）并不加锁，这些都提高了系统的并发程度，Oracle强调的是能够&#8220;读&#8221;到数据，并且能够快速的进行数据读取。而DB2的锁强调的是&#8220;读一致性&#8221;，进行读数据（SELECT）时会根据不同的隔离级别（RR，RS，CS）而分别加S，IS，IS锁，只有在使用UR隔离级别时才不加锁。从而保证不同应用程序和用户读取的数据是一致的。</p>
<p>　　2. 在支持高并发度的同时，DB2和Oracle对锁的操纵机制有所不同：Oracle利用意向锁及数据行上加锁标志位等设计技巧，减小了Oracle维护行级锁的开销，使其在数据库并发控制方面有着一定的优势。而DB2中对每个锁会在锁的内存（locklist）中申请分配一定字节的内存空间，具体是X锁64字节内存，S锁32字节内存（注：DB2 V8之前是X锁72字节内存而S锁36字节内存）。</p>
<p>　　3. Oracle数据库中不存在锁升级，而DB2数据库中当数据库表中行级锁的使用超过locklist*maxlocks会发生锁升级。</p>
<p>　　4. 在Oracle中当一个session对表进行insert，update，delete时候，另外一个session仍然可以从Orace回滚段或者还原表空间中读取该表的前映象（before image）； 而在DB2中当一个session对表进行insert，update，delete时候，另外一个session仍然在读取该表数据时候会处于lock wait状态，除非使用UR隔离级别可以读取第一个session的未提交的值；所以Oracle同一时刻不同的session有读不一致的现象，而DB2在同一时刻所有的session都是&#8220;读一致&#8221;的。</p>
<br />
posted @ 2009-11-28 17:50 断点 阅读(24) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:57 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLException ORA-01502 index VHL_V6.PK_WEB_APP_TGT_OBJ or partition of such index is in unusable state </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309568.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309568.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309568.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309568.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309568.html</trackback:ping><description><![CDATA[<p>今天在选择一条记录进行做删除操作时，碰见index失败的问题，如下：<br />
处理失败!错误信息:[SQLException&nbsp; ORA-01502&nbsp; index&nbsp; VHL_V6.PK_WEB_APP_TGT_OBJ&nbsp; or partition of such index is in unusable state ]<br />
在网上查询了下，知道原因，就上数据库查了一下，结果如下：<br />
<span style="color: red">1&nbsp;PK_WEB_APP_TGT_OBJ&nbsp;NORMAL&nbsp;VHL_V6&nbsp;TABLE&nbsp;UNUSABLE。</span><br />
显然是UNUSABLE状态，那也就知道原因了，呵呵，解决！<br />
<br />
以下为参考文件：</p>
<p>SQL&gt; create table t(a number);<br />
Table created.</p>
<p><span style="color: red">1、现在，我们建立一个唯一索引来看看：</span><br />
SQL&gt; create unique index idx_t on t(a);<br />
Index created.<br />
SQL&gt; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='T';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
no rows selected<br />
SQL&gt; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';<br />
INDEX_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLESPACE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE&nbsp; STATUS<br />
------------------------------ --------------------------- ------------------------------ ----------- --------<br />
IDX_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA_DYNAMIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALID<br />
SQL&gt; insert into t values(1);<br />
1 row created.<br />
SQL&gt; commit;<br />
Commit complete.</p>
<p><span style="color: red">2、将索引手工修改为unusable状态（模拟发生索引失效的情况）：</span><br />
SQL&gt; alter index idx_t unusable;<br />
Index altered.<br />
SQL&gt;&nbsp; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';<br />
INDEX_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLESPACE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE&nbsp; STATUS<br />
------------------------------ --------------------------- ------------------------------ ----------- --------<br />
IDX_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA_DYNAMIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNUSABLE<br />
我们看到这是，已经不能正常往表中插入数据：<br />
SQL&gt; insert into t values(2);<br />
insert into t values(2)<br />
*<br />
ERROR at line 1:<br />
ORA-01502: index 'MISC.IDX_T' or partition of sUCh index is in unusable state</p>
<p><span style="color: red">3、首先，我们通过重建索引（rebuild index）的方法来解决问题：</span><br />
SQL&gt; alter index idx_t rebuild;<br />
Index altered.<br />
SQL&gt; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';<br />
INDEX_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLESPACE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE&nbsp; STATUS<br />
------------------------------ --------------------------- ------------------------------ ----------- --------<br />
IDX_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA_DYNAMIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALID<br />
SQL&gt; insert into t values(2);<br />
1 row created.<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;</p>
<p><span style="color: red">4、现在我们再次模拟索引失效(unusable状态)：</span><br />
SQL&gt; alter index idx_t unusable;<br />
Index altered.<br />
SQL&gt; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';<br />
INDEX_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLESPACE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE&nbsp; STATUS<br />
------------------------------ --------------------------- ------------------------------ ----------- --------<br />
IDX_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA_DYNAMIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNUSABLE<br />
SQL&gt; insert into t values(3);<br />
insert into t values(3)<br />
*<br />
ERROR at line 1:<br />
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state</p>
<p><span style="color: red">5、然后，看看是否可以通过设置参数skip_unusable_indexes=true来解决问题：</span><br />
SQL&gt; alter session set skip_unusable_indexes=true;<br />
Session altered.<br />
SQL&gt; insert into t values(3);<br />
insert into t values(3)<br />
*<br />
ERROR at line 1:<br />
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state<br />
SQL&gt; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';<br />
INDEX_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLESPACE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE&nbsp; STATUS<br />
------------------------------ --------------------------- ------------------------------ ----------- --------<br />
IDX_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA_DYNAMIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNUSABLE<br />
SQL&gt; alter index idx_t rebuild;<br />
Index altered.<br />
SQL&gt; select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';<br />
INDEX_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLESPACE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE_TYPE&nbsp; STATUS<br />
------------------------------ --------------------------- ------------------------------ ----------- --------<br />
IDX_T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NORMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA_DYNAMIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALID<br />
SQL&gt; insert into t values(3);<br />
1 row created.<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt; <br />
<br />
<span style="color: red">总结：对于unique index，通过简单的设置参数是不能解决问题的，要解决unique index 失效的问题，只能通过重建索引来实现。</span></p>
<p>资料引用:http://www.knowsky.com/388811.html</p>
<br />
posted @ 2009-09-26 21:36 断点 阅读(80) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:56 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE用户常用数据字典的查询方法 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309566.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:55:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309566.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309566.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309566.html</trackback:ping><description><![CDATA[<span style="color: #3366ff">1、用户</span><br />
查看当前用户的缺省表空间：SQL&gt;select username,default_tablespace from user_users;<br />
查看当前用户的角色：SQL&gt;select * from user_role_privs;<br />
查看当前用户的系统权限和表级权限<br />
SQL&gt;select * from user_sys_privs;<br />
SQL&gt;select * from user_tab_privs;<br />
<br />
显示当前会话所具有的权限：SQL&gt;select * from session_privs;<br />
显示指定用户所具有的系统权限：SQL&gt;select * from dba_sys_privs where grantee='GAME';<br />
显示特权用户：select * from v$pwfile_users;<br />
显示用户信息(所属表空间)<br />
select default_tablespace,temporary_tablespace<br />
from dba_users where username='GAME';<br />
<br />
显示用户的PROFILE ：select profile from dba_users where username='GAME';<br />
<br />
<span style="color: #3366ff">2、表</span><br />
查看用户下所有的表 SQL&gt;select * from user_tables;<br />
<br />
查看名称包含log字符的表<br />
SQL&gt;select object_name,object_id from user_objects&nbsp; where instr(object_name,'LOG')&gt;0;<br />
<br />
查看某表的创建时间<br />
SQL&gt;select object_name,created from user_objects where object_name=upper('&amp;table_name');<br />
<br />
查看某表的大小<br />
SQL&gt;select sum(bytes)/(1024*1024) as "size(M)" from user_segments<br />
where segment_name=upper('&amp;table_name');<br />
<br />
查看放在ORACLE的内存区里的表<br />
SQL&gt;select table_name,cache from user_tables where instr(cache,'Y')&gt;0;<br />
<br />
<span style="color: #3366ff">3、索引</span><br />
查看索引个数和类别<br />
SQL&gt;select index_name,index_type,table_name from user_indexes order by table_name;<br />
<br />
查看索引被索引的字段<br />
SQL&gt;select * from user_ind_columns where index_name=upper('&amp;index_name');<br />
<br />
查看索引的大小<br />
SQL&gt;select sum(bytes)/(1024*1024) as "size(M)" from user_segments<br />
where segment_name=upper('&amp;index_name');<br />
<br />
<span style="color: #3366ff">4、序列号</span><br />
查看序列号，last_number是当前值<br />
SQL&gt;select * from user_sequences;<br />
<br />
<span style="color: #3366ff">5、视图</span><br />
查看视图的名称 SQL&gt;select view_name from user_views;<br />
<br />
查看创建视图的select语句<br />
SQL&gt;set view_name,text_length from user_views;<br />
SQL&gt;set long 2000; 说明：可以根据视图的text_length值设定set long 的大小<br />
SQL&gt;select text from user_views where view_name=upper('&amp;view_name');<br />
<br />
<span style="color: #3366ff">6、同义词</span><br />
查看同义词的名称<br />
SQL&gt;select * from user_synonyms;<br />
<br />
<span style="color: #3366ff">7、约束条件</span><br />
查看某表的约束条件<br />
SQL&gt;select constraint_name, constraint_type,search_condition, r_constraint_name<br />
from user_constraints where table_name = upper('&amp;table_name');<br />
<br />
SQL&gt;select c.constraint_name,c.constraint_type,cc.column_name<br />
from user_constraints c,user_cons_columns cc<br />
where c.owner = upper('&amp;table_owner') and c.table_name = upper('&amp;table_name')<br />
and c.owner = cc.owner and c.constraint_name = cc.constraint_name<br />
order by cc.position;<br />
<br />
<span style="color: #3366ff">8、存储函数和过程</span><br />
查看函数和过程的状态<br />
SQL&gt;select object_name,status from user_objects where object_type='FUNCTION';<br />
SQL&gt;select object_name,status from user_objects where object_type='PROCEDURE';<br />
<br />
查看函数和过程的源代码<br />
SQL&gt;select text from all_source where owner=user and name=upper('&amp;plsql_name');<br />
<br />
转载：http://www.javaeye.com/topic/264639<br />
<br />
posted @ 2009-09-14 17:29 断点 阅读(28) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:55 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlca.sqlcode!=0 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309565.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:54:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309565.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309565.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309565.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">最近看C语言的程序，程序里面带有sql语句，其中就有这么一句：<br />
<span style="color: red">EXEC SQL select upper(nvl(c_grant_dpt_cde,'0')),nvl(C_CTCT_CDE,'0') into :sGrantCde,:sCtctCde from t_department where c_dpt_cde = :sDptCde;</span><br />
<span style="color: red">&nbsp;&nbsp;if (sqlca.sqlcode!=0) {</span><br />
<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("[ppPlyNewCountPrm]ERROR:sqlca.sqlerrmc = %s\n", sqlca.sqlerrm.sqlerrmc);</span><br />
<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(SetUserError(lpInBuffer,2,"取机构部门归属错误！"));</span><br />
<span style="color: red">&nbsp;&nbsp;}</span></p>
<p style="text-indent: 2em">不明白 sqlca.sqlcode = 0 是什么意思，搜了搜，记录一下sqlca.sqlcode的各种取值的意义：</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;——最近一次sql语句执行成功 </p>
<p style="text-indent: 2em">&nbsp;&nbsp; -1&nbsp;——最近一次sql语句执行失败 </p>
<p style="text-indent: 2em">100 ——最近一次sql语句没有返回数据</p>
<br />
posted @ 2009-09-10 19:59 断点 阅读(129) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:54 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中sql解释 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309564.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309564.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309564.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309564.html</trackback:ping><description><![CDATA[<p>1、SELECT nvl(C_REMARK,chr(0)) into :sRate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from T_COMM_CODE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where c_cde = trim(:sText2) and rownum = 1;</p>
<p>nvl是个函数，作用是如果第一个参数为空值，则返回第二个参数的值，否则返回第一个参数的值。</p>
<p>chr(0)将数字0转化为字符0。</p>
<p>2、Y.YJKSBH=X.ZXKSBH(+) AND Y.ZLXMID=X.ZLXMID(+)<br />
（+）表示左连接，就是在做关联之后，y表中存在而x表中不存在的数据也能查出来。</p>
<br />
posted @ 2009-06-13 17:46 断点 阅读(72) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:53 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态</title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309563.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309563.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309563.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309563.html</trackback:ping><description><![CDATA[<p>原因：出现这个问题，可能有人move过表，或者disable 过索引。<br />
1、alter table xxxxxx move tablespace xxxxxxx 命令后，索引就会失效。<br />
2、alter index index_name&nbsp; unusable，命令使索引失效。</p>
<p>解决办法：<br />
1、重建索引才是解决这类问题的完全的方法。<br />
alter index index_name rebuild (online);<br />
2、如果是分区索引只需要重建那个失效的分区 。<br />
alter index index_name rebuild partition partition_name (online); </p>
<p>说明：<br />
1. alter session set skip_unusable_indexes=true;就可以在session级别跳过无效索引作查询。<br />
2.分区索引应适用user_ind_partitions。<br />
3.状态分4种：<br />
N/A说明这个是分区索引需要查user_ind_partitions或者user_ind_subpartitions来确定每个分区是否可用；<br />
VAILD说明这个索引可用；<br />
UNUSABLE说明这个索引不可用；<br />
USABLE 说明这个索引的分区是可用的。</p>
<p>http://www.sudu.cn/info/html/edu/20071225/20526.html<br />
<a href="http://blog.oracle.com.cn/html/65/t-122265.html">http://blog.oracle.com.cn/html/65/t-122265.html</a></p>
<br />
<br />
posted @ 2009-05-19 19:16 断点 阅读(369) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:52 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-01438: 值大于此列指定的允许精确度 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309561.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309561.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309561.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309561.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309561.html</trackback:ping><description><![CDATA[<p>比如定义为number(4,2)，却要插入一个值200.12的话，就会出错啊，原因是number（p，s）的问题。 </p>
<p><span style="color: #0000ff">number（p，s），其中p表示该number的总长度，s为小数位。<br />
<span style="color: #000000">如果s为负数，则会取相应位数的取整。<br />
例如，如果number（4，-3），则数字1234的存储值为1000；如果number（4，-2），则数字1234的存储值为1200。</span></span></p>
<p>在对数据库表中的字段设定类型时，要注意：<br />
<span style="color: #008000">NUMBER(10,6)&nbsp; Double&nbsp;&nbsp; 带有小数<br />
NUMBER(4)&nbsp;&nbsp;&nbsp;&nbsp; Long&nbsp;&nbsp;&nbsp;&nbsp; 为整数</span></p>
<br />
posted @ 2009-05-16 17:31 断点 阅读(363) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:51 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中Blob和Clob </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309562.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309562.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309562.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309562.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">Blob是指二进制大对象也就是英文Binary Large Object的所写；<br />
Clob是指大字符对象也就是英文Character Large Object的所写。<br />
</span>因此这两个类型都是用来存储大量数据而设计的，其中BLOB是用来存储大量二进制数据的；CLOB用来存储大量文本数据。 </p>
<p>在JDBC中有两个接口对应数据库中的BLOB和CLOB类型，java.sql.Blob和java.sql.Clob。和你平常使用数据库一样你可以直接通过ResultSet.getBlob()方法来获取该接口的对象。与平时的查找唯一不同的是得到Blob或Clob的对象后，我们并没有得到任何数据，但是我们可以这两个接口中的方法得到数据。 <br />
例如： <br />
Blob b=resultSet.getBlob(1); <br />
InputStream bin=b.getBinaryStream(); <br />
Clob c=resultSet.getClob(2); <br />
Reader cReader=c.getCharacterStream(): <br />
&nbsp;<br />
另外还有一种获取方法，不使用数据流，而是使用数据块。 <br />
例如 <br />
Blob b=resultSet.getBlob(1); <br />
byte data=b.getByte(0,b.length()); <br />
Clob c=resultSet.getClob(2); <br />
String str=c.getSubString(0,c.length());<br />
在这里要说明一下，这个方法其实并不安全，如果你很细心的话，那很容易就能发现getByte()和getSubString()两个方法中的第二个参数都是int类型的，而BLOB和CLOB是用来存储大量数据的。而且Bolb.length()和Clob.length()的返回值都是long类型的，所以很不安全。</p>
<p><br />
那么有人肯定要问既然已经有VARCHAR和VARBINARY两中类型，为什么还要再使用另外的两种类型呢？<br />
原因：VARCHAR和VARBINARY两种类型是有自己的局限性的。首先说这两种类型的长度还是有限的不可以超过一定的限额，以VARCHAR在ORA中为例长度不可以超过4000；而LONGVARCHAR类型的一个重要缺陷就是不可以使用LIKE这样的条件检索。</p>
<p><span style="color: #0000ff">另外就是在数据库中VARCHAR和VARBINARY的存取是将全部内容从全部读取或写入，对于100K或者说更大数据来说这样的读写方式，远不如用流进行读写来得更现实一些。 </span></p>
<br />
posted @ 2009-05-16 19:26 断点 阅读(166) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:51 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中插入Date数据 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309560.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:49:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309560.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309560.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309560.html</trackback:ping><description><![CDATA[<p>在oracle中建有date类型的字段，插入可以采取如下方法： <br />
<br />
如果是小时为：１－１２　采取如下格式：yyyy-mm-dd HH:MI:SS <br />
insert into test values(to_date('2009-5-7 07:09:37','yyyy-mm-dd HH:MI:SS')); </p>
<p><br />
如果是小时为：１－２４　采取如下格式：yyyy-mm-dd HH24:MI:SS <br />
insert into test values(to_date('2009-5-7 17:09:37','yyyy-mm-dd HH24:MI:SS')); </p>
<br />
posted @ 2009-05-07 20:14 断点 阅读(145) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:49 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309559.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309559.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309559.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309559.html</trackback:ping><description><![CDATA[Caused by: java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值<br />
我在系统的一个页面上加载一个.xml文件时，出现了这个错误。
<p>原因：</p>
<p>当插入数据的长度在1000、2000内，就会抛出这样的错误。</p>
<p><br />
解决方法：</p>
<p>思路：将存储的字符串补上空格，让其超过2000的长度即可，但仅限与紧急解决问题。<br />
1、首先在.java文件中引入import org.apache.commons.lang.StringUtils;<br />
2、在此.java文件的相应的方法里添加如下判断：</p>
<p>&nbsp;&nbsp;&nbsp; // 处理ora-1461问题(clob长度在1000-2000之间会出错)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xml.length() &gt;= 1000 &amp;&amp; xml.length() &lt;= 2000) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml = StringUtils.rightPad(xml, 2008);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>相关知识：</p>
<p><strong>LONG:</strong> 可变长的字符串数据，最长2G，LONG具有VARCHAR2列的特性，可以存储长文本一个表中最多一个LONG列 <br />
<strong>LONG RAW</strong>: 可变长二进制数据，最长2G <br />
<strong>CLOB</strong>:&nbsp; 字符大对象Clob 用来存储单字节的字符数据 <br />
<strong>NCLOB</strong>: 用来存储多字节的字符数据 <br />
<strong>BLOB</strong>: 用于存储二进制数据 <br />
<strong>BFILE</strong>: 存储在文件中的二进制数据，这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复。 <br />
其中CLOB，NCLOB，BLOB都是内部的LOB(Large Object)类型，最长4G，没有LONG只能有一列的限制。要保存图片、文本文件、Word文件各自最好采用那種数据类型呢？BLOB最好，LONG RAW也不错，但Long是oracle将要废弃的类型，因此建议用BLOB。</p>
<p>相关链接：<a href="http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html">http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html</a></p>
<br />
posted @ 2009-04-18 13:01 断点 阅读(676) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:48 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle数据库中文乱码 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309558.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309558.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309558.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309558.html</trackback:ping><description><![CDATA[<p>今天跟新人安装oracle后，打开数据库查看表里面的数据，发现里面的数据全是&#8220;靠&#8221;字。<br />
这可是以前没有出现过的。因此就查了一下，了解到是注册表的字符级问题。现解决如下：<br />
&nbsp;<br />
在注册表里进行修改：<br />
开始--&gt;运行里面输入regedit--&gt;我的电脑\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 里<span style="color: #0000ff">NLS_LANG</span>的值<br />
以前是：<span style="color: #0000ff">American_America.ZHS16GBK<br />
</span>现改为：<span style="color: #0000ff">SIMPLIFIED CHINESE_CHINA.ZHS16GBK</span></p>
<p>再一次打开oracle时，数据显示一切正常。</p>
<br />
posted @ 2009-04-09 15:08 断点 阅读(118) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:47 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOAD常用快捷键 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309557.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309557.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309557.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309557.html</trackback:ping><description><![CDATA[<p>现在在企业中，操作oracle数据库的客户端，除了PL/SQL外，使用的较多的就是TOAD了！</p>
<p>为此，我在网上搜索了下，整理了些简单TOAD的使用技巧，现分享给大家。</p>
<p><br />
<span style="color: #0000ff"><span style="color: #000000">常用快捷键：</span></span></p>
<p><span style="color: #000000">F8 调出以前执行的sql命令<br />
F9 执行全部sql<br />
</span>Ctrl+t 补全table_name<br />
<span style="color: #0000ff">Ctrl+. 补全table_name<br />
</span>alt+ 箭头上下 看sql history<br />
<span style="color: #0000ff">Ctrl+Enter 直接执行当前sql</span><br />
Ctrl+Shift+F&nbsp; 格式化sql语句。</p>
<p>如果还觉得不够用的话，可以在系统菜单空白处点击右键，进入menu shortcuts，自行定义快捷键。</p>
<p>&nbsp;</p>
<p>toad下修改表中字段的值：<br />
首先在schema Browser下查找到相应的表，在右边点击Data栏，然后选中一条记录，再点击Data栏下面的▲(Edit Record)，即可修改字段里的值，然后点击&#8730;(Post edit)，最后就是Commit了。</p>
<br />
posted @ 2009-04-08 20:50 断点 阅读(637) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:46 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据的导出与导入 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309556.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:45:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309556.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309556.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309556.html</trackback:ping><description><![CDATA[<p>前序：关于<font face="Verdana">Oracle9i数据的导出与导入</font>问题，折腾我好长时间了，尤其是导入。今天在一位同事的指导下，算是终于成功了，为了记住这位同事的帮助，在此仅以&#8220;坤&#8221;作为记号。</p>
<p>正文：</p>
<p><font face="Verdana"><span style="color: red"><font face="Verdana">Oracle数据导出：<br />
</font></span>如果是导出本机的Oracle数据库：<br />
<span style="color: #008000">exp pcisv62/11@ORCL&nbsp; file="d:\pcisv62081226.dmp"&nbsp; full=y&nbsp;&nbsp;</span>&nbsp; <br />
（ORCL为本地数据库监听）</font></p>
<p><font face="Verdana">如果是导出服务器端的Oracle数据：<br />
<span style="color: #008000">exp pcisv62/11@tnsname&nbsp; file="d:\pcisv62081226.dmp" full=y<br />
</span>（tnsname为COREV6_DBSERVER，SID为COREV6，主机为DBSERVER。）<br />
<span style="color: #008000">exp pcisv6_ab/11@COREV6_DBSERVER file=d:\v6100210.dmp rows=y buffer=1024000</span><br />
<br />
</font><font face="Verdana">注意：必须是 DBA 才能执行完整数据库或表空间导出操作。</font></p>
<p><font face="Verdana"><br />
<span style="color: red">Oracle数据导入,分以下步骤：</span><br />
1.先在Oracle9i的Enterprise Manager Console下，以sys/sys及sysdba身份登陆，在&#8220;存储&#8221;--&gt;&#8220;表空间&#8221;下创建表空间COREV6，同时给其分配合适的空间。<br />
2.在&#8220;安全性&#8221;--&gt;&#8220;用户&#8221;下创建用户pcisv62,使用户默认的表空间为COREV6，同时在&#8220;角色&#8221;里授予CONNECT、DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE、RESOURCE。<br />
3.导入.dmp文件，开始--&gt;运行cmd，导入命令：<br />
<span style="color: #008000">imp pcisv6_ab/11@ORCL file=d:\v6100210.dmp&nbsp; full=y ignore=y<br />
</span></p>
<p>注意：如果备份的.dmp文件是以用户pcisv62导出COREV6空间的数据，那么<br />
1.新建的用户最好是pcisv62，否则命令为：<br />
&nbsp; <span style="color: #008000">imp pcisv62/11@ORCL file=d:\v6100210.dmp&nbsp;&nbsp; fromuser=pcisv62&nbsp; touser=pcisv6_ab&nbsp;&nbsp; full=y&nbsp; ignore=y&nbsp; rows=y&nbsp; tablespaces=corev6 </span><br />
2.与新建用户关联的新建空间名必须为COREV6，否则Oracle报找不到COREV6空间的错误。</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000">数据成功导入以后，下一步就是配置Tomcat的server.xml文件：<br />
</span>1.如果用到的是本机上的数据，本地数据源里的部分配置为： username="pcisv62" password="11" </p>
<p><span style="color: #008000">url="jdbc:oracle:thin:@localhost:1521:orcl"</span><br />
2.如果用到的是服务器上的数据，则数据源里的部分配置为： username="pcisv62" password="11" </p>
<p><span style="color: #008000">url="jdbc:oracle:thin:@dbserver:1521:corev6"（</span>dbserver为服务器的名字，corev6为服务器上Oracle的SID）</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000">oracle的安装目录E:\oracle\ora92\network\admin下的tnsnames.ora：<br />
</span>本地配置：<br />
<span style="color: #008000">ORCL =<br />
&nbsp; (DESCRIPTION =<br />
&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 主机名)(PORT = 1521))<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp; (CONNECT_DATA =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = ORCL)<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp; )<br />
</span>或服务器配置：<br />
<span style="color: #008000">COREV6_DBSERVER =<br />
&nbsp; (DESCRIPTION =<br />
&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp; (CONNECT_DATA =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SID = COREV6)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp; )</span></p>
<p><br />
以下转载：几种导入导出的命令方法，以备以后查阅。<br />
数据导出：<br />
exp qhmis/qhmis@qhmis&nbsp; file='d:\backup\qhmis\qhmis20060526.dmp'&nbsp; grants=y&nbsp; full=n<br />
&nbsp;1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<br />
&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp full=y<br />
&nbsp;2 将数据库中system用户与sys用户的表导出<br />
&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)<br />
&nbsp;3 将数据库中的表table1 、table2导出<br />
&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) <br />
&nbsp;4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />
&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
数据的导入：<br />
&nbsp;1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<br />
&nbsp;&nbsp; imp system/manager@TEST&nbsp; file=d:\daochu.dmp<br />
&nbsp;&nbsp; 上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<br />
&nbsp;&nbsp; 在后面加上 ignore=y 就可以了。<br />
&nbsp;2 将d:\daochu.dmp中的表table1 导入<br />
&nbsp;imp system/manager@TEST&nbsp; file=d:\daochu.dmp&nbsp; tables=(table1) </font></p>
<br />
posted @ 2009-03-04 17:06 断点 阅读(1224) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:45 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以system身份登陆sql*puls方法 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309555.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309555.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309555.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309555.html</trackback:ping><description><![CDATA[<p>系统环境：WindowXP。</p>
<p>oracle9i&nbsp;&nbsp;安装到最后，更改了：sys口令:sys&nbsp;&nbsp; &nbsp;system口令:system&nbsp;&nbsp;&nbsp; </p>
<p>现在需要以<font face="Verdana">system身份登陆sql*puls，方法有二：</font></p>
<p>&nbsp;</p>
<p>第一种方法：.进入SQL*Plus后在弹出对话框中直接点击&#8220;确定&#8221;，&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;请输入用户名：sys &nbsp; as &nbsp; sysdba&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 请输入口令：sys&nbsp;&nbsp; </p>
<p><br />
第二种方法：进入Dos窗口，输入一下命令： &nbsp; <br />
&nbsp; c:\&gt;sqlplus &nbsp; /nolog &nbsp; <br />
&nbsp; SQL&gt;conn &nbsp; sys/password &nbsp; as &nbsp; sysdba</p>
<p>注意：sys的权限最大！是默认的DBA！一般不在该用户下建用户表，PACKAGE等！system的权限就差一些。</p>
<br />
posted @ 2009-02-27 14:55 断点 阅读(96) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:44 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中的 exists 和 in 的效率问题 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309554.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309554.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309554.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309554.html</trackback:ping><description><![CDATA[<p><span style="color: #339966"><span style="color: #0000ff"><span style="color: #0000ff">有两个简单例子，以说明 &#8220;exists&#8221;和&#8220;in&#8221;的效率问题</span></span></span></p>
<p><span style="color: #339966"><span style="color: #0000ff"><span style="color: #0000ff">1) select * from T1 where exists(select * from T2 where T1.a=T2.a) ;</span></span></span></p>
<p><span style="color: #339966"><span style="color: #0000ff"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; T1数据量小而T2数据量非常大时，T1&lt;&lt;T2 时，1) 的查询效率高。</span></span></span></p>
<p><span style="color: #339966"><span style="color: #0000ff"><span style="color: #0000ff">2) select * from T1 where T1.a in (select T2.a from T2) ;</span></span></span></p>
<p><span style="color: #339966"><span style="color: #0000ff"><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp; T1数据量非常大而T2数据量小时，T1&gt;&gt;T2 时，2) 的查询效率高。</span></span></span></p>
<p><font face="Verdana">exists 用法：</font></p>
<p><font face="Verdana">1）句中的</font><font face="Verdana">&#8220;select * from T2 where T1.a=T2.a&#8221; 相当于一个关联表查询，</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相当于</font><font face="Verdana">&#8220;select * from T1,T2&nbsp; where T1.a=T2.a&#8221;；</p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; &#8220;exists（xxx）&#8221;</font><font face="Verdana">它只在乎括号里的数据能不能查找出来，是否存在这样的记录，如果存在，这1）句的where 条件成立。</font></p>
<p>in的用法：</p>
<p>2）句中的&#8220;select * from T1 where T1.a in (select T2.a from T2) &#8221;，</font><font face="Verdana">这里的&#8220;in&#8221;后面括号里的语句搜索出来的字段的内容一定要相对应，一般来说，T1和T2这两个表的a字段表达的意义应该是一样的，否则这样查没什么意义。</font></p>
<p>---------------------------------------------------------------</p>
<p>+++++++++++++&nbsp;&nbsp; <span style="color: red">下面转载&nbsp;</span> +++++++++++++++++++</p>
<p>---------------------------------------------------------------</p>
<p>今天市场报告有个sql及慢，运行需要20多分钟，如下：<br />
<span style="color: #3366ff">update p_container_decl cd<br />
set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate<br />
where exists(<br />
select 1<br />
from (<br />
select tc.decl_no,tc.goods_no<br />
from p_transfer_cont tc,P_AFFIRM_DO ad<br />
where tc.GOODS_DECL_NO = ad.DECL_NO<br />
and ad.DECL_NO = \'sssssssssssssssss\'<br />
) a<br />
where a.decl_no = cd.decl_no<br />
and a.goods_no = cd.goods_no<br />
)<br />
</span>上面涉及的3个表的记录数都不小，均在百万左右。根据这种情况，我想到了前不久看的tom的一篇文章，说的是exists和in的区别，in 是把外表和那表作hash join，而exists是对外表作loop，每次loop再对那表进行查询。<br />
这样的话，in适合内外表都很大的情况，exists适合外表结果集很小的情况。 </p>
<p><font size="2">而我目前的情况适合用in来作查询，于是我改写了sql，如下：<br />
<span style="color: #3366ff"><font size="2">update p_container_decl cd<br />
set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate<br />
where (decl_no,goods_no) in<br />
(<br />
select tc.decl_no,tc.goods_no<br />
from p_transfer_cont tc,P_AFFIRM_DO ad<br />
where tc.GOODS_DECL_NO = ad.DECL_NO<br />
and ad.DECL_NO = &#8216;ssssssssssss&#8217;<br />
) </font></span></font></p>
<p><font size="2"></font><font size="2">让市场人员测试，结果运行时间在1分钟内。问题解决了，看来exists和in确实是要根据表的数据量来决定使用。</font></p>
<p><font size="2">--------------------------------------------------------------------------</font></p>
<br />
posted @ 2009-02-01 17:54 断点 阅读(240) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:42 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>卸载oracle方法 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/14/309553.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Thu, 14 Jan 2010 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/14/309553.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309553.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/14/309553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309553.html</trackback:ping><description><![CDATA[<p><font face="Verdana">在卸载Oracle时删不干净，搞的要重装系统，本人在工作中总结出如下方法，希望对大家有所帮助。 <br />
<span style="color: #ff00ff"><font style="color: #ff00ff" face="Verdana">注意：oracle的源程序的路径必须是英文路径，否则安装会出错！</font></span></font></p>
<p><font face="Verdana"></font><font face="Verdana"><span style="color: #3366ff"><font style="color: #3366ff" face="Verdana">1</font></span>.以Administrators 身份登陆windows系统。<br />
<span style="color: #3366ff">2</span>.停掉Oracle Service服务。&nbsp; <br />
<span style="color: #3366ff">3</span>.通过Oracle installer 卸载任何orcle产品及组件。 <br />
<span style="color: #3366ff">4</span>.删除%ORACLE_base%文档和SYSTEM_DRIVE:\program files下的oracle文档。 <br />
<span style="color: #3366ff">5</span>.删除SYSTEM_DRIVE:\Documents and Settings\All Users\「开始」菜单\程式中的oracle项。 <br />
<span style="color: #3366ff">6</span>.在&#8220;开始菜单&#8221;—点&#8220;运行&#8221;—输入&#8220;regedit&#8221;打开注册表： <br />
&nbsp;&nbsp; 到HKEY_CLASSES_ROOT下，删除以Oracle，ORA，ORCL开头的键； <br />
&nbsp;&nbsp; 到HKEY_LOCAL_MACHINE\SOFTWARE下，删除ORACLE键和Apache Group键； <br />
&nbsp;&nbsp; 到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下，删除以Oracle开头的键； <br />
&nbsp;&nbsp; 到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \Eventlog\Application下，删除以Oracle</font><font face="Verdana">开头的键； <br />
&nbsp; 到HKEY_CURRENT_USER下，删除Oracle键； <br />
&nbsp; 到HKEY_CURRENT_USER\SOFTWARE\ORACLE下，删除以Oracle 或 Orcl开头的键（假如有的话）； <br />
<span style="color: #3366ff">7</span>.打开系统系统环境变量（我的电脑－&gt;右键－&gt;系统属性－&gt;高级－&gt;环境变量），在PATH中删除任何以%</font><font face="Verdana">ORACLE_HOME%开始的项。 <br />
<span style="color: #3366ff">8</span>.重启电脑。</font></p>
<br />
posted @ 2008-12-18 12:37 断点 阅读(68) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-14 21:41 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/14/309553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>