<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jihongbin12329@sohu.com</title>
    <description></description>
    <link>http://jihongbin12329.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>oracle 锁同隔离机制</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/141849" style="color:red;">http://jihongbin12329.javaeye.com/blog/141849</a>&nbsp;
          发表时间: 2007年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>oracle 锁从不同功能可分为表结构锁同行级锁以及表锁也可分为共享锁，共享更新锁，独占锁</p>
<p>DML锁有如下三种封锁方式： <br />
　　 （1）、共享封锁方式（SHARE） <br />
　　 （2）、独占封锁方式（EXCLUSIVE） <br />
　　 （3）、共享更新封锁（SHARE UPDATE） <br />
　　 其中SHARE，EXCLUSIVE用于表封锁，SHARE UPDATE用于行封锁。 <br />
<br />
　　 1、<font color="#ff0000">共享方式的表封锁 <br />
</font>　　 共享方式的表封锁是对表中的所有数据进行封锁，该锁用于保护查询数据的一致性，防止其它用户对已封锁的表进行更更新。其它用户只能对该表再施加共享方式的锁，而不能再对该表施加独占方式的封锁，共享更新锁可以再施加，但不允许持有共享更新封锁的进程做更新。共享该表的所有用户只能查询表中的数据，但不能更新。共享方式的表封锁只能由用户用SQL语句来设置，基语句格式如下： <br />
　　 [quote:04b72348bd]LOCK TABLE &lt;表名&gt;[,&lt;表名&gt;]... <br />
　　 IN SHARE MODE [NOWAIT] <br />
　　 [/quote:04b72348bd] <br />
　　 执行该语句，对一个或多个表施加共享方式的表封锁。当指定了选择项NOWAIT，若该封锁暂时不能施加成功，则返回并由用户决定是进行等待，还是先去执行别的语句。 <br />
持有共享锁的事务，在出现如下之一的条件时，便释放其共享锁： <br />
　　 A、执行COMMIT或ROLLBACK语句。 <br />
　　 B、退出数据库（LOG　OFF）。 <br />
　　 C、程序停止运行。 <br />
　　 共享方式表封锁常用于一致性查询过程，即在查询数据期间表中的数据不发生改变。 <br />
<br />
　　 2、独占方式表封锁 <br />
　　 独占方式表封锁是用于封锁表中的所有数据，拥有该独占方式表封锁的用户，即可以查询该表，又可以更新该表，其它的用户不能再对该表施加任何封锁（包括共享、独占或共享更新封锁）。其它用户虽然不能更新该表，但可以查询该表。 <br />
　　 独占方式的表封锁可通过如下的SQL语句来显示地获得： <br />
　　 LOCK TABLE &lt;表名&gt;[,&lt;表名&gt;].... <br />
　　 IN EXCLUSIVE MODE [NOWAIT] <br />
　　 独占方式的表封锁<font color="#ff0000">也可以</font>在用户执行DML语句INSERT、UPDATE、DELETE时隐含获得。 <br />
　　 拥有独占方式表封锁的事务，在出现如下条件之一时，便释放该封锁： &lt;BR&gt;（1）、执行　　 COMMIT或ROLLBACK语句。 <br />
　　 （2）、退出数据库（LOG OFF） <br />
　　 （3）、程序停止运行。 <br />
　　 独占方式封锁通常用于更新数据，当某个更新事务涉及多个表时，可减少发生死锁。 <br />
<br />
　　 3、共享更新封锁方式 <br />
　　 <font color="#ff0000">共享更新封锁是对一个表的一行或多行进行封锁，因而也称作行级封锁</font>。表级封锁虽然保证了数据的一致性，但却减弱了操作数据的并行性。行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。 <br />
　　 可通过如下的两种方式来获得行级封锁： <br />
　　 （1）、执行如下的SQL封锁语句，以显示的方式获得： <br />
　　 LOCK TABLE &lt;表名&gt;[,&lt;表名&gt;].... <br />
　　 IN SHARE UPDATE　MODE [NOWAIT] <br />
　　 （2）、用如下的SELECT ...FOR UPDATE语句获得： <br />
　　 SELECT &lt;列名&gt;[,&lt;列名&gt;]... <br />
　　 FROM &lt;表名&gt; <br />
　　 WHERE &lt;条件&gt; <br />
　　 FOR UPDATE OF &lt;列名&gt;[,&lt;列名&gt;].....[NOWAIT] <br />
　　 一旦用户对某个行施加了行级封锁，则该用户可以查询也可以更新被封锁的数据行，其它用户只能查询但不能更新被封锁的数据行．如果其它用户想更新该表中的数据行，则也必须对该表施加行级锁．即使多个用户对一个表均使用了共享更新，但也不允许两个事务同时对一个表进行更新，真正对表进行更新时，是以独占方式封锁表，一直到提交或复原该事务为止。行锁永远是独占方式锁。 <br />
　　 当出现如下之一的条件，便释放共享更新锁： <br />
　　 （１）、执行提交（COMMIT）语句； <br />
　　 （２）、退出数据库（LOG　OFF） <br />
　　 （３）、程序停止运行。 <br />
　　 执行ROLLBACK操作不能释放行锁。 </p>
<p><font color="#ff0000">一般来说不会进行锁全表操作ＵＰＤＡＴＥ　ＩＮＳＥＲＴ　ＤＥＬＥＴＥ　大部分是进行行级锁也是独占锁如这个语句：update table_name set column_name='123'&nbsp; where id=&quot;1256&quot;.　　如果进行表结构更改如加列删列会进行表结构锁</font></p>
<p>&nbsp;</p>
<div style="MARGIN-LEFT: 42.5pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">设置一个<font color="#ff0000">事务的隔离级别</font></span></div>
<div style="MARGIN-LEFT: 57.25pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">SET TRANSACTION ISOLATION LEVEL READ COMMITTED; </span></div>
<div style="MARGIN-LEFT: 57.25pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; </span></div>
<div style="MARGIN-LEFT: 57.25pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">SET TRANSACTION READ ONLY; </span></div>
<div style="MARGIN-LEFT: 42.25pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">设置增个<font color="#ff0000">会话的隔离级别</font></span></div>
<div style="MARGIN-LEFT: 57.25pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE; </span></div>
<div style="MARGIN-LEFT: 57.25pt; TEXT-INDENT: -21.25pt"><span style="FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体">ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED; </span></div>
<div>&nbsp;</div>
<p><br />
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/141849#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 19 Nov 2007 18:40:43 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/141849</link>
        <guid>http://jihongbin12329.javaeye.com/blog/141849</guid>
      </item>
      <item>
        <title>oracle user and privilege</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/108675" style="color:red;">http://jihongbin12329.javaeye.com/blog/108675</a>&nbsp;
          发表时间: 2007年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">关于表空间同用户的问题：<br />
两者没有关系核心是用户如果一用户授于另一用户什么权限那么另一用户可能查看被授于的权限下的东东如一用户表空间是SYSTEM另一用户是MANAGER一用户把名下的一些表的查看权限给了一个角色而另一个用户就可以查看在权限内的表的信息不管他们的表空间是否同一个用户权限同表空间没有任何关系</font></p>
<p><font face="Arial">表空间SYSTEM除了存有数据字典的信息还有所有的对像信息所以SYSTEM表是一定要的回滚表空间UNDO是用来放可能要回滚的原始数据信息的TEMP表空间是为了排序（ORDER BY ）准备的当然还有一些临时的信息</font></p>
<p><font face="Arial">控制文件是核心其中包含了数据文件信息重做日志信息CHECKPOINT信息等等主要信息数据文件同表空间的对应关系放在数据字典中所有的物理文件同其对应逻辑信息都放在数据字典中</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/108675#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Aug 2007 21:44:35 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/108675</link>
        <guid>http://jihongbin12329.javaeye.com/blog/108675</guid>
      </item>
      <item>
        <title>oracle varray</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/108674" style="color:red;">http://jihongbin12329.javaeye.com/blog/108674</a>&nbsp;
          发表时间: 2007年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">关于ORACLE中的数组：记录同集合<br />
