﻿<?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>P.Linux Laboratory &#187; IMP</title>
	<atom:link href="http://www.penglixun.com/tag/imp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.penglixun.com</link>
	<description>MySQL DBA &#38; Linux SA</description>
	<lastBuildDate>Sun, 22 Jan 2012 16:34:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>对Oracle导出文件错误和DMP文件结构的分析</title>
		<link>http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html</link>
		<comments>http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html#comments</comments>
		<pubDate>Sun, 26 Jul 2009 05:08:04 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[DMP]]></category>
		<category><![CDATA[EXP]]></category>
		<category><![CDATA[IMP]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=301</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html 根据前些天为某大... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html </p>
<p></span>根据前些天为某大飞机公司导入某大飞机生产数据的经历，准备写篇关于Oracle导出文件DMP格式的分析，结果在本机导出一组演示数据时候，出现了错误，顺便解决下。</p>
<p><span id="more-301"></span>本机装的是Oracle 11g 32bit(11.0.6)的Client，主要是为了使用ODT.Net 11.0.6.21，支持VS2008。但是采用EXP命令导出数据库的时候，出现了些诡异的错误。</p>
<p>执行</p>
<p><span style="COLOR: #ff0000">C:\&gt;EXP plx/plx@orcl  FILE=c:\plx.dmp TABLES=(s,sc,c)</span></p>
<p>结果报错</p>
<p><span style="COLOR: #0000ff">Export: Release 11.1.0.6.0 &#8211; Production on 星期日 7月 26 12:42:19 2009</span></p>
<p><span style="COLOR: #0000ff">Copyright (c) 1982, 2007, Oracle.  All rights reserved.</span><br />
<span style="COLOR: #0000ff">连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 &#8211; Production<br />
With the Partitioning, OLAP and Data Mining options<br />
已导出 ZHS16GBK 字符集和 UTF8 NCHAR 字符集<br />
服务器使用 UTF8 字符集 (可能的字符集转换)</span></p>
<p><span style="COLOR: #0000ff">即将导出指定的表通过常规路径&#8230;<br />
. . 正在导出表                               S<br />
EXP-00008: 遇到 ORACLE 错误 904<br />
ORA-00904: “MAXSIZE”: invalid identifier<br />
. . 正在导出表                              SC<br />
EXP-00008: 遇到 ORACLE 错误 1003<br />
ORA-01003: no statement parsed<br />
. . 正在导出表                               C<br />
EXP-00008: 遇到 ORACLE 错误 904<br />
ORA-00904: “MAXSIZE”: invalid identifier<br />
EXP-00008: 遇到 ORACLE 错误 942<br />
ORA-00942: table or view does not exist<br />
EXP-00024: 未安装导出视图, 请通知您的 <acronym title="Database Administrator">DBA</acronym><br />
EXP-00000: 导出终止失败</span></p>
<p> </p>
<p>很诡异，从来没见过的错误，怎么会报没有字段的错误呢。</p>
<p>于是Google（在技术资料方面BAIDU就是垃圾），</p>
<p>有个哥们说是数据字典丢了，我很诧异，我前几天在Oracle 10g Client下导出过了，怎么会丢失数据字典，还是半信半疑的执行了。</p>
<p>在服务器上执行</p>
<p><span style="COLOR: #ff0000">oracle@linux-lrn6:~&gt; sqlplus sys/sys@orcl as sysdba</span></p>
<p><span style="COLOR: #ff0000"><acronym title="Structured Query Language">SQL</acronym>&gt;@/opt/oracle/product/10.2/db_1/rdbms/admin/catexp.sql</span></p>
<p>以重建数据字典。</p>
<p> </p>
<p>建好了后，再次执行导出，还是不行。</p>
<p>但是我在服务器上执行同样的语句就可以。</p>
<p>于是我意识到可能是EXP版本问题，于是测试。</p>
<p> </p>
<p>在一台11g的机器上运行一条<acronym title="Structured Query Language">SQL</acronym>检测那个MAXSIZE是个什么列。</p>
<p><span style="COLOR: #ff0000"><acronym title="Structured Query Language">SQL</acronym>&gt; select distinct table_name from user_col_comments where column_name=&#8217;MAXSIZE&#8217;;</span></p>
<p><span style="COLOR: #0000ff">TABLE_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
EXU9STOU<br />
EXU9PLB<br />
EXU9PDSU<br />
EXU9LBCPU<br />
EXU9PDS<br />
EXU9IXCP<br />
CPOOL$<br />
EXU9TBCPU<br />
EXU9TBCP<br />
EXU9STO<br />
EXU9IXCPU</span></p>
<p><span style="COLOR: #0000ff">TABLE_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
DBA_CPOOL_INFO<br />
EXU9TBS<br />
EXU9PLBU<br />
EXU9LBCP</span></p>
<p> </p>
<p>然后在10g的服务器上运行同样的语句，没有返回行。可见MAXSIZE是11g在数据字典中新加的项，10g是没有的。</p>
<p> </p>
<p>#10g<br />
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 &#8211; 64bit Production<br />
With the Partitioning, OLAP and Data Mining options</p>
<p><span style="COLOR: #ff0000"><acronym title="Structured Query Language">SQL</acronym>&gt; desc sys.exu9tbs<br />
</span><span style="COLOR: #0000ff">名称                                      是否为空? 类型<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
ID                                        NOT NULL NUMBER<br />
OWNER                                                CHAR(6)<br />
NAME                                   NOT NULL VARCHAR2(30)<br />
ISONLINE                                              VARCHAR2(7)<br />
CONTENT                                              VARCHAR2(9)<br />
INIEXT                                  NOT NULL NUMBER<br />
SEXT                                    NOT NULL NUMBER<br />
PCTINC                                 NOT NULL NUMBER<br />
MINEXT                                 NOT NULL NUMBER<br />
MAXEXT                                NOT NULL NUMBER<br />
MINLEN                                                 NUMBER<br />
DEFLOG                                 NOT NULL NUMBER<br />
EXT_MGT                               NOT NULL NUMBER<br />
ALLOC_TYPE                          NOT NULL NUMBER<br />
BLOCKSIZE                            NOT NULL NUMBER</span></p>
<p>#11g<br />
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 &#8211; Production<br />
With the Partitioning, OLAP and Real Application Testing options</p>
<p><span style="COLOR: #ff0000"><acronym title="Structured Query Language">SQL</acronym>&gt; desc sys.exu9tbs</span><br />
<span style="COLOR: #0000ff">名称                                      是否为空? 类型<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
ID                                         NOT NULL NUMBER<br />
OWNER                                                 CHAR(6)<br />
NAME                                    NOT NULL VARCHAR2(30)<br />
ISONLINE                                              VARCHAR2(7)<br />
CONTENT                                              VARCHAR2(9)<br />
INIEXT                                   NOT NULL NUMBER<br />
SEXT                                     NOT NULL NUMBER<br />
PCTINC                                  NOT NULL NUMBER<br />
MINEXT                                  NOT NULL NUMBER<br />
MAXEXT                                 NOT NULL NUMBER<br />
MINLEN                                                  NUMBER<br />
DEFLOG                                  NOT NULL NUMBER<br />
EXT_MGT                                NOT NULL NUMBER<br />
ALLOC_TYPE                            NOT NULL NUMBER<br />
BLOCKSIZE                             NOT NULL  NUMBER<br />
MAXSIZE                                                 NUMBER &#8212;&#8212;&#8212;&gt;<span style="BACKGROUND-COLOR: #ffff00">问题在这里</span></span></p>
<p> </p>
<p><span style="COLOR: #000000">所以，导入导出数据的时候，还是尽可能的版本统一，10g导10g的，11g导11g的，免得不必要的麻烦。</span></p>
<p> </p>
<p>好了，言归正传，分析DMP格式。</p>
<p>DMP是什么诡异格式？就是上面Oracle的EXP工具导出的备份文件的格式。</p>
<p>某次脑子发烧用gVim打开DMP猛然发现它就是一些<acronym title="Structured Query Language">SQL</acronym>，令我非常诧异，于是发现了一些诡异的修改备份的方法，就是直接修改DMP文件。</p>
<p> </p>
<p>下面我打开一个新鲜导出的备份文件，分析一下DMP的结构。</p>
<p>首先一打开DMP，最上面有几行这样的东西：</p>
<p><span style="COLOR: #0000ff">DPLX<br />
RUSERS<br />
8192<br />
0<br />
20<br />
0</span></p>
<p>下面那些数字不要管，数据库的一些参数，DPLX就是导出的用户名，D是标识，PLX是用户名，EUSERS是默认表空间，E是标识，USERS是表空间。</p>
<p>继续往下看，能看到这样的语句：</p>
<p><span style="COLOR: #0000ff">sys.dbms_logrep_imp.instantiate_schema(schema_name=&gt;SYS_CONTEXT(&#8216;USERENV&#8217;,'CURRENT_SCHEMA&#8217;), export_db_name=&gt;&#8217;ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM&#8217;, inst_scn=&gt;&#8217;5603910&#8242;);</span></p>
<p>这个是建立模式的语句，原则上每个用户就是一个模式，Schema。</p>
<p>这上面这些东西，最好都不要改，改了要出事的，一般导入就不行了，会失效，因为DMP虽然大部分是明文<acronym title="Structured Query Language">SQL</acronym>，但是也有一部分是二进制的，改了这里会影响校验。</p>
<p>再往后看就有建表语句了，</p>
<p><span style="COLOR: #0000ff">CREATE TABLE “C” (“CNO” NUMBER(10, 0) NOT NULL ENABLE, “CNAME” VARCHAR2(20) NOT<br />
NULL ENABLE, “CPNO” NUMBER(10, 0), “CCREDIT” NUMBER(3, 0) NOT NULL ENABLE)  PCTF<br />
REE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREE<br />
LIST GROUPS 1 BUFFER_POOL DEFAULT) <span style="BACKGROUND-COLOR: #ffff00">TABLESPACE “USERS”</span> LOGGING NOCOMPRESS</span></p>
<p>有时候导出的表空间混乱，就可以在黄色底色的那里改，替换成想要的表空间。</p>
<p>然后一个表下面就是插入数据的语句了：</p>
<p><span style="COLOR: #0000ff">INSERT INTO “C” (“CNO”, “CNAME”, “CPNO”, “CCREDIT”) VALUES (:1, :2, :3, :4)</span><br />
再往下就是一堆二进制，就是要插入的数据，那个就改不了了，Oracle没有公开格式。</p>
<p>不过知道这些已经足以解决导入中的很多问题，尤其是表空间混乱的问题。</p>
<p>某大飞机数据库就非常混乱，一个ARJ用户模式（我没有泄密，公开的）下有来自ARJ,M3,USERS,SYSTEM等表空间的表，就是导入的时候方法不正确。然后用上篇Oracle日志中取消权限的方法，也会有些表导不进去，这是Oracle的BUG，但是我这样改了以后，导入后想在哪个表空间就哪个表空间。</p>
<p>用这种方法修改了某大飞机的两个数据库导出文件，导入到同一个用户模式下了，表空间全部统一，数据没有丢失，导入过程完全没用警告。</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月9日 -- <a href="http://www.penglixun.com/tech/database/oracle_recent_records.html" title="Oracle 最近的一些记录">Oracle 最近的一些记录</a> (0)</li><li>2009年07月22日 -- <a href="http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html" title="今天为XXX导数据的记录">今天为XXX导数据的记录</a> (0)</li><li>2010年01月9日 -- <a href="http://www.penglixun.com/tech/database/oel_install_iscsi_rac_record.html" title="在OEL5.4上安装Oracle 10g R2 x64 RAC的一些记录">在OEL5.4上安装Oracle 10g R2 x64 RAC的一些记录</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今天为XXX导数据的记录</title>
		<link>http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html</link>
		<comments>http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html#comments</comments>
		<pubDate>Wed, 22 Jul 2009 10:57:53 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[IMP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[导入]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=292</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html 约的9：30，我八点多醒了，一... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html </p>
<p></span>约的9：30，我八点多醒了，一看天黑黑的，于是，嗯，继续睡……<br />
后来知道这是传说中的“日全食”。</p>
<p>然后刷牙洗脸就P颠P颠地跑到某个地方，虽然已经超过9：30了，但是，嗯，客户又没来……还是我等他（没打错，谢谢合作）。<br />
鉴于电脑还在，我就先开工了~<br />
<span id="more-292"></span></p>
<p>昨天对方已经先重装Oracle了，系统表丢失的问题已经没有了，只要导入两个DMP文件就可以了。<br />
本以为很轻松的事情，还是耗了很久，最后经我鉴定是导出文件的问题。</p>
<p>问题描述：有ARJ.DMP和M3.DMP两个备份文件，导出时的状态是，ARJ和M3两个用户分别拥有ARJ和M3两个表空间，然后表又混乱分分布在USERS，ARJ，M3甚至SYSTEM中。<br />
作为一名专业的<acronym title="Database Administrator">DBA</acronym>（呕吐……），显然不能允许这种诡异状态的出现，根据客户的要求我计划的导入目标是：所有表都导入在同一表空间M3下，所有表属于M3用户模式。</p>
<p>于是就开工了，首先采用一般方法，剥夺M3用户的 UNLIMITED TABLESPACE 权限，然后将M3用户的默认表空间修正在M3表空间，并给予无限额权限，同时防止 SYSTEM 表被写，取消了M3用户对 SYSTEM 表的配额。</p>

<div class="wp_codebox"><table><tr id="p2922"><td class="code" id="p292code2"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">REVOKE</span> UNLIMITED TABLESPACE <span style="color: #993333; font-weight: bold;">FROM</span> m3;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 <span style="color: #993333; font-weight: bold;">DEFAULT</span> TABLESPACE m3;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 QUOTA UNLIMITED <span style="color: #993333; font-weight: bold;">ON</span> m3;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 QUOTA <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">ON</span> system;</pre></td></tr></table></div>

<p>然后开始导入工作：<br />
IMP M3/M3@ORCL FILE=M3.DMP FROMUSER=M3 TOUSER=M3<br />
IMP M3/M3@ORCL FILE=ARJ.DMP FROMUSER=ARJ TOUSER=M3</p>
<p>导入过程中有大约20张表无法导入，都是原先USERS、ARJ表空间下的，经过搜索，这是Oracle的BUG，只能另想办法。<br />
于是我采用导出表结构的方法，手动运行<acronym title="Structured Query Language">SQL</acronym>建表，然后再次IMP：<br />
&#8211;获得DMP中所有用户表的建表语句，将CREATE.SQL中的注释(REM)等杂信息替换成空格，然后在SQLPlus中执行脚本，就把表建好了。<br />
IMP M3/M3@ORCL FILE=ARJ.DMP INDEXFILE=CREATE1.SQL FROMUSER=ARJ TOUSER=M3;<br />
IMP M3/M3@ORCL FILE=M3.DMP INDEXFILE=CREATE2.SQL FROMUSER=M3 TOUSER=M3;<br />
@C:\CREATE1.SQL<br />
@C:\CREATE2.SQL<br />
&#8211;再次执行导入<br />
IMP M3/M3@ORCL FILE=M3.DMP FROMUSER=M3 TOUSER=M3<br />
IMP M3/M3@ORCL FILE=ARJ.DMP FROMUSER=ARJ TOUSER=M3</p>
<p>理论上已经成功的导入了所有表，但是经过实测，还是有部分表信息不全，导入了一部分行，这个很诡异，我也不知道怎么回事，于是另想办法。<br />
想遍了所有办法，只能手动改DMP了，很伟大的事业……嗯~<br />
打开伟大的gVim，将DMP中所有的 TABLESPACE “XXX” 全部替换成TABLESPACE “M3&#8243;，<br />
再次执行导入：<br />
IMP M3/M3@ORCL FILE=M3.DMP FROMUSER=M3 TOUSER=M3<br />
IMP M3/M3@ORCL FILE=ARJ.DMP FROMUSER=ARJ TOUSER=M3<br />
完全正常。</p>
<p>同时也发现，确实有些表，在上次导入的时候(那次不是我……)没有把信息导出来，只有表结构，这个我就回天乏术了，<br />
我已经已经尽力而为，将导出各种混乱的表至少整齐划一的导入到了统一表空间下存储，导出时丢失数据，这个可以研究下是怎么丢失的~</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月9日 -- <a href="http://www.penglixun.com/tech/database/oracle_recent_records.html" title="Oracle 最近的一些记录">Oracle 最近的一些记录</a> (0)</li><li>2009年07月26日 -- <a href="http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html" title="对Oracle导出文件错误和DMP文件结构的分析">对Oracle导出文件错误和DMP文件结构的分析</a> (0)</li><li>2010年01月9日 -- <a href="http://www.penglixun.com/tech/database/oel_install_iscsi_rac_record.html" title="在OEL5.4上安装Oracle 10g R2 x64 RAC的一些记录">在OEL5.4上安装Oracle 10g R2 x64 RAC的一些记录</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle 最近的一些记录</title>
		<link>http://www.penglixun.com/tech/database/oracle_recent_records.html</link>
		<comments>http://www.penglixun.com/tech/database/oracle_recent_records.html#comments</comments>
		<pubDate>Thu, 09 Jul 2009 01:44:28 +0000</pubDate>
		<dc:creator>P.Linux</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[EXP]]></category>
		<category><![CDATA[IMP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[备份]]></category>
		<category><![CDATA[导入]]></category>
		<category><![CDATA[导出]]></category>

		<guid isPermaLink="false">http://www.penglixun.com/PLX/Blog/?p=268</guid>
		<description><![CDATA[本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/oracle_recent_records.html 最近遇到一个比较诡异的问题，一... ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;">本文内容遵从<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" target="_blank">CC版权协议</a>, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明</br>网址: http://www.penglixun.com/tech/database/oracle_recent_records.html </p>
<p></span>最近遇到一个比较诡异的问题，一个数据库DROP任何东西的时候都出错，大致错误是“<acronym title="Structured Query Language">SQL</acronym>递归在第一层错误，视图、表不存在”。<br />
<span id="more-268"></span><br />
我网上搜了下，有人说是DUAL里面记录不止一条造成了，把DUAL清空再插入一条记录就OK，如下</p>

<div class="wp_codebox"><table><tr id="p2689"><td class="code" id="p268code9"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> DUAL;
<span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> DUAL;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> DUAL <span style="color: #993333; font-weight: bold;">VALUES</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'X'</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>我亲自上机尝试，发现这种方法在我们这里并不生效。</p>
<p>经过TRACE，</p>

<div class="wp_codebox"><table><tr id="p26810"><td class="code" id="p268code10"><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> sql_trace <span style="color: #66cc66;">=</span> true;</pre></td></tr></table></div>

<p>我发现是有一张系统表不存在，但是网上找不到这张表的结构，于是我这个悲剧小菜鸟只能选择重装数据库导入数据。</p>
<p>准备今天再详细的跟踪一下DROP语句的解析，看能不能找出其他原因。</p>

<div class="wp_codebox"><table><tr id="p26811"><td class="code" id="p268code11"><pre class="sql" style="font-family:monospace;">SQL<span style="color: #66cc66;">&gt;</span>ALTER SESSION <span style="color: #993333; font-weight: bold;">SET</span> sql_trace<span style="color: #66cc66;">=</span>true;
SQL<span style="color: #66cc66;">&gt;</span>ALTER SESSION <span style="color: #993333; font-weight: bold;">SET</span> EVENTS <span style="color: #ff0000;">'10046 trace name context forever,level 12'</span>;
SQL<span style="color: #66cc66;">&gt;</span>DROP <span style="color: #993333; font-weight: bold;">TABLE</span> p CASCADE CONSTRAINT;
SQL<span style="color: #66cc66;">&gt;</span>ALTER SESSION <span style="color: #993333; font-weight: bold;">SET</span> EVENTS <span style="color: #ff0000;">'10046 trace name context off'</span>;
c:\<span style="color: #66cc66;">&gt;</span>tkprof $oracle_home\admin\testdb\udump\oracledb_ora_3340<span style="color: #66cc66;">.</span>trc  c:\m3_droptable<span style="color: #66cc66;">.</span>txt</pre></td></tr></table></div>

<p>传说中是可能是MDSYS用户的表不能删除导致的，只要删除MDSYS就可以了。</p>

<div class="wp_codebox"><table><tr id="p26812"><td class="code" id="p268code12"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DROP</span> USER mdsys CASCADE;</pre></td></tr></table></div>

<p>也可能是角色引起的，删除角色。</p>

<div class="wp_codebox"><table><tr id="p26813"><td class="code" id="p268code13"><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;">'25475 trace name context forever, level 2'</span>;
execute DBMS_RULE_ADM<span style="color: #66cc66;">.</span>DROP_RULE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'.AQ$WF_DEFERRED_QUEUE_M$1'</span><span style="color: #66cc66;">,</span>TRUE<span style="color: #66cc66;">&#41;</span>;
commit;
execute DBMS_RULE_ADM<span style="color: #66cc66;">.</span>DROP_RULE_SET<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'AQ$WF_DEFERRED_QUEUE_M$1'</span><span style="color: #66cc66;">&#41;</span>;
commit;</pre></td></tr></table></div>

<p>实在不行只能先导出数据库了。<br />
exp m3/m3 owner=m3;</p>
<p>然后导入的时候为了保证导入到自己表空间下，要先设置下用户。</p>

<div class="wp_codebox"><table><tr id="p26814"><td class="code" id="p268code14"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">REVOKE</span> UNLIMITED TABLESPACE <span style="color: #993333; font-weight: bold;">FROM</span> m3;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 <span style="color: #993333; font-weight: bold;">DEFAULT</span> TABLESPACE users;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 QUOTA UNLIMITED <span style="color: #993333; font-weight: bold;">ON</span> users;
<span style="color: #993333; font-weight: bold;">ALTER</span> USER m3 QUOTA <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">ON</span> system;</pre></td></tr></table></div>

<p>imp m3/m3 fromuser=m3 touser=3;</p><h2  class="related_post_title">类似的文章</h2><ul class="related_post"><li>2009年07月26日 -- <a href="http://www.penglixun.com/tech/database/oracle_exp_error_and_dmp_structure_analyse.html" title="对Oracle导出文件错误和DMP文件结构的分析">对Oracle导出文件错误和DMP文件结构的分析</a> (0)</li><li>2009年07月22日 -- <a href="http://www.penglixun.com/tech/database/a_record_about_oracle_imp.html" title="今天为XXX导数据的记录">今天为XXX导数据的记录</a> (0)</li><li>2009年08月20日 -- <a href="http://www.penglixun.com/tech/database/vs2008_data_source_config_problem.html" title="关于VS2008与一些数据源配置的问题">关于VS2008与一些数据源配置的问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.penglixun.com/tech/database/oracle_recent_records.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

