<?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>Oracle Tech Zone</title>
	<atom:link href="http://www.orafan.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.orafan.net</link>
	<description>Oracle,database,Grid Control,HA,data guard,streams,performance tunning</description>
	<lastBuildDate>Sun, 19 Jun 2011 14:11:46 +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>深入SecureFile—新一代LOB揭秘</title>
		<link>http://www.orafan.net/blog/352.html</link>
		<comments>http://www.orafan.net/blog/352.html#comments</comments>
		<pubDate>Tue, 18 Jan 2011 14:32:44 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[New Feature]]></category>

		<guid isPermaLink="false">http://www.orafan.net/?p=352</guid>
		<description><![CDATA[全文PDF版本可以在这里下载，格式排版要容易看一些SecureFile_Internal.pdf。 1.       SecureFile LOB的特点 最近张乐亦（Kamus）在gtalk上问了俺一个问题，为啥SecureFile类型的LOB要比以前的LOB性能要好很多，是不是存储结构上发生了什么变化。这两天抽空看了些资料，现在整理出来算是回答他的问题了。 关于11g以前的LOB类型的实现方式可以参考前一段写的一篇博文《CLOB的物理存储结构及语言编码详解》。从11g开始，Oracle提供了一种新的LOB存储方式叫SecureFile，以前旧有的LOB存储方式就叫BasicFile了。Oracle宣称，“SecureFile不仅是新一代 LOB，它们还为 LOB 带来了更多的价值，尤其是以前只能在文件系统领域中获得的特性。SecureFile可以进行加密以确保安全性，可以进行重复消除和压缩以提高存储效率，可以进行缓存（或不进行缓存）以加快访问（或节省缓冲池空间），可以按多个级别记录以减少崩溃后的平均恢复时间。引入 SecureFile 后，您可以在数据库中存储更多的非结构化文档，而不会导致过多的开销，也不会失去 OS 文件系统提供的任何重要功能。” 简单来说就三条： 一、提供了压缩、重复消除、加密等新功能 二、比以前的LOB的性能提高很多 三、易用性（无需设置CHUNK、PCTVERSION、FREELISTS、FREELIST GROUPS、FREEPOOLS参数） 注意：压缩需要Oracle Advanced Compression Option，加密需要Oracle Advanced Security Option，这两个option都是单独购买的，没有包括在Enterprise Edition里面。 2.       使用SecureFile 想要使用SecureFile LOB很简单，只需指定STORE AS SECUREFILE子句就行了（测试环境为11gR2）： CREATE TABLE tst.t11 (id number,c1 CLOB) LOB (c1) STORE AS SECUREFILE; Securefile列标明了是否为SecureFile类型的LOB： SELECT table_name,segment_name,index_name,securefile FROM dba_lobs WHERE table_name='T11'; TABLE_NAME SEGMENT_NAME                   INDEX_NAME                     SECUREFIL ---------- [...]]]></description>
			<content:encoded><![CDATA[<p>全文PDF版本可以在这里下载，格式排版要容易看一些<a href="http://www.orafan.net/wp-content/uploads/SecureFile_Internal.pdf">SecureFile_Internal.pdf</a>。</p>
<h1>1.       SecureFile LOB的特点</h1>
<p>最近张乐亦（<a href="http://www.dbform.com/">Kamus</a>）在gtalk上问了俺一个问题，为啥SecureFile类型的LOB要比以前的LOB性能要好很多，是不是存储结构上发生了什么变化。这两天抽空看了些资料，现在整理出来算是回答他的问题了。</p>
<p>关于11g以前的LOB类型的实现方式可以参考前一段写的一篇博文《<a href="../../../../../blog/329.html">CLOB的物理存储结构及语言编码详解</a>》。从11g开始，Oracle提供了一种新的LOB存储方式叫SecureFile，以前旧有的LOB存储方式就叫BasicFile了。Oracle宣称，“SecureFile不仅是新一代 LOB，它们还为 LOB 带来了更多的价值，尤其是以前只能在文件系统领域中获得的特性。SecureFile可以进行加密以确保安全性，可以进行重复消除和压缩以提高存储效率，可以进行缓存（或不进行缓存）以加快访问（或节省缓冲池空间），可以按多个级别记录以减少崩溃后的平均恢复时间。引入 SecureFile 后，您可以在数据库中存储更多的非结构化文档，而不会导致过多的开销，也不会失去 OS 文件系统提供的任何重要功能。”<span id="more-352"></span></p>
<p>简单来说就三条：</p>
<p>一、提供了压缩、重复消除、加密等新功能</p>
<p>二、比以前的LOB的性能提高很多</p>
<p>三、易用性（无需设置CHUNK、PCTVERSION、FREELISTS、FREELIST GROUPS、FREEPOOLS参数）</p>
<p>注意：压缩需要Oracle Advanced Compression Option，加密需要Oracle Advanced Security Option，这两个option都是单独购买的，没有包括在Enterprise Edition里面。</p>
<h1>2.       使用SecureFile</h1>
<p>想要使用SecureFile LOB很简单，只需指定STORE AS SECUREFILE子句就行了（测试环境为11gR2）：</p>
<p>CREATE TABLE tst.t11 (id number,c1 CLOB) LOB (c1) STORE AS SECUREFILE;</p>
<p>Securefile列标明了是否为SecureFile类型的LOB：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> table_name<span style="color: #66cc66;">,</span>segment_name<span style="color: #66cc66;">,</span>index_name<span style="color: #66cc66;">,</span>securefile <span style="color: #993333; font-weight: bold;">FROM</span> dba_lobs <span style="color: #993333; font-weight: bold;">WHERE</span> table_name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'T11'</span>;
TABLE_NAME SEGMENT_NAME                   INDEX_NAME                     SECUREFIL
<span style="color: #808080; font-style: italic;">---------- ------------------------------ ------------------------------ ---------</span>
T11        SYS_LOB0000069030C00001$$      SYS_IL0000069030C00001$$       YES</pre></div></div>

<p>使用Securefile LOB的表也是自动生成LOB segment和LOB index的。但是此时LOB index只有在使用重复消除功能时才会使用，在其他情况下均不会使用。要注意，Securefile LOB只能在ASSM的表空间（自动管理的表空间）里创建，不过既然从9i起ASSM表空间就是默认设置了，一般这里不会有多大问题。还要多说一句，只是要求SecureLOB所在的LOB列数据需要存放在ASSM表空间中，而包含LOB列的那个表，你还是可以放在手动管理的表空间中。</p>
<p>想使用SecureFile LOB，对数据库的参数DB_SECUREFILE设置也有一定的要求：</p>
<p>PERMITTED：数据库的默认参数。指定SecureFile时创建SecureFile类型的LOB；未指定时，或显式指定BasicFile时，创建BasicFile类型的LOB。</p>
<p>FORCE：无论是否指定SecureFile，强制创建SecureFile类型的LOB。在手动管理的表空间上创建LOB时，无论STORAGE子句是否指定SecureFile，均报ORA-43853错。</p>
<p>ALWAYS：无论是否指定SecureFile，强制创建SecureFile类型的LOB。在手动管理的表空间上创建LOB时，若STORAGE子句未显式指定LOB类型，创建为BasicFile类型的LOB；若STORAGE子句显式指定SecureFile类型，则也报ORA-43853错。</p>
<p>NEVER：无论是否指定SecureFile，强制创建BasicFile类型的LOB。指定SecureFile类型特有的功能如压缩，加密，重复消除时，报ORA-43854错。</p>
<p>IGNORE：无论是否指定SecureFile，强制创建BasicFile类型的LOB。忽略SecureFile类型特有的功能，创建BasicFile类型的LOB。</p>
<h1>3.       BasicFile和SecureFile的架构比较</h1>
<h2>3.1.     可变Chunk</h2>
<p>首先介绍一下SecureFile中的可变Chunk。大家都知道在BasicFile的LOB中，Chunk的大小是一定的，最小跟DB Block的大小一样，最大为32KB，这存在一些问题。比如chunk比LOB的数据小很多的情况下，访问LOB就会产生很多IO，而chunk比LOB的数据大很多的情况下，又会产生对存储空间的浪费。而在SecureFile中，chunk的size是可变的，由Oracle自动动态分配，最小跟DB Block的大小一样，最大为64MB。这样在存储较小的LOB时，使用比较小的chunk；在存储比较大的LOB时，会使用比较大的chunk。注意不是说一个LOB就放在一个chunk里，而是oracle根据LOB data的数据大小会自动决定chunk数和chunk的size，具体可以看下面“SecureFile的物理存储结构”一节的实验结果。</p>
<h2>3.2.     LOB index</h2>
<p>在LOB数据的存储方式上，两种LOB也有很大的区别。关于BasicFile的存储方式，在《<a href="../../../../../blog/329.html">CLOB的物理存储结构及语言编码详解</a>》一文中有详细的介绍，大概就是表中的LOB字段只存储LOB locator，指向LOB index，LOB index再指向LOB segment里实际的LOB数据。不难看出，这里增加了一个LOB index的结构，那么不可避免的，LOB index就有可能产生竞争，成为瓶颈。在SecureFile中，LOB index只有在使用重复消除功能时才会使用（关于这个结论的验证方法，在CLOB那篇文章中有记载，这里不再赘述了）。 简而言之，SecureFile中只要不使用重复消除功能就没LOB index什么事，自然性能就上去了。</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="88" valign="top">BasicFile</td>
<td width="97" valign="top">Col1</td>
<td width="97" valign="top">LOB col</td>
<td width="58" valign="top">&#8212;-&gt;</td>
<td width="95" valign="top">LOB index</td>
<td width="66" valign="top">&#8212;-&gt;</td>
<td width="94" valign="top">LOB data</td>
</tr>
<tr>
<td width="88" valign="top">SecureFile</td>
<td width="97" valign="top">Col1</td>
<td width="97" valign="top">LOB col</td>
<td colspan="3" width="219" valign="top"><strong>&#8212;&#8212;&#8212;&#8212;&#8212;-&gt;</strong></td>
<td width="94" valign="top">LOB data</td>
</tr>
</tbody>
</table>
<h2>3.3.     空闲空间搜索</h2>
<p>在BasicFile里，关于有空间的使用情况的信息是保存在LOB index和LOB segment里的。在INSERT或UPDATE操作LOB segment时，以下面的顺序来搜索空闲空间：</p>
<p>1. 在LOG segment的管理区搜索空闲空间，如果没有，转下一步</p>
<p>2. 访问LOB index，把可以释放的空间（如已经commit的transaction使用的UNDO）释放掉，并更新索引entry。如果不存在这种可以释放的空间，转下一步</p>
<p>3. 将HWM升高，扩大LOB segment，使用新分配的空间</p>
<p>由此可见，BasicFile的LOB在搜索空闲空间时，可能会去扫描LOB index。因此LOB index的竞争，或者在LOB数据很多的情况下，搜索LOB index的空闲空间这个操作本身都会造成时间上的花费。</p>
<p>对于空闲空间的管理，SecureFile将其放入了shared pool，这比BasicFile空闲空间管理的效率有了质的提高。 Shared Pool里的这个内存结构叫In-memory dispenser，它把空闲空间的信息cache在内存里，因此速度要比访问LOB index快了N个数量级。In-memory dispenser负责接受前台进程对于LOB空间的请求，并进行chunk的分配。</p>
<p>在In-memory dispenser中管理的空闲空间不是全部，而只是一部分而已，它的信息由后台进程SMCO/Wnnn来定期的更新。SMCO/Wnnn监视SecureFile LOB segment的使用情况，根据需要保证空闲空间的供应。注意SMCO/Wnnn也负责普通的ASSM表空间的空间动态分配。</p>
<p>1. SMCO进程（Space Management Coordinator）。负责前瞻式（Proactive）的空间分配，它动态产生slave进程Wnnn来完成实际的工作。</p>
<p>2. Wnnn（SMCO Worker）每10分钟扫描一遍LOB segment的状态，根据需要把空chunk移动到In-memory dispenser中。如果这样空chunk还是不够，则扩大LOB segment。</p>
<p>此时在INSERT或UPDATE操作LOB segment时，以下面的顺序来搜索空闲空间：</p>
<p>1. 前台进程向In-memory dispenser发出需要chunk的请求</p>
<p>2. In-memory dispenser里的chunk信息里如果空chunk数量不足，或者空chunk的size不够时，在LOG segment的管理区搜索空闲空间，将空chunk的信息cache在In-memory dispenser里。如果搜索不到空闲空间，转下一步</p>
<p>3. 将HWM升高，扩大LOB segment，使用新分配的空间</p>
<h2>3.4.     STORAGE参数</h2>
<p>跟BasicFile一样，SecureFile同样也有enable storage in row和disable storage in row的区别，在SecureFile的LOB里默认设置同样也是enable storage in row。LOB控制结构size加上LOB数据size一共未满4000字节时，enable storage in row的情况下就存储在源表的LOB列内，超出时就存放在LOB segment里；而disable storage in row的情况下则无论是否超过4000字节，LOB数据均存放在LOB segment里。</p>
<p>《<a href="../../../../../blog/329.html">CLOB的物理存储结构及语言编码详解</a>》一文中提到过，enable storage in row的情况下源表的LOB列最多能存放3964字节；而在DB11gR1的SecureFile LOB中，变成了3740字节；DB11gR2时又变成了3952字节。均为引用的数据，具体区别尚未弄清。个人认为Size的变化都是因为LOB的控制信息发生了细微的变化。注意这里的size都是在未使用重复消除、加密、压缩选项的情况下得出的。</p>
<h1>4.       SecureFile的物理存储结构</h1>
<p>下面就是本文的重头戏了，SecureFile的LOB到底在物理上是怎么存储的。在Table的Segment里的LOB列中，存放着两个layer：Locator Layer（20字节）和Inode Layer。Locator的内容和BasicFile里是一样的，也包括了控制信息和10字节的LOB ID。而Inode Layer包含了RCI Header和Inode部分，其中Inode部分包含了指向LOB segment的指针，或者在In-line存储的情况下包含实际的LOB 数据。RCI(LOB Row-Column Intersection)即表Segment里存储的LOB列的所有数据，RCI Header里存储的是SecureFile的LOB控制信息。具体的定义如下：</p>
<p>2字节的Inode Layer整个的size，即表Segment里LOB列中，Locator Layer之外的size。如果是in-line存储的话也包括LOB数据的size在内。</p>
<p>1字节的flag，具体含义如下</p>
<p>0&#215;01 此LOB是有效LOB</p>
<p>0&#215;02 此inode在Index中</p>
<p>0&#215;04此inode是in-line的</p>
<p>0&#215;08 in-line的数据是实际的LOB数据</p>
<p>0&#215;10 此inode是临时lob的控制结构</p>
<p>0&#215;40此LOB是SecureFile的LOB</p>
<p>比如我们dump出block这里是0&#215;48，就说明这个LOB是SecureFile的LOB，而且是in-line存储的。</p>
<p>1字节的SecureFile的LOB的选项flag：0&#215;1是启用重复消除，0&#215;2是启用压缩，0&#215;4是启用加密。下面举例说明：</p>
<p>上文里创建过T11表，T11表没指定storage in row选项，因此就是默认的enable storage in row。给T11表插入两条测试数据，一条是in-line方式存储的，一条是out-of-line方式存储的：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> id<span style="color: #66cc66;">,</span>dbms_lob<span style="color: #66cc66;">.</span>getlength<span style="color: #66cc66;">&#40;</span>c1<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> tst<span style="color: #66cc66;">.</span>t11;
ID DBMS_LOB<span style="color: #66cc66;">.</span>GETLENGTH<span style="color: #66cc66;">&#40;</span>C1<span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">---------- ----------------------</span>
<span style="color: #cc66cc;">1</span>                     <span style="color: #cc66cc;">56</span>
<span style="color: #cc66cc;">2</span>                  <span style="color: #cc66cc;">25583</span>
<span style="color: #993333; font-weight: bold;">ALTER</span> databas <span style="color: #993333; font-weight: bold;">FLUSH</span> buffer_cache;
<span style="color: #993333; font-weight: bold;">SELECT</span> dbms_rowid<span style="color: #66cc66;">.</span>rowid_to_absolute_fno<span style="color: #66cc66;">&#40;</span>rowid<span style="color: #66cc66;">,</span><span style="color: #ff0000;">'TST'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'T11'</span><span style="color: #66cc66;">&#41;</span> fno<span style="color: #66cc66;">,</span>
dbms_rowid<span style="color: #66cc66;">.</span>rowid_block_number<span style="color: #66cc66;">&#40;</span>rowid<span style="color: #66cc66;">&#41;</span> bno<span style="color: #66cc66;">,</span>id <span style="color: #993333; font-weight: bold;">FROM</span> tst<span style="color: #66cc66;">.</span>t11;
FNO        BNO         ID
<span style="color: #808080; font-style: italic;">---------- ---------- ----------</span>
<span style="color: #cc66cc;">5</span>        <span style="color: #cc66cc;">132</span>          <span style="color: #cc66cc;">1</span>
<span style="color: #cc66cc;">5</span>        <span style="color: #cc66cc;">132</span>          <span style="color: #cc66cc;">2</span>
<span style="color: #993333; font-weight: bold;">ALTER</span> system dump datafile <span style="color: #cc66cc;">5</span> block <span style="color: #cc66cc;">132</span>;
<span style="color: #993333; font-weight: bold;">SELECT</span> value <span style="color: #993333; font-weight: bold;">FROM</span> v$diag_info <span style="color: #993333; font-weight: bold;">WHERE</span> name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'Default Trace File'</span>;
VALUE
<span style="color: #808080; font-style: italic;">--------------------------------------------------------------------------------</span>
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>diag<span style="color: #66cc66;">/</span>rdbms<span style="color: #66cc66;">/</span>dbeuc<span style="color: #66cc66;">/</span>dbeuc<span style="color: #66cc66;">/</span>trace<span style="color: #66cc66;">/</span>dbeuc_ora_25611<span style="color: #66cc66;">.</span>trc</pre></div></div>

<p>先看第一条数据：</p>
<pre>tab 0, row 0, @0x1f03
tl: 149 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 02
col  1: [142]
 00 54 00 01 02 0c 80 80 00 02 00 00 00 01 00 00 00 61 3c c7 00 7a 48 90 00
 &lt;- - - - - - A - - - - - - -&gt; &lt;- - - - - - B - - - - - - -&gt; &lt;- - C - -&gt; &lt;-   74 00 00 70 01 30 d3 30 b8 30 cd 30 b9 90 4b 55 b6 30 4c … … …  - - - D - - -&gt; &lt; - - - - - - - - - - E - - - - - - - - - … … …
LOB
Locator:
  Length:        84(142)
  Version:        1
  Byte Length:    2
  LobID: 00.00.00.01.00.00.00.61.3c.c7
  Flags[ 0x02 0x0c 0x80 0x80 ]:
    Type: CLOB
    Storage: SecureFile
    Characterset Format: IMPLICIT
    Partitioned Table: No
    Options: VaringWidthReadWrite
  SecureFile Header:
    Length:   122
    Old Flag: 0x48 [ DataInRow SecureFile ]
    Flag 0:   0x90 [ INODE Valid ]
    Layers:
      Lengths Array: INODE:116
      INODE:
        00 00 70 01 30 d3 30 b8 30 cd 30 b9 90 4b 55 b6 30 4c 30 88
        … … …</pre>
<p>上面dump出的十六进制信息含义如下：</p>
<p>A：00 54 00 01 02 0c 80 80 00 02     Lob Locator Header</p>
<p>我认为这里的定义应该跟BasicFile没有发生变化：2字节的LOB locator长度  （除这两个长度字节外）+ 2字节的LOB locator structure版本 + 4字节的FLAG + 2字节的字符集里字符的长度</p>
<p>B：00 00 00 01 00 00 00 61 3c c7     LOB ID</p>
<p>C：00 7a 48 90      RCI Header</p>
<p>0x007a（=122字节）：这个filed后的Inode的size（即D部分 + E部分的size）</p>
<p>0&#215;48：这是in-line的SECUREFILE LOB</p>
<p>0&#215;90：未启用重复消除，压缩，加密</p>
<p>D：00 74 00 00 70 01    Inode管理信息</p>
<p>0&#215;0074（=116字节）：这个field后面（即后面的00 00 70 01四个字节 + E部分）Inode数据的size。116减4字节为112字节，这跟上面得到的LOB的length为56是能匹配上的。</p>
<p>0&#215;0<strong>0</strong>00：in-line存储LOB data。第二位的0表示后面LOB Data的size是用1字节表示</p>
<p>0&#215;70（=112字节）：LOB Data的size</p>
<p>0&#215;01：LOB Data的version</p>
<p>E：这里开始是真正的LOB Data</p>
<p>第二条：</p>
<pre>tab 0, row 1, @0x1893
tl: 51 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 03
col  1: [44]
 00 54 00 01 02 0c 80 80 00 02 00 00 00 01 00 00 00 61 3d 2e 00 18 40 90 00
 &lt;- - - - - - A - - - - - - -&gt; &lt;- - - - - - B - - - - - - -&gt; &lt;- - C - -&gt; &lt;-   12 21 00 c7 de 0a 01 01 01 40 33 a2 01 01 01 40 33 14 06  - - - - D - - - - -&gt; &lt;- - - - - - - - E - - - - - - - -&gt;
LOB
Locator:
  Length:        84(44)
  Version:        1
  Byte Length:    2
  LobID: 00.00.00.01.00.00.00.61.3d.2e
  Flags[ 0x02 0x0c 0x80 0x80 ]:
    Type: CLOB
    Storage: SecureFile
    Characterset Format: IMPLICIT
    Partitioned Table: No
    Options: VaringWidthReadWrite
  SecureFile Header:
    Length:   24
    Old Flag: 0x40 [ SecureFile ]
    Flag 0:   0x90 [ INODE Valid ]
    Layers:
      Lengths Array: INODE:18
      INODE:
        21 00 c7 de 0a 01 01 01 40 33 a2 01 01 01 40 33 14 06</pre>
<p>上面dump出的十六进制信息含义如下：</p>
<p>A：Lob Locator Header</p>
<p>B：LOB ID</p>
<p>C：00 18 40 90   RCI Header</p>
<p>0&#215;0018（=24字节）：这个filed后的Inode的size（即D部分 + E部分的size）</p>
<p>0&#215;40：这是out-line的SECUREFILE LOB</p>
<p>0&#215;90：未启用重复消除，压缩，加密</p>
<p>D：00 12 21 00 c7 de 0a 01    Inode管理信息</p>
<p>0&#215;0012（=18字节）：这个field后面（即后面的四个字节 + E部分）Inode数据的size。</p>
<p>0&#215;2<strong>1</strong>00：第一位的2表示后面的E部分是chunk的RDBA + size，第二位的1表示后面LOB Data的size是用2字节表示</p>
<p>0xc7de（=51166字节）：LOB Data的size</p>
<p>0x0a： LOB Data的version</p>
<p>0&#215;0<strong>1</strong>：代表后面有2个chunk，如果是2就是3个chunk，以此类推。</p>
<p>E：01 01 40 33 a2 01 01 01 40 33 14 06</p>
<p>01 01 40 33 a2 01：RDBA以0x014033a2开头的1个block</p>
<p>01 01 40 33 14 06：RDBA以0&#215;01403314开头的6个block</p>
<p>我们看一下第一个chunk：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> DBMS_UTILITY<span style="color: #66cc66;">.</span>data_block_address_block<span style="color: #66cc66;">&#40;</span>TO_NUMBER<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'14033a2'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'xxxxxxxx'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
bno <span style="color: #993333; font-weight: bold;">FROM</span> dual;
BNO
<span style="color: #808080; font-style: italic;">----------</span>
<span style="color: #cc66cc;">13218</span></pre></div></div>

<p>得到：</p>
<pre>bdba    [0x014033a2]
kdlich  [0x2b4878d45a4c 56]
flg0  0x28 [ver=0 typ=data lock=y]
flg1  0x00
scn   0x0000.0045ff19
<strong>lid   00000001000000613d2e   - -&gt;这是LOB ID</strong>
rid   0x00000000.0000
kdlidh  [0x2b4878d45a64 24]
flg2  0x00 [ver=0 lid=short-rowid hash=n cmap=n pfill=n]
flg3  0x00
pskip 0
sskip 0
hash  0000000000000000000000000000000000000000
hwm   <strong>8060   - -&gt;这个block里存放了8060字节的数据</strong>
spr   0
data  [0x2b4878d45a80 52 8060]
30 d3 30 b8 30 cd 30 b9 90 4b 55 b6 30 4c 30 88 30 8a 89 07 96 d1 30 55 30 92</pre>
<p>我们再看一下最后一个block：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> DBMS_UTILITY<span style="color: #66cc66;">.</span>data_block_address_block<span style="color: #66cc66;">&#40;</span>TO_NUMBER<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1403314'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'xxxxxxxx'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
bno <span style="color: #993333; font-weight: bold;">FROM</span> dual;
BNO
<span style="color: #808080; font-style: italic;">----------</span>
<span style="color: #cc66cc;">13076</span></pre></div></div>

<p>现在需要dump从13076开始的第6个即13081号block，得到：</p>
<pre>… … …
hwm   <strong>2806</strong>
… … …</pre>
<p>一共8060×6+2806=51166字节的LOB data，这与前面的结果是能相互印证的。</p>
<p>下面我们再来看disable storage in row的情况下SecureFile是如何存储的。</p>
<p>在这种情况下指向LOB data的指针可能有两种存储方式：</p>
<p>第一种：LOB data的size不算很大的情况下，在Table Segment里的LOB列中以chunk的初始RDBA + size的方式存储，一个chunk信息接着一个chunk信息；</p>
<p>第二种：LOB data的size很大的情况下，在Table Segment里的LOB列中存储LHB（Lob Header Block）的信息，在LHB中存放所有chunk及size的列表。</p>
<p>第一种跟上面的第二条数据存储方式差不多，就不再介绍了，下面我们看第二种情况：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> tst<span style="color: #66cc66;">.</span>t12 <span style="color: #66cc66;">&#40;</span>id number<span style="color: #66cc66;">,</span>c2 CLOB<span style="color: #66cc66;">&#41;</span> LOB <span style="color: #66cc66;">&#40;</span>c2<span style="color: #66cc66;">&#41;</span> STORE <span style="color: #993333; font-weight: bold;">AS</span> SECUREFILE<span style="color: #66cc66;">&#40;</span>disable storage <span style="color: #993333; font-weight: bold;">IN</span> row<span style="color: #66cc66;">&#41;</span>;
插入一条很大的LOB数据：
<span style="color: #993333; font-weight: bold;">SELECT</span> id<span style="color: #66cc66;">,</span>dbms_lob<span style="color: #66cc66;">.</span>getlength<span style="color: #66cc66;">&#40;</span>c2<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> tst<span style="color: #66cc66;">.</span>t12;
        ID DBMS_LOB<span style="color: #66cc66;">.</span>GETLENGTH<span style="color: #66cc66;">&#40;</span>C2<span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">---------- ----------------------</span>
         <span style="color: #cc66cc;">1</span>               <span style="color: #cc66cc;">49498672</span>
<span style="color: #993333; font-weight: bold;">ALTER</span> databas <span style="color: #993333; font-weight: bold;">FLUSH</span> buffer_cache;
<span style="color: #993333; font-weight: bold;">SELECT</span> dbms_rowid<span style="color: #66cc66;">.</span>rowid_to_absolute_fno<span style="color: #66cc66;">&#40;</span>rowid<span style="color: #66cc66;">,</span><span style="color: #ff0000;">'TST'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'T12'</span><span style="color: #66cc66;">&#41;</span> fno<span style="color: #66cc66;">,</span>
dbms_rowid<span style="color: #66cc66;">.</span>rowid_block_number<span style="color: #66cc66;">&#40;</span>rowid<span style="color: #66cc66;">&#41;</span> bno<span style="color: #66cc66;">,</span>id <span style="color: #993333; font-weight: bold;">FROM</span> tst<span style="color: #66cc66;">.</span>t12;
       FNO        BNO         ID
<span style="color: #808080; font-style: italic;">---------- ---------- ----------</span>
         <span style="color: #cc66cc;">5</span>        <span style="color: #cc66cc;">173</span>          <span style="color: #cc66cc;">1</span>
<span style="color: #993333; font-weight: bold;">ALTER</span> system dump datafile <span style="color: #cc66cc;">5</span> block <span style="color: #cc66cc;">173</span>;</pre></div></div>

<p>现在来看一下Table Segment里存放LOB列的地方是什么信息：</p>
<pre>tab 0, row 0, @0x1f1b
tl: 44 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 02
col  1: [37]
 00 54 00 01 02 0c 80 80 00 02 00 00 00 01 00 00 00 61 3e 58 00 11 40 90 00
 &lt; - - - - - - A - - - - - - &gt; &lt;- - - - - - B - - - - - - -&gt; &lt;- - C - -&gt; &lt;-   0b 43 00 05 e6 94 60 41 01 40 3b 81  - - - - D - - - - - - &gt; &lt;- - E - -&gt;
LOB
Locator:
  Length:        84(37)
  Version:        1
  Byte Length:    2
  LobID: 00.00.00.01.00.00.00.61.3e.58
  Flags[ 0x02 0x0c 0x80 0x80 ]:
    Type: CLOB
    Storage: SecureFile
    Characterset Format: IMPLICIT
    Partitioned Table: No
    Options: VaringWidthReadWrite
  SecureFile Header:
    Length:   17
    Old Flag: 0x40 [ SecureFile ]
    Flag 0:   0x90 [ INODE Valid ]
    Layers:
      Lengths Array: INODE:11
      INODE:
        43 00 05 e6 94 60 41 01 40 3b 81</pre>
<p>上面dump出的十六进制信息含义如下：</p>
<p>A：Lob Locator Header。</p>
<p>B：LOB ID</p>
<p>C：00 11 40 90   RCI Header</p>
<p>0&#215;0018（=17字节）：这个filed后的Inode的size（即D部分 + E部分的size）</p>
<p>0&#215;40：这是out-line的SECUREFILE LOB</p>
<p>0&#215;90：未启用重复消除，压缩，加密</p>
<p>D：00 0b 43 00 05 e6 94 60 41    Inode管理信息</p>
<p>0x000b（=11字节）：这个field后面（即后面的四个字节 + E部分）Inode数据的size。</p>
<p>0&#215;4<strong>3</strong>00：第一位的4表示后面的E部分是LHB的RDBA，第二位的3表示LOB data的size是4字节。</p>
<p>0x05e69460（=98997344字节）：LOB Data的size</p>
<p>0&#215;41： LOB Data的version</p>
<p>E：01 40 3b 81 这是LHB的RDBA</p>
<p>我们把LHB给dump出来看看：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> DBMS_UTILITY<span style="color: #66cc66;">.</span>data_block_address_block<span style="color: #66cc66;">&#40;</span>TO_NUMBER<span style="color: #66cc66;">&#40;</span>LTRIM<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'01403b81'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'xxxxxxxx'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
BNO <span style="color: #993333; font-weight: bold;">FROM</span> dual;
BNO
<span style="color: #808080; font-style: italic;">----------</span>
<span style="color: #cc66cc;">15233</span>
<span style="color: #993333; font-weight: bold;">ALTER</span> system dump datafile <span style="color: #cc66cc;">5</span> block <span style="color: #cc66cc;">15233</span>;</pre></div></div>

<p>可以看到下面有chunk列表，以 block数 + RDBA的形式存储：</p>
<pre>bdba    [0x01403b81]
kdlich  [0x2b3f1e77844c 56]
  flg0  0x18 [ver=0 typ=lhb lock=y]
  flg1  0x00
  scn   0x0000.00462283
  lid   00000001000000613e58
  rid   0x00000000.0000
kdlihh  [0x2b3f1e778464 24]
  flg2  0x00 [ver=0 lid=short-rowid hash=n it=n bt=n xfm=n ovr=n aux=n]
  flg3  0x80 [vll=y]
  flg4  0x00
  flg5  0x00
  hash  0000000000000000000000000000000000000000
  llen  0.98997344
  ver   0.65
  #ext  100
  asiz  100
  hwm   100
  ovr   0x00000000.0
  dba0  0x00000000
  dba1  0x00000000
  dba2  0x00000000
  dba3  0x00000000
  auxp  0x00000000
  ldba  0x01406ab5
nblk  12283   <strong>- -&gt;这个LOB共占用了多少个block</strong>
[0] 0x00 0x00 73 0x014039b7   <strong>- -&gt;从RDBA 0x014039b7 开始的73个block</strong>
[1] 0x00 0x00 7 0x014000c9   <strong>- -&gt;从RDBA 0x014000c9开始的7个block</strong>
[2] 0x00 0x00 5 0x014000bb
… … … …
[97] 0x00 0x00 795 0x01406665
[98] 0x00 0x00 224 0x01406585
[99] 0x00 0x00 85 0x01406a61</pre>
<p>接下来对于LOB data所在的block的dump这里就不做了，方法跟上述的类似。</p>
<h1>5.       两种LOB性能测试比较</h1>
<p>上面说了这么多新的SecureFile的LOB怎么怎么好，怎么怎么牛，大家一定有疑问了，是不是我在这忽悠大家呢。下面就给大家看些干货，真实的测试数据。</p>
<p>首先介绍下LOB参数：</p>
<p>LOGGING：在CREATE/UPDATE/INSERT LOB数据时会写入REDO LOG文件。但NOLOGGING会Internally转换成FILESYSTEM_LIKE_LOGGING，而FILESYSTEM_LIKE_LOGGING会确保数据库CRASH完整恢复</p>
<p>NOLOGGING：在CREATE/UPDATE/INSERT LOB数据时不写入REDO LOG文件。</p>
<p>FILESYSTEM_LIKE_LOGGING：数据库只记录LOB的METADATA到REDO LOG</p>
<p>NOCACHE：LOB数据不CACHE在SGA</p>
<p>CACHE：LOB数据CACHE在SGA</p>
<p>测试环境：</p>
<p>虚拟机OEL5.5 64bit + DB11.2.0.1，测试数据是一个110MB的文本文档lob.txt：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">du</span> <span style="color: #660033;">-m</span> lob.txt
<span style="color: #000000;">110</span>     lob.txt
<span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">cat</span> lob.txt<span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">wc</span> <span style="color: #660033;">-l</span>
<span style="color: #000000;">1916928</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">head</span> –n1 lob.txt
ビジネス運営がより複雑さを増すなかで、ITに対する変化の要求は高まりを見せ、関連するリスクの軽減もあわせて求めら</pre></div></div>

<p>创建了一个存储过程insert_clob（代码在附录中），作用是插入若干条CLOB数据即lob.txt的内容，本次测试每次是插20条数据，共2.2GB，记录所花的时间。</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="158" valign="top"><strong>存储方式</strong><strong></strong></td>
<td width="72" valign="top"><strong>DML类型</strong></td>
<td width="98" valign="top"><strong>SecureFile</strong></td>
<td width="76" valign="top"><strong>MB/s</strong></td>
<td width="104" valign="top"><strong>BasicFile</strong></td>
<td width="66" valign="top"><strong>MB/s</strong></td>
<td width="95" valign="top"><strong>性能比</strong><strong>%</strong></td>
</tr>
<tr>
<td width="158" valign="top">CACHE + LOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="98" valign="top">54.152   s</td>
<td width="76" valign="top">40.626</td>
<td width="104" valign="top">243.726   s</td>
<td width="66" valign="top">9.027</td>
<td width="95" valign="top"><strong>450.05%</strong></td>
</tr>
<tr>
<td width="158" valign="top">CACHE +   NOLOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="98" valign="top">59.398 s</td>
<td width="76" valign="top">37.038</td>
<td width="104" valign="top">NOT support</td>
<td width="66" valign="top">-</td>
<td width="95" valign="top">-</td>
</tr>
<tr>
<td width="158" valign="top">NOCACHE +   LOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="98" valign="top">43.799   s</td>
<td width="76" valign="top">50.229</td>
<td width="104" valign="top">289.213   s</td>
<td width="66" valign="top">7.607</td>
<td width="95" valign="top"><strong>660.23%</strong></td>
</tr>
<tr>
<td width="158" valign="top">NOCACHE +   NOLOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="98" valign="top">48.512 s</td>
<td width="76" valign="top">45.349</td>
<td width="104" valign="top">293.454 s</td>
<td width="66" valign="top">7.497</td>
<td width="95" valign="top"><strong>604.90%</strong></td>
</tr>
</tbody>
</table>
<p>结论已经很明显，新SecureFile格式的LOB性能相比较以前BasicFile有了巨大的提升，而且在最典型LOB的选项组合NOCACHE + LOGGING的情况下，性能提升的比例最大。</p>
<p>两种LOB的性能数据也可以参考这篇博文：</p>
<p><a href="http://blog.sina.com.cn/s/blog_6058d7c10100nx26.html">http://blog.sina.com.cn/s/blog_6058d7c10100nx26.html</a></p>
<p>他的测试结果如下，有的测试结果跟我的结果相比有一定的出入，可能是环境的问题，也可能是数据的问题（我是110MB的文本文件，他是5MB的文本文件），也可能是程序的问题（他用的java，我用的是PL/SQL）。另外他这篇文章里有关于SELECT（即READ）的性能数据，在NOCACHE + LOGGING的情况下，性能提升约三倍。</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="158" valign="top"><strong>存储方式</strong><strong></strong></td>
<td width="72" valign="top"><strong>DML类型</strong></td>
<td width="154" valign="top"><strong>SecureFile   MB/s</strong></td>
<td width="142" valign="top"><strong>BasicFile   MB/s</strong></td>
<td width="94" valign="top"><strong>性能比</strong><strong>%</strong></td>
</tr>
<tr>
<td width="158" valign="top">CACHE + LOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="154" valign="top">9.17</td>
<td width="142" valign="top">8.64</td>
<td width="94" valign="top"><strong>106.13%</strong></td>
</tr>
<tr>
<td width="158" valign="top">CACHE + LOGGING</td>
<td width="72" valign="top">SELECT</td>
<td width="154" valign="top">39.52</td>
<td width="142" valign="top">4.42</td>
<td width="94" valign="top"><strong>894.12%</strong></td>
</tr>
<tr>
<td width="158" valign="top">CACHE +   NOLOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="154" valign="top">31.56</td>
<td width="142" valign="top">-</td>
<td width="94" valign="top">-</td>
</tr>
<tr>
<td width="158" valign="top">CACHE +   NOLOGGING</td>
<td width="72" valign="top">SELECT</td>
<td width="154" valign="top">35.31</td>
<td width="142" valign="top">-</td>
<td width="94" valign="top">-</td>
</tr>
<tr>
<td width="158" valign="top">NOCACHE +   LOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="154" valign="top">36.63</td>
<td width="142" valign="top">2.32</td>
<td width="94" valign="top"><strong>1578.88%</strong></td>
</tr>
<tr>
<td width="158" valign="top">NOCACHE +   LOGGING</td>
<td width="72" valign="top">SELECT</td>
<td width="154" valign="top">50.28</td>
<td width="142" valign="top">16.28</td>
<td width="94" valign="top"><strong>308.85%</strong></td>
</tr>
<tr>
<td width="158" valign="top">NOCACHE +   NOLOGGING</td>
<td width="72" valign="top">INSERT</td>
<td width="154" valign="top">9.38</td>
<td width="142" valign="top">2.51</td>
<td width="94" valign="top"><strong>373.71%</strong></td>
</tr>
<tr>
<td width="158" valign="top">NOCACHE +   NOLOGGING</td>
<td width="72" valign="top">SELECT</td>
<td width="154" valign="top">5.54</td>
<td width="142" valign="top">11.36</td>
<td width="94" valign="top"><strong>48.76%</strong></td>
</tr>
</tbody>
</table>
<h1>6.       总结及附录</h1>
<p>做个总结吧，我认为SecureFile的LOB之所以比BasicFile的LOB性能有提升，就是因为可变chunk、LOB index不再使用、空闲空间搜索放到了shared pool里这三大原因共同决定的，尤其是后两者，比起以前的BasicFile LOB，架构设计上有了飞跃。我们也能看出虽然Oracle数据库的发展不像以前那么革命性了，但是在很多方面，新版本的Oracle数据库还是取得了巨大的进步。</p>
<p>附录：</p>
<p>测试表（只写了一种，其他的选项组合类似）：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> tst<span style="color: #66cc66;">.</span>LOBTAB<span style="color: #66cc66;">&#40;</span>ARTICLE_ID NUMBER <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span>ARTICLE_NAME VARCHAR2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
ARTICLE_DATA CLOB<span style="color: #66cc66;">&#41;</span> tablespace <span style="color: #993333; font-weight: bold;">DATA</span> lob <span style="color: #66cc66;">&#40;</span>ARTICLE_DATA<span style="color: #66cc66;">&#41;</span> 
store <span style="color: #993333; font-weight: bold;">AS</span> SECUREFILE <span style="color: #66cc66;">&#40;</span>tablespace <span style="color: #993333; font-weight: bold;">DATA</span> cache<span style="color: #66cc66;">&#41;</span> LOGGING;
&nbsp;
插入CLOB数据的存储过程insert_clob：
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">REPLACE</span> procedure tst<span style="color: #66cc66;">.</span>insert_clob <span style="color: #66cc66;">&#40;</span>fromid <span style="color: #993333; font-weight: bold;">IN</span> number<span style="color: #66cc66;">,</span>endid <span style="color: #993333; font-weight: bold;">IN</span> number<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">AS</span>
i NUMBER;
V_LOB CLOB;
V_FILE BFILE :<span style="color: #66cc66;">=</span> BFILENAME<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'HOME_DIR'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'lob.txt'</span><span style="color: #66cc66;">&#41;</span>;
V_SOURCE NUMBER :<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
V_DEST NUMBER :<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
V_LANG NUMBER :<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>;
V_WARN NUMBER;
BEGIN
&nbsp;
<span style="color: #993333; font-weight: bold;">FOR</span> i <span style="color: #993333; font-weight: bold;">IN</span> fromid<span style="color: #66cc66;">..</span>endid loop
V_SOURCE :<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
V_DEST :<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> tst<span style="color: #66cc66;">.</span>LOBTAB <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'ABC'</span><span style="color: #66cc66;">||</span>to_char<span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'TEST'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">UPDATE</span> tst<span style="color: #66cc66;">.</span>LOBTAB <span style="color: #993333; font-weight: bold;">SET</span> ARTICLE_DATA <span style="color: #66cc66;">=</span> EMPTY_CLOB <span style="color: #993333; font-weight: bold;">WHERE</span> ARTICLE_ID<span style="color: #66cc66;">=</span>i <span style="color: #993333; font-weight: bold;">RETURN</span> ARTICLE_DATA <span style="color: #993333; font-weight: bold;">INTO</span> V_LOB;
DBMS_LOB<span style="color: #66cc66;">.</span>FILEOPEN<span style="color: #66cc66;">&#40;</span>V_FILE<span style="color: #66cc66;">&#41;</span>;
DBMS_LOB<span style="color: #66cc66;">.</span>OPEN<span style="color: #66cc66;">&#40;</span>V_LOB<span style="color: #66cc66;">,</span> DBMS_LOB<span style="color: #66cc66;">.</span>LOB_READWRITE<span style="color: #66cc66;">&#41;</span>;
&nbsp;
DBMS_LOB<span style="color: #66cc66;">.</span>LOADCLOBFROMFILE<span style="color: #66cc66;">&#40;</span>
V_LOB<span style="color: #66cc66;">,</span>
V_FILE<span style="color: #66cc66;">,</span>
DBMS_LOB<span style="color: #66cc66;">.</span>GETLENGTH<span style="color: #66cc66;">&#40;</span>V_FILE<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
V_DEST<span style="color: #66cc66;">,</span>
V_SOURCE<span style="color: #66cc66;">,</span>
<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">,</span>
V_LANG<span style="color: #66cc66;">,</span>
V_WARN<span style="color: #66cc66;">&#41;</span>;
&nbsp;
DBMS_LOB<span style="color: #66cc66;">.</span>CLOSE<span style="color: #66cc66;">&#40;</span>V_LOB<span style="color: #66cc66;">&#41;</span>;
DBMS_LOB<span style="color: #66cc66;">.</span>FILECLOSEALL;
COMMIT;
end loop;
END;
<span style="color: #66cc66;">/</span>
&nbsp;
计算CLOB的<span style="color: #993333; font-weight: bold;">INSERT</span>操作的时间差是使用以下的PL<span style="color: #66cc66;">/</span>SQL：
declare
a VARCHAR2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
b VARCHAR2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
begin
<span style="color: #993333; font-weight: bold;">SELECT</span> to_char<span style="color: #66cc66;">&#40;</span>systimestamp<span style="color: #66cc66;">,</span><span style="color: #ff0000;">'HH24:MI:SS.FF3'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">INTO</span> a <span style="color: #993333; font-weight: bold;">FROM</span> dual;
TST<span style="color: #66cc66;">.</span>insert_clob<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">SELECT</span> to_char<span style="color: #66cc66;">&#40;</span>systimestamp<span style="color: #66cc66;">,</span><span style="color: #ff0000;">'HH24:MI:SS.FF3'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">INTO</span> b <span style="color: #993333; font-weight: bold;">FROM</span> dual;
dbms_output<span style="color: #66cc66;">.</span>put_line<span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span>;
dbms_output<span style="color: #66cc66;">.</span>put_line<span style="color: #66cc66;">&#40;</span>b<span style="color: #66cc66;">&#41;</span>;
end;
<span style="color: #66cc66;">/</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/352.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[zt]EXPDP和IMPDP的比较详细使用说明</title>
		<link>http://www.orafan.net/blog/345.html</link>
		<comments>http://www.orafan.net/blog/345.html#comments</comments>
		<pubDate>Sun, 16 Jan 2011 17:49:40 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[Data pump]]></category>
		<category><![CDATA[expdp]]></category>
		<category><![CDATA[impdp]]></category>
		<category><![CDATA[数据泵]]></category>

		<guid isPermaLink="false">http://www.orafan.net/?p=345</guid>
		<description><![CDATA[本打算自己写一篇关于data pump的blog，然后发现此文真的不错，就转载一下喽。http://space.itpub.net/11417069/viewspace-683740 ORCALE10G提供了新的导入导出工具，数据泵。Oracle官方对此的形容是：OracleDataPump technology enables Very High-Speed movement of data and metadata from one database to another.其中Very High-Speed是亮点。 先说数据泵提供的主要特性（包括，但不限于）： 1. 支持并行处理导入、导出任务 2. 支持暂停和重启动导入、导出任务 3. 支持通过Database Link的方式导出或导入远端数据库中的对象 4. 支持在导入时通过Remap_schema、Remap_datafile、Remap_tablespace几个参数实现导入过程中自动修改对象属主、数据文件或数据所在表空间。 5. 导入/导出时提供了非常细粒度的对象控制。通过Include、Exclude两个参数，甚至可以详细制定是否包含或不包含某个对象。 Warning: 1. 什么是Directory对象 Directory对象是Oracle10g版本提供的一个新功能。他是一个指向，指向了操作系统中的一个路径。每个Directory都包含Read,Write两个权限，可以通过Grant命令授权给指定的用户或角色。拥有读写权限的用户就可以读写该Directory对象指定的操作系统路径下的文件。 2. 无论在什么地方使用expdp，生成的文件最终页是在服务器上(Directory指定的位置) 如何调用 1. 命令行方式 最简单的调用，但是写的参数有限，建议使用参数文件的方式。 2. 参数文件方式 最常用的方式。通常需要先编写一个参数文件。指定导出时需要的各种参数。然后以如下方式调用。 expdp user/pwd parfile=xxx.par 这个xxx.par即是我们编辑的参数文件。注意，在这个命令行后面，同样可以再跟别的参数，甚至是在par参数文件中指定过的参数。如果执行命令中附加的参数与参数文件中的参数有重复，最终采用哪个参数，会以参数最后出现的位置而定。如：expdp user/pwd parfile=xxx.par logfile=a.log，如果在参数文件中也指定了logfile，这里会以命令行中的logfile为准；如：expdp user/pwd logfile=a.log parfile=xxx.par，而这个，则会以参数文件中的为准，因为parfile=xxx.par写在命令行的后面。 3. 交互方式 [...]]]></description>
			<content:encoded><![CDATA[<p>本打算自己写一篇关于data pump的blog，然后发现此文真的不错，就转载一下喽。http://space.itpub.net/11417069/viewspace-683740</p>
<p>ORCALE10G提供了新的导入导出工具，数据泵。Oracle官方对此的形容是：OracleDataPump technology enables Very High-Speed movement of data and metadata from one database to another.其中Very High-Speed是亮点。<br />
<span id="more-345"></span> 先说数据泵提供的主要特性（包括，但不限于）：<br />
1. 支持并行处理导入、导出任务<br />
2. 支持暂停和重启动导入、导出任务<br />
3. 支持通过Database Link的方式导出或导入远端数据库中的对象<br />
4. 支持在导入时通过Remap_schema、Remap_datafile、Remap_tablespace几个参数实现导入过程中自动修改对象属主、数据文件或数据所在表空间。<br />
5. 导入/导出时提供了非常细粒度的对象控制。通过Include、Exclude两个参数，甚至可以详细制定是否包含或不包含某个对象。</p>
<p>Warning:<br />
1. 什么是Directory对象<br />
Directory对象是Oracle10g版本提供的一个新功能。他是一个指向，指向了操作系统中的一个路径。每个Directory都包含Read,Write两个权限，可以通过Grant命令授权给指定的用户或角色。拥有读写权限的用户就可以读写该Directory对象指定的操作系统路径下的文件。</p>
<p>2. 无论在什么地方使用expdp，生成的文件最终页是在服务器上(Directory指定的位置)</p>
<p>如何调用<br />
1. 命令行方式<br />
最简单的调用，但是写的参数有限，建议使用参数文件的方式。</p>
<p>2. 参数文件方式<br />
最常用的方式。通常需要先编写一个参数文件。指定导出时需要的各种参数。然后以如下方式调用。<br />
expdp user/pwd parfile=xxx.par<br />
这个xxx.par即是我们编辑的参数文件。注意，在这个命令行后面，同样可以再跟别的参数，甚至是在par参数文件中指定过的参数。如果执行命令中附加的参数与参数文件中的参数有重复，最终采用哪个参数，会以参数最后出现的位置而定。如：expdp user/pwd parfile=xxx.par logfile=a.log，如果在参数文件中也指定了logfile，这里会以命令行中的logfile为准；如：expdp user/pwd logfile=a.log parfile=xxx.par，而这个，则会以参数文件中的为准，因为parfile=xxx.par写在命令行的后面。</p>
<p>3. 交互方式<br />
Data Pump导入导出任务支持停止，重启等状态操作。如用户执行导入或者导出任务，执行了一半时，使用Crtl+C中断了任务（或其他原因导致的中断），此时任务并不是被取消，而是被转移到后台。可以再次使用expdp/impdp命令，附加attach参数的方式重新连接到中断的任务中，并选择后续的操作。这就是交互方式。<br />
Warning : 什么是attach参数，每执行一个导入，或者导出，在命令的第一行，会有以下信息：Starting &#8220;BAM&#8221;.&#8221;SYS_EXPORT_SCHEMA_01&#8243;:  bam/******** parfile=expdp_tbs.par，这个SYS_EXPORT_SCHEMA_01就是我们的attach参数。<br />
-bash-3.00$ expdp bam/bam parfile=expdp_tbs.par</p>
<p>Export: Release 10.2.0.4.0 &#8211; 64bit Production on Friday, 13 August, 2010 16:35:18</p>
<p>Copyright (c) 2003, 2007, Oracle.  All rights reserved.</p>
<p>Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 &#8211; 64bit Production<br />
With the Partitioning, OLAP, Data Mining and Real Application Testing options<br />
Starting &#8220;BAM&#8221;.&#8221;SYS_EXPORT_SCHEMA_01&#8243;:  bam/******** parfile=expdp_tbs.par<br />
如果想使用交互方式，可以使用如：expdp attach SYS_EXPORT_SCHEMA_01 进入到交互模式</p>
<p>操作模式<br />
1. 全库模式<br />
导入或者导出整个数据库，对应impdp/expdp命令中的full参数，只有拥有dba或者exp_full_database和imp_full_database权限的用户才能执行。</p>
<p>2. Schema模式<br />
导出或导入Schema下的自有对象，对应impdp/expdp命令中的Schema参数，这是默认的操作模式。如果拥有dba或者exp_full_database和imp_full_database权限的用户执行的话，就可以导出或导入多个Schema中的对象。</p>
<p>3. 表模式<br />
导出指定的表或者表分区（如果有分区的话）以及依赖该表的对象（如该表的索引，约束等，不过前提是这些对象在同一个Schema中，或者执行的用户有相应的权限）。对应impdp/expdp命令中的Table参数。</p>
<p>4. 表空间模式<br />
导出指定的表空间中的内容。对应impdp/expdp中的Tablespaces参数，这种模式类似于表模式和Schema模式的补充。</p>
<p>5. 传输表空间模式<br />
对应impdp/expdp中的Transport_tablespaces参数。这种模式与前面几种模式最显著的区别是生成的Dump文件中并不包含具体的逻辑数据，而只导出相关对象的元数据(即对象的定义，可以理解成表的创建语句)，逻辑数据仍然在表空间的数据文件中，导出时需要将元数据和数据文件同时复制到目标端服务器。<br />
这种导出方式效率很高，时间开销主要是花在复制数据文件产生的I/O上。expdp执行传输表空间模式的导出，用户必须拥有exp_full_database角色或者DBA角色。而通过传输表空间模式导入时，用户必须拥有imp_full_database角色或者DBA角色。</p>
<p>过滤数据<br />
过滤数据主要依赖于Query和Sample两个参数。其中Sample参数主要针对expdp导出功能。<br />
1. Query<br />
与exp命令中的Query功能类似，不过Expdp中，该参数功能得到了增强，控制的粒度更细。Expdp中的Query也是指定类似where语句来限定记录。语法如下：<br />
Query = [Schema.][Table_name:] Query_clause<br />
默认情况如果不指定Schema.table_name,则Query_clause针对所有导出的表有效，或者你可以为每一个表指定不同的Query_clause，如：导出a表中所有id&lt;5的记录，导出b表中所有name=&#8217;a'的记录，则Query的参数应该如下：<br />
Query=A:&#8221;Where id&lt;5&#8243;,B:&#8221;Where name=&#8217;a'&#8221;<br />
如果Where条件前没有指定Schema名或者表名的话，默认就是针对当前所有要被导出的表。如：Query=Where id &lt;5<br />
Warning: 建议把Query参数放入到参数文件中使用，以避免转义符带来的麻烦。</p>
<p>2. Sample<br />
该参数用来指定导出数据的百分比，可指定的值的范围从0.000001到99.999999，语法如下：<br />
Sample=[[Schema_name.]Table_name:]sample_percent<br />
指定该参数以后，EXPDP导出将自动控制导出的记录量，如导出A表中50%的记录，设置的Sample参数如下：<br />
Sample=A:50<br />
Warning: Sample_percent指定的值只是一个参考值，EXPDP会根据数据量算出一个近似值。</p>
<p>过滤对象<br />
过滤对象主要依赖于Include和Exclude两个参数。这两个参数作用正好相反，在这两个参数中，可以指定你知道的任何对象类型（如：Package、Procedure、Table等等）或者对象名称（支持通配符）</p>
<p>1. Exclude 反规则<br />
指定不被包含的对象类型或者对象名称。指定了该参数以后，指定的对象类型对应的所有对象都不会被导入或导出。如果被排除的对象有依赖的对象，那么其依赖的对象也不会被导入或导出。如：通过Exclude参数指定不导出表对象的话，不仅指定的表不会被导出，连这些表关联的Index、Check等都不会被导出。语法如下：<br />
Exclude=object_type[:name_clause][, ...]<br />
Warning: Exclude参数支持同时指定多个参数值，如：不导入A表的索引，也不导入B表的约束(假设A表的索引以idx_a开头，B表的约束以chk_b开头)，连所有的授权都不想导入，那么Exclude参数设置如下：<br />
Exclude=Index:&#8221;like &#8216;idx_a%&#8217;&#8221;, Constraint:&#8221;like &#8216;chk_b%&#8217;&#8221;, Grant<br />
Warning: 建议把Exclude参数放入到参数文件中使用，以避免转义符带来的麻烦。</p>
<p>2. Include 正规则<br />
与Exclude正好相反。指定包含的对象类型或者对象名称。<br />
Warning: 由于两个参数功能正好相反，因此在执行导入或导出命令时，两个参数不能同时使用，否则Oracle也不知道你想要干什么啦。</p>
<p>高级过滤<br />
在导出/导入的时候，我们常常有这样的需求，只想导出/导入表结构，或者只想导出/导入数据。幸运的是数据泵也提供了该功能。使用Content参数。该参数有三个属性<br />
1) ALL : 导出/导入对象定义和数据，该参数的默认值就是ALL<br />
2) DATA_ONLY : 只导出/导入数据。<br />
3) METADATA_ONLY : 只导出/导入对象定义。</p>
<p>Warning: 有一点值得注意的时，在执行导出的时候，如果使用了高级过滤，如只导出了数据，那么导入时，需要确保数据定义已经存在。否则数据都变成没有主子了。如果数据定义已经存在，导入时最好指定data_only，否则会触发ORA-39151错误，因为对象已经存在了。</p>
<p>过滤已经存在的数据<br />
我们知道，导入的表对象在目标库中已经存在，并且目标端没有创建数据完整性约束条件(RI)来检验数据的话，就有可能造成数据被重复导入。数据泵提供了一个新的参数Table_exists_action,可以一定程度上降低重复数据的产生。该参数用来控制如果要导入的表对象存在，执行什么操作。有以下几个参数值：<br />
1) SKIP : 跳过该表，继续处理下一个对象。该参数默认就是SKIP。值得注意的是，如果你同时指定了CONTENT参数为Data_only的话，SKIP参数无效，默认为APPEND。<br />
2) APPEND : 向现有的表中添加数据。<br />
3) TRUNCATE : TRUNCATE当前表，然后再添加记录。使用这个参数需要谨慎，除非确认当前表中的数据确实无用。否则可能造成数据丢失。<br />
4) REPLACE : 删除并重建表对象，然后再向其中添加数据。值得注意的是，如果同时指定了CONTENT参数为Data_only的话，REPLACE参数无效。</p>
<p>重定义表的Schema或表空间<br />
我们还可能会遇到这样的需求，把A用户的对象转移到B用户，或者更换数据的表空间。数据泵通过Remap_Schema和Remap_tablespace参数实现了该功能。<br />
1) REMAP_SCHEMA : 重定义对象所属Schema<br />
该参数的作用类似IMP中的Fromuser+Touser,支持多个Schema的转换，语法如下：<br />
REMAP_SCHEMA=Source_schema:Target_schema[,Source_schema:Target_schema]<br />
如把A的对象转换到C用户，将C转换到D用户。Remap_schema=a:b,c:d<br />
Warning: 不能在同一个IMPDP命令中指定remap_schema=a:b,a:c.</p>
<p>2) REMAP_TABLESPACE : 重定义对象所在的表空间。<br />
该参数用来重映射导入对象存储的表空间，支持同时对多个表空间进行转换，相互间用逗号分割。语法如下：<br />
REMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]<br />
Warning: 如果使用Remap_tablespace参数，则要保证导入的用户对目标表空间有读写权限。</p>
<p>优化导入/导出效率<br />
对于大数据量来说，我们不得不考虑效率问题。数据泵对效率也提出了更高的要求。甚至官方的描述就是Oracle Data Pump technology enables Very High-Speed movement of data and metadata from one database to another.这里的Very High-Speed依赖我们的parallel参数。<br />
所有的优化操作都会有三种结果：变得更好、没有变化、变得更差。Parallel参数也是这样，并不是指定一个大于1的参数，性能就会有提升。<br />
1) 对于导出的parallel<br />
对于导出来说，由于dump文件只能由一个线程进行操作（包括I/O处理），因此如果输出的DUMP文件只有一个，即使你指定再多的并行，实际工作仍然是一个，而且还会触发ORA-39095错误。因此，建议设置该参数小于或等于生成的DUMP文件数量。那么，如何控制生成的DUMP文件数量呢？<br />
EXPDP命令提供了一个FILESIZE参数，用来指定单个DUMP文件的最大容量，要有效的利用parallel参数，filesize参数必不可少。<br />
举例：某用户对象占用了4G左右的空间，实际导出后的DUMP文件约为3G，我们尝试在导出该用户时指定并行度为4，设置单个文件不超过500M，则语法如下：<br />
$ expdp user/pwd directory=dump_file dumpfile=expdp_20100820_%U.dmp logfile=expdp_20100820.log filesize=500M parallel=4</p>
<p>2) 对于导入的parallel<br />
对于导入来说，使用parallel参数则要简单的多，我认为导入更能体现parallel参数的优势。参数设置为几，则认为同时将几张表的内容导入到库中。<br />
举例：某dmp文件中包含了200张表，我们尝试在导入该DMP文件时指定并行度为10，则语法如下：<br />
$ impdp user/pwd directory=dump_file dumpfile=expdp_20100820.dmp logfile=impdp_20100820.log parallel=10</p>
<p>执行导出<br />
1. 如何起步<br />
前面介绍了一些基本知识，现在我们来试试如何操作吧。<br />
举例如下：从10.1.133.98服务器上，将除数据之外的所有信息导入到10.1.133.88数据库中。<br />
1) 创建一个Directory对象，并授予用户读写权限。<br />
SQL&gt; create directory dump_file as &#8216;/home/oracle/backup&#8217;;</p>
<p>Directory created.</p>
<p>SQL&gt; grant read,write on directory dump_file to bam;</p>
<p>Grant succeeded.<br />
如上，生成的DMP文件将会放在/home/oracle/backup目录下。</p>
<p>2) 编写一个导出的参数文件。<br />
-bash-3.00$ vi expdp_tbs.par<br />
DIRECTORY=DUMP_FILE<br />
DUMPFILE=expdp_bamdb2bamtest.dmp<br />
LOGFILE=expdp_bamdb2bamtest.log<br />
CONTENT=METADATA_ONLY<br />
如上，指定了生成的dmp文件名以及日志名（这些都会被放在/home/oracle/backup下），以及导出模式为：metadata_only&#8211;只导出结构，不包含数据。</p>
<p>3) 执行导出命令<br />
-bash-3.00$ expdp bam/bam parfile=expdp_tbs.par</p>
<p>Export: Release 10.2.0.4.0 &#8211; 64bit Production on Friday, 13 August, 2010 16:35:18</p>
<p>Copyright (c) 2003, 2007, Oracle.  All rights reserved.</p>
<p>Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 &#8211; 64bit Production<br />
With the Partitioning, OLAP, Data Mining and Real Application Testing options<br />
Starting &#8220;BAM&#8221;.&#8221;SYS_EXPORT_SCHEMA_01&#8243;:  bam/******** parfile=expdp_tbs.par<br />
Processing object type SCHEMA_EXPORT/USER<br />
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT<br />
Processing object type SCHEMA_EXPORT/ROLE_GRANT<br />
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE<br />
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA<br />
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA<br />
Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC<br />
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE<br />
Processing object type SCHEMA_EXPORT/TABLE/TABLE<br />
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX<br />
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT<br />
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS<br />
Processing object type SCHEMA_EXPORT/TABLE/COMMENT<br />
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION<br />
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE<br />
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION<br />
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE<br />
Processing object type SCHEMA_EXPORT/VIEW/VIEW<br />
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT<br />
Processing object type SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX<br />
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS<br />
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS<br />
Processing object type SCHEMA_EXPORT/JOB<br />
Master table &#8220;BAM&#8221;.&#8221;SYS_EXPORT_SCHEMA_01&#8243; successfully loaded/unloaded<br />
******************************************************************************<br />
Dump file set for BAM.SYS_EXPORT_SCHEMA_01 is:<br />
/home/oracle/backup/expdp_bamdb2bamtest.dmp<br />
Job &#8220;BAM&#8221;.&#8221;SYS_EXPORT_SCHEMA_01&#8243; successfully completed at 16:41:26</p>
<p>4) 将文件传输到10.1.133.88机器上。<br />
-bash-3.00$ ftp 10.1.133.88<br />
Connected to 10.1.133.88.<br />
220 BNM-TEST2 FTPserverready.<br />
Name (10.1.133.88:oracle): oracle<br />
331 Password required for oracle.<br />
Password:<br />
230 User oracle logged in.<br />
Remote system type is UNIX.<br />
Using binary mode to transfer files.<br />
ftp&gt; bin<br />
200 Type set to I.<br />
ftp&gt; put /home/oracle/backup/expdp_bamdb2bamtest.dmp /export/app22/backup/expdp_bamdb2bamtest.dmp<br />
200 PORT command successful.<br />
150 Opening BINARY mode data connection for /export/app22/backup/expdp_bamdb2bamtest.dmp.<br />
226 Transfer complete.<br />
local: /home/oracle/backup/expdp_bamdb2bamtest.dmp remote: /export/app22/backup/expdp_bamdb2bamtest.dmp<br />
125329408 bytes sent in 1.4 seconds (89551.55 Kbytes/s)<br />
ftp&gt; bye<br />
221-You have transferred 125329408 bytes in 1 files.<br />
221-Total traffic for this session was 125329890 bytes in 1 transfers.<br />
221-Thank you for using the FTP service on BNM-TEST2.<br />
221 Goodbye.</p>
<p>5) 执行导入<br />
-bash-3.00$ impdp bam/bam directory=dump_file dumpfile=expdp_bamdb2bamtest.dmp logfile=expdp_bamdb2bamtest.log table_exists_action=replace</p>
<p>Import: Release 10.2.0.4.0 &#8211; 64bit Production on Friday, 13 August, 2010 16:44:51</p>
<p>Copyright (c) 2003, 2007, Oracle.  All rights reserved.</p>
<p>Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 &#8211; 64bit Production<br />
With the Partitioning, OLAP, Data Mining and Real Application Testing options<br />
Master table &#8220;BAM&#8221;.&#8221;SYS_IMPORT_FULL_01&#8243; successfully loaded/unloaded<br />
Starting &#8220;BAM&#8221;.&#8221;SYS_IMPORT_FULL_01&#8243;:  bam/******** directory=dump_file dumpfile=expdp_bamdb2bamtest.dmp logfile=expdp_bamdb2bamtest.log table_exists_action=replace<br />
Processing object type SCHEMA_EXPORT/USER<br />
ORA-31684: Object type USER:&#8221;BAM&#8221; already exists<br />
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT<br />
Processing object type SCHEMA_EXPORT/ROLE_GRANT<br />
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE<br />
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA<br />
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA<br />
Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC<br />
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE<br />
Processing object type SCHEMA_EXPORT/TABLE/TABLE<br />
&#8230;</p>
<p>6) 如何进入交互模式<br />
在这里，我正在执行导入，我想进入交互模式，查看导入的状态。进入交互模式有两种方式，操作步骤如下：<br />
i 使用Ctrl+C退出当前模式<br />
ii 在命令行模式下，执行Expdp/Impdp命令，同时指定attach参数连接到当前正在制定的导入/导出任务。如：<br />
expdp bam/bam attach=SYS_IMPORT_FULL_01<br />
Warning:如果没有指定Attach参数，则默认进入当前正在运行的任务。不过如果当前没有正在指定的任务，而且也没有给Attach赋值，那么就会报Ora-31626错误。<br />
当命令行进入交互模式后，会显示如下界面：<br />
Export&gt;<br />
7) 交互模式的操作<br />
在交互模式中，支持下面几种操作。<br />
i 查看JOB的运行状态<br />
Export&gt; status<br />
ii 回退到命令行<br />
Export&gt; continue_client<br />
iii 增加并行<br />
Export&gt; parallel=4<br />
Warning: 在使用导出时，不能直接指定parallel参数，否则可能会遇到ORA-39095错误，因为如果要并行导出，则必须指定多个导出文件，这里的并行导出是指，多个线程同时工作，同时从数据库中导出多个dmp文件来。<br />
在Oracle Database Utilities中有如下解释：<br />
Because each active worker process or I/O server process writes exclusively to one file at a time, an insufficient number of files can have adverse effects. Some of the worker processes will be idle while waiting for files, thereby degrading the overall performance of the job. More importantly, if any member of a cooperating group of parallel I/O server processes cannot obtain a file for output, then the export operation will be stopped with an ORA-39095 error. Both situations can be corrected by attaching to the job using the Data Pump Export utility, adding more files using the ADD_FILE command while in interactive mode, and in the case of a stopped job, restarting the job.</p>
<p>You can supply multiple file_name specifications as a comma-delimited list or in separate DUMPFILE parameter specifications. If no extension is given for the filename, then Export uses the default file extension of .dmp. The filenames can contain a substitution variable (%U), which implies that multiple files may be generated. The substitution variable is expanded in the resulting filenames into a 2-digit, fixed-width, incrementing integer starting at 01 and ending at 99. If a file specification contains two substitution variables, both are incremented at the same time. For example, exp%Uaa%U.dmp would resolve to exp01aa01.dmp, exp02aa02.dmp, and so forth.</p>
<p>iv 停止JOB<br />
Export&gt; stop_job<br />
v 启动JOB<br />
Export&gt; start_job<br />
vi 杀掉JOB<br />
Export&gt; kill_job<br />
vii 退出交互模式<br />
Export&gt; exit_client<br />
viii 指定文件大小<br />
Export&gt; filesize=1G<br />
ix 帮助<br />
Export&gt; Help</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/345.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CLOB的物理存储结构及语言编码详解</title>
		<link>http://www.orafan.net/blog/329.html</link>
		<comments>http://www.orafan.net/blog/329.html#comments</comments>
		<pubDate>Thu, 06 Jan 2011 08:50:23 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[clob]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[lob]]></category>

		<guid isPermaLink="false">http://www.orafan.net/?p=329</guid>
		<description><![CDATA[最近测试一个工具Database Migration for Unicode，功能是把非unicode编码存储数据的数据库转化为Unicode的数据库。在guide中提到一句，CLOB类型的列无需转换编码，这句话引起我的兴趣，为何别的字符类型char或者varchar2都需要编码转换，为什么CLOB不需要。在网上搜索，找到了DBSNAKE的这篇文章（http://dbsnake.com/2010/07/lob-characterset-endian.html）。里面提到了一篇Note [ID 257772.1],核心意思是，基本上从10g之后的CLOB的字符编码无论在何种CharacterSet下均为AL16UTF16。现在特来验证一下。 1. 在JA16EUC的数据库中创建测试用户及测试表(LOB存储为disable storage in row) SELECT value FROM nls_database_parameters WHERE PARAMETER='NLS_CHARACTERSET'; &#160; VALUE &#160; ------------------------ &#160; JA16EUC &#160; CREATE TABLE tst.tab1&#40;col1 CLOB&#41; tablespace DATA lob &#40;col1&#41; store AS &#40;tablespace DATA disable storage IN row nocache&#41;; &#160; INSERT INTO tst.tab1 VALUES&#40;’ビジネス運営’&#41;; &#160; commit; 找出这一行存储的物理文件和block SELECT dbms_rowid.rowid_block_number&#40;rowid&#41; bno,col1 FROM tst.tab1; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>最近测试一个工具Database Migration for Unicode，功能是把非unicode编码存储数据的数据库转化为Unicode的数据库。在guide中提到一句，CLOB类型的列无需转换编码，这句话引起我的兴趣，为何别的字符类型char或者varchar2都需要编码转换，为什么CLOB不需要。在网上搜索，找到了DBSNAKE的这篇文章（http://dbsnake.com/2010/07/lob-characterset-endian.html）。里面提到了一篇Note [ID 257772.1],核心意思是，基本上从10g之后的CLOB的字符编码无论在何种CharacterSet下均为AL16UTF16。现在特来验证一下。<br />
<span id="more-329"></span><br />
1. 在JA16EUC的数据库中创建测试用户及测试表(LOB存储为disable storage in row)</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> value <span style="color: #993333; font-weight: bold;">FROM</span> nls_database_parameters <span style="color: #993333; font-weight: bold;">WHERE</span> PARAMETER<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'NLS_CHARACTERSET'</span>;
&nbsp;
VALUE
&nbsp;
<span style="color: #808080; font-style: italic;">------------------------</span>
&nbsp;
JA16EUC
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> tst<span style="color: #66cc66;">.</span>tab1<span style="color: #66cc66;">&#40;</span>col1 CLOB<span style="color: #66cc66;">&#41;</span> tablespace <span style="color: #993333; font-weight: bold;">DATA</span>
lob <span style="color: #66cc66;">&#40;</span>col1<span style="color: #66cc66;">&#41;</span> store <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #66cc66;">&#40;</span>tablespace <span style="color: #993333; font-weight: bold;">DATA</span> disable storage <span style="color: #993333; font-weight: bold;">IN</span> row nocache<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> tst<span style="color: #66cc66;">.</span>tab1 <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color: #66cc66;">&#40;</span>’ビジネス運営’<span style="color: #66cc66;">&#41;</span>;
&nbsp;
commit;</pre></div></div>

<p>找出这一行存储的物理文件和block</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> dbms_rowid<span style="color: #66cc66;">.</span>rowid_block_number<span style="color: #66cc66;">&#40;</span>rowid<span style="color: #66cc66;">&#41;</span> bno<span style="color: #66cc66;">,</span>col1 <span style="color: #993333; font-weight: bold;">FROM</span> tst<span style="color: #66cc66;">.</span>tab1;
&nbsp;
BNO COL1
&nbsp;
<span style="color: #808080; font-style: italic;">---------- ------------------------------</span>
&nbsp;
<span style="color: #cc66cc;">135</span> ビジネス運営
&nbsp;
<span style="color: #993333; font-weight: bold;">SELECT</span> FILE_NAME<span style="color: #66cc66;">,</span>FILE_ID <span style="color: #993333; font-weight: bold;">FROM</span> dba_data_files;
&nbsp;
FILE_NAME                                             FILE_ID
&nbsp;
<span style="color: #808080; font-style: italic;">-------------------------------------------------- ----------</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>system01<span style="color: #66cc66;">.</span>dbf                   <span style="color: #cc66cc;">1</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>sysaux01<span style="color: #66cc66;">.</span>dbf                   <span style="color: #cc66cc;">2</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>undotbs01<span style="color: #66cc66;">.</span>dbf                  <span style="color: #cc66cc;">3</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>users01<span style="color: #66cc66;">.</span>dbf                    <span style="color: #cc66cc;">4</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span><span style="color: #993333; font-weight: bold;">DATA</span><span style="color: #66cc66;">.</span>dbf                       <span style="color: #cc66cc;">5</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">ALTER</span> system dump datafile <span style="color: #cc66cc;">5</span> block <span style="color: #cc66cc;">135</span>;</pre></div></div>

<p>在udump里找到对应的trace文件，因为使用的是11gR2，所以路径略有不同</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> value <span style="color: #993333; font-weight: bold;">FROM</span> v$diag_info <span style="color: #993333; font-weight: bold;">WHERE</span> name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'Default Trace File'</span>;
&nbsp;
VALUE
&nbsp;
<span style="color: #808080; font-style: italic;">----------------------------------------------------------------</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>diag<span style="color: #66cc66;">/</span>rdbms<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>trace<span style="color: #66cc66;">/</span>euc2_ora_6234<span style="color: #66cc66;">.</span>trc</pre></div></div>

<p>在上述trace里找到</p>
<p>block_row_dump:</p>
<p>tab 0, row 0, @0x1f80</p>
<p>tl: 24 fb: &#8211;H-FL&#8211; lb: 0&#215;1  cc: 1</p>
<p>col  0: [20]  00 54 00 01 02 08 80 00 00 02 <strong>00 00 00 01 00 00 00 2d c8 b5 &#8211;&gt;这里后10个字节就是LobID</strong></p>
<p>LOB</p>
<p>Locator:</p>
<p>Length:        84(20)</p>
<p>Version:        1</p>
<p>Byte Length:    2</p>
<p>LobID: 00.00.00.01.00.00.00.2d.c8.b5</p>
<p>Flags[ 0x02 0x08 0x80 0x00 ]:</p>
<p>Type: CLOB</p>
<p>Storage: BasicFile</p>
<p>Disable Storage in Row</p>
<p>Characterset Format: <strong>IMPLICIT  &#8211;&gt;可以发现这里并没有写明CLOB字段所使用的编码</strong></p>
<p>Partitioned Table: No</p>
<p>Options: VaringWidthReadWrite</p>
<p>这里就需要介绍一下LOB在enable还是disable storage in row这两种模式下的存储格式。</p>
<p>先看一下我们这个含有LOB的TAB1表有哪些相关的segment：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> SEGMENT_NAME<span style="color: #66cc66;">,</span>SEGMENT_TYPE <span style="color: #993333; font-weight: bold;">FROM</span> dba_segments <span style="color: #993333; font-weight: bold;">WHERE</span> OWNER<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'TST'</span>;
&nbsp;
SEGMENT_NAME                             SEGMENT_TYPE
&nbsp;
<span style="color: #808080; font-style: italic;">---------------------------------------- ---------------</span>
&nbsp;
TAB1                                     <span style="color: #993333; font-weight: bold;">TABLE</span>
&nbsp;
SYS_IL0000017724C00001$$                 LOBINDEX
&nbsp;
SYS_LOB0000017724C00001$$                LOBSEGMENT</pre></div></div>

<p>背景知识，LOB是Large Object（大对象）的简称，包括CLOB，NCLOB，BLOB，BFILE。这里我们讨论的只是CLOB。创建每一个LOB列除了表中的一个column外，另外同时还创建了两个物理结构：LOB index和LOB segment。</p>
<p>首先，需要了解的是在默认情况下LOB segment是和其所在的table存储在一起的，即in-line。而另外一种，LOB的访问是通过LOB locator来访问LOB index，LOB index再指向真正的物理存储数据的地方即LOB segment里的chunk。LOB locator就是指向LOB index的Key。</p>
<p>接下来先看一下Enable storage in row的方式下LOB的存储。这里分为两种情况，小于4000字节和大于4000字节。</p>
<p>LOB字段的locator加Inode加LOB的内容总长度小于4000字节时：</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="85" valign="top">Col1</td>
<td width="501" valign="top">LOB Col</td>
</tr>
<tr>
<td width="85" valign="top">1</td>
<td width="501" valign="top">Locator1，Inode 1，LOB data 1</td>
</tr>
<tr>
<td width="85" valign="top">2</td>
<td width="501" valign="top">Locator2，Inode 2，LOB data 2</td>
</tr>
</tbody>
</table>
<p>这里LOB字段的存储是按如下的格式：</p>
<p>2字节的LOB locator长度（除这两个长度字节外）<br />
2字节的LOB locator structure版本<br />
4字节的FLAG<br />
2字节的字符集里字符的长度<br />
10字节的LOB ID<br />
16字节的inode</p>
<p>之后就是LOB data，所以这里in-line的情况下理论上最多能存储4000-2-2-4-2-10-16=3964字节。</p>
<p>其他情况：</p>
<table border="0" cellspacing="0" cellpadding="0" width="435">
<tbody>
<tr>
<td width="85" valign="top">Col1</td>
<td width="161" valign="top">LOB Col</td>
<td width="66" valign="bottom"></td>
<td width="123" valign="top">LOB Col</td>
</tr>
<tr>
<td width="85" valign="top">1</td>
<td width="161" valign="top">Locator1，Inode 1</td>
<td width="66" valign="bottom">&#8212;&#8212;&#8211;&gt;</td>
<td width="123" valign="top">LOB data 1</td>
</tr>
<tr>
<td width="85" valign="top">2</td>
<td width="161" valign="top">Locator2，Inode 2</td>
<td width="66" valign="bottom">&#8212;&#8212;&#8211;&gt;</td>
<td width="123" valign="top">LOB data 2</td>
</tr>
</tbody>
</table>
<p>就是说即使Enable storage in row，LOB字段在LOB的控制信息（即Locator加Inode）长度加LOB data长度大于4000字节的时候，LOB data也是不存储在row内部的。在表里LOB字段的第36-84字节存储的是LOB data的前12个chunk的RDBA。如果12个不够的情况下，这里存放的不是chunk的RDBA，而是LOB index的RDBA。</p>
<p>另外，在Disable storage in row的方式下，数据都是这么存储的：</p>
<table border="0" cellspacing="0" cellpadding="0" width="627">
<tbody>
<tr>
<td width="64" valign="top">Col1</td>
<td width="171" valign="top">LOB Col</td>
<td width="50" valign="bottom"></td>
<td width="146" valign="top">LOB Index</td>
<td width="52" valign="bottom"></td>
<td width="144" valign="top">LOB Storage</td>
</tr>
<tr>
<td width="64" valign="top">1</td>
<td width="171" valign="top">Locator1</td>
<td width="50" valign="bottom">&#8212;&#8212;&gt;</td>
<td width="146" valign="top">Inode 1</td>
<td width="52" valign="bottom">&#8212;&#8212;&gt;</td>
<td width="144" valign="top">LOB data 1</td>
</tr>
<tr>
<td width="64" valign="top">2</td>
<td width="171" valign="top">Locator2</td>
<td width="50" valign="bottom">&#8212;&#8212;&gt;</td>
<td width="146" valign="top">Inode 2</td>
<td width="52" valign="bottom">&#8212;&#8212;&gt;</td>
<td width="144" valign="top">LOB data 2</td>
</tr>
</tbody>
</table>
<p>LOB index是一个类似于unique index的结构。这里我们把LOB index的叶子块的信息dump出来。</p>
<p>先找出TAB1的OBJ#：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> object_id <span style="color: #993333; font-weight: bold;">FROM</span> dba_objects <span style="color: #993333; font-weight: bold;">WHERE</span> object_name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'TAB1'</span>;
&nbsp;
OBJECT_ID
&nbsp;
<span style="color: #808080; font-style: italic;">----------</span>
&nbsp;
<span style="color: #cc66cc;">17724</span>
&nbsp;
再找出TAB1里的LOB <span style="color: #993333; font-weight: bold;">INDEX</span>的ind<span style="color: #808080; font-style: italic;">#：</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">SELECT</span> IND<span style="color: #808080; font-style: italic;"># from lob$ where OBJ#='17724';</span>
&nbsp;
IND<span style="color: #808080; font-style: italic;">#</span>
&nbsp;
<span style="color: #808080; font-style: italic;">----------</span>
&nbsp;
<span style="color: #cc66cc;">17726</span></pre></div></div>

<p>把这个index的tree给dump出来：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> session <span style="color: #993333; font-weight: bold;">SET</span> events <span style="color: #ff0000;">'immediate trace name treedump level 17726'</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">SELECT</span> value <span style="color: #993333; font-weight: bold;">FROM</span> v$diag_info <span style="color: #993333; font-weight: bold;">WHERE</span> name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'Default Trace File'</span>;
&nbsp;
VALUE
&nbsp;
<span style="color: #808080; font-style: italic;">-------------------------------------------------------------</span>
&nbsp;
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>diag<span style="color: #66cc66;">/</span>rdbms<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>euc2<span style="color: #66cc66;">/</span>trace<span style="color: #66cc66;">/</span>euc2_ora_11704<span style="color: #66cc66;">.</span>trc</pre></div></div>

<p>从上面这个trace中找到：</p>
<p>&#8212;&#8211; begin tree dump</p>
<p>leaf: 0&#215;1400093 20971667 (0: nrow: 1 rrow: 1)</p>
<p>&#8212;&#8211; end tree dump<br />
解释：前两列分别是RDBA的十六进制和十进制地址，由此可以得出leaf block的number。Nrow 是行数，如果是branch block的话就是child nodes的个数。</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> DBMS_UTILITY<span style="color: #66cc66;">.</span>data_block_address_block<span style="color: #66cc66;">&#40;</span>TO_NUMBER<span style="color: #66cc66;">&#40;</span>LTRIM<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1400093'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'xxxxxxxx'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
 BNO <span style="color: #993333; font-weight: bold;">FROM</span> dual;
&nbsp;
BNO
&nbsp;
<span style="color: #808080; font-style: italic;">----------</span>
&nbsp;
<span style="color: #cc66cc;">147</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">ALTER</span> system dump datafile <span style="color: #cc66cc;">5</span> block <span style="color: #cc66cc;">147</span>;</pre></div></div>

<p>得到50个字节的LOB index</p>
<p>row#0[7982] flag: &#8212;&#8212;, lock: 2, len=50, data:(32):</p>
<p>00 20 03 00 00 00 00 00 00 0c 00 00 00 00 00 01 <strong>01 40 00 8f</strong> 00 00 00 00 00</p>
<p>00 00 00 00 00 00 00</p>
<p>col 0; len 10; (10):  00 00 00 01 00 00 00 2d c8 b5</p>
<p>col 1; len 4; (4):  00 00 00 00</p>
<p>LOB index的结构是：</p>
<p>长度为50个byte，具体组成如下：</p>
<p>行头flag（1个byte）</p>
<p>lock byte（1个byte）</p>
<p>lob index key ( 32个byte，要么由16个byte的lob inode+4个RDBA组成，要么由8个RDBA组成。Disable storage in row的情况下是前者)</p>
<p>lob id的长度（1个byte）＋ lob id（10个byte）</p>
<p>page number的长度（1个byte）</p>
<p>page number（4个byte）</p>
<p>Inode的结构是：</p>
<p>2字节的in-line的data的长度</p>
<p>1字节的inode标志位：1代表这是个有效的lob，2代表这个inode在LOB index里，3代表这个lob是个有效的lob，而且在LOB index里</p>
<p>1字节的预留位</p>
<p>4字节full oracle blocks数量</p>
<p>2字节最后一个page里有多少byte的数据</p>
<p>6字节的LOB version，0&#215;0001.00000000的形式</p>
<p>所以这里<strong>01 40 00 8f</strong>就是第一个chunk的RDBA的地址。</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> DBMS_UTILITY<span style="color: #66cc66;">.</span>data_block_address_block<span style="color: #66cc66;">&#40;</span>TO_NUMBER<span style="color: #66cc66;">&#40;</span>LTRIM<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'0140008f'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'xxxxxxxx'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
 BNO <span style="color: #993333; font-weight: bold;">FROM</span> dual;
&nbsp;
BNO
&nbsp;
<span style="color: #808080; font-style: italic;">----------</span>
&nbsp;
<span style="color: #cc66cc;">143</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">ALTER</span> system dump datafile <span style="color: #cc66cc;">5</span> block <span style="color: #cc66cc;">143</span>;</pre></div></div>

<p>可以从trace中得到CLOB字段的实际存储的物理格式：</p>
<p>Long field block dump:</p>
<p>Object Id    17725</p>
<p>LobId: 00010002DC8B5 PageNo        0</p>
<p>Version: 0&#215;0000.00000000  pdba: 20971656</p>
<p><strong>30 d3 30 b8 30 cd 30 b9 90 4b 55 b6</strong> 00 20 00 20 00 20 00 20 00 20 00 20</p>
<p>我们验证一下这里的十六进制码到底跟哪个CharSet里的文字的物理格式一样：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> aaa <span style="color: #66cc66;">&#40;</span>col1 varchar2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>col2 nvarchar2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> aaa <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'ビジネス運営'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'ビジネス運営'</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">SELECT</span> dump<span style="color: #66cc66;">&#40;</span>col1<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1016</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>dump<span style="color: #66cc66;">&#40;</span>col2<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1016</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> aaa;
&nbsp;
DUMP<span style="color: #66cc66;">&#40;</span>COL1<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1016</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">--------------------------------------------------------------------------------</span>
&nbsp;
DUMP<span style="color: #66cc66;">&#40;</span>COL2<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1016</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">--------------------------------------------------------------------------------</span>
&nbsp;
Typ<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span> Len<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">12</span> CharacterSet<span style="color: #66cc66;">=</span>JA16EUC: a5<span style="color: #66cc66;">,</span>d3<span style="color: #66cc66;">,</span>a5<span style="color: #66cc66;">,</span>b8<span style="color: #66cc66;">,</span>a5<span style="color: #66cc66;">,</span>cd<span style="color: #66cc66;">,</span>a5<span style="color: #66cc66;">,</span>b9<span style="color: #66cc66;">,</span>b1<span style="color: #66cc66;">,</span>bf<span style="color: #66cc66;">,</span>b1<span style="color: #66cc66;">,</span>c4
&nbsp;
Typ<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span> Len<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">12</span> CharacterSet<span style="color: #66cc66;">=</span>AL16UTF16: <span style="color: #cc66cc;">30</span><span style="color: #66cc66;">,</span>d3<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">,</span>b8<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">,</span>cd<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">,</span>b9<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">90</span><span style="color: #66cc66;">,</span>4b<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">55</span><span style="color: #66cc66;">,</span>b6</pre></div></div>

<p>可见CLOB的物理存储格式并不是JA16EUC，而是AL16UTF16。</p>
<p>在研究这个东西的过程中得到了崔华（http://dbsnake.com）的大力帮助，在这里表示感谢。</p>
<p>参考：</p>
<p>DSI 402e：P52-P57，P250-P254</p>
<p><a href="http://dbsnake.com/2010/07/some-lob-internal.html" target="_blank">http://dbsnake.com/2010/07/some-lob-internal.html</a></p>
<p>全文PDF版本（排版好看很多）在这里 <a href="http://www.orafan.net/wp-content/uploads/CLOB_Storage_Charset.pdf">CLOB_Storage_Charset.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/329.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在11gR2中编译BBED工具</title>
		<link>http://www.orafan.net/blog/322.html</link>
		<comments>http://www.orafan.net/blog/322.html#comments</comments>
		<pubDate>Mon, 20 Dec 2010 07:22:17 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[New Feature]]></category>
		<category><![CDATA[11.2]]></category>
		<category><![CDATA[11gR2]]></category>
		<category><![CDATA[bbed]]></category>
		<category><![CDATA[block edit]]></category>

		<guid isPermaLink="false">http://www.orafan.net/?p=322</guid>
		<description><![CDATA[11gR2中编译bbed时报错 &#91;oracle@cdcjp11vm1 lib&#93;$ make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed &#160; Linking BBED utility &#40;bbed&#41; rm -f /u01/app/oracle/product/11.2.0/dbhome_1/bin/bbed gcc -o /u01/app/oracle/product/11.2.0/dbhome_1/bin/bbed -m64 -L/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/ -L/u01/app/oracle/product/11.2.0/dbhome_1/lib/stubs/ /u01/app/oracle/product/11.2.0/dbhome_1/lib/s0main.o /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ssbbded.o /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/sbbdpt.o `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -ldbtools11 -lclntsh `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnro11 `cat /u01/app/oracle/product/11.2.0/dbhome_1/lib/ldflags` -lncrypt11 -lnsgr11 -lnzjs11 -ln11 -lnl11 -lnnz11 -lzt11 -lztkg11 -lztkg11 -lclient11 [...]]]></description>
			<content:encoded><![CDATA[<p>11gR2中编译bbed时报错<br />
<span id="more-322"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 lib<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #660033;">-f</span> ins_rdbms.mk <span style="color: #007800;">BBED</span>=<span style="color: #007800;">$ORACLE_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed <span style="color: #007800;">$ORACLE_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed
&nbsp;
Linking BBED utility <span style="color: #7a0874; font-weight: bold;">&#40;</span>bbed<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed
<span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #660033;">-o</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed <span style="color: #660033;">-m64</span> -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span> -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span> -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>stubs<span style="color: #000000; font-weight: bold;">/</span>  <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>s0main.o <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ssbbded.o <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sbbdpt.o <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-ldbtools11</span> <span style="color: #660033;">-lclntsh</span>  <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lnro11</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lnnz11</span> <span style="color: #660033;">-lzt11</span> <span style="color: #660033;">-lztkg11</span> <span style="color: #660033;">-lztkg11</span> <span style="color: #660033;">-lclient11</span> <span style="color: #660033;">-lnnetd11</span>  <span style="color: #660033;">-lvsn11</span> <span style="color: #660033;">-lcommon11</span> <span style="color: #660033;">-lgeneric11</span> <span style="color: #660033;">-lmm</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span>  <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lxml11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lunls11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lnro11</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lclient11</span> <span style="color: #660033;">-lnnetd11</span>  <span style="color: #660033;">-lvsn11</span> <span style="color: #660033;">-lcommon11</span> <span style="color: #660033;">-lgeneric11</span>   <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span>  <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lxml11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lunls11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lclient11</span> <span style="color: #660033;">-lnnetd11</span>  <span style="color: #660033;">-lvsn11</span> <span style="color: #660033;">-lcommon11</span> <span style="color: #660033;">-lgeneric11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span>  <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lxml11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lunls11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lnls11</span>   <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sysliblist<span style="color: #000000; font-weight: bold;">`</span> -Wl,-rpath,<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib <span style="color: #660033;">-lm</span>    <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sysliblist<span style="color: #000000; font-weight: bold;">`</span> <span style="color: #660033;">-ldl</span> <span style="color: #660033;">-lm</span>   -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib
<span style="color: #c20cb9; font-weight: bold;">gcc</span>: <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>db<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ssbbded.o: No such <span style="color: #c20cb9; font-weight: bold;">file</span> or directory
<span style="color: #c20cb9; font-weight: bold;">gcc</span>: <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>db<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sbbdpt.o: No such <span style="color: #c20cb9; font-weight: bold;">file</span> or directory
<span style="color: #c20cb9; font-weight: bold;">make</span>: <span style="color: #000000; font-weight: bold;">***</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>db<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>bbed<span style="color: #7a0874; font-weight: bold;">&#93;</span> Error <span style="color: #000000;">1</span></pre></div></div>

<p>gcc提示有两个链接库无法找到，这时我们可以从10.2的同一路径下把它们拷过来</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp08vm1 lib<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #c20cb9; font-weight: bold;">scp</span> <span style="color: #000000; font-weight: bold;">*</span>bb<span style="color: #000000; font-weight: bold;">*</span> cdcjp11vm1:<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib</pre></div></div>

<p>这时可以make了，但是使用是还是会报错</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 lib<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #660033;">-f</span> ins_rdbms.mk <span style="color: #007800;">BBED</span>=<span style="color: #007800;">$ORACLE_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed <span style="color: #007800;">$ORACLE_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed
&nbsp;
Linking BBED utility <span style="color: #7a0874; font-weight: bold;">&#40;</span>bbed<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed
<span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #660033;">-o</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>bbed <span style="color: #660033;">-m64</span> -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span> -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span> -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>stubs<span style="color: #000000; font-weight: bold;">/</span>  <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>s0main.o <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ssbbded.o <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sbbdpt.o <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-ldbtools11</span> <span style="color: #660033;">-lclntsh</span>  <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lnro11</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lnnz11</span> <span style="color: #660033;">-lzt11</span> <span style="color: #660033;">-lztkg11</span> <span style="color: #660033;">-lztkg11</span> <span style="color: #660033;">-lclient11</span> <span style="color: #660033;">-lnnetd11</span>  <span style="color: #660033;">-lvsn11</span> <span style="color: #660033;">-lcommon11</span> <span style="color: #660033;">-lgeneric11</span> <span style="color: #660033;">-lmm</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span>  <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lxml11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lunls11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lnro11</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ldflags<span style="color: #000000; font-weight: bold;">`</span>    <span style="color: #660033;">-lncrypt11</span> <span style="color: #660033;">-lnsgr11</span> <span style="color: #660033;">-lnzjs11</span> <span style="color: #660033;">-ln11</span> <span style="color: #660033;">-lnl11</span> <span style="color: #660033;">-lclient11</span> <span style="color: #660033;">-lnnetd11</span>  <span style="color: #660033;">-lvsn11</span> <span style="color: #660033;">-lcommon11</span> <span style="color: #660033;">-lgeneric11</span>   <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span>  <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lxml11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lunls11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lclient11</span> <span style="color: #660033;">-lnnetd11</span>  <span style="color: #660033;">-lvsn11</span> <span style="color: #660033;">-lcommon11</span> <span style="color: #660033;">-lgeneric11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span>  <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lxml11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lunls11</span> <span style="color: #660033;">-lsnls11</span> <span style="color: #660033;">-lnls11</span> <span style="color: #660033;">-lcore11</span> <span style="color: #660033;">-lnls11</span>   <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sysliblist<span style="color: #000000; font-weight: bold;">`</span> -Wl,-rpath,<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib <span style="color: #660033;">-lm</span>    <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>sysliblist<span style="color: #000000; font-weight: bold;">`</span> <span style="color: #660033;">-ldl</span> <span style="color: #660033;">-lm</span>   -L<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>lib
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 lib<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ bbed
Message <span style="color: #000000;">112</span> not found; No message <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #007800;">product</span>=RDBMS, <span style="color: #007800;">facility</span>=BBED
BBED-00113: <span style="color: #c20cb9; font-weight: bold;">file</span> not found</pre></div></div>

<p>这是因为bbed 需要用到bbedus.msg和bbedus.msb 2个信息文件，也需要拷过来</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp08vm1 <span style="color: #c20cb9; font-weight: bold;">mesg</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #c20cb9; font-weight: bold;">scp</span> bbedus.ms<span style="color: #000000; font-weight: bold;">*</span> cdcjp11vm1:<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1<span style="color: #000000; font-weight: bold;">/</span>rdbms<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mesg</span><span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>oracle<span style="color: #000000; font-weight: bold;">@</span>cdcjp11vm1 <span style="color: #c20cb9; font-weight: bold;">mesg</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>$ bbed
Password:
&nbsp;
BBED: Release 2.0.0.0.0 - Limited Production on 月 <span style="color: #000000;">12</span>月 <span style="color: #000000;">20</span> <span style="color: #000000;">15</span>:<span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> <span style="color: #000000;">2010</span>
&nbsp;
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">1982</span>, <span style="color: #000000;">2009</span>, Oracle and<span style="color: #000000; font-weight: bold;">/</span>or its affiliates.  All rights reserved.
&nbsp;
<span style="color: #000000; font-weight: bold;">*************</span> <span style="color: #000000; font-weight: bold;">!!!</span> For Oracle Internal Use only <span style="color: #000000; font-weight: bold;">!!!</span> <span style="color: #000000; font-weight: bold;">***************</span>
&nbsp;
BBED<span style="color: #000000; font-weight: bold;">&amp;</span>gt;</pre></div></div>

<p>这里的密码不是DB的密码，是BBED自己的密码，小写的“blockedit”</p>
<p>参考</p>
<p>http://www.oracledatabase12g.com/archives/how-to-make-bbedoracle-block-brower-and-editor-tool-on-unixlinuxwindows.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/322.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle 11.2.0.2新特性——用户重命名(Rename User)</title>
		<link>http://www.orafan.net/blog/315.html</link>
		<comments>http://www.orafan.net/blog/315.html#comments</comments>
		<pubDate>Tue, 07 Sep 2010 02:22:59 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[New Feature]]></category>

		<guid isPermaLink="false">http://www.orafan.net/?p=315</guid>
		<description><![CDATA[11.2.0.2里新增了一个很有意思的新特性——用户重命名(Rename User)，以前俺们都是Rename datafile呀，tablespace呀，Index呀，抑或是constraint之类，没想到User也可以重命名的。据说这个DDL操作的需求是来源于SAP: SAP identifies a specific SAP system by the name of the database schema. If the system is renamed, the schema needs also to be renamed. This happens quite often when a database is copied (i.e. for testing purposes) and the system gets therefore a new name. The schema should also get a [...]]]></description>
			<content:encoded><![CDATA[<p>11.2.0.2里新增了一个很有意思的新特性——用户重命名(Rename User)，以前俺们都是Rename datafile呀，tablespace呀，Index呀，抑或是constraint之类，没想到User也可以重命名的。据说这个DDL操作的需求是来源于SAP: SAP identifies a specific SAP system by the name of the database schema. If the system is renamed, the schema needs also to be renamed. This happens quite often when a database is copied (i.e. for testing purposes) and the system gets therefore a new name. The schema should also get a new name.</p>
<p><span id="more-315"></span>废话不多说，验证一下先：</p>
<p>创建测试用户下一个测试表，查看testusr的ID是84</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">SQL&amp;gt; <span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> testusr<span style="color: #66cc66;">.</span>emp <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> scott<span style="color: #66cc66;">.</span>emp;
SQL&amp;gt; <span style="color: #993333; font-weight: bold;">SELECT</span> USERNAME<span style="color: #66cc66;">,</span>USER_ID <span style="color: #993333; font-weight: bold;">FROM</span> dba_users <span style="color: #993333; font-weight: bold;">WHERE</span> created&amp;gt;<span style="color: #66cc66;">&#40;</span>sysdate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
USERNAME                          USER_ID
<span style="color: #808080; font-style: italic;">------------------------------ ----------</span>
TESTUSR                                <span style="color: #cc66cc;">84</span></pre></div></div>

<p>启用重命名特性需要修改隐含参数“_enable_rename_user”，并需要在restrict mode下Rename</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">SQL&amp;gt; <span style="color: #993333; font-weight: bold;">CREATE</span>  pfile <span style="color: #993333; font-weight: bold;">FROM</span> spfile;
<span style="color: #66cc66;">&#91;</span>oracle@cdcjp47 dbhome_1<span style="color: #66cc66;">&#93;</span>$ vi dbs<span style="color: #66cc66;">/</span>initeastdb<span style="color: #66cc66;">.</span>ora
<span style="color: #808080; font-style: italic;">-- 添加</span>
<span style="color: #66cc66;">*.</span>_enable_rename_user<span style="color: #66cc66;">=</span>TRUE
SQL&amp;gt; shutdown immediate
SQL&amp;gt; startup restrict pfile<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'?/dbs/initeastdb.ora'</span>
SQL&amp;gt; <span style="color: #993333; font-weight: bold;">ALTER</span> user testusr <span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TO</span> testusr1 <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> Welcome1;
SQL&amp;gt; <span style="color: #993333; font-weight: bold;">SELECT</span> USERNAME<span style="color: #66cc66;">,</span>USER_ID <span style="color: #993333; font-weight: bold;">FROM</span> dba_users <span style="color: #993333; font-weight: bold;">WHERE</span> created&amp;gt;<span style="color: #66cc66;">&#40;</span>sysdate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
USERNAME                          USER_ID
<span style="color: #808080; font-style: italic;">------------------------------ ----------</span>
TESTUSR1                               <span style="color: #cc66cc;">84</span>
<span style="color: #808080; font-style: italic;">-- 看看数据，都在的，说明Rename User并不影响Object里面的内容</span>
SQL&amp;gt; <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> testusr1<span style="color: #66cc66;">.</span>emp;
     EMPNO ENAME    JOB               MGR HIREDATE        SAL       COMM     DEPTNO
<span style="color: #808080; font-style: italic;">---------- -------- ---------- ---------- -------- ---------- ---------- ----------</span>
      <span style="color: #cc66cc;">7369</span> SMITH    CLERK            <span style="color: #cc66cc;">7902</span> <span style="color: #cc66cc;">80</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">12</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">17</span>        <span style="color: #cc66cc;">800</span>                    <span style="color: #cc66cc;">20</span>
      <span style="color: #cc66cc;">7499</span> ALLEN    SALESMAN         <span style="color: #cc66cc;">7698</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>02<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">20</span>       <span style="color: #cc66cc;">1600</span>        <span style="color: #cc66cc;">300</span>         <span style="color: #cc66cc;">30</span>
      <span style="color: #cc66cc;">7521</span> WARD     SALESMAN         <span style="color: #cc66cc;">7698</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>02<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">22</span>       <span style="color: #cc66cc;">1250</span>        <span style="color: #cc66cc;">500</span>         <span style="color: #cc66cc;">30</span>
      <span style="color: #cc66cc;">7566</span> JONES    MANAGER          <span style="color: #cc66cc;">7839</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>04<span style="color: #66cc66;">-</span>02       <span style="color: #cc66cc;">2975</span>                    <span style="color: #cc66cc;">20</span>
      <span style="color: #cc66cc;">7654</span> MARTIN   SALESMAN         <span style="color: #cc66cc;">7698</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>09<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">28</span>       <span style="color: #cc66cc;">1250</span>       <span style="color: #cc66cc;">1400</span>         <span style="color: #cc66cc;">30</span>
      <span style="color: #cc66cc;">7698</span> BLAKE    MANAGER          <span style="color: #cc66cc;">7839</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>05<span style="color: #66cc66;">-</span>01       <span style="color: #cc66cc;">2850</span>                    <span style="color: #cc66cc;">30</span>
      <span style="color: #cc66cc;">7782</span> CLARK    MANAGER          <span style="color: #cc66cc;">7839</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>06<span style="color: #66cc66;">-</span>09       <span style="color: #cc66cc;">2450</span>                    <span style="color: #cc66cc;">10</span>
      <span style="color: #cc66cc;">7788</span> SCOTT    ANALYST          <span style="color: #cc66cc;">7566</span> <span style="color: #cc66cc;">87</span><span style="color: #66cc66;">-</span>04<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">19</span>       <span style="color: #cc66cc;">3000</span>                    <span style="color: #cc66cc;">20</span>
      <span style="color: #cc66cc;">7839</span> KING     PRESIDENT             <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">17</span>       <span style="color: #cc66cc;">5000</span>                    <span style="color: #cc66cc;">10</span>
      <span style="color: #cc66cc;">7844</span> TURNER   SALESMAN         <span style="color: #cc66cc;">7698</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span>09<span style="color: #66cc66;">-</span>08       <span style="color: #cc66cc;">1500</span>          <span style="color: #cc66cc;">0</span>         <span style="color: #cc66cc;">30</span>
      <span style="color: #cc66cc;">7876</span> ADAMS    CLERK            <span style="color: #cc66cc;">7788</span> <span style="color: #cc66cc;">87</span><span style="color: #66cc66;">-</span>05<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">23</span>       <span style="color: #cc66cc;">1100</span>                    <span style="color: #cc66cc;">20</span>
      <span style="color: #cc66cc;">7900</span> JAMES    CLERK            <span style="color: #cc66cc;">7698</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">12</span><span style="color: #66cc66;">-</span>03        <span style="color: #cc66cc;">950</span>                    <span style="color: #cc66cc;">30</span>
      <span style="color: #cc66cc;">7902</span> FORD     ANALYST          <span style="color: #cc66cc;">7566</span> <span style="color: #cc66cc;">81</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">12</span><span style="color: #66cc66;">-</span>03       <span style="color: #cc66cc;">3000</span>                    <span style="color: #cc66cc;">20</span>
      <span style="color: #cc66cc;">7934</span> MILLER   CLERK            <span style="color: #cc66cc;">7782</span> <span style="color: #cc66cc;">82</span><span style="color: #66cc66;">-</span>01<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">23</span>       <span style="color: #cc66cc;">1300</span>                    <span style="color: #cc66cc;">10</span></pre></div></div>

<p>注意新用户名不要和现有用户名重名</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">SQL&amp;gt; <span style="color: #993333; font-weight: bold;">ALTER</span> user testusr1 <span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TO</span> scott <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #cc66cc;">123</span>;
<span style="color: #993333; font-weight: bold;">ALTER</span> user testusr1 <span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TO</span> scott <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #cc66cc;">123</span>
<span style="color: #66cc66;">*</span>
ERROR <span style="color: #993333; font-weight: bold;">IN</span> Line <span style="color: #cc66cc;">1</span>：
ORA<span style="color: #66cc66;">-</span>00604: error occurred at recursive SQL level 1<span style="color: #66cc66;">.</span> 
ORA<span style="color: #66cc66;">-</span>00001:<span style="color: #993333; font-weight: bold;">UNIQUE</span> constraint <span style="color: #66cc66;">&#40;</span>SYS<span style="color: #66cc66;">.</span>I_USER1<span style="color: #66cc66;">&#41;</span> violated</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/315.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Physical Standby出现ORA-10458，ORA-01157，ORA-01111</title>
		<link>http://www.orafan.net/blog/303.html</link>
		<comments>http://www.orafan.net/blog/303.html#comments</comments>
		<pubDate>Thu, 15 Jul 2010 07:13:45 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Data Guard]]></category>
		<category><![CDATA[Physical Standby，ORA-01157，ORA-01111]]></category>

		<guid isPermaLink="false">http://www.orafan.net/blog/303.html</guid>
		<description><![CDATA[今天在测试系统中启动Physical Standby，发现报错，最终查出原因是有人在测试库中创建了个tablespace而且把datafile没有放在默认path，导致db_file_name_convert没有产生作用。 系统环境：DB11.2.0.2，Primary和Standby都在同一台主机上 SQL&#62; startup ORACLE instance started. &#160; Total System Global Area 627732480 bytes Fixed Size 1345768 bytes Variable Size 411043608 bytes DATABASE Buffers 209715200 bytes Redo Buffers 5627904 bytes DATABASE mounted. ORA-10458: standby DATABASE requires recovery ORA-01157: cannot identify/LOCK DATA file 7 - see DBWR trace file. ORA-01111:name FOR DATA file 7 IS [...]]]></description>
			<content:encoded><![CDATA[<p>今天在测试系统中启动Physical Standby，发现报错，最终查出原因是有人在测试库中创建了个tablespace而且把datafile没有放在默认path，导致db_file_name_convert没有产生作用。</p>
<p>系统环境：DB11.2.0.2，Primary和Standby都在同一台主机上</p>
<p> <span id="more-303"></span>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">SQL<span style="color: #66cc66;">&gt;</span> startup
ORACLE instance started<span style="color: #66cc66;">.</span>
&nbsp;
Total System Global Area  <span style="color: #cc66cc;">627732480</span> bytes
Fixed Size                  <span style="color: #cc66cc;">1345768</span> bytes
Variable Size             <span style="color: #cc66cc;">411043608</span> bytes
<span style="color: #993333; font-weight: bold;">DATABASE</span> Buffers          <span style="color: #cc66cc;">209715200</span> bytes
Redo Buffers                <span style="color: #cc66cc;">5627904</span> bytes
<span style="color: #993333; font-weight: bold;">DATABASE</span> mounted<span style="color: #66cc66;">.</span>
ORA<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">10458</span>: standby <span style="color: #993333; font-weight: bold;">DATABASE</span> requires recovery
ORA<span style="color: #66cc66;">-</span>01157: cannot identify<span style="color: #66cc66;">/</span><span style="color: #993333; font-weight: bold;">LOCK</span> <span style="color: #993333; font-weight: bold;">DATA</span> file <span style="color: #cc66cc;">7</span> <span style="color: #66cc66;">-</span>
see DBWR trace file<span style="color: #66cc66;">.</span>
ORA<span style="color: #66cc66;">-</span>01111:name <span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">DATA</span> file <span style="color: #cc66cc;">7</span> <span style="color: #993333; font-weight: bold;">IS</span> unknown <span style="color: #66cc66;">-</span> <span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TO</span> correct file
ORA<span style="color: #66cc66;">-</span>01110: <span style="color: #993333; font-weight: bold;">DATA</span> file <span style="color: #cc66cc;">7</span>: <span style="color: #ff0000;">'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00007'</span>
&nbsp;
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> name <span style="color: #993333; font-weight: bold;">FROM</span> v$datafile;
&nbsp;
NAME
<span style="color: #808080; font-style: italic;">--------------------------------------------------------------------------------</span>
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg<span style="color: #66cc66;">/</span>system01<span style="color: #66cc66;">.</span>dbf
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg<span style="color: #66cc66;">/</span>sysaux01<span style="color: #66cc66;">.</span>dbf
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg<span style="color: #66cc66;">/</span>undotbs01<span style="color: #66cc66;">.</span>dbf
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg<span style="color: #66cc66;">/</span>users01<span style="color: #66cc66;">.</span>dbf
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg<span style="color: #66cc66;">/</span>soe<span style="color: #66cc66;">.</span>dbf
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg<span style="color: #66cc66;">/</span>soeindex<span style="color: #66cc66;">.</span>dbf
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>product<span style="color: #66cc66;">/</span>11<span style="color: #66cc66;">.</span>2<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">/</span>dbhome_1<span style="color: #66cc66;">/</span>dbs<span style="color: #66cc66;">/</span>UNNAMED00007
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SHOW</span> parameter convert
&nbsp;
NAME                                 TYPE
<span style="color: #808080; font-style: italic;">------------------------------------ ---------------------------------</span>
VALUE
<span style="color: #808080; font-style: italic;">------------------------------</span>
db_file_name_convert                 string
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcl<span style="color: #66cc66;">,</span>
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg
log_file_name_convert                string
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcl<span style="color: #66cc66;">,</span>
<span style="color: #66cc66;">/</span>u01<span style="color: #66cc66;">/</span>app<span style="color: #66cc66;">/</span>oracle<span style="color: #66cc66;">/</span>oradata<span style="color: #66cc66;">/</span>orcldg
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> !</pre></div></div>

<p>[oracle@cdcjp28 ~]$ vi diag/rdbms/orcldg/orcldg/trace/alert_orcldg.log <br/>Thu Jul 15 16:11:35 2010 <br/><strong style="COLOR: #0000ff">WARNING: File being created with same name as in Primary <br/></strong>Existing file may be overwritten <br/>Errors in file /u01/app/oracle/product/11.2.0/dbhome_1/diag/rdbms/orcldg/orcldg/trace/orcldg_pr00_5141.trc: <br/>ORA-01119: error in creating database file &#8216;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/sh.dbf&#8217; <br/>ORA-27086: unable to lock file &#8211; already in use <br/>Linux Error: 11: Resource temporarily unavailable <br/>Additional information: 8 <br/>Additional information: 29207 <br/>File #7 added to control file as &#8216;UNNAMED00007&#8242;. <br/>Originally created as: <br/>&#8216;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/sh.dbf&#8217; <br/>Recovery was unable to create the file as: <br/>&#8216;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/sh.dbf&#8217; <br/>MRP0: Background Media Recovery terminated with error 1274 <br/>Errors in file /u01/app/oracle/product/11.2.0/dbhome_1/diag/rdbms/orcldg/orcldg/trace/orcldg_pr00_5141.trc: <br/>ORA-01274: cannot add datafile &#8216;/u01/app/oracle/product/11.2.0/dbhome_1/dbs/sh.dbf&#8217; &#8211; file could not be created <br/>Managed Standby Recovery not using Real Time Apply <br/>Recovery interrupted!</p>
<p>解决方案是先把standby_file_management设置为手动，把添加的数据文件拷到备库放datafile的地方，rename到这个新位置，然后把standby_file_management设置为auto，重启备库，搞定！</p>
<p><br/>[oracle@cdcjp28 ~]$ cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/sh.dbf /u01/app/oracle/oradata/orcldg/sh.dbf</p>
<p><br/></p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">SQL<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">ALTER</span> system <span style="color: #993333; font-weight: bold;">SET</span> standby_file_management<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'manual'</span>;
&nbsp;
System altered<span style="color: #66cc66;">.</span>
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> <span style="color: #993333; font-weight: bold;">RENAME</span> file <span style="color: #ff0000;">'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00007'</span> 
     <span style="color: #993333; font-weight: bold;">TO</span> <span style="color: #ff0000;">'/u01/app/oracle/oradata/orcldg/sh.dbf'</span>;
&nbsp;
System altered<span style="color: #66cc66;">.</span>
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">ALTER</span> system <span style="color: #993333; font-weight: bold;">SET</span> standby_file_management<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'auto'</span>;
&nbsp;
System altered<span style="color: #66cc66;">.</span>
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> shutdown immediate
&nbsp;
SQL<span style="color: #66cc66;">&gt;</span> startup</pre></div></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/303.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EM dbcontrol的常用命令</title>
		<link>http://www.orafan.net/blog/295.html</link>
		<comments>http://www.orafan.net/blog/295.html#comments</comments>
		<pubDate>Mon, 05 Jul 2010 07:25:30 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Enterprise Manager]]></category>
		<category><![CDATA[dbcontrol]]></category>
		<category><![CDATA[em]]></category>
		<category><![CDATA[emca]]></category>

		<guid isPermaLink="false">http://www.orafan.net/blog/295.html</guid>
		<description><![CDATA[详细的命令列表还是看OTN（http://download.oracle.com/docs/cd/E11882_01/server.112/e10701/emca.htm#BABDEHCE），下面只列出一些常见的： 创建DBcontrol：emca -config dbcontrol db -repos create RAC下重新部署DBcontrol：emca -reconfig dbcontrol -cluster 删除DBcontrol：emca -deconfig dbcontrol db -repos drop 更改port：emca -reconfig ports [-cluster] -DBCONTROL_HTTP_PORT port_number 重新配置RAC里EM的位置，比如从A节点到B节点： emca -reconfig dbcontrol -cluster -EM_NODE nodename -EM_NODE_LIST NODE_list -EM_NODE DBcontrol的Node名，默认是此命令运行的本地节点 -EM_NODE_LIST 默认是此RAC配置过的所有节点 增加管理的节点：在已经配置了em的节点上运行，填写新加的节点信息 emca -addNode db 删除节点：在不删除的节点上运行，填写删除的节点信息 emca -deleteNode db]]></description>
			<content:encoded><![CDATA[<p>详细的命令列表还是看OTN（<a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10701/emca.htm#BABDEHCE">http://download.oracle.com/docs/cd/E11882_01/server.112/e10701/emca.htm#BABDEHCE</a>），下面只列出一些常见的：</p>
<p>创建DBcontrol：emca -config dbcontrol db -repos create</p>
<p>RAC下重新部署DBcontrol：emca -reconfig dbcontrol -cluster</p>
<p>删除DBcontrol：emca -deconfig dbcontrol db -repos drop</p>
<p><span id="more-295"></span></p>
<p>更改port：emca -reconfig ports [-cluster] -DBCONTROL_HTTP_PORT port_number</p>
<p>重新配置RAC里EM的位置，比如从A节点到B节点：<br />
emca -reconfig dbcontrol -cluster -EM_NODE nodename -EM_NODE_LIST NODE_list<br />
-EM_NODE DBcontrol的Node名，默认是此命令运行的本地节点<br />
-EM_NODE_LIST 默认是此RAC配置过的所有节点</p>
<p>增加管理的节点：在已经配置了em的节点上运行，填写新加的节点信息<br />
emca -addNode db</p>
<p>删除节点：在不删除的节点上运行，填写删除的节点信息<br />
emca -deleteNode db</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/295.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EMGC11g内存占用100%问题</title>
		<link>http://www.orafan.net/blog/284.html</link>
		<comments>http://www.orafan.net/blog/284.html#comments</comments>
		<pubDate>Sat, 12 Jun 2010 03:28:38 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Enterprise Manager]]></category>
		<category><![CDATA[内存]]></category>
		<category><![CDATA[GC11g]]></category>
		<category><![CDATA[weblogic]]></category>

		<guid isPermaLink="false">http://www.orafan.net/blog/284.html</guid>
		<description><![CDATA[EMGC11g测试机上的内存占用总是过一段时间就增长到100%了，怀疑是内存泄漏，查了一下，果然是weblogic的bug。而且GC11g的安装文档上已经明确要求安装weblogic的相关patch了。 http://download.oracle.com/docs/cd/E11857_01/install.111/e15838/install_em_exist_db.htm#CIAIEAAC Oracle WebLogic Server Patch Requirements Ensure that you apply patch ID WDJ7 on Oracle WebLogic Server using the Oracle Smart Update utility. This patch fixes bugs 8990616, 9100465, and 9221722. For information on applying this patch, see My Oracle Support note 1072763.1. For information on Oracle Smart Update utility, see Oracle Smart Update [...]]]></description>
			<content:encoded><![CDATA[<p>EMGC11g测试机上的内存占用总是过一段时间就增长到100%了，怀疑是内存泄漏，查了一下，果然是weblogic的bug。而且GC11g的安装文档上已经明确要求安装weblogic的相关patch了。</p>
<p><a href="http://download.oracle.com/docs/cd/E11857_01/install.111/e15838/install_em_exist_db.htm#CIAIEAAC">http://download.oracle.com/docs/cd/E11857_01/install.111/e15838/install_em_exist_db.htm#CIAIEAAC</a></p>
<table class="Formal" title="Prerequisites for Installing Enterprise Manager System" dir="ltr" border="1" cellspacing="0" cellpadding="3" width="100%" frame="border" rules="all" summary="Prerequisites for Installing Enterprise Manager Grid Control Using an Existing Database">
<tbody>
<tr align="left" valign="top">
<td id="r12c1-t4" align="left">Oracle WebLogic Server Patch Requirements</td>
<td align="left">Ensure that you apply patch ID <code>WDJ7</code> on Oracle WebLogic Server using the Oracle Smart Update utility. This patch fixes bugs 8990616, 9100465, and 9221722.</p>
<p>For information on applying this patch, see <span class="italic">My Oracle Support</span> note 1072763.1.</p>
<p>For information on Oracle Smart Update utility, see <span class="italic">Oracle Smart Update Installing Patches and Maintenance Packs</span> documentation available at:</p>
<p><code><a href="http://www.oracle.com/technology/products/weblogic/index.html">http://www.oracle.com/technology/products/weblogic/index.html</a></code></td>
</tr>
</tbody>
</table>
<p><strong>How to apply recommended WLS patches on WLS home for 11g Grid Control Install/Upgrade [ID 1072763.1]</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/284.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在Windows平台用Cygwin支持SSH来做Agent Push</title>
		<link>http://www.orafan.net/blog/282.html</link>
		<comments>http://www.orafan.net/blog/282.html#comments</comments>
		<pubDate>Thu, 03 Jun 2010 08:01:23 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Enterprise Manager]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Agent]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[push]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://www.orafan.net/blog/282.html</guid>
		<description><![CDATA[大家都知道在win平台上默认是不支持SSH的，而通过GC的GUI来给target主机安装agent（也叫agent push）是必须要用SSH的，因此必须得在windows上装一个工具Cygwin。下面是详细步骤 1：安装cygwin 之前必须确保系统中没有类Unix工具(如OpenSSH,MKSNT)，环境变量里没有OpenSSH\bin或者mksnt类似的项目。 定义安装目录 C:\cygwin，强烈建议安装在这个默认路径，如果Cygwin没有安装在此目录，需要编辑 $OMS_INSTANCE_HOME/sysman/prov/resources/ssPaths_msplats.properties来指向你安装的目录。 注意：如果在目标机上没有将Cygwin安装在C:\cygwin，那么你也需要将OMS机上的Cygwin安装在同一目录。Cygwin的安装路径中不能有空格。 选择 zip,unzip,openSSH,openSSL,vim, 点此 &#8220;skip&#8221; 使之变成选中，cywin会自动下载选择的软件包和它们依赖的包，并进行安装 2：编辑C:\cygwin\cygwin.bat，加入环境变量CYGWIN=binmode tty ntsec set CYGWIN=binmode tty ntsec C: chdir \cygwin\bin bash &#8211;login -I 3：打开cygwin控制台cygwin.bat，输入ssh-host-config 一开始几个都是yes，下面的是这么选 *** Query: Do you want to use a different name? (yes/no) no *** Query: Create new privileged user account &#8216;cyg_server&#8217;? (yes/no) yes 然后输入密码 提示CYGWIN值时，输入binmode tty ntsec Enter [...]]]></description>
			<content:encoded><![CDATA[<p>大家都知道在win平台上默认是不支持SSH的，而通过GC的GUI来给target主机安装agent（也叫agent push）是必须要用SSH的，因此必须得在windows上装一个工具Cygwin。下面是详细步骤</p>
<p><span id="more-282"></span></p>
<p style="margin: 0cm 0cm 0pt;">1：安装cygwin 之前必须确保系统中没有类Unix工具(如OpenSSH,MKSNT)，环境变量里没有OpenSSH\bin或者mksnt类似的项目。</p>
<p style="margin: 0cm 0cm 0pt;">定义安装目录 C:\cygwin，强烈建议安装在这个默认路径，如果Cygwin没有安装在此目录，需要编辑 $OMS_INSTANCE_HOME/sysman/prov/resources/ssPaths_msplats.properties来指向你安装的目录。</p>
<p style="margin: 0cm 0cm 0pt;">注意：如果在目标机上没有将Cygwin安装在C:\cygwin，那么你也需要将OMS机上的Cygwin安装在同一目录。Cygwin的安装路径中不能有空格。</p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">选择 zip,unzip,openSSH,openSSL,vim, 点此 &#8220;skip&#8221; 使之变成选中，cywin会自动下载选择的软件包和它们依赖的包，并进行安装</p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">2：编辑C:\cygwin\cygwin.bat，加入环境变量<strong>CYGWIN=binmode tty ntsec</strong></p>
<p style="background: #cccccc; margin: 0cm 0cm 0pt 51pt; text-align: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><strong>set CYGWIN=binmode tty ntsec</strong><br />
C:<br />
chdir \cygwin\bin<br />
bash &#8211;login -I</p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">3：打开cygwin控制台cygwin.bat，输入ssh-host-config</p>
<p style="margin: 0cm 0cm 0pt;">一开始几个都是yes，下面的是这么选</p>
<p style="margin: 0cm 0cm 0pt;">*** Query: Do you want to use a different name? (yes/no) no<br />
*** Query: Create new privileged user account &#8216;cyg_server&#8217;? (yes/no) yes</p>
<p style="margin: 0cm 0cm 0pt;">然后输入密码</p>
<p style="margin: 0cm 0cm 0pt;">提示CYGWIN值时，输入binmode tty ntsec</p>
<p style="margin: 0cm 0cm 0pt;">Enter the value of CYGWIN for the daemon: [] <strong>binmode tty ntsec</strong></p>
<p style="margin: 0cm 0cm 0pt;">回车</p>
<p style="margin: 0cm 0cm 0pt;">如果提示Problem with /var directory. Exiting. 一般是/var没有执行权限，chmod 775 /var就行了</p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">4：生成SSH key</p>
<p style="margin: 0cm 0cm 0pt;">输入ssh-user-config，除了passphrase的地方是直接回车之外别的都是一路yes</p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">5：net start sshd就能启动ssh了，或者在系统工具-&gt;服务里面启动</p>
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">
<p style="margin: 0cm 0cm 0pt;">Metalink上有篇设置的详细文档</p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 10pt; font-family: 'Arial','sans-serif'; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-fareast-font-family: 宋体; mso-bidi-font-size: 11.0pt; mso-bidi-language: AR-SA;" lang="EN-US"><strong>How to Install/Configure Cygwin and &#8216;ssh&#8217; Server on Windows for use with Grid Control Remote&#8217;s Agent Deployment [ID 389632.1]</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/282.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为实现EM中CRS rolling upgrade如何设置sudo以及sudo环境变量</title>
		<link>http://www.orafan.net/blog/269.html</link>
		<comments>http://www.orafan.net/blog/269.html#comments</comments>
		<pubDate>Tue, 29 Sep 2009 07:39:00 +0000</pubDate>
		<dc:creator>Romeo</dc:creator>
				<category><![CDATA[Enterprise Manager]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[sudo]]></category>

		<guid isPermaLink="false">http://www.orafan.net/?p=269</guid>
		<description><![CDATA[今天在EM dbconsole 11.2环境里给11gR2的CRS打rolling patch时碰到不少关于sudo的问题，特此记录以免忘记。 因为EM都是通过Agent来进行操作的，所有不可能拥有root权限，而打有些patch的时候又不得不用root权限，所以有必要为grid（Grid Infra的user，就是以前的Clusterware），oracle(RAC database的user)两个用户设置sudo。下面以grid用户为例，说明一下。 首先，要编辑sudo，推荐使用visudo命令，而不要去修改/etc/sudoers的权限（默认是440，即只读）。 以root用户登录 &#91;root@cdcjp64vm3 ~&#93;# visudo 找到 root ALL=&#40;ALL&#41; ALL 这一行，在其下面添加 grid ALL=&#40;ALL&#41; NOPASSWD: ALL 注意一定要加NOPASSWD，因为EM是从web界面上直接操作，在其打patch过程中是没法人工输入密码的，当然在打patch之前会让你输入一次grid用户的密码，但是这个密码似乎不能存起来留到之后的交互过程中使用。 另外，找到 Defaults env_keep 这个部分是使用sudo之后要保留的环境变量列表，默认里面是没有ORACLE_HOME的，在rolling upgrade里面有一步需要ORACLE_HOME环境变量，否则会提示让你设置ORACLE_HOME。改为如下： Defaults env_keep = &#34;COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC\ [...]]]></description>
			<content:encoded><![CDATA[<p>今天在EM dbconsole 11.2环境里给11gR2的CRS打rolling patch时碰到不少关于sudo的问题，特此记录以免忘记。</p>
<p>因为EM都是通过Agent来进行操作的，所有不可能拥有root权限，而打有些patch的时候又不得不用root权限，所以有必要为grid（Grid Infra的user，就是以前的Clusterware），oracle(RAC database的user)两个用户设置sudo。下面以grid用户为例，说明一下。</p>
<p> <span id="more-269"></span>
<p>首先，要编辑sudo，推荐使用visudo命令，而不要去修改/etc/sudoers的权限（默认是440，即只读）。 <br/>以root用户登录</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>root<span style="color: #000000; font-weight: bold;">@</span>cdcjp64vm3 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #666666; font-style: italic;"># visudo</span></pre></div></div>

<p>找到</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">root    <span style="color: #007800;">ALL</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>ALL<span style="color: #7a0874; font-weight: bold;">&#41;</span>       ALL</pre></div></div>

<p>这一行，在其下面添加</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">grid    <span style="color: #007800;">ALL</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>ALL<span style="color: #7a0874; font-weight: bold;">&#41;</span>       NOPASSWD: ALL</pre></div></div>

<p>注意一定要加NOPASSWD，因为EM是从web界面上直接操作，在其打patch过程中是没法人工输入密码的，当然在打patch之前会让你输入一次grid用户的密码，但是这个密码似乎不能存起来留到之后的交互过程中使用。</p>
<p>另外，找到</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Defaults    env_keep</pre></div></div>

<p>这个部分是使用sudo之后要保留的环境变量列表，默认里面是没有ORACLE_HOME的，在rolling upgrade里面有一步需要ORACLE_HOME环境变量，否则会提示让你设置ORACLE_HOME。改为如下：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Defaults    env_keep = <span style="color: #ff0000;">&quot;COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR <span style="color: #000099; font-weight: bold;">\
</span>                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME <span style="color: #000099; font-weight: bold;">\
</span>                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION <span style="color: #000099; font-weight: bold;">\
</span>                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC<span style="color: #000099; font-weight: bold;">\
</span>                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS <span style="color: #000099; font-weight: bold;">\
</span>_XKB_CHARSET XAUTHORITY ORACLE_HOME&quot;</span></pre></div></div>

<p>验证一下：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>grid<span style="color: #000000; font-weight: bold;">@</span>cdcjp64vm3 ~<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">env</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">grep</span> ORA
<span style="color: #007800;">ORACLE_HOME</span>=<span style="color: #000000; font-weight: bold;">/</span>u01<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>oracle<span style="color: #000000; font-weight: bold;">/</span>product<span style="color: #000000; font-weight: bold;">/</span>11.2.0<span style="color: #000000; font-weight: bold;">/</span>dbhome_1</pre></div></div>

<p>OK。现在这样设置就能给CRS打patch了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orafan.net/blog/269.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

