<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>隔叶黄莺 Unmi Blog &#187; Oracle</title>
	<atom:link href="http://unmi.cc/category/database/oracle/feed" rel="self" type="application/rss+xml" />
	<link>http://unmi.cc</link>
	<description></description>
	<lastBuildDate>Wed, 22 Feb 2012 14:20:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Oracle SQL优化［转］</title>
		<link>http://unmi.cc/oracle-sql-tuning</link>
		<comments>http://unmi.cc/oracle-sql-tuning#comments</comments>
		<pubDate>Mon, 30 Jun 2008 13:47:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/oracle-sql%e4%bc%98%e5%8c%96%ef%bc%bb%e8%bd%ac%ef%bc%bd</guid>
		<description><![CDATA[     Oracle SQL的优化规则： 尽量少用IN操作符，基本上所有的IN操作符都可以用EXISTS代替         用IN写出来的SQL的优点是比较容易写及清晰易懂，但是用IN的SQL性能总是比较低的，从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别：        ORACLE 试图将其转换成多个表的连接，如果转换不成功则先执行IN里面的子查询，再查询外层的表记录，如果转换成功则直接采用多个表的连接方式查询。由此可见用 IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功，但对于含有分组统计等方面的SQL就不能转换了。         Oracle在执行IN子查询时，首先执行子查询，将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询，然后运行子查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率稍高。但具体在选择IN或EXIST操作时，要根据主子表数据量大小来具体考虑。         推荐方案：在业务密集的SQL当中尽量不采用IN操作符。 不用NOT IN操作符，可以用NOT EXISTS或者外连接+替代         此操作是强列推荐不使用的，因为它不能应用表的索引。         推荐方案：用NOT EXISTS 或（外连接+判断为空）方案代替 不用“&#60;&#62;”或者“!=”操作符。对不等于操作符的处理会造成全表扫描，可以用“&#60;” or “&#62;”代替         不等于操作符是永远不会用到索引的，因此对它的处理只会产生全表扫描。         推荐方案：用其它相同功能的操作运算代替，如：         1）a&#60;&#62;0 改为 a&#62;0 or a&#60;0         2）a&#60;&#62;’’ 改为 a&#62;’’ Where子句中出现IS NULL或者IS NOT NULL时，Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时，对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作     [...]]]></description>
		<wfw:commentRss>http://unmi.cc/oracle-sql-tuning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate从2升级到3不支持Oracle8外连接(+)的解决办法</title>
		<link>http://unmi.cc/hibernate-2-to-3-support-plus</link>
		<comments>http://unmi.cc/hibernate-2-to-3-support-plus#comments</comments>
		<pubDate>Sat, 07 Apr 2007 09:47:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/hibernate%e4%bb%8e2%e5%8d%87%e7%ba%a7%e5%88%b03%e4%b8%8d%e6%94%af%e6%8c%81oracle8%e5%a4%96%e8%bf%9e%e6%8e%a5%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95</guid>
		<description><![CDATA[最近接手了一个要维护的项目，是用Hibernate2+Oralce8写成的，因为看到Hibernate3页出来这么久了，而且也感觉Hibernate3有它的许多新的特性，如批量删除和更新，新的HQL语法解析器AST。 升级过程大致按照孙卫琴的那篇文章 如何把Hibernate2.1升级到Hibernate3.0？来做，该替换的替换完，该设置的设置完，程序一跑，当程序执行到向下面这种查询的时候(Oracle所特有的外连接查询)，报错。 语句为：（描述为类似语句，把项目中的实际表名隐去了） session.createQuery("select t1.c1,t2.c1 from Table1 t1,Table2 t2 where t1.c1=t2.c1(+)").list(); 出错信息为： org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ) near line 1, column 106 [select t1.c1,t2.c1 from Table1 t1,Table2 t2 where t1.c1=t2.c1(+)]  at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31)  at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:24)  at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)  at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:258)  at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)  at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)  at org.hibernate.engine.query.HQLQueryPlan.&#60;init&#62;(HQLQueryPlan.java:77)  at org.hibernate.engine.query.HQLQueryPlan.&#60;init&#62;(HQLQueryPlan.java:56)  at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)  at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)  at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)  at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623) 再回头看看孙卫琴的那篇升级注意事项中 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/hibernate-2-to-3-support-plus/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>如何杀掉(kill)Oracle中的会话(Session)</title>
		<link>http://unmi.cc/kil-loracle-session</link>
		<comments>http://unmi.cc/kil-loracle-session#comments</comments>
		<pubDate>Wed, 21 Mar 2007 10:09:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/%e5%a6%82%e4%bd%95%e6%9d%80%e6%8e%89killoracle%e4%b8%ad%e7%9a%84%e4%bc%9a%e8%af%9dsession</guid>
		<description><![CDATA[有时，Oracle中造成一些表被死锁或者会话异常退出，如执行了更新记录操作后，既没有commit也没有rollback,网络就断开了，也会造表或记录被锁住，待到超时后才会被解开，那样都会造成应用操作被阻塞。 可以以Oralce管理员权限用户登录Oracle数据，查询到被锁的对象，然后杀除指定的会话。 用下面的语句查询被锁的对象，可以带上更多约束条件，如schemaname等更精确的匹配。 SELECT  a.object_id, a.session_id, b.object_name, c.*       FROM  v$locked_object a, dba_objects b, v$session c      WHERE  a.object_id = b.object_id        AND  a.SESSION_ID = c.sid(+)    杀Seesion的SQL语句语法如下： alter system kill session 'sid, serial#'    如上面查出来的一条记录的sid是53, serial#为663,就执行以下的语句 alter system kill session '53,663'    如果要一次性杀死多个会话，一个一个填写sid和serial#十分的繁琐，应该在查询被锁对象的同时拼凑出多条的杀会话语句，以分号分隔，一起复制下来，然后就可以批量的执行了。 拼凑kill语句的方式如下，下面加了一个过滤条件和一个排序，杀除真正关心的表，并且着重注意超时时间过长的会话。 SELECT 'alter system kill session ''' &#124;&#124; c.sid &#124;&#124; '' &#124;&#124; ',' &#124;&#124; c.serial# &#124;&#124;''';', a.object_id, a.session_id, b.object_name, c.* FROM v$locked_object a, dba_objects b, v$session c WHERE a.object_id = b.object_id [...]]]></description>
		<wfw:commentRss>http://unmi.cc/kil-loracle-session/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORACLE 常用脚本（4）[转]</title>
		<link>http://unmi.cc/oracle-scripts-4</link>
		<comments>http://unmi.cc/oracle-scripts-4#comments</comments>
		<pubDate>Mon, 18 Sep 2006 16:05:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/oraclenbsp%e5%b8%b8%e7%94%a8%e8%84%9a%e6%9c%ac%ef%bc%884%ef%bc%89nbsp%e8%bd%ac</guid>
		<description><![CDATA[rem  这需要 统计某个具体用户的"Table,index,column,constraits" rem================================================================ rem   全部表-列定义 table_cols.txt  set lin 110 pages 3000  column table_name format a30  column data_type  format a12  column data_default  format a8  column column_name format a22  column Cid format  999  column Len format  9999  column Prec format  99  column Scale format  99 select  TABLE_NAME, COLUMN_ID "Cid", COLUMN_NAME, DATA_TYPE, DATA_LENGTH "Len",  nvl(DATA_PRECISION,'-1') "Prec", nvl(DATA_SCALE,'-1') [...]]]></description>
		<wfw:commentRss>http://unmi.cc/oracle-scripts-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORACLE 常用脚本（3）[转]</title>
		<link>http://unmi.cc/oracle-scripts-3</link>
		<comments>http://unmi.cc/oracle-scripts-3#comments</comments>
		<pubDate>Mon, 18 Sep 2006 16:04:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/oraclenbsp%e5%b8%b8%e7%94%a8%e8%84%9a%e6%9c%ac%ef%bc%883%ef%bc%89nbsp%e8%bd%ac</guid>
		<description><![CDATA[用户的管理 一、ORACLE的安全域 1、TABLESPACE QUOTAS：表空间的使用定额 2、DEFAULT TABLESPACE：默认表空间 3、TEMPORARY TABLESPACE：指定临时表空间。 4、ACCOUNT LOCKING：用户锁 5、RESOURCE LIMITE：资源限制 6、DIRECT PRIVILEGES：直接授权 7、ROLE PRIVILEGES：角色授权先将应用中的用户划为不同的角色， 二、创建用户时的清单： 1、选择一个用户名称和检验机制：A，看到用户名，实际操作者是谁，业务中角色。 2、选择合适的表空间： 3、决定定额： 4、口令的选择： 5、临时表空间的选择：先建立一个临时表空间，然后在分配。不分配，使用SYSTEM表空间 6、CREATE USER 7、授权：A，用户的工作职能       B，用户的级别 三、用户的创建： 1、命令： CREATE USER 名称 IDENTIFIED BY 口令 DEFAULT TABLESPACE 默认表空间名 TEMPOARAY TABLESPACE 临时表空间名 QUOTA 15M ON 表空间名 [PASSWORD EXPIRE]：当用户第一次登陆到ORACLE，创建时所指定的口令过期失效，强迫用户自己定义一个新口令。 [ACCOUNT LOCK]：加用户锁 QUOTA UNLIMITED ON TABLESPACE：不限制，有多少有多少。 [PROFILE 名称]：受PROFILE文件的限制。 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/oracle-scripts-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORACLE 常用脚本（2）[转]</title>
		<link>http://unmi.cc/oracle-scripts</link>
		<comments>http://unmi.cc/oracle-scripts#comments</comments>
		<pubDate>Mon, 18 Sep 2006 16:02:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/oraclenbsp%e5%b8%b8%e7%94%a8%e8%84%9a%e6%9c%ac%ef%bc%882%ef%bc%89nbsp%e8%bd%ac</guid>
		<description><![CDATA[一、ORACLE的表的分类： 1、REGULAR TABLE：普通表，ORACLE推荐的表，使用很方便，人为控制少。 2、PARTITIONED TABLE：分区表，人为控制记录的分布，将表的存储空间分为若干独立的分区，记录按一定的规则存储在分区里。适用于大型的表。 二、建表 1 CREATE TABLE 表名 （EMPNO NUMBER（2），NAME VARCHAR2（20）） PCTFREE 20 PCTUSED 50 STORAGE （INITIAL 200K NEXT 200K MAXEXTENTS 200 PCTINCREASE 0） TABLESPACE 表空间名称 [LOGGING&#124;NOLOGGING]所有的对表的操作都要记入REDOLOG，ORACLE建议使用NOLOGGING； [CACHE&#124;NOCACHE]：是否将数据按照一定的算法写入内存。 2、关于PCTFREE 和PCTUSED A、行迁移和行链接 B、PCTFREE：制止INSERT，为   UPDATE留FREE 空间 C、PCTUSED：为恢复INSERT操作，而设定的。 三、拷贝一个已经存在的表： CREATE TABLE 新表名 STORAGE（。。） TABLESPACE 表空间 AS SELECT * FROM 老表名 ； 当老表存在约束，触发的时候，不会拷过去。 四、修改表的参数ALTER TABLE 名称 PCTFREE [...]]]></description>
		<wfw:commentRss>http://unmi.cc/oracle-scripts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORACLE 常用脚本（1） [转]</title>
		<link>http://unmi.cc/oracle-scripts-1</link>
		<comments>http://unmi.cc/oracle-scripts-1#comments</comments>
		<pubDate>Mon, 18 Sep 2006 16:01:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/oraclenbsp%e5%b8%b8%e7%94%a8%e8%84%9a%e6%9c%ac%ef%bc%881%ef%bc%89nbsp%e8%bd%ac</guid>
		<description><![CDATA[1、查看表空间的名称及大小     select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size     from dba_tablespaces t, dba_data_files d     where t.tablespace_name = d.tablespace_name     group by t.tablespace_name; 2、查看表空间物理文件的名称及大小   select tablespace_name, file_id, file_name,   round(bytes/(1024*1024),0) total_space   from dba_data_files   order by tablespace_name; 3、查看回滚段名称及大小   select segment_name, tablespace_name, r.status,   (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,   max_extents, v.curext CurExtent   From dba_rollback_segs r, [...]]]></description>
		<wfw:commentRss>http://unmi.cc/oracle-scripts-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么Oracle的伪列rownum不支持&gt;,&gt;=,=,between...and，而都用</title>
		<link>http://unmi.cc/oracle-rownum-support-predicate</link>
		<comments>http://unmi.cc/oracle-rownum-support-predicate#comments</comments>
		<pubDate>Wed, 02 Aug 2006 17:05:00 +0000</pubDate>
		<dc:creator>Unmi</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Rownum]]></category>

		<guid isPermaLink="false">http://unmi.cc/uncategorized/%e4%b8%ba%e4%bb%80%e4%b9%88oracle%e7%9a%84%e4%bc%aa%e5%88%97rownum%e4%b8%8d%e6%94%af%e6%8c%81gtgtbetween-and%ef%bc%8c%e8%80%8c%e9%83%bd%e7%94%a8lt%e6%af%94%e8%be%83</guid>
		<description><![CDATA[对于 Oracle 的 rownum 问题，很多资料都说不支持&#62;,&#62;=,=,between...and，只能用以上符号(&#60;、&#60;=、!=)，并非说用&#62;,&#62;=,=,between..and 时会提示SQL语法错误，而是经常是查不出一条记录来，还会出现似乎是莫名其妙的结果来，其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇，同样是伪列，rownum 与 rowid 可有些不一样，下面以例子说明 假设某个表 t1(c1) 有 20 条记录 如果用 select rownum,c1 from t1 where rownum &#60; 10, 只要是用小于号，查出来的结果很容易地与一般理解在概念上能达成一致，应该不会有任何疑问的。 可如果用 select rownum,c1 from t1 where rownum &#62; 10 (如果写下这样的查询语句，这时候在您的头脑中应该是想得到表中后面10条记录)，你就会发现，显示出来的结果要让您失望了，也许您还会怀疑是不谁删了一些记录，然后查看记录数，仍然是 20 条啊？那问题是出在哪呢？ 先好好理解 rownum 的意义吧。因为ROWNUM是对结果集加的一个伪列，即先查到结果集之后再加上去的一个列 (强调：先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1，而有其他大于1的值。所以您没办法期望得到下面的结果集： 11 aaaaaaaa 12 bbbbbbb 13 ccccccc ................. rownum &#62;10 没有记录，因为第一条不满足去掉的话，第二条的ROWNUM又成了1，所以永远没有满足条件的记录。或者可以这样理解： ROWNUM是一个序列，是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1，第二条为2，依次类推。如果你用&#62;,&#62;=,=,between...and这些条件，因为从缓冲区或数据文件中得到的第一条记录的rownum为1，则被删除，接着取下条，可是它的rownum还是1，又被删除，依次类推，便没有了数据。 [...]]]></description>
		<wfw:commentRss>http://unmi.cc/oracle-rownum-support-predicate/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 6/61 queries in 0.030 seconds using disk: basic
Object Caching 2503/2639 objects using disk: basic

Served from: unmi.cc @ 2012-02-23 07:52:24 -->