集合可以有三种实现方式：<br />
1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如：<br />
CREATE TYPE 类型名 AS VARRAY OF VARCHAR2（20）；</font></p>
<font face="Arial">
<p><font face="Arial">1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如：<br />
CREATE TYPE 类型名 AS VARRAY（52） OF VARCHAR2（20）；</font></p>
<p><font face="Arial">不能使用如下：<br />
CREATE TYPE 类型名 AS VARRAY（52） OF 表名%ROWTYPE；<br />
注意：使用VARRAY时一定要先指定数组大小<br />
不然搞创建数组类型</font></p>
<p>2 内嵌表如：<br />
&nbsp;TYPE 类型名 IS TABLE OF 具体类型如：（表名%ROWTYPE）；<br />
&nbsp;内嵌表数组分二种：Index_by表同嵌套表如上的就是嵌套表而Index_by表只要在其尾回上 INDEX BY BINARY_INTEGER就可以了<br />
例子：<br />
declare<br />
cursor cur_test is select id,mc from test;<br />
type t_test1 is table of varchar2(60) index by binary_integer;<br />
type t_test2 is table of test%rowtype index by binary_integer;<br />
var_test1 t_test1;<br />
var_test2 t_test2;<br />
var_new t_test2;<br />
begin<br />
SELECT id,mc INTO var_test2(0) FROM test WHERE id='111';<br />
dbms_output.put_line('var_test2(0):'||var_test2(0).id||'---'||var_test2(0).mc);<br />
SELECT id,mc INTO var_test2(8) FROM test WHERE id='333';<br />
dbms_output.put_line('var_test2(8):'||var_test2(8).id||'---'||var_test2(8).mc);<br />
var_new := var_test2;<br />
dbms_output.put_line('===== copy var_test2 to var_new =====');<br />
dbms_output.put_line('var_new(0):'||var_new(0).id||'---'||var_new(0).mc);<br />
dbms_output.put_line('var_new(8):'||var_new(8).id||'---'||var_new(8).mc);<br />
end;<br />
===================================================================================<br />
DECLARE <br />
TYPE t_test1 IS TABLE OF test.id%TYPE;<br />
TYPE t_test2 IS VARRAY (10) OF test.id%TYPE;<br />
var_test1 t_test1;<br />
var_test2 t_test2;<br />
begin<br />
--var_test1(1) := ('test1.1'); --没有初始化不能赋值<br />
var_test1 := t_test1('test1.1','test1.2','test1.3');<br />
dbms_output.put_line('var_test1: '||var_test1(1)||','||var_test1(2)||','||var_test1(3));<br />
var_test2 := t_test2('test2.1','test2.2','test2.3');<br />
dbms_output.put_line('var_test2: '||var_test2(1)||','||var_test2(2)||','||var_test2(3));<br />
var_test1(2) := 'test1.2_update';<br />
dbms_output.put_line('==== 修改了var_test1(2) ====');<br />
dbms_output.put_line('var_test1: '||var_test1(1)||','||var_test1(2)||','||var_test1(3));<br />
dbms_output.put_line(var_test1.next(3));<br />
dbms_output.put_line('var_test2元素个数: '||var_test2.limit());<br />
end;<br />
嵌套表的元素可以是集合,注意赋值的时候是varray_element.record_column := 的形式.<br />
除了构造函数外,集合还有很多内建函数，按照面向对象编成的叫法称之为方法。<br />
方法==========描述====================================================================使用限制 <br />
COUNT=========返回集合中元素的个数 <br />
DELETE========删除集合中所有元素 <br />
DELETE(x)=====删除元素下标为x的元素===================================================对VARRAY非法 <br />
DELETE(x,y)===删除元素下标从X到Y的元素================================================对VARRAY非法 <br />
EXIST(x)======如果集合元素x已经初始化，则返回TRUE, 否则返回FALSE <br />
EXTEND========在集合末尾添加一个元素==================================================对Index_by非法 <br />
EXTEND(x)=====在集合末尾添加x个元素===================================================对Index_by非法 <br />
EXTEND(x,n)===在集合末尾添加元素n的x个副本============================================对Index_by非法 <br />
FIRST=========返回集合中的第一个元素的下标号，对于VARRAY集合始终返回1。 <br />
LAST==========返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT. <br />
LIMIT=========返回VARRY集合的最大的元素个数===========================================Index_by集合和嵌套表无用 <br />
NEXT(x)=======返回在第x个元素之后及紧挨着它的元素的值，如果x是最后一个元素，返回null. <br />
PRIOR(x)======返回在第x个元素之前紧挨着它的元素的值，如果x是第一个元素，则返回null。 <br />
TRIM==========从集合末端开始删除一个元素==============================================对于index_by不合法 <br />
TRIM(x)=======从集合末端开始删除x个元素===============================================对index_by不合法 <br />
********************************************************************************************<br />
记录可以定义为：<br />
TYPE 类型名 IS RECORDER （具休类型）<br />
也可用：变量名 表名%ROWTYPE<br />
例子：</p>
<p><font face="Arial">隐式定义记录中，我们不用描述记录的每一个域，在声明记录变量时使用%ROWTYPE命令定义与数据库表，视图，游标有相同结构的记录。<br />
有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性，比如游标FOR循环或触发器中的:old和:new记录</font></p>
<p><font face="Arial">declare<br />
t_record1 test%rowtype;<br />
cursor cur_test(v_id in varchar2) is<br />
select id,mc from test<br />
where id &lt;= v_id;<br />
t_record2 cur_test%rowtype;<br />
begin<br />
for row_test in cur_test('333') loop<br />
t_record1.id := row_test.id;<br />
t_record1.mc := row_test.mc;<br />
t_record2.id := row_test.id;<br />
t_record2.mc := row_test.id;<br />
dbms_output.put_line('t_record1:'||t_record1.id||'---'||t_record1.mc);<br />
dbms_output.put_line('t_record2:'||t_record2.id||'---'||t_record2.mc);<br />
dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc);<br />
dbms_output.put_line('================loop '||cur_test%rowcount||' times.');<br />
end loop;<br />
exception when others then<br />
dbms_output.put_line(sqlcode||sqlerrm);<br />
end;<br />
======================================================================================<br />
declare<br />
type t_record is record<br />
(<br />
id test.id%type,<br />
mc test.mc%type<br />
);<br />
var_record t_record;<br />
counter number default 0;<br />
begin<br />
for row_test in (select id,mc from test) loop<br />
counter := counter + 1;<br />
var_record.id := row_test.id;<br />
var_record.mc := row_test.mc;<br />
dbms_output.put_line('var_record:'||var_record.id||'---'||var_record.mc);<br />
dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc);<br />
dbms_output.put_line('================loop '||counter||' times.');<br />
end loop;<br />
exception when others then<br />
dbms_output.put_line(sqlcode||sqlerrm);<br />
end;<br />
三、综合实例BULK COLLECT的用法 </font></p>
<p><font face="Arial">*/</font></p>
<p><font face="Arial">set serverout on<br />
DECLARE<br />
TYPE t_record IS RECORD (<br />
id number(18,0),<br />
mc varchar2(50)<br />
);<br />
var_record t_record;<br />
type t_test is table of t_record;<br />
var_test t_test := t_test();<br />
cursor cur_test is select id,mc from test;<br />
begin<br />
open cur_test;<br />
fetch cur_test BULK COLLECT INTO var_test;<br />
for i in 1..var_test.count() loop<br />
dbms_output.put_line(var_test(i).id||'---'||var_test(i).mc);<br />
end loop;<br />
end;<br />
</font></p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/108674#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Aug 2007 21:42:18 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/108674</link>
        <guid>http://jihongbin12329.javaeye.com/blog/108674</guid>
      </item>
      <item>
        <title>oracle backup</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/108673" style="color:red;">http://jihongbin12329.javaeye.com/blog/108673</a>&nbsp;
          发表时间: 2007年08月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">关于备份：<br />
热备份：按照先备份数据文件再控制文件然后归档文件原则当然前提是要在归档方式下。<br />
备份数据文件是按表空间的次序来的一个表空间一个表空间的备份，要知道表空间下有什么表就要查出来成一个树形结构方便改动要备份一个表空间时要把表空间设为备份模式命令如下：ALTER TABLESPACE 表空间名 BEGIN BACKUP；完成后要用ALTER TABLESPACE 表空间名 END BACKUP 通过这样把所有的数据文件备份完。再备份控制文件 通过命令ALTER DATABASE CONTROL FILE TO 目录命 REUSE 这样可以得到备份的控制文件。最后我们要得到归档文件：首先我们要进行日志交换（当一个表空间上的备份开始和结束时， O r a c l e在重做日志中做标记。因为你没有备份重做<br />
日志，所以你需要归档当前的重做日志（该重做日志内含你刚刚备份的表空间的&ldquo;备份结束&rdquo;<br />
标记符）。当你备份归档日志目录时，你还要为每个表空间备份带有&ldquo;开始备份&rdquo;和&ldquo;结束备<br />
份&rdquo;的日志。日志交换用如下语句实现：ALTER SYSTEM SWITH LOGFILE），第二下进行日志归档（通常当一个日志交换发生时，O r a c l e的归档进程立刻把当前重做日志拷贝到归档日志目录。）只等待不用操做<br />
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/108673#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Aug 2007 21:40:25 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/108673</link>
        <guid>http://jihongbin12329.javaeye.com/blog/108673</guid>
      </item>
      <item>
        <title>oracle dbms_xml </title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105668" style="color:red;">http://jihongbin12329.javaeye.com/blog/105668</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">DECLARE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctx&nbsp;&nbsp;&nbsp; DBMS_XMLGEN.ctxHandle;&nbsp;&nbsp; -- Var's to convert SQL output to XML<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml&nbsp;&nbsp;&nbsp; clob;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emp_no NUMBER := 7369;</font></p>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlc&nbsp;&nbsp; varchar2(4000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Var's required to convert lob to varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; off&nbsp;&nbsp;&nbsp; integer := 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len&nbsp;&nbsp;&nbsp; integer := 4000;<br />
