<?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>聚沙成塔-小哈的记事薄 &#187; ora-00942</title>
	<atom:link href="http://www.hashei.me/tag/ora-00942/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hashei.me</link>
	<description>一个系统工程师的絮叨</description>
	<lastBuildDate>Tue, 10 Jan 2012 18:03:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://hashei.me/wp-includes/js/jquery/jquery.js?ver=1.3.2'></script>
<script type="text/javascript">
/* <![CDATA[ */
jQuery.ajax({type:'GET',url:'http://hashei.me/wp-content/plugins/wp-postviews-plus/postviews_plus.php',data:'todowppvp=add&type=tag&id=215_1',cache:false,dataType:'script'});
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>充当了一回DBA</title>
		<link>http://www.hashei.me/2010/02/oracle-04020_and_oracle-00942_problems.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=oracle-04020_and_oracle-00942_problems</link>
		<comments>http://www.hashei.me/2010/02/oracle-04020_and_oracle-00942_problems.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 17:38:00 +0000</pubDate>
		<dc:creator>hashei</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[catpatch]]></category>
		<category><![CDATA[ora-00942]]></category>
		<category><![CDATA[ora-04020]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.hashei.me/2010/02/oracle-04020_and_oracle-00942_problems.html</guid>
		<description><![CDATA[记录了在杭州出差时遇到的Oracle数据库问题，由9.2.0.1升级到9.2.0.7后没有执行catpatch导致的EXP-00024和ORA-00942问题，以及执行catpatch.sql错误导致的ORA-04020问题。]]></description>
			<content:encoded><![CDATA[<p>杭州出差，作为唯一在项目现场的集成人员，遇到的问题虽说不少，但基本都是小问题，直到昨晚遇见ORACLE 错误942和ORA-04020前。</p>
<p>首先介绍一下环境，Windows 2003 64位的标准版上安装的Oracle 9.2.0.1，安装软件后升级补丁到9.2.0.7然后再建库。安装过程一切顺利，不过就在开发人员用exp备份数据时出错。提示如下：</p>
<blockquote><p>连接到: Oracle9i Enterprise Edition Release 9.2.0.7.0 &#8211; Production     <br />With the Partitioning, OLAP and Oracle Data Mining options      <br />JServer Release 9.2.0.7.0 – Production</p>
<p>即将导出指定的用户&#8230;      <br />. 正在导出 pre-schema 过程对象和操作      <br />. 正在导出用户 BJIC 的外部函数库名称      <br />. 导出 PUBLIC 类型同义词      <br />. 导出私有类型同义词      <br />. 正在导出用户 BJIC 的对象类型定义</p>
<p>EXP-00008: 遇到 ORACLE 错误 942      <br />ORA-00942: 表或视图不存在      <br />EXP-00024: 未安装导出视图，请通知您的 DBA      <br />EXP-00000: 导出终止失败</p>
</blockquote>
<p>通过ORA-00942搜索，得知出现该错误的原因是：由于exp的版本与数据库的版本不相同，   <br />虽然9.2.0.7的安装包已经安装成功，但是数据字典表中的相关信息并未更新，</p>
<blockquote><p>执行如下语句验证了这一说法     <br /><strong>SQL&gt; select comp_id,version from dba_registry;</strong></p>
</blockquote>
<p> <span id="more-1131"></span><br />
<blockquote>
<p><strong></strong></p>
<p>COMP_ID&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VERSION</p>
<p>CATALOG&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0     <br />CATPROC&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />OWM&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />JAVAVM&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />XML&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.2.0      <br />CATJAVA&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />ORDIM&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />SDO&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />CONTEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />XDB&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />WK&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />ODM&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />APS&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />XOQ&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0      <br />AMD&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.2.0.1.0</p>
</blockquote>
<p>然后按照如下步骤进行操作：</p>
<ol>
<li>set ORACLE_SID=数据库SID</li>
<li>SQL&gt; sqlplus &quot;/as sysdba&quot;     <br />已连接。      <br />SQL&gt; <strong>shutdow immediate</strong>      <br />数据库已经关闭。      <br />已经卸载数据库。      <br />ORACLE 例程已经关闭。</li>
<li>SQL&gt; <strong>startup migrate</strong>      <br />ORACLE 例程已经启动。      <br />……      <br />数据库装载完毕。      <br />数据库已经打开。</li>
<li>SQL&gt; spool d:\catpatch.log \\记录一下等下的升级日志      <br /><strong>SQL&gt; @d:\oracle\ora92\rdbms\admin\catpatch.sql&#160; \\执行catpatch脚本，在catpatch中会调用catexp来修改exp</strong>      <br />SQL&gt; spool off</li>
<li>SQL&gt; shutdow immediate</li>
<li><strong></strong>SQL&gt; startup      </li>
</ol>
<p>照理按照上述步骤，应该就没问题，最后会看到各组件版本都为9.2.0.7了。可事实是</p>
<p><strong>执行完成重启后，用户登录极慢，</strong></p>
<p><strong>过了很久登录成功后显示</strong></p>
<blockquote><p>SQL&gt; connect username<a href="mailto:username/password@sid">/password@sid</a>      <br />ERROR:      <br />ORA-04020: 尝试锁定对象 SYS.DBMS_STANDARD 时检测到死锁</p>
<p>ERROR:     <br />ORA-04020: 尝试锁定对象 SYS.DBMS_STANDARD 时检测到死锁</p>
<p>访问程序包 DBMS_APPLICATION_INFO 时出错     <br />已连接。      <br />SQL&gt;</p>
</blockquote>
<p>一开始没在意，重启服务器，可依旧无效。这下有点慌，这可是马上要上线的准生产环境了。于是联系上海同事，领导也打来电话，帮忙找了一个在杭州的同事赶来现场。</p>
<p>在等待同事来现场的路上，首先把数据文件做了一个冷备，又google了一把，得知：</p>
<blockquote><p>在没有停业务的情况下，直接打数据库的补丁catpatch.sql，结果打到中间的时候出错ORA-04020，导致业务登陆用户无法登陆进数据库。其实，这个补丁升级说明中，明确要停止DML操作，防止数据字典deadlock.</p>
</blockquote>
<p>其实在正常启动的情况下，执行catpatch.sql会直接报错，提示你需要在migarite模式下执行。回想我之前的操作，在执行catpatch.sql时中间曾长时间“类卡死”状态，导致我第一次中断了执行，查看升级不成功又继续执行了一次，估计错误就发生在这里。</p>
<p>之后杭州同事赶到现场，又让上海的资深DBA远程操作，解决ORA-04020倒也很简单：</p>
<blockquote><p>ALTER SYSTEM SET _system_trig_enabled=FALSE SCOPE=MEMORY;</p>
<p>alter package standard compile;</p>
<p>alter package DBMS_standard compile;</p>
<p>执行$ORACLE_HOME/rdbms/admin/utlrp.sql包，该包会重新编译由于升级导致状态不一致的数据字典对象。</p>
</blockquote>
<p>然后登录就正常了，再次执行上面的catpatch步骤，问题解决。虽然现在说起来很简单，但其实搞了4小时才全部完成。</p>
<p>总结昨天的经验：最重要的是在做操作前要做好备份，冷备是最好的选择，否则直接在生产环境上操作，一旦失败太被动了。然后是执行sql脚本时卡住不动很正常，看看资源管理器里进程好好的就可以了。最后一点是oracle升级前需要详细查阅升级步骤，如果不是当时少做一步，也没后面的这些麻烦了。</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://www.hashei.me/2009/04/connect-to-database.html" rel="bookmark" title="Permanent Link: Websphere入门篇（三）-建立连接池">Websphere入门篇（三）-建立连接池</a></li><li><a href="http://www.hashei.me/2010/05/enable-lagepages-for-jvm.html" rel="bookmark" title="Permanent Link: 为JVM启用大页面支持">为JVM启用大页面支持</a></li><li><a href="http://www.hashei.me/2010/05/weblogic%e5%a6%82%e4%bd%95%e6%9b%b4%e6%8d%a264%e4%bd%8djdk.html" rel="bookmark" title="Permanent Link: WebLogic如何更换64位JDK">WebLogic如何更换64位JDK</a></li><li><a href="http://www.hashei.me/2009/09/weblogic_profiling_and_performance_tuning.html" rel="bookmark" title="Permanent Link: 官方JRockit JVM调优文档">官方JRockit JVM调优文档</a></li><li><a href="http://www.hashei.me/2009/08/jdbc_causes_server_hang.html" rel="bookmark" title="Permanent Link: JDBC引发的服务器hang解决思路">JDBC引发的服务器hang解决思路</a></li></ul><hr /><small>  Copyright &copy; 2008 This feed is for personal, non-commercial use only<br />
<a href=www.hashei.com >聚沙成塔-小哈的记事薄</a> by hashei 
如果喜欢，欢迎订阅<a href=feed.hashei.com >feed.hashei.com</a><br />
Digital Fingerprint:
 10f920a9f2bae51c3c73c4f5fb50a949</small>]]></content:encoded>
			<wfw:commentRss>http://www.hashei.me/2010/02/oracle-04020_and_oracle-00942_problems.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

