<?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>eagle's home</title>
	<atom:link href="http://www.dbafan.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.dbafan.com/blog</link>
	<description>“We are what we repeatedly do. Excellence, then, is not an act, but a habit.” -Aristotle</description>
	<lastBuildDate>Thu, 26 Aug 2010 14:44:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>翠花</title>
		<link>http://www.dbafan.com/blog/?p=388</link>
		<comments>http://www.dbafan.com/blog/?p=388#comments</comments>
		<pubDate>Thu, 26 Aug 2010 14:41:45 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=388</guid>
		<description><![CDATA[周二陪老婆去看话剧《翠花》上海首演，主要还是看邓超。上戏剧院坐的满满的，女生居多，男生大部分是和我一样是陪客。 估计大部分都是邓超的粉丝。我对明星不感冒，不过看下来，邓超... ]]></description>
			<content:encoded><![CDATA[<p>周二陪老婆去看话剧《翠花》上海首演，主要还是看邓超。上戏剧院坐的满满的，女生居多，男生大部分是和我一样是陪客。</p>
<p>估计大部分都是邓超的粉丝。我对明星不感冒，不过看下来，邓超确实演得好，而且也没有因为自己大牌而偷懒，戏份很多。</p>
<p>这部戏如果没有邓超的表演只能算一般般。孙俪没现身，来的是孙俪她妈&#8230;&#8230;</p>
<p><img src="http://www.dbafan.com/photo/cuihua.jpg" alt="翠花海报" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=388</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>消失的segment</title>
		<link>http://www.dbafan.com/blog/?p=379</link>
		<comments>http://www.dbafan.com/blog/?p=379#comments</comments>
		<pubDate>Mon, 10 May 2010 06:01:31 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=379</guid>
		<description><![CDATA[这是在一次恢复演习中偶然发现的一个有趣的问题。 当LMT表空间中文件被offline后，如果该文件中包含有segment header，那么从dba_extents中不能看到该segment。 来看一个测试： SQL> select file_id from dba_... ]]></description>
			<content:encoded><![CDATA[<p>这是在一次恢复演习中偶然发现的一个有趣的问题。</p>
<p>当LMT表空间中文件被offline后，如果该文件中包含有segment header，那么从dba_extents中不能看到该segment。</p>
<p>来看一个测试：</p>
<blockquote><p>SQL> select file_id from dba_data_files where tablespace_name=&#8217;TEST&#8217;;</p>
<p>   FILE_ID<br />
&#8212;&#8212;&#8212;-<br />
        10<br />
        11</p>
<p>SQL> create table eagle_fan(x int) tablespace test;</p>
<p>Table created.</p>
<p>SQL> select  header_file from dba_segments where segment_name=&#8217;EAGLE_FAN&#8217; and owner=&#8217;SYS&#8217;;</p>
<p>HEADER_FILE<br />
&#8212;&#8212;&#8212;&#8211;<br />
         10</p>
<p>SQL> select extent_id ,file_id from dba_extents where segment_name=&#8217;EAGLE_FAN&#8217; and owner=&#8217;SYS&#8217;;</p>
<p> EXTENT_ID    FILE_ID<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         0         10</p>
<p>SQL> select distinct segment_name from dba_extents where file_id=10;</p>
<p>SEGMENT_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
TEST<br />
EAGLE_FAN</p>
<p>SQL> alter database datafile 10 offline ;    </p>
<p>Database altered.</p>
<p>SQL>  select extent_id ,file_id from dba_extents where segment_name=&#8217;EAGLE_FAN&#8217; and owner=&#8217;SYS&#8217;;</p>
<p>SQL> select distinct segment_name from dba_extents where file_id=10;</p>
<p>SEGMENT_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
TEST</p>
<p>no rows selected</p></blockquote>
<p>可以看到datafile 10被offline后，从dba_extents已经看不到该segment。推想而知，对于LMT tablespace，dba_extents会读取文件头信息。<br />
那么也就是说，如果有文件被offline后，我们无法单从dba_extents中知道该文件中包含有哪些segment。</p>
<p>那么我们应该再从dba_segments中得到segment header在该文件中的segment:</p>
<blockquote><p>
SQL> select distinct segment_name from dba_extents where file_id=10<br />
  2  union<br />
  3  select distinct segment_name from dba_segments where header_file=10;</p>
<p>SEGMENT_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
EAGLE_FAN<br />
TEST</p></blockquote>
<p>而DMT tablespace不存在这个问题，我们来看一看dba_extents的视图定义就很清楚了：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">select</span><span style="color: Gray;"> </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">owner</span><span style="color: Gray;">, </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_name</span><span style="color: Gray;">, </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">partition_name</span><span style="color: Gray;">, </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_type</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">tablespace_name</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ext</span><span style="color: #ffa500;">#, f.file#, e.block#, e.length * ds.blocksize, e.length, e.file#</span></li>
<li><span style="color: Green;">from</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">uet</span><span style="color: Gray;">$ </span><span style="color: Blue;">e</span><span style="color: Gray;">, </span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">sys_dba_segs</span><span style="color: Gray;"> </span><span style="color: Blue;">ds</span><span style="color: Gray;">, </span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">file</span><span style="color: Gray;">$ </span><span style="color: Blue;">f</span></li>
<li><span style="color: Green;">where</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">segfile</span><span style="color: #ffa500;"># = ds.relative_fno</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">segblock</span><span style="color: #ffa500;"># = ds.header_block</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ts</span><span style="color: #ffa500;"># = ds.tablespace_id</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ts</span><span style="color: #ffa500;"># = f.ts#</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">file</span><span style="color: #ffa500;"># = f.relfile#</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bitand</span><span style="color: Olive;">(</span><span style="color: Blue;">NVL</span><span style="color: Olive;">(</span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_flags</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bitand</span><span style="color: Olive;">(</span><span style="color: Blue;">NVL</span><span style="color: Olive;">(</span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_flags</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: Maroon;">65536</span><span style="color: Olive;">)</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span></li>
<li><span style="color: Green;">union</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">all</span></li>
<li><span style="color: Green;">select</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">owner</span><span style="color: Gray;">, </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_name</span><span style="color: Gray;">, </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">partition_name</span><span style="color: Gray;">, </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_type</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">tablespace_name</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbueextno</span><span style="color: Gray;">, </span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">file</span><span style="color: #ffa500;">#, e.ktfbuebno,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbueblks</span><span style="color: Gray;"> * </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">blocksize</span><span style="color: Gray;">, </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbueblks</span><span style="color: Gray;">, </span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbuefno</span></li>
<li><span style="color: Green;">from</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">sys_dba_segs</span><span style="color: Gray;"> </span><span style="color: Blue;">ds</span><span style="color: Gray;">, </span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">x</span><span style="color: Gray;">$</span><span style="color: Blue;">ktfbue</span><span style="color: Gray;"> </span><span style="color: Blue;">e</span><span style="color: Gray;">, </span><span style="color: Blue;">sys</span><span style="color: Gray;">.</span><span style="color: Blue;">file</span><span style="color: Gray;">$ </span><span style="color: Blue;">f</span></li>
<li><span style="color: Green;">where</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbuesegfno</span><span style="color: Gray;"> = </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">relative_fno</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbuesegbno</span><span style="color: Gray;"> = </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">header_block</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbuesegtsn</span><span style="color: Gray;"> = </span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">tablespace_id</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">tablespace_id</span><span style="color: Gray;"> = </span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">ts</span><span style="color: #ffa500;">#</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">e</span><span style="color: Gray;">.</span><span style="color: Blue;">ktfbuefno</span><span style="color: Gray;"> = </span><span style="color: Blue;">f</span><span style="color: Gray;">.</span><span style="color: Blue;">relfile</span><span style="color: #ffa500;">#</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bitand</span><span style="color: Olive;">(</span><span style="color: Blue;">NVL</span><span style="color: Olive;">(</span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_flags</span><span style="color: Gray;">, </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span><span style="color: Gray;"> = </span><span style="color: Maroon;">1</span></li>
<li><span style="color: Gray;">&nbsp; </span><span style="color: Green;">and</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bitand</span><span style="color: Olive;">(</span><span style="color: Blue;">NVL</span><span style="color: Olive;">(</span><span style="color: Blue;">ds</span><span style="color: Gray;">.</span><span style="color: Blue;">segment_flags</span><span style="color: Gray;">,</span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: Maroon;">65536</span><span style="color: Olive;">)</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span></li></ol></div>
<p>union all以上的部分对应于DMT tablespace，下面的部分对应于LMT tablespace。</p>
<p>DMT tablespace从uet$中读取extent信息，所以不受offline datafile的影响。</p>
<p>LMT tablespace从x$ktfbue中读取extent信息，对于x$ktfbue，描述为&#8221;Used extent bitmap in file header for LMT (equivalent to uet$ in DMT)&#8221;</p>
<p>我们来看看datafile offline前后，该表有什么变化:</p>
<p>&#8211; online datafile 10,多分配几个extent给表eagle_fan，并记录下一些信息</p>
<blockquote><p>SQL> recover datafile 10<br />
Media recovery complete.<br />
SQL> alter database datafile 10 online;</p>
<p>Database altered.</p>
<p>SQL> alter table eagle_fan allocate extent;</p>
<p>Table altered.</p>
<p>SQL> /</p>
<p>Table altered.</p>
<p>SQL> /</p>
<p>Table altered.</p>
<p>SQL> /</p>
<p>Table altered.</p>
<p>SQL> select extent_id,file_id,block_id from dba_extents where segment_name=&#8217;EAGLE_FAN&#8217; order by extent_id;</p>
<p> EXTENT_ID    FILE_ID   BLOCK_ID<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         0         10       7049<br />
         1         11       7177<br />
         2         10       7177<br />
         3         11       7305<br />
         4         10       7305</p>
<p>SQL> select ktfbuefno file_id,count(*) from sys.x$ktfbue where ktfbuefno in (10,11) group by ktfbuefno;</p>
<p>   FILE_ID   COUNT(*)<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
        10         58<br />
        11         58</p>
<p>SQL> create table t as select * from sys.x$ktfbue where ktfbuefno in (10,11);</p>
<p>Table created.</p></blockquote>
<p>&#8211; offline后再来比较，可以发现关于Eagle_Fan表的信息丢失</p>
<blockquote><p>SQL> alter database datafile 10 offline;</p>
<p>Database altered.</p>
<p>SQL> select ktfbuefno file_id,count(*) from sys.x$ktfbue where ktfbuefno in (10,11) group by ktfbuefno;</p>
<p>   FILE_ID   COUNT(*)<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
        11         56<br />
        10         55</p>
<p>SQL> select e.ktfbuefno,e.ktfbuesegfno,e.ktfbuesegbno,e.ktfbuesegtsn from t e where ktfbuefno in (10,11) and<br />
  2  (ktfbuefno,ktfbuesegfno,ktfbuesegbno,ktfbuesegtsn)<br />
  3  not in (select ktfbuefno,ktfbuesegfno,ktfbuesegbno,ktfbuesegtsn from sys.x$ktfbue where ktfbuefno in (10,11))<br />
  4  ;</p>
<p> KTFBUEFNO KTFBUESEGFNO KTFBUESEGBNO KTFBUESEGTSN<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;<br />
        10           10         7052            9<br />
        11           10         7052            9<br />
        10           10         7052            9<br />
        11           10         7052            9<br />
        10           10         7052            9</p>
<p>  1* select header_file,header_block,segment_name from dba_segments where header_file=10 and header_block=7052<br />
SQL> /</p>
<p>HEADER_FILE HEADER_BLOCK SEGMENT_NAME<br />
&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
         10         7052 EAGLE_FAN</p>
<p>SQL> select * from dba_extents where segment_name=&#8217;EAGLE_FAN&#8217;;</p>
<p>no rows selected</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=379</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>当logfile被删除后</title>
		<link>http://www.dbafan.com/blog/?p=366</link>
		<comments>http://www.dbafan.com/blog/?p=366#comments</comments>
		<pubDate>Thu, 01 Apr 2010 03:36:27 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=366</guid>
		<description><![CDATA[数据库的logfile被rm删除，每个logfile group仅有一个logfile member，当该logfile变为current时发现问题。 数据库仍然可以正常运行，但是LNS进程报错称找不到被删除的logfile。我们使用lgwr async模式传输red... ]]></description>
			<content:encoded><![CDATA[<p>数据库的logfile被rm删除，每个logfile group仅有一个logfile member，当该logfile变为current时发现问题。</p>
<p>数据库仍然可以正常运行，但是LNS进程报错称找不到被删除的logfile。我们使用lgwr async模式传输redo到远端physical standby，physical standby无法得到被删除的logfile。</p>
<p>从pfiles中可以看出，因为lgwr进程每时每刻都获得所有logfile的文件句柄，所以虽然该logfile被删除，lgwr还是可以正常读写该logfile，数据库还是可以正常的运行。</p>
<p>但是lns进程只是获得当前的文件句柄，所以当切换到被删除的logfile时，lns进程不能访问该文件。</p>
<p>XFAN primary$> ps -ef |grep lns1|grep XFAN<br />
  oracle 17579     1   0 03:02:06 ?           0:01 ora_lns1_XFAN<br />
XFAN primary$> pfiles 17579 | grep redo<br />
      /oracle/SCRATCH/data03/XFAN/redo/.redo2.log::cdev:vxfs:  &#8212; LNS process only hold redo2.log’s handler<br />
XFAN primary$> ps -ef |grep lgwr|grep XFAN<br />
  oracle 16377     1   0 02:44:54 ?           0:01 ora_lgwr_XFAN<br />
XFAN primary$> pfiles 16377 |grep redo<br />
      /oracle/SCRATCH/data03/XFAN/redo/.redo1.log::cdev:vxfs:<br />
      /oracle/SCRATCH/data03/XFAN/redo/.redo2.log::cdev:vxfs:<br />
      /oracle/SCRATCH/data03/XFAN/redo/.redo3.log::cdev:vxfs:<br />
      /oracle/SCRATCH/data03/XFAN/redo/.redo4.log::cdev:vxfs:   &#8212; LGWR process hold all redo log files’ handler</p>
<p>首先做的是在primary数据库上清除该logfile，过程如下：</p>
<blockquote><p>1. 切换到好的logfile group<br />
alter system switch logfile;<br />
2. checkpoint，使该logfile的状态从active变为inactive<br />
alter system checkpoint;<br />
3. 清除该logfile，因为不能被归档，所以要加上unarchived<br />
alter database clear unarchived logfile group x;
</p></blockquote>
<p>因为中间少了一个archive log，所以physical standby不能继续recover。</p>
<p>使用<a href="http://www.dbafan.com/blog/?p=291">incremental backup</a>来修复该physical standby，大约花费6个小时。如果重新build standby，大约需要花费一个星期。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=366</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ignore sequence grant error on logical standby</title>
		<link>http://www.dbafan.com/blog/?p=363</link>
		<comments>http://www.dbafan.com/blog/?p=363#comments</comments>
		<pubDate>Fri, 26 Feb 2010 02:06:52 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=363</guid>
		<description><![CDATA[在10.2版本logical standby环境中，如果primary上执行grant select on sequence to user，这条命令会复制到standby，如果sequence在standby上面不存在，apply process会停止工作。 对于有些部分复制的logical standby来说... ]]></description>
			<content:encoded><![CDATA[<p>在10.2版本logical standby环境中，如果primary上执行grant select on sequence to user，这条命令会复制到standby，如果sequence在standby上面不存在，apply process会停止工作。</p>
<p>对于有些部分复制的logical standby来说，需要忽略这部分错误。对于grant select on table to user，oracle已经很聪明的忽略了这类错误，显然grant sequence的问题是设计上的一个bug。</p>
<p>还好我们可以通过dbms_logstdby.skip_error来自动忽略此错误。</p>
<p>首先创建一个procedure用来处理GRANT的DDL 错误</p>
<blockquote><p>CREATE OR REPLACE PROCEDURE sys.handle_error_ddl (<br />
  old_stmt    IN  VARCHAR2,<br />
  stmt_type   IN  VARCHAR2,<br />
  schema      IN  VARCHAR2,<br />
  name        IN  VARCHAR2,<br />
  xidusn      IN  NUMBER,<br />
  xidslt      IN  NUMBER,<br />
  xidsqn      IN  NUMBER,<br />
  error       IN  VARCHAR2,<br />
  new_stmt    OUT VARCHAR2</p>
<p>) AS<br />
BEGIN<br />
 &#8212; Ignore any GRANT errors<br />
  new_stmt := old_stmt;<br />
  IF INSTR(UPPER(old_stmt),&#8217;GRANT&#8217;) > 0<br />
  THEN<br />
      new_stmt := NULL;<br />
  END IF;<br />
END handle_error_ddl;<br />
/</p></blockquote>
<p>然后执行dbms_logstdby.skip_error，当遇到任何Non schema DDL的错误时，调用procedure  sys.handle_error_ddl 来处理。</p>
<blockquote><p>
begin<br />
  DBMS_LOGSTDBY.SKIP_ERROR (&#8216;NON_SCHEMA_DDL&#8217;, &#8221;,&#8221;, &#8216;SYS.HANDLE_ERROR_DDL&#8217;);<br />
end;<br />
/</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=363</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Use flashback to downgrade oracle from 11g to 10g</title>
		<link>http://www.dbafan.com/blog/?p=356</link>
		<comments>http://www.dbafan.com/blog/?p=356#comments</comments>
		<pubDate>Sun, 21 Feb 2010 02:56:27 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=356</guid>
		<description><![CDATA[Oracle升级时间真的是越来越长,对于我们数百个数据库在限定的outage window内的升级，每一分钟都很珍贵。 之前我有一篇文章尽量缩短oracle upgrade时间讲述了一些缩短升级过程的技巧，不过对于10g... ]]></description>
			<content:encoded><![CDATA[<p>Oracle升级时间真的是越来越长,对于我们数百个数据库在限定的outage window内的升级，每一分钟都很珍贵。</p>
<p>之前我有一篇文章<a href="http://www.dbafan.com/blog/?p=243">尽量缩短oracle upgrade时间</a>讲述了一些缩短升级过程的技巧，不过对于10g到11g的升级，怎么算下来都需要1个多小时（目前我们还在寻找缩短11g升级时间的方法）。11g中含有set echo on的文件有下面6个，都是在$ORACLE_HOME/rdbms/admin下面：</p>
<p>1. catocm.sql<br />
2. prvthtdb.plb<br />
3. prvtaddm.plb<br />
4. prvtpspi.plb<br />
5. utlrdt.sql<br />
6. prvtbog2.plb</p>
<p>这样的话，对于我们2个小时的outage window，如果升级过程中出现问题想做downgrade（downgrade过程大约需要40分钟），极大可能会超出outage window。所以必须找到一种快速downgrade的方法。这里便要提到10g的new feature &#8212; flashback database。</p>
<p>经过我的测试，flashback database只用了9秒钟，enable flashback会增加大约1分钟upgrade的时间。flashback area的实际使用大小大约为1.6GB。</p>
<p>具体步骤如下：</p>
<blockquote>
<p>1. modify compatible = 10.2.0.4<br />
2. Update log_archive_format = TEST_%s.%t_%r_arc<br />
3. set diagnostic_dest in 11g init.ora<br />
   #diagnostic_dest=/oracle/TEST/data14/TEST #enabled when switching to 11g<br />
4. Turn on Flashback<br />
	DB_RECOVERY_FILE_DEST_SIZE=4G<br />
	DB_RECOVERY_FILE_DEST=&#8217;/oracle/TEST/data14/TEST/flashback&#8217;</p>
<p><strong>&#8211; in 10g environment.</p>
<p>SQL> startup mount</p>
<p>SQL> alter database flashback on;</p>
<p>SQL> CREATE RESTORE POINT before_upgrade GUARANTEE FLASHBACK DATABASE; </p>
<p>Restore point created.<br />
SQL> shtudown immediate;<br />
</strong><br />
&#8211; switching to 11g environment</p>
<p>SQL> startup upgrade</p>
<p>SQL> spool upgrade.log<br />
SQL> set time on<br />
SQL> @catupgrd.sql</p>
<p>SQL> startup</p>
<p>SYS@TEST:prod SQL> @?/rdbms/admin/utlu112s<br />
.<br />
Oracle Database 11.2 Post-Upgrade Status Tool           01-28-2010 00:49:30<br />
.<br />
Component                                Status         Version  HH:MM:SS<br />
.<br />
Oracle Server<br />
.                                         VALID      11.2.0.1.0  00:45:51<br />
Oracle Real Application Clusters<br />
.                                       INVALID      11.2.0.1.0  00:00:02<br />
Gathering Statistics<br />
.                                                                00:12:59<br />
Total Upgrade Time: 00:58:55</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL> @?/rdbms/admin/catuppst<br />
SQL> @?/rdbms/admin/utlrp<br />
SQL> shutdown immediate</p>
<p><strong>&#8211; Flashback in 11g environment<br />
SYS@TEST:prod SQL> shutdown immediate<br />
Database closed.<br />
Database dismounted.<br />
ORACLE instance shut down.<br />
SYS@TEST:prod SQL> startup mount</p>
<p>SYS@TEST:prod SQL> set time on timing on</p>
<p>00:55:47 SYS@TEST:prod SQL> select FLASHBACK_ON from v$database;</p>
<p>FLASHBACK_ON<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
RESTORE POINT ONLY</p>
<p>Elapsed: 00:00:00.01<br />
00:55:54 SYS@TEST:prod SQL> FLASHBACK DATABASE TO RESTORE POINT before_upgrade;</p>
<p>Flashback complete.</p>
<p>Elapsed: 00:00:09.00</p>
<p>Incomplete Recovery applied until change 3565405231814 time 01/27/2010 03:11:22<br />
Flashback Media Recovery Complete<br />
Completed: FLASHBACK DATABASE TO RESTORE POINT before_upgrade<br />
SQL> shutdown immediate<br />
</strong><br />
&#8211; switch back to 10g version</p>
<p>SQL> startup mount</p>
<p>SQL> alter database open resetlogs;</p>
<p>Database altered.</p>
<p>SQL> select comp_name,version,status,modified from dba_registry;</p>
<p>SYS@USER10:prod SQL>  select comp_name,version,status,modified from dba_registry;</p>
<p>COMP_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
VERSION                        STATUS                            MODIFIED<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
Oracle Database Catalog Views<br />
10.2.0.4.0                     VALID                             01-MAY-2009 00:04:13</p>
<p>Oracle Database Packages and Types<br />
10.2.0.4.0                     VALID                             01-MAY-2009 00:04:13</p>
<p>Oracle Real Application Clusters<br />
10.2.0.4.0                     INVALID                           01-MAY-2009 00:04:13</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=356</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>两张老照片</title>
		<link>http://www.dbafan.com/blog/?p=352</link>
		<comments>http://www.dbafan.com/blog/?p=352#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:15:15 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=352</guid>
		<description><![CDATA[老同学发给我的两张92年报纸上的老照片 你能一眼就找到我吗？ 晕，学习轻松&#8230;..这也是夸奖... ]]></description>
			<content:encoded><![CDATA[<p>老同学发给我的两张92年报纸上的老照片</p>
<p>你能一眼就找到我吗？</p>
<p><img src="http://www.dbafan.com/photo/1992-01.jpg" alt="1992-01" /></p>
<p>晕，学习轻松&#8230;..这也是夸奖吗</p>
<p><img src="http://www.dbafan.com/photo/1992-02.jpg" alt="1992-02" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=352</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>大家虎年吉祥</title>
		<link>http://www.dbafan.com/blog/?p=347</link>
		<comments>http://www.dbafan.com/blog/?p=347#comments</comments>
		<pubDate>Fri, 05 Feb 2010 16:10:33 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=347</guid>
		<description><![CDATA[... ]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.dbafan.com/photo/xiaobao3.JPG" alt="xiaobao3" width=650 height=400 /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=347</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>宝宝三个月了</title>
		<link>http://www.dbafan.com/blog/?p=340</link>
		<comments>http://www.dbafan.com/blog/?p=340#comments</comments>
		<pubDate>Sat, 09 Jan 2010 08:22:38 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=340</guid>
		<description><![CDATA[真是越长越像我啦，哈... ]]></description>
			<content:encoded><![CDATA[<p>真是越长越像我啦，哈哈</p>
<p><img src="http://www.dbafan.com/photo/son.jpg" alt="儿子" length=400 width=300/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=340</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>新年快乐</title>
		<link>http://www.dbafan.com/blog/?p=327</link>
		<comments>http://www.dbafan.com/blog/?p=327#comments</comments>
		<pubDate>Sat, 02 Jan 2010 15:39:50 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=327</guid>
		<description><![CDATA[新年快乐！送首歌给大家 歌曲：Amazing Grace 演唱者：Declan Galbrait... ]]></description>
			<content:encoded><![CDATA[<p>新年快乐！送首歌给大家</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="260" height="26" align="middle"><param name="movie" value="http://www.tudou.com/player/outside/beta_music.swf?iid=17246005&#038;cs=0xFFFFFF_0x0099FF_0x002864_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0x003366_0x46BAFFF_0x000066_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF"></param><param name="allowScriptAccess" value="always"></param><param name="allowFullScreen" value="true"></param><param name="quality" value="high"></param><param name="wmode" value="transparent"></param><embed src="http://www.tudou.com/player/outside/beta_music.swf?iid=17246005&#038;cs=0xFFFFFF_0x0099FF_0x002864_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0x003366_0x46BAFFF_0x000066_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF_0xFFFFFF" quality="high" width="260" height="26" align="middle" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" type="application/x-shockwave-flash"></embed></object></p>
<p>歌曲：Amazing Grace<br />
演唱者：Declan Galbraith</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=327</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>经典老歌 You Raise Me Up</title>
		<link>http://www.dbafan.com/blog/?p=322</link>
		<comments>http://www.dbafan.com/blog/?p=322#comments</comments>
		<pubDate>Thu, 10 Dec 2009 03:28:05 +0000</pubDate>
		<dc:creator>Eagle Fan</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.dbafan.com/blog/?p=322</guid>
		<description><![CDATA[You Raise Me Up 2005年，专辑《Face To Face》，歌手：Westlife When I am down and, oh my soul, so weary; When troubles come and my heart burdened be; Then, I am still and wait here in the silence, Until you come and sit awhile with me. You raise ... ]]></description>
			<content:encoded><![CDATA[<p><embed src="http://player.ku6.com/refer/ufXBJEaLmY_u-AsD/v.swf&#038;color=66CBFF" quality="high" width="414" height="305" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed></p>
<p>You Raise Me Up    </p>
<p>2005年，专辑《Face To Face》，歌手：Westlife </p>
<p>When I am down and, oh my soul, so weary;<br />
When troubles come and my heart burdened be;<br />
Then, I am still and wait here in the silence,<br />
Until you come and sit awhile with me.</p>
<p>You raise me up, so I can stand on mountains;<br />
You raise me up, to walk on stormy seas;<br />
I am strong, when I am on your shoulders;<br />
You raise me up… To more than I can be.</p>
<p>You raise me up, so I can stand on mountains;<br />
You raise me up, to walk on stormy seas;<br />
I am strong, when I am on your shoulders;<br />
You raise me up… To more than I can be.</p>
<p>You raise me up, so I can stand on mountains;<br />
You raise me up, to walk on stormy seas;<br />
I am strong, when I am on your shoulders;<br />
You raise me up… To more than I can be.<br />
You raise me up, so I can stand on mountains;<br />
You raise me up, to walk on stormy seas;<br />
I am strong, when I am on your shoulders;<br />
You raise me up… To more than I can be.<br />
You raise me up… To more than I can be.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dbafan.com/blog/?feed=rss2&amp;p=322</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