&nbsp;BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctx := DBMS_XMLGEN.newContext('SELECT * FROM emp WHERE empno = '||emp_no);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_XMLGen.setRowsetTag(Ctx, 'EMP_TABLE');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_XMLGen.setRowTag(Ctx, 'EMP_ROW');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --Dbms_Xmlgen.closeContext(Ctx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml := DBMS_XMLGEN.getXML(Ctx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_LOB.READ(xml, len, off, xmlc);&nbsp;&nbsp; -- Display first part on screen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.PUT_LINE(xmlc);<br />
&nbsp;END;<br />
&nbsp; <br />
&nbsp; select * FROM EMP<br />
&nbsp; <br />
&nbsp; <br />
&nbsp; create table XMLTable (doc_id number, xml_data XMLType);</font></p>
<p><font face="Arial">&nbsp;insert into XMLTable values (1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLType('&lt;FAQ-LIST&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;QUESTION&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;QUERY&gt;Question 1&lt;/QUERY&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RESPONSE&gt;Answer goes here.&lt;/RESPONSE&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/QUESTION&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/FAQ-LIST&gt;'));</font></p>
<p><font face="Arial">&nbsp;select extractValue(xml_data, '/FAQ-LIST/QUESTION/RESPONSE')&nbsp; -- XPath expression<br />
&nbsp;from&nbsp;&nbsp; XMLTable<br />
&nbsp;where&nbsp; existsNode(xml_data, '/FAQ-LIST/QUESTION[QUERY=&quot;Question 1&quot;]') = 1;<br />
&nbsp; <br />
&nbsp; <br />
&nbsp; CREATE type address_t AS OBJECT<br />
(<br />
&nbsp;&nbsp; street VARCHAR2(20),<br />
&nbsp;&nbsp; state VARCHAR2(20),<br />
&nbsp;&nbsp; city VARCHAR2(20),<br />
&nbsp;&nbsp; zip&nbsp;&nbsp; VARCHAR2(20)<br />
);<br />
CREATE TABLE employee <br />
(<br />
&nbsp; empno NUMBER,<br />
&nbsp; ename VARCHAR2(200),<br />
&nbsp; address address_t<br />
);<br />
insert into employee values (100,'John',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address_t('100, Main Street','Jacksonville','FL','32607'));<br />
insert into employee values (200,'Jack',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address_t('200 Front Road','San Francisco','CA','94011'));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
declare <br />
&nbsp; ctx dbms_xmlgen.ctxhandle;<br />
&nbsp; xmlc&nbsp;&nbsp; varchar2(4000); <br />
&nbsp; len&nbsp;&nbsp;&nbsp; integer := 4000; <br />
&nbsp; result clob;<br />
begin<br />
&nbsp; dbms_output.enable(500000);<br />
&nbsp;&nbsp; -- create a new context with the SQL query<br />
&nbsp;&nbsp; ctx := dbms_xmlgen.newContext('select * from employee');</font></p>
<p><font face="Arial">&nbsp;&nbsp; -- generate the CLOB as a result.<br />
&nbsp;&nbsp; result := dbms_xmlgen.getXML(ctx);</font></p>
<p><font face="Arial">&nbsp; -- print out the result of the CLOB<br />
&nbsp;&nbsp;&nbsp;&nbsp; -- Display first part on screen<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; printClobOut(result); -- see the lob manual for examples on printing..<br />
&nbsp; -- close the context<br />
&nbsp; dbms_xmlgen.closeContext(ctx);<br />
end</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105668#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 09:00:56 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105668</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105668</guid>
      </item>
      <item>
        <title>oracle dom xml</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105665" style="color:red;">http://jihongbin12329.javaeye.com/blog/105665</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">create or replace procedure sys.change_xml (dir varchar2)<br />
--节点对节点元素对元素<br />
--DOCUMENT为最大结点<br />
is<br />
doc xmldom.DOMDocument;<br />
main_node xmldom.DOMNode;<br />
root_ele xmldom.DOMElement;<br />
root_node xmldom.DOMNode;<br />
item_node xmldom.DOMNode;<br />
item_ele xmldom.DOMElement;<br />
item_text xmldom.DOMText;<br />
stu_node xmldom.DOMNode;<br />
cursor student_recordes(num number) is<br />
select rownum,sno,sname,age from student where rownum&lt;=num; <br />
begin<br />
doc:=xmldom.newDOMDocument;--创建新的文档<br />
main_node:=xmldom.makeNode(doc);--最大父结点为DOC<br />
root_ele:=xmldom.createElement(doc,'studentes');--新建一个元素属于DOC的<br />
root_node:=xmldom.appendChild(main_node,xmldom.makeNode(root_ele));--把元素变成结点并加在父结点之中<br />
for stu_record in student_recordes(3) loop<br />
/*<br />
&nbsp;item_ele:=xmldom.createElement(doc,'rownum');<br />
&nbsp;item_node:=xmldom.appendChild(root_node,xmldom.makeNode(item_ele));<br />
&nbsp;item_text:=xmldom.createTextNode(doc,stu_record.rownum);<br />
&nbsp;item_node:=xmldom.appendChild(item_node,xmldom.makeNode(item_text));<br />
&nbsp;*/<br />
&nbsp;item_ele:=xmldom.createElement(doc,'student');<br />
&nbsp;xmldom.setAttribute(item_ele,'number',stu_record.rownum);<br />
&nbsp;stu_node:=xmldom.appendChild(root_node,xmldom.makeNode(item_ele));<br />
&nbsp;--------------------------------------------------------------------<br />
&nbsp;item_ele:=xmldom.createElement(doc,'sno');<br />
&nbsp;item_node:=xmldom.appendChild(stu_node,xmldom.makeNode(item_ele));<br />
&nbsp;item_text:=xmldom.createTextNode(doc,stu_record.sno);<br />
&nbsp;item_node:=xmldom.appendChild(item_node,xmldom.makeNode(item_text));<br />
&nbsp;------------------------------------------------------------------------<br />
&nbsp;item_ele:=xmldom.createElement(doc,'sname');<br />
&nbsp;item_node:=xmldom.appendChild(stu_node,xmldom.makeNode(item_ele));<br />
&nbsp;item_text:=xmldom.createTextNode(doc,stu_record.sname);<br />
&nbsp;item_node:=xmldom.appendChild(item_node,xmldom.makeNode(item_text));<br />
&nbsp;----------------------------------------------------------------------<br />
&nbsp;item_ele:=xmldom.createElement(doc,'age');<br />
&nbsp;item_node:=xmldom.appendChild(stu_node,xmldom.makeNode(item_ele));<br />
&nbsp;item_text:=xmldom.createTextNode(doc,stu_record.age);<br />
&nbsp;item_node:=xmldom.appendChild(item_node,xmldom.makeNode(item_text));<br />
&nbsp;------------------------------------------------------------------<br />
end loop;<br />
xmldom.writeToFile(doc,dir);<br />
xmldom.freeDocument(doc);<br />
end change_xml;<br />
/</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105665#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 08:56:41 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105665</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105665</guid>
      </item>
      <item>
        <title>oracle 结构</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105664" style="color:red;">http://jihongbin12329.javaeye.com/blog/105664</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial"></font>&nbsp;</p>
<p><font face="Arial">Oracle 实例是指 SGA同后台进程<br />
SGA包括共享池，数据缓冲区，重做日志缓冲区，其他结构如锁管理，统计数据。还可以包括两个其他不一定<br />
必须的缓存池：大池同JAVA池</font></p>
<p><font face="Arial">SGA用来存放被数据库进程来共享的数据有：数据和控制信息。SGA可以动态的配置的不用关ORACLE的实例;</font></p>
<p><font face="Arial">共享池由库缓存同数据字典缓存组成的,里面存放的是最近执行的SQL语句同最近定义的数据.共享池环境有可变与不可变的结构构成,可变的由保持同一个大小,可变的由用户决定的但是他们的真正的大小由初始化时决定;<br />
库缓存用来存放最近被用的SQL同PLSQL语句以及共用的声明语句其大小基于共享池大小(这里所说的语句不同于我们平时说这里的含义是被解析过的形成的执行PATH同解析树)<br />
数据字典缓存用来存放最近使用的数据库中定义的数据包括:数据文件,表,INDEXES,COLUMNS,USERS,PRIVILEGES,DATA FILE NAMES,SEGMENT NAMES,EXTENT LOCATIONS,以及其他的数据对像.在解析语句时SERVER PROCESSES查看数据字典解释数据对像并验证通过,缓存数据字典信息有利于提高请求时间,其大小有共享大小决定</font></p>
<p><font face="Arial">数据缓冲区用来存放着从数据文件中COPY过来的数据块，有利于获取数据或更新数据可以缩短时间这里同共享池一样使用LRU算法.它同SGA一样可以动态配置</font></p>
<p><font face="Arial">重做日志缓冲区用来记录数据库的数据块变化的，它是一个可循环的CACHE，重做入口预先记着数据改变的动作</font></p>
<p><font face="Arial">大池平常都是被绑定在共享池上的主要用处：是提供给用户进程同服务进程CONNECTION一个区域这样利于IO操作不用次次都要进行SERVER PROCESSES 同USER PROCESSES的IO操作，还给BACKUP ，RESTORE OPERATIONS，SESSION MEMORY 来使用，它不用LRU算法。有了它共享池就不用放弃自己存放的数据由于它可以存放用户自己的SQL等</font></p>
<p><font face="Arial">PGA是一块区域用来放CONNECTION 的有点儿相同于大池但它只是让USER PROCESSES 同一个BACKGROUND PROCESSES或是一个SERVER PROCESSES来CONNECTS的不能被ORACLE SERVER共享的<br />
PGA包括：SORT AREA，SESSION INFORMATION ，CURSOR STATE，STACK SPACE；<br />
SORT AREA：被用来给少数几个进程来进行SQL的<br />
SESSION INFORMATION：含有用户的信息以及SESSION活动的一些数据；<br />
CURSOR STATE：用来放正在被SESSION进行SQL的一些时间点的情况<br />
STACK SPACE：SESSION 其他的信息</font></p>
<p><font face="Arial">BACKGROUND PROCESSES：DBWN，PMON，CKPT，LGWR，SMON，RECO</font></p>
<p><font face="Arial">DBWN：SERVER PROCESS把改变记录直到ROLLBACK并把数据块放到数据缓冲区中，当CKECKPOINT，DIRTY BUFFERS THRESCHOLE REACHED ，NO FREE BUFFER，TIMEOUT，RAC PING REQUEST，TABLESPACE OFFLINE，TABLESPACE READ ONLY，TABLE DROP OR TRUNCATE TABLESPACE BAGIN BACKUP时DBWN进行写动作</font></p>
<p><font face="Arial">LGWR：当一个事务COMMIT，REDO LOG BUFFER有1/3满了，在REDO LOG BUFFER CACHE 中有多于1M变化记录，在DBWN把UPDATE 数据写到数据文件从数据缓冲，EVERY 3 SECONDS写日志。<br />
LGWR可以提醒DBWN写数据。</font></p>
<p><font face="Arial">SMON：如果ORCLE的实例突然挂了，并且SGA中的数据没有被写入到数据文件中去丢失了，那么SMON可以在重新启动实例后自动实例恢复。<br />
SMON恢复实例分为三步：1，ROLLFORWARD数据：由于实例FAILURE那些数据没有写入数据文件，SMON把REDO LOG中记录下的变化来应用到相应的数据块中，劳动因为所有COMMIT的事务都会写到REDO LOG中去的，就可以恢复到那些事务。<br />
2，打开数据库给用户LOGON，那些没有被不是恢复事务加锁的数据可以使用。<br />
3，ROLLBACK没有提交的事务，可以通过SMON或其他的SERVER PROCESSES 因为SMON正在使用。<br />
SMON可以把数据文件的空闲区域的邻边或其空闲区中进行合并，它也可以把临时段作为一个单元返回它作为一个空闲区。</font></p>
<p><font face="Arial">PMON在进程失败后1，ROLLBACK事务2，释放锁3，释放其他资源4，发出失败通知</font></p>
<p><font face="Arial">CKPT当DBWN向数据文件中写修改过的SGA中的数据库缓冲区包括COMMINT OR UNCOMMIT的数据这种形为叫做CHECKPOINT OCCUR；检查点保证了内存中改变的数据块被有规则的有次叙写到数据文件中，因为DBWN使用的LRU算法并且只有写数据文件检查点才会发生。虽然检查点被写入数据文件中就不会被使用。数据改变直到检查点被写入数据文件，重做日志被记录。<br />
在一个检查点上，检查点号被写到数据文件中，检查点号，日志的SEQUENCE号，SYSTEM改变号写入控制文件中。</font></p>
<p><font face="Arial">LOGICAL STRUCTURE CONSTISTS OF TABLESPACES ，SEGMENTS ，EXTENTS，AND BLOCKS。<br />
ORCLE DATEBASES IS A GROUP OF TABLESPACES。A TABLESPACE CONSIST OF ONE OR MORE SEGMENTS。<br />
A SEGMENT IS MADE UP OF EXTENTS。A EXTENT IS MADE UP OF LOGICAL BLOCKS；</font></p>
<p><font face="Arial">DML 分两个部分：1，解析同QUERY解析一样。2，执行多了个过程要移动数据块。<br />
DML执行步骤：1，如果数据库缓存中没有相应的数据块同回滚块就从数据文件中读取。2，SERVER PROCESS在要改的行上加锁，回滚块中存有以前块的信息3，给块记新值。</font></p>
<p><font face="Arial"></font>&nbsp;</p>
<p><font face="Arial"></font>&nbsp;</p>
<p><font face="Arial"></font>&nbsp;</p>
<p><font face="Arial"></font>&nbsp;</p>
<p><font face="Arial"></font>&nbsp;</p>
<p><font face="Arial">提到软解析(soft parse)和硬解析(hard parse)，就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle，在执行和获取结果前，Oracle对此sql将进行几个步骤的处理过程：1、语法检查(syntax check)检查此sql的拼写是否语法。2、语义检查(semantic check)诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。3、对sql语句进行解析(parse)利用内部算法对sql进行解析，生成解析树(parse tree)及执行计划(execution plan)。4、执行sql，返回结果(execute and return)其中，软、硬解析就发生在第三个过程里。Oracle利用内部的hash算法来取得该sql的hash值，然后在library cache里查找是否存在该hash值；假设存在，则将此sql与cache中的进行比较；假设&ldquo;相同&rdquo;，就将利用已有的解析树与执行计划，而省略了优化器的相关工作。这也就是软解析的过程。诚然，如果上面的2个假设中任有一个不成立，那么优化器都将进行创建解析树、生成执行计划的动</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105664#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 08:55:08 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105664</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105664</guid>
      </item>
      <item>
        <title>oracle 行变列</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105663" style="color:red;">http://jihongbin12329.javaeye.com/blog/105663</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">select * from kind;</font></p>
<p><font face="Arial">create table student (sno int,sname varchar2(8))</font></p>
<p><font face="Arial">insert into student <br />
select 1,'tom' from dual union <br />
select 2,'jack' from dual union<br />
select 3,'jerry' from dual union <br />
select 4, 'wendy' from dual union <br />
select 5 , 'sorry' from dual</font></p>
<font face="Arial">
<p><br />
create table courses (c_no int , c_name varchar2(8))</p>
<p>insert into courses<br />
select 1,'语文' from dual union<br />
select 2,'数学' from dual union <br />
select 3,'英语' from dual</p>
<p><br />
create table score (sno int ,c_no int ,mark int)</p>
<p>insert into score<br />
select 1,1,60 from dual union <br />
select 1,2,80 from dual union <br />
select 1,3,100 from dual union <br />
select 2,1,90 from dual union <br />
select 2,2,80 from dual union <br />
select 2,3,65 from dual union <br />
select 3,1,50 from dual union <br />
select 3,2,86 from dual union <br />
select 3,3,90 from dual union <br />
select 4,1,45 from dual union <br />
select 4,2,86 from dual union <br />
select 4,3,100 from dual union <br />
select 5,1,20 from dual union <br />
select 5,2,89 from dual union <br />
select 5,3,90 from dual </p>
<p>select s.sno 学号,s.sname 姓名 /*,decode(c.c_name,'语文',score.mark) 语文 */from student s,courses c,score score group by s.sno,s.sname</p>
<p><br />
select sum(decode(c.c_name,'语文',sco.mark)) 语文,sum(decode(c.c_name,'数学',sco.mark)) 数学,sum(decode(c.c_name,'英语',sco.mark)) 英语 from courses c&nbsp; left outer join&nbsp; score&nbsp; sco on sco.c_no=c.c_no</p>
<p>&nbsp;</p>
<p>select a.no,语文,英语,数学,(语文+数学+英语)as 总成绩,(语文+数学+英语)/3 as 平均成绩,(3-fnum)*100/3 as 及格率 from <br />
(select no,sco as 语文 from test1017 where name='语文') a join (select no,sco as 英语 from test1017 where name='英语') b on a.no=b.no <br />
join (select no,sco as 数学 from test1017 where name='数学') c on b.no=c.no <br />
left join (select no,count(*)as fnum from test1017 where sco&lt;60 group by no) d on c.no=d.no</p>
<p>&nbsp;</p>
<p><br />
select decode(c_name,'语文',1),decode(c_name,'数学',1) from score,courses where&nbsp; score.c_no=courses.c_no group by score.c_no,courses.c_name</p>
<p>select * from score s,student stu,courses c where s.sno=stu.sno and s.c_no=c.c_no </p>
<p><br />
select distinct decode(c_name,'语文',1) 语文 ,decode(c_name,'数学',1) 数学 from score right outer join courses on courses.c_no=score.c_no--where&nbsp; score.c_no=courses.c_no </p>
<p>&nbsp;</p>
<p><br />
select* from courses;</p>
<p><br />
select * from <br />
(select sname s_name from student group by sname) left outer join <br />
(select sname,语文,数学,英语 from (<br />
select sno,decode(c_name,'语文',mark) 语文, decode(c_name,'数学',mark) 数学,decode(c_name,'英语',mark) 英语 from courses right outer join score on courses.c_no=score.c_no<br />
) right outer join student on student.sno=sno) on s_name=sname&nbsp; --group by student.sname</p>
<p><br />
--通过观察我们看的出其中有两个重点一个是行变列一个是连接分组然后并行(用组合函数)注:并行我们可以用组合函数SUM()分列可用分析函数DECODE得新列<br />
--根据题意可知要行变列所以使用分析函数DECODE通过相等来设列而列值通过两表连接使SCORE中的MARK做值<br />
--通过第一步思路要进行两表连接那么用什么方式呢因为各人各科成绩是不一样的而又列中的值是成绩那就用对成绩表做全查的右外连接<br />
--经过第一步我们可以得到15条记录而其中SNO重复的可知我们要分组正好可以得到学生名字因为SNO同SNAME一一对应的但如果在<br />
--select sno s_no,decode(c_name,'语文',mark) 语文, decode(c_name,'数学',mark) 数学,decode(c_name,'英语',mark) 英语 from courses right outer join score on courses.c_no=score.c_no语句<br />
--分组的话那就要在所有的列上加组函数如:SUM()的啊那就成了一行了与我们的想法又不同了如何解决呢那我们就不能在上面语句上分组了<br />
--我们知道分组对FROM句中是不起作用的那可不可以先分了组再把对应数据的数据查出来呢正好可以通过连表把SNAME也查出来(注意SELECT FROM WHERE GROUP BY ODERY BY 执行顺序是先GROUP BY 再SELECT 然后WHERE 最后 ORDER BY 的)<br />
--通过表连接在外层上GROUP BY 后再组合函数</p>
<p><br />
select sname 姓名,语文,数学,英语, (语文+数学+英语) 总分 from (<br />
select sname ,sum(语文) 语文,sum(数学) 数学,sum(英语) 英语 from (<br />
select sno s_no,decode(c_name,'语文',mark) 语文, decode(c_name,'数学',mark) 数学,decode(c_name,'英语',mark) 英语 from courses right outer join score on courses.c_no=score.c_no<br />
),student where s_no=student.sno group by student.sname<br />
)<br />
&nbsp;</p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105663#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 08:51:54 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105663</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105663</guid>
      </item>
      <item>
        <title>oracle xml parser</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105662" style="color:red;">http://jihongbin12329.javaeye.com/blog/105662</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">create or replace procedure parser_xml (dir varchar2,xml_name varchar2) is <br />
new_parser xmlparser.Parser;<br />
get_doc xmldom.DOMDocument;</font></p>
<p><font face="Arial">nodelist xmldom.DOMNodeList;<br />
nle number;<br />
e xmldom.DOMElement;<br />
n xmldom.DOMNode;<br />
begin<br />
new_parser:=xmlparser.newParser;--得到XML解析器<br />
xmlparser.setValidationMode(new_parser,false);--是否让解析器有验证功能（是否是一种DDL标准）<br />
xmlparser.setBaseDir(new_parser,dir);--在XML解析器中设定被解析文件的路径<br />
xmlparser.parse(new_parser,dir||xml_name);--解析文件根据绝对路径<br />
get_doc:=xmlparser.getDocument(new_parser);--在XML解析器中得到解析后的文档<br />
xmlparser.freeParser(new_parser);--释放解析器<br />
nodelist:=xmldom.getElementsByTagName(get_doc,'*');--得到所有的元素<br />
nle:=xmldom.getLength(nodelist);--得到元素的个数<br />
for i in 0..nle-1 loop<br />
&nbsp;n:=xmldom.item(nodelist,i);--给元素打标(即得到每一个节点)<br />
&nbsp;--e:=xmldom.makeElement(n);--把节点变成一个元素来处理(可以对ATTRIBUTER来操作)<br />
&nbsp;dbms_output.put_line(xmldom.getNodeName(n)||':'||xmldom.getNodeValue(xmldom.getFirstChild(n)));<br />
end loop;<br />
end parser_xml;</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105662#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 08:50:46 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105662</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105662</guid>
      </item>
      <item>
        <title>oracle structer</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105661" style="color:red;">http://jihongbin12329.javaeye.com/blog/105661</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">数据文件，重做日志文件，控制文件。注：其中数据文件对应表空间，一个表空间至少有一个数据文件，数据库有多处表空间默认的是SYSTEM表空间。重做日志文件可以被备份做为归档日志文件归档文件又分为两种模式：非归档和归档。控制文件是数据库的核心,它包括了数据库的名称和编号，数据库的结构信息（数据文件和重做日志文件的地址）<br />
数据库启动时查看它的SCN（system change number ）看它是否同数据文件头上的SCN对应如果对应就启动数据库不对应就回滚数据。其它的物理文件有：初始化文件，同口令文件其中初始化文件中的信息是同实例有关而口令文件是特权身份信息的如SYS用户同密码具体来说口令中的信息可以在数据库打开之前使用进入数据库而其它的口令同用户只有数据库打开之后才可用</font></p>
<p><font face="Arial">逻辑结构:<br />
表空间,段,区,块.注:块是最小IO操作单位大于2k-32k之间,块分为标准块同非标准块标一个标准块同4个非标准块可以组成一个数据库在SYSTEM同TMPROAY表空间中一定要用标准块在数据库高速缓存中可以使用非标准块但非标准块参数不能同标准块参数一致,表空间创建时分配.段是相临区的组成可分为:表段,索引段,回滚段,临时段,引导段,簇表段.其中回滚段用于事务放原数据总的来说一个回滚段可以放几个事务而多个事务使用区不同但一个事务只能放于一个回滚段中,并且一个回滚段中只能有一个区是活的如果一个事务要使用几个区而当前的下面的区有事务时就会扩展一个区,回滚段至少要两个,但出现并发时可以从回滚段中取数据保持读写一致性.组成段的所有区是在段表空间上的数据文件中,索引段包含的是索引的字段以及对应行的值并不是对应行的ROWID,临时段是临时表主要用于排序工作当一个表段要进行排序时就可以在临时段中创建一个段用来存放一些排序信息,引导段是数据库启动时初始化时要用到的一个表段.区是段在表空间上连续使用的空间在创建段时进行区的分配也就是说对段的操作就是对区的操作.</font></p>
<p><font face="Arial">回滚段:<br />
回滚段有两种类型:NOSYSTEM,SYSTEM分别作用于两个表空间一个是SYSTEM一个是非SYSTEM表空间.NOSYSTEM中可以用两种管理模式:自动各手动.手动的要一个永久的回滚表空间可以设为私有或公有:私有只能被一个实例使用公有可能给多个</font></p>
<p><font face="Arial"></font>&nbsp;</p>
<font face="Arial">
<p><br />
PMON&nbsp;&nbsp; 进程监视进程<br />
&nbsp;监视用户进程（客户端连接服务器的进程）到服务进程（在服务器端响应用户进程的进程）的连接。<br />
&nbsp;创建会话。<br />
&nbsp;监视会话是否异常中断，如果中断：PMON会回滚事务、解锁、释放资源。</p>
<p>SMON&nbsp;&nbsp; 系统监视进程<br />
&nbsp;任务：会检测SCN号，相等：启动<br />
&nbsp;&nbsp;&nbsp;&nbsp; 不相等，实例恢复（1）前滚将日志应用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）打开数据库<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （3）恢复数据库<br />
&nbsp;&nbsp;&nbsp;恢复的起点是走后一次CHECKPOINT的位置。<br />
&nbsp;每3秒合并空闲空间<br />
&nbsp;释放临时段<br />
&nbsp;&nbsp;临时段：暂时存放在排序时中没有空间的字段值。<br />
&nbsp;&nbsp;&nbsp;在排序中产生的。<br />
&nbsp;&nbsp;&nbsp;数据量大的时候，排序是分成若干块执行的，当字段值排好序之后就放到临时段中。</p>
<p><br />
DBWR&nbsp;&nbsp; 数据库写进程<br />
/DBW0/DBWn&nbsp;&nbsp; n：0-9<br />
&nbsp;将脏数据写回到数据文件中。</p>
<p>当发生以下情况执行：&nbsp;<br />
&nbsp;当发生检查点事件的时候，checkpoint<br />
&nbsp;脏块达到极限值；<br />
&nbsp;没有空间的缓冲空间<br />
&nbsp;超时<br />
&nbsp;RAC PING 请求<br />
&nbsp;表空间离线<br />
&nbsp;表空间只读<br />
&nbsp;在表执行DROP或TRUNCATE<br />
&nbsp;表空间上执行BEGIN BACKUP</p>
<p>&nbsp;&nbsp;&nbsp;<br />
LGWR&nbsp;&nbsp;&nbsp; 重作日志写进程<br />
&nbsp;把重做日志缓冲区的内容写出到日志文件（顺序写出，按时间）。<br />
执行条件：<br />
&nbsp;事务提交<br />
&nbsp;先写日志后写数据的好处：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最快地保证数据不丢失<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 快&nbsp;&nbsp;<br />
&nbsp;重作日志缓冲区三分之一满<br />
&nbsp;每3秒<br />
&nbsp;有一条超过1MB的重作日志记录<br />
&nbsp;DBWn进程操作前&nbsp; &nbsp;&nbsp;</p>
<p>CKPT&nbsp;&nbsp; 检查点进程<br />
&nbsp;先执行DBWR，写数据，再进行同步。<br />
&nbsp;提供数据库同步性；<br />
&nbsp;在执行检查点时通知DBWn 执行写操作。&nbsp;</p>
<p><br />
ARCn&nbsp;&nbsp; 归档进程（可选）<br />
保存数据库的所有修改记录<br />
当数据库在ARCHIVELOG模式的时候自动归档当前</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Arial">关于块区段的进一步论述：<br />
把块或段认为是行或表是不正确的为了方便了解一开始是可以如些理解的。<br />
块只不过是最小的IO块而己同逻辑上的列或行是不一样的块可以有几行数据也可以有不到一行的数据。<br />
同理段也一样可以是几个表的集合也可以是一个表也可是不到一个表，它的形成只不过是相邻区集合的意义。正是如些才出现了行链接同行转移的术语：行链接是由于块中不能放入一行记录引起的再在块的空间区中定义一个指针来链接它们而行转移是说因为改动更新了字段出现原来的块不够入新的数据而使新的一部分的新数据出现在相邻的块中的，两者区别在于行链接是一开始由于块定义小了插入的新值不够放形成的而行转移是因为更新数据时数据大了只能放入到相邻的块只而形成的块中没有指针指到多余数据的地方。对于行链接的处理唯一的是可以通过扩大块的大小对于行转移的处理使用CHAINED_ROWSG的表先把数据放入一个临时表中在把原数据删除再导入新数据。可以修改块中的PCTFREE的值</font></p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105661#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 08:49:54 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105661</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105661</guid>
      </item>
      <item>
        <title>oracle explain plan</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/105660" style="color:red;">http://jihongbin12329.javaeye.com/blog/105660</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">关于EXPLAIN PLAN<br />
ID 中是以大到小的次序来执行<br />
PARENT ID 是为ID提供结果集的如PARNET ID 的3就是为ID 是3的OPERATION提供结果集的<br />
operation是行为而OPTIONS是指OPERATION的具体的行为</font></p>
<p><font face="Arial">个人认为：sql语句次序是读时按从右到左从后到前执行时控从左到右从前到后的来</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/105660#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 08:48:58 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/105660</link>
        <guid>http://jihongbin12329.javaeye.com/blog/105660</guid>
      </item>
      <item>
        <title>oracle performance tuning</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/95607" style="color:red;">http://jihongbin12329.javaeye.com/blog/95607</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">tuning goals:<br />
减少或消除（联接）等待；<br />
尽量少的访问块；<br />
在内存里缓存数据块；<br />
回应时间；<br />
吞吐量大；<br />
负载小；<br />
恢复次数少；<br />
新系统要优化的东东（也是考滤优化的先后次须）：<br />
1，设计；2，应用3，内存4，IO 5，资源争夺6，OS；<br />
影响安全的因素：1，多样多种的控制文件2，一组里有多样多种的重写日志3，频繁的检查点进行<br />
4，数据文件的背分5，存档6，数据块检查数目数学家，7，当前的用户或事务数<br />
警告日志的日常维护：<br />
警告日志是由消息同错误组成的按时间排的日志。<br />
一般的话发生如下情况可查看原因：1，发生内部错误（如ORA&mdash;600）或数据块错误（ORA&mdash;1578 OR ORA&mdash;1498）2，监视数据库操作（一般指影响数据库的结构或参数如：CREATE DATABASE，STARTUP，SHUTDOWN，ARCHIVE LOG，RECOVER）3，查看非默认的初始参数（指的是在实例起动时的产生的参数）；<br />
移动或整理文件在检查后（警告日志位置在初始时参数（BACKGROUND-DUMP-DEST）中设定）<br />
在优化中可用到的警告日志中的信息有：1检查点开始同结束时间（次数）（注：只有CHECKPIONTS-TO-ALERT=TRUE才会在警告日志中写入）2没完成的检查点3归档的时间4恢复失败的时间同完成的次数（时间）；</font></p>
<p><font face="Arial">追踪文件含有由ORACLE SERVER 写入的一些被一些后台进程发现错误信息，可以利用这些信息来诊断并TUNE但这些信息中并不一定有TUNE的信息<br />
SERVER PROCESS 追踪是在SESSION OR INSTANCE LEVEL上设置可用还是不可用的。<br />
用户的追踪文件含有所要追踪的SQL语句的统计数据在SESSION中</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/95607#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 21:01:09 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/95607</link>
        <guid>http://jihongbin12329.javaeye.com/blog/95607</guid>
      </item>
      <item>
        <title>oracle</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/93448" style="color:red;">http://jihongbin12329.javaeye.com/blog/93448</a>&nbsp;
          发表时间: 2007年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<p><br />
Oracle 实例是指 SGA同后台进程<br />
SGA包括共享池，数据缓冲区，重做日志缓冲区，其他结构如锁管理，统计数据。还可以包括两个其他不一定<br />
必须的缓存池：大池同JAVA池</p>
<p>SGA用来存放被数据库进程来共享的数据有：数据和控制信息。SGA可以动态的配置的不用关ORACLE的实例;</p>
<p>共享池由库缓存同数据字典缓存组成的,里面存放的是最近执行的SQL语句同最近定义的数据.共享池环境有可变与不可变的结构构成,可变的由保持同一个大小,可变的由用户决定的但是他们的真正的大小由初始化时决定;<br />
库缓存用来存放最近被用的SQL同PLSQL语句以及共用的声明语句其大小基于共享池大小(这里所说的语句不同于我们平时说这里的含义是被解析过的形成的执行PATH同解析树)<br />
数据字典缓存用来存放最近使用的数据库中定义的数据包括:数据文件,表,INDEXES,COLUMNS,USERS,PRIVILEGES,DATA FILE NAMES,SEGMENT NAMES,EXTENT LOCATIONS,以及其他的数据对像.在解析语句时SERVER PROCESSES查看数据字典解释数据对像并验证通过,缓存数据字典信息有利于提高请求时间,其大小有共享大小决定</p>
<p>数据缓冲区用来存放着从数据文件中COPY过来的数据块，有利于获取数据或更新数据可以缩短时间这里同共享池一样使用LRU算法.它同SGA一样可以动态配置</p>
<p>重做日志缓冲区用来记录数据库的数据块变化的，它是一个可循环的CACHE，重做入口预先记着数据改变的动作</p>
<p>大池平常都是被绑定在共享池上的主要用处：是提供给用户进程同服务进程CONNECTION一个区域这样利于IO操作不用次次都要进行SERVER PROCESSES 同USER PROCESSES的IO操作，还给BACKUP ，RESTORE OPERATIONS，SESSION MEMORY 来使用，它不用LRU算法。有了它共享池就不用放弃自己存放的数据由于它可以存放用户自己的SQL等</p>
<p>PGA是一块区域用来放CONNECTION 的有点儿相同于大池但它只是让USER PROCESSES 同一个BACKGROUND PROCESSES或是一个SERVER PROCESSES来CONNECTS的不能被ORACLE SERVER共享的<br />
PGA包括：SORT AREA，SESSION INFORMATION ，CURSOR STATE，STACK SPACE；<br />
SORT AREA：被用来给少数几个进程来进行SQL的<br />
SESSION INFORMATION：含有用户的信息以及SESSION活动的一些数据；<br />
CURSOR STATE：用来放正在被SESSION进行SQL的一些时间点的情况<br />
STACK SPACE：SESSION 其他的信息</p>
<p>BACKGROUND PROCESSES：DBWN，PMON，CKPT，LGWR，SMON，RECO</p>
<p>DBWN：SERVER PROCESS把改变记录直到ROLLBACK并把数据块放到数据缓冲区中，当CKECKPOINT，DIRTY BUFFERS THRESCHOLE REACHED ，NO FREE BUFFER，TIMEOUT，RAC PING REQUEST，TABLESPACE OFFLINE，TABLESPACE READ ONLY，TABLE DROP OR TRUNCATE TABLESPACE BAGIN BACKUP时DBWN进行写动作</p>
<p>LGWR：当一个事务COMMIT，REDO LOG BUFFER有1/3满了，在REDO LOG BUFFER CACHE 中有多于1M变化记录，在DBWN把UPDATE 数据写到数据文件从数据缓冲，EVERY 3 SECONDS写日志。<br />
LGWR可以提醒DBWN写数据。</p>
<p>SMON：如果ORCLE的实例突然挂了，并且SGA中的数据没有被写入到数据文件中去丢失了，那么SMON可以在重新启动实例后自动实例恢复。<br />
SMON恢复实例分为三步：1，ROLLFORWARD数据：由于实例FAILURE那些数据没有写入数据文件，SMON把REDO LOG中记录下的变化来应用到相应的数据块中，劳动因为所有COMMIT的事务都会写到REDO LOG中去的，就可以恢复到那些事务。<br />
2，打开数据库给用户LOGON，那些没有被不是恢复事务加锁的数据可以使用。<br />
3，ROLLBACK没有提交的事务，可以通过SMON或其他的SERVER PROCESSES 因为SMON正在使用。<br />
SMON可以把数据文件的空闲区域的邻边或其空闲区中进行合并，它也可以把临时段作为一个单元返回它作为一个空闲区。</p>
<p>PMON在进程失败后1，ROLLBACK事务2，释放锁3，释放其他资源4，发出失败通知</p>
<p>CKPT当DBWN向数据文件中写修改过的SGA中的数据库缓冲区包括COMMINT OR UNCOMMIT的数据这种形为叫做CHECKPOINT OCCUR；检查点保证了内存中改变的数据块被有规则的有次叙写到数据文件中，因为DBWN使用的LRU算法并且只有写数据文件检查点才会发生。虽然检查点被写入数据文件中就不会被使用。数据改变直到检查点被写入数据文件，重做日志被记录。<br />
在一个检查点上，检查点号被写到数据文件中，检查点号，日志的SEQUENCE号，SYSTEM改变号写入控制文件中。</p>
<p>LOGICAL STRUCTURE CONSTISTS OF TABLESPACES ，SEGMENTS ，EXTENTS，AND BLOCKS。<br />
ORCLE DATEBASES IS A GROUP OF TABLESPACES。A TABLESPACE CONSIST OF ONE OR MORE SEGMENTS。<br />
A SEGMENT IS MADE UP OF EXTENTS。A EXTENT IS MADE UP OF LOGICAL BLOCKS；</p>
<p>DML 分两个部分：1，解析同QUERY解析一样。2，执行多了个过程要移动数据块。<br />
DML执行步骤：1，如果数据库缓存中没有相应的数据块同回滚块就从数据文件中读取。2，SERVER PROCESS在要改的行上加锁，回滚块中存有以前块的信息3，给块记新值。</p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/93448#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 23 Jun 2007 17:17:54 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/93448</link>
        <guid>http://jihongbin12329.javaeye.com/blog/93448</guid>
      </item>
      <item>
        <title>关于HIBERNATE 的CreateSQLQuery的用法</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/88678" style="color:red;">http://jihongbin12329.javaeye.com/blog/88678</a>&nbsp;
          发表时间: 2007年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>终于搞点了ＣＲＥＡＴＥＳＱＬＱＵＥＲＹ了</p>
<p>ＣＲＥＡＴＥＳＱＬＱＵＥＲＹ最好用原生的ＳＱＬ</p>
<p>如</p>
<p><font face="Arial">Query qu =session.createSQLQuery(&quot;select user_account.NID, user_archive.* from user_account&nbsp; left outer join user_archive on&nbsp; user_account.NID = user_archive.NUSER_ID where&nbsp;&nbsp; user_account.NID = &quot;+userId);</font></p>
<p><font style="BACKGROUND-COLOR: #ff6600">以上都是表名同列名　　没有对应的类同属性</font></p>
<p>如果一定要用对应的类同属性名是记的要给别名还有就是用了别名一定要给这个别名下定义如</p>
<p><font face="Arial">Query qu =session.createSQLQuery(&quot;select&nbsp;&nbsp; NID, {b.*} from user_account&nbsp; , user_archive {b}&nbsp; where NID = {b}.NUSER_ID and NID = &quot;+userId).addEntity(&quot;b&quot;, UserArchive.class).addScalar(&quot;NID&quot;,new LongType());</font></p>
<p>以上的除了表名外还有的是属性名记的用别名引用属性名是一定要用addEntity(&quot;b&quot;, UserArchive.class)不然会出错：好像１７２２０２错吧说别名不识别</p>
<p><font style="BACKGROUND-COLOR: #ff6600">ＣＲＥＡＴＥＳＱＬＱＵＥＲＹ中可以直接进行多表操作不用在配置中配置ＭＡＮＹＴＯＯＮＥ　　ＯＲ　ＯＮＥＴＯＯＮＥ　　ＯＲ　　　ＭＡＮＹＴＯＭＡＮＹ　如：</font></p>
<p><font face="Arial">Query qu =session.createSQLQuery(&quot;select NID , {b.*} from user_account left outer join user_archive {b} on&nbsp; NID = {b}.NUSER_ID where NID = &quot;+userId).addEntity(&quot;b&quot;, UserArchive.class).addScalar(&quot;NID&quot;,new LongType());</font></p>
<p><font face="Arial">Query qu =session.createSQLQuery(&quot;select user_account.NID, user_archive.* from user_account&nbsp; left outer join user_archive on&nbsp; user_account.NID = user_archive.NUSER_ID where&nbsp;&nbsp; user_account.NID = &quot;+userId);</font></p>
<p>对于投影查询使用别名的情况要注意了如果你的addEntity（）方法加了而只ＳＥＬＥＣＴ　一些属性时会出以下错误码：</p>
<font face="Arial">
<p><br />
Hibernate: select&nbsp;&nbsp; NID NID0_1_, b.NUSER_ID as NUSER1_1_0_, b.SNAME as SNAME1_0_, b.SNAME_EN as SNAME3_1_0_, b.SSEX as SSEX1_0_, b.DBIRTH as DBIRTH1_0_, b.SMARRIAGE as SMARRIAGE1_0_, b.NSTATURE as NSTATURE1_0_, b.NAVOIRDUPOIS as NAVOIRDU8_1_0_, b.SCONSTELLATION as SCONSTEL9_1_0_, b.SBLOOD as SBLOOD1_0_, b.SGENUS as SGENUS1_0_, b.SMAXIM as SMAXIM1_0_, b.SCHARACTER as SCHARACTER1_0_, b.SINTEREST as SINTEREST1_0_, b.SCOUNTRY_CODE as SCOUNTRY15_1_0_, b.SAUTOCRITICAL as SAUTOCR16_1_0_, b.NHOMETOWN_CITY_ID as NHOMETOWN17_1_0_, b.NCITY_ID as NCITY18_1_0_, b.SKNOWLEDGE as SKNOWLEDGE1_0_, b.SACADEMY as SACADEMY1_0_, b.SOCCUPATION as SOCCUPA21_1_0_, b.SMONTH_SALARY as SMONTH22_1_0_, b.SEMAIL as SEMAIL1_0_, b.SQQ as SQQ1_0_, b.SMSN as SMSN1_0_, b.SISOPEN_NET_CONTACT as SISOPEN26_1_0_, b.SISOPEN_BASIC_CONTACT as SISOPEN27_1_0_, b.STEL as STEL1_0_, b.SMOBILE as SMOBILE1_0_, b.SADDRESS as SADDRESS1_0_, b.SZIPCODE as SZIPCODE1_0_, b.SPHOTO_URL as SPHOTO32_1_0_ from user_account a&nbsp; , user_archive b&nbsp; where NID = b.NUSER_ID and NID = 15000<br />
- could not read column value from result set: SNICK2_0_1_; 列名无效</p>
<p><font style="BACKGROUND-COLOR: #ff6600">ＡＤＤＥＮＴＩＴＹ方法照我看是别名的引用同返回对像的说明也就是说用了别名一定要有ＡＤＤＥＮＴＩＴＹ但有了ＡＤＤＥＮＴＩＴＹ一定会返回整个对像你只ＳＥＬＥＣＴ对像中的几个属性就会出错了</font></p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/88678#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 09 Jun 2007 18:40:13 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/88678</link>
        <guid>http://jihongbin12329.javaeye.com/blog/88678</guid>
      </item>
      <item>
        <title>关于ＨＩＢＥＲＮＡＴＥ中的动态ＩＮＳＥＲＴ同动态ＵＰＤＡＴＥ</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/88203" style="color:red;">http://jihongbin12329.javaeye.com/blog/88203</a>&nbsp;
          发表时间: 2007年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>ＨＩＢＥＲＮＡＥ　的配制中有<font face="Arial">dynamic-update=&quot;true&quot;同<font face="Arial">dynamic-ＩＮＳＥＲＴ=&quot;true</font></font></p>
<p>如果配制了就不能使用ＳＱＬ－ＩＮＳＥＲＴ　的预设的ＩＮＳＥＲＴ语句了</p>
<p>所有预设的语句只能用ＳＡＶＥ　或ＤＥＬＥＴＥ　ＬＯＤＥ　ＵＰＤＡＴＥ　</p>
<p>别的都　</p>
<p>不能用</p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/88203#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 08 Jun 2007 18:28:21 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/88203</link>
        <guid>http://jihongbin12329.javaeye.com/blog/88203</guid>
      </item>
      <item>
        <title>关于SQL ERROR 17702 </title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/88202" style="color:red;">http://jihongbin12329.javaeye.com/blog/88202</a>&nbsp;
          发表时间: 2007年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天用ＨＩＢＥＲＮＡＴＥ搞ＯＲＡＣＬＥ时出现以上错误</p>
<p>说什么</p>
<p>　ＳＴＡＴＥＭＥＮＴ　：ＮＵＬＬ</p>
<p>找不到列类型</p>
<p><font face="Arial">- <font style="BACKGROUND-COLOR: #ff6600">RDBMS: Oracle, version: Oracle9i Enterprise Edition Release 9.０.0.6.0 - Production<br />
</font>With the Partitioning, OLAP and Oracle Data Mining options<br />
<font style="BACKGROUND-COLOR: #ff6600">JServer Release 9.０.0.6.0 - Production<br />
</font>- JDBC driver: Oracle JDBC driver, version: 9.2.0.3.0<br />
- Using dialect: org.hibernate.dialect.Oracle9Dialect<br />
- Using default transaction strategy (direct JDBC trans</font></p>
<p>细看怎么版本变了</p>
<p>可配值没变啊怎么移了下就不一样了呢</p>
<p>把ＬＩＢ下的ＣＬＡＳＳＥＳ１２去了</p>
<p><font face="Arial">- <font style="BACKGROUND-COLOR: #ff6600">RDBMS: Oracle, version: Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production</font><br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.6.0 - Production<br />
-<font style="BACKGROUND-COLOR: #ff6600"> JDBC driver: Oracle JDBC driver, version: 9.2.0.3.0<br />
</font>- Using dialect: org.hibernate.dialect.Oracle9Dialect<br />
- Using default transaction strategy (direct JDBC transactions)</font></p>
<p>错误没了！！！！！！！</p>
<p>是不是ＣＬＡＳＳＥＳ１２　同ＯＪＤＢＣ１４在一块是系统会选用ＣＬＡＳＳＥＳ</p>
<p>ＣＬＡＳＳＥＳ１２的ＪＤＢＣ　的ＶＥＲＳＩＯＮ是９．０的不支持有些数据类型</p>
<p>ＯＪＤＢＣ１４不一样ＶＥＲＳＩＯＮ高是９．２的支持多种类型</p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/88202#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 08 Jun 2007 18:20:47 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/88202</link>
        <guid>http://jihongbin12329.javaeye.com/blog/88202</guid>
      </item>
      <item>
        <title>关于HIBERNATE的缓存</title>
        <author>jihongbin12329@sohu.com</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jihongbin12329.javaeye.com">jihongbin12329@sohu.com</a>&nbsp;
          链接：<a href="http://jihongbin12329.javaeye.com/blog/86697" style="color:red;">http://jihongbin12329.javaeye.com/blog/86697</a>&nbsp;
          发表时间: 2007年06月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>HIBERNATE CACHE 分两种: 一级&nbsp; 二级 SESSION 为一级&nbsp; SESSIONFACTORY 为二级　同时ＳＥＳＳＩＯＮＦＡＣＴＯＲＹ　分为内置同外置　内置就是我们常在加载ＸＸＸ．ＣＦＧ．ＸＭＬ时用到里面放有预生成的ＳＱＬ同一些ＸＭＬ文件中的信息</p>
<p>外置就是我们常说的ＳＥＣＯＮＤ　ＬＥＶＥＬ　ＣＡＣＨＥ　当然ＱＵＥＲＹ　ＣＡＣＨＥ也是二级的都要配置的</p>
<p>共在三处配置：ＨＩＢＥＲＮＡＴＥ．ＸＭＬ　　ＸＸＸ．ＣＦＧ．ＸＭＬ　　ＥＮＣＡＣＨＥ．ＸＭＬ</p>
<p>ＨＩＢＥＲＮＡＴＥ．ＸＭＬ：<font face="Arial"><font face="Arial">&lt;property name=&quot;cache.provider_class&quot;&gt;<br />
&nbsp;&nbsp;org.hibernate.cache.HashtableCacheProvider<br />
&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;property name=&quot;hibernate.cache.use_query_cache&quot;&gt;true&lt;/property&gt;</font></font></p>
<p>ＸＸＸ．ＣＦＧ．ＸＭＬ：<font face="Arial">&lt;cache usage=&quot;read-only&quot;/&gt;</font></p>
<p>ＥＮＣＡＣＨＥ．ＸＭＬ：</p>
<p><font face="Arial">&lt;?xml version=&quot;1.0&quot;?&gt;</font></p>
<p><font face="Arial">&lt;!-- <br />
&nbsp;&nbsp;&nbsp; Mapping file autogenerated by MyEclipse - Hibernate Tools<br />
--&gt;<br />
&lt;ehcache&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;diskStore path=&quot;java.io.tmpdir&quot;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;defaultCache maxElementsInMemory=&quot;10000&quot;&nbsp; eternal=&quot;false&quot;&nbsp; timeToIdleSeconds=&quot;120&quot;&nbsp; timeToLiveSeconds=&quot;120&quot;&nbsp; overflowToDisk=&quot;true&quot; /&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache name=&quot;com.snailweb.blog.pojo.BlogNoteInfo&quot; maxElementsInMemory=&quot;10&quot;&nbsp;&nbsp; eternal=&quot;false&quot;&nbsp;&nbsp; timeToIdleSeconds=&quot;100&quot; timeToLiveSeconds=&quot;100&quot;&nbsp; overflowToDisk=&quot;false&quot;&nbsp; /&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;/ehcache&gt; <br />
所有的缓存都是对像的所有值不只是ＯＩＤ</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://jihongbin12329.javaeye.com/blog/86697#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Jun 2007 21:09:30 +0800</pubDate>
        <link>http://jihongbin12329.javaeye.com/blog/86697</link>
        <guid>http://jihongbin12329.javaeye.com/blog/86697</guid>
      </item>
  </channel>
</rss>