(转)对Oracle导出文件错误和DMP文件结构的分析,EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: "MAXSIZE": invalid identifier
EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: "MAXSIZE": invalid identifier
原因:oracle版本不一样
执行
C:/>EXP plx/plx@orcl FILE=c:/plx.dmp TABLES=(s,sc,c)
结果报错
Export: Release 11.1.0.6.0 – Production on 星期日 7月 26 12:42:19 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 UTF8 NCHAR 字符集
服务器使用 UTF8 字符集 (可能的字符集转换)
即将导出指定的表通过常规路径…
. . 正在导出表 S
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: “MAXSIZE”: invalid identifier
. . 正在导出表 SC
EXP-00008: 遇到 ORACLE 错误 1003
ORA-01003: no statement parsed
. . 正在导出表 C
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: “MAXSIZE”: invalid identifier
EXP-00008: 遇到 ORACLE 错误 942
ORA-00942: table or view does not exist
EXP-00024: 未安装导出视图, 请通知您的 DBA
EXP-00000: 导出终止失败
很诡异,从来没见过的错误,怎么会报没有字段的错误呢。
于是Google(在技术资料方面BAIDU就是垃圾),
有个哥们说是数据字典丢了,我很诧异,我前几天在Oracle 10g Client下导出过了,怎么会丢失数据字典,还是半信半疑的执行了。
在服务器上执行
oracle@linux-lrn6:~> sqlplus sys/sys@orcl as sysdba
SQL >@/opt/oracle/product/10.2/db_1/rdbms/admin/catexp.sql
以重建数据字典。
建好了后,再次执行导出,还是不行。
但是我在服务器上执行同样的语句就可以。
于是我意识到可能是EXP版本问题,于是测试。
在一台11g的机器上运行一条SQL 检 测那个MAXSIZE是个什么列。
SQL > select distinct table_name from user_col_comments where column_name=’MAXSIZE’;
TABLE_NAME
————————————————————
EXU9STOU
EXU9PLB
EXU9PDSU
EXU9LBCPU
EXU9PDS
EXU9IXCP
CPOOL$
EXU9TBCPU
EXU9TBCP
EXU9STO
EXU9IXCPU
TABLE_NAME
————————————————————
DBA_CPOOL_INFO
EXU9TBS
EXU9PLBU
EXU9LBCP
然后在10g的服务器上运行同样的语句,没有返回行。可见MAXSIZE是11g在数据字典中新加的项,10g是没有的。
#10g
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL > desc sys.exu9tbs
名 称 是否为空? 类型
—————————————– ——– —————————-
ID NOT NULL NUMBER
OWNER CHAR(6)
NAME NOT NULL VARCHAR2(30)
ISONLINE VARCHAR2(7)
CONTENT VARCHAR2(9)
INIEXT NOT NULL NUMBER
SEXT NOT NULL NUMBER
PCTINC NOT NULL NUMBER
MINEXT NOT NULL NUMBER
MAXEXT NOT NULL NUMBER
MINLEN NUMBER
DEFLOG NOT NULL NUMBER
EXT_MGT NOT NULL NUMBER
ALLOC_TYPE NOT NULL NUMBER
BLOCKSIZE NOT NULL NUMBER
#11g
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 – Production
With the Partitioning, OLAP and Real Application Testing options
SQL > desc sys.exu9tbs
名 称 是否为空? 类型
—————————————– ——– ————————-
ID NOT NULL NUMBER
OWNER CHAR(6)
NAME NOT NULL VARCHAR2(30)
ISONLINE VARCHAR2(7)
CONTENT VARCHAR2(9)
INIEXT NOT NULL NUMBER
SEXT NOT NULL NUMBER
PCTINC NOT NULL NUMBER
MINEXT NOT NULL NUMBER
MAXEXT NOT NULL NUMBER
MINLEN NUMBER
DEFLOG NOT NULL NUMBER
EXT_MGT NOT NULL NUMBER
ALLOC_TYPE NOT NULL NUMBER
BLOCKSIZE NOT NULL NUMBER
MAXSIZE NUMBER ———>问题在这里
所以,导入导出数据的时候,还是尽可能的版本统一,10g导10g 的,11g导11g的,免得不必要的麻烦。
好了,言归正传,分析DMP格式。
DMP是什么诡异格式?就是上面Oracle的EXP工具导出的备份文件的格式。
某次脑子发烧用gVim打开DMP猛然发现它就是一些SQL , 令我非常诧异,于是发现了一些诡异的修改备份的方法,就是直接修改DMP文件。
下面我打开一个新鲜导出的备份文件,分析一下DMP的结构。
首先一打开DMP,最上面有几行这样的东西:
DPLX
RUSERS
8192
0
20
0
下面那些数字不要管,数据库的一些参数,DPLX就是导出的用户名,D是标识,PLX是用户名,EUSERS是默认表空间,E是标识,USERS是 表空间。
继续往下看,能看到这样的语句:
sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT(‘USERENV’,'CURRENT_SCHEMA’), export_db_name=>’ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM’, inst_scn=>’5603910′);
这个是建立模式的语句,原则上每个用户就是一个模式,Schema。
这上面这些东西,最好都不要改,改了要出事的,一般导入就不行了,会失效,因为DMP虽然大部分是明文SQL ,但是也有一部分是二进制的,改了这里会影响校验。
再往后看就有建表语句了,
CREATE TABLE “C” (“CNO” NUMBER(10, 0) NOT NULL ENABLE, “CNAME” VARCHAR2(20) NOT
NULL ENABLE, “CPNO” NUMBER(10, 0), “CCREDIT” NUMBER(3, 0) NOT NULL ENABLE) PCTF
REE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREE
LIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE “USERS” LOGGING NOCOMPRESS
有时候导出的表空间混乱,就可以在黄色底色的那里改,替换成想要的表空间。
然后一个表下面就是插入数据的语句了:
INSERT INTO “C” (“CNO”, “CNAME”, “CPNO”, “CCREDIT”) VALUES (:1, :2, :3, :4)
再往下就是一堆二进制,就是要插入的数据,那个就改不了了,Oracle没有公开格式。
不过知道这些已经足以解决导入中的很多问题,尤其是表空间混乱的问题。
某大飞机数据库就非常混乱,一个ARJ用户模式(我没有泄密,公开的)下有来自ARJ,M3,USERS,SYSTEM等表空间的表,就是导入的时 候方法不正确。然后用上篇Oracle日志中取消权限的方法,也会有些表导不进去,这是Oracle的BUG,但是我这样改了以后,导入后想在哪个表空间 就哪个表空间。
用这种方法修改了某大飞机的两个数据库导出文件,导入到同一个用户模式下了,表空间全部统一,数据没有丢失,导入过程完全没用警告。
(转)对Oracle导出文件错误和DMP文件结构的分析,EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: "MAXSIZE": invalid identifier的更多相关文章
- Oracle数据泵导入dmp文件,报UDI-12154、ORA-12154错误解决办法
1. 数据泵导入dmp文件,报UDI-12154.ORA-12154 1.1 导入命令 impdp cwy_init/init@orcl directory=DATA_PUMP_DIR dumpfil ...
- ORACLE导入导出数据dmp
imp testwms3/isc@TESTGMMC FILE=C:\ZKGL_201407012334.dmp ignore=y fromuser=GMMCZKGL touser=testwms ta ...
- 今天早上刚刚碰到的一个问题oracle数据归档已满,只能进行内部连接,ORA-00257 archiver error. 错误的处理方法
archive log 日志已满ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法1. 用sys用户登录 sq ...
- Oracle 导入、导出DMP(备份)文件
首先说明dmp文件: Oracle备份文件是以dmp结尾,这种文件是oracle的逻辑备份文件,常用于数据库逻辑备份,数据库迁移等操作. 一.Oracle导入备份文件步骤:我用的是Oracle 11g ...
- oracle 如何查询/修改dmp文件的字符集
1.如何查询dmp文件的字符集 用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集.如果dmp文件不大,比如只有几M或几十M,可以用Ul ...
- 导入dmp文件时,需要删除原有ORACLE数据库实例
导入dmp文件时,对于已存在的数据库实例及表处理方式:删除实例. 1.以管理员身份登录 sqlplus / as sysdba 2.停止实例 shutdown abort; 执行结果:ORACLE i ...
- 如何在oracle中导入导出dmp数据库文件
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中.利用 ...
- 关于oracle下提示ORA-00904:Invalid identifier错误的问题
转自:https://blog.csdn.net/suleil1/article/details/49471549 今天在建表后对数据进行插入,遇到这个恶心人的ORA-00904:Invalid id ...
- 使用imp命令和exp命令对oracle数据库进行导入导出操作
命令说明 imp命令和exp命令需要在cmd命令窗口下执行,并且需要在系统环境变量中配置imp,exp命令所在目录 导出命令 --全库导出 exp system/systempassword@orcl ...
随机推荐
- 线下线上对接的一种思路(本地erp与线上电子商务平台对接)
目前很多公司都希望本地的ERP能够与线上的电子商务平台进行对接. 但是很多的线下ERP系统商不愿意修改代码来做相应的对接,或者觉得太话费成本. 而对于企业本身,又会有很多的特殊需求. 下面略述一家进口 ...
- php微信接口实例
<?php /** * wechat php test */ //define your token //定义TOKEN秘钥 define("TOKEN", "we ...
- 【uTenux实验】互斥体
互斥体,维基百科中交互斥锁.其定义是这样的:互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制 ...
- RestTemplate
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率.调用RestTemplate的 ...
- 解决:jquery ajax非首次请求Server端获取cookie值中文乱码问题
HttpCookie cookie = new HttpCookie("RealName", HttpUtility.UrlEncode("你想要设置的值")) ...
- 53. Minimum Window Substring
Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...
- java中string stringbuilder stringbuffer 的区别
1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...
- web项目启动报错Unknown character set: 'utf8mb4' in mysql
网上一查,有的说是mysql驱动的问题,有的说创建数据库的时候指定utf8编码,换了各种mysql版本,最后换了5.1.6版本的mysql驱动后成功启动!问题解决!OMG
- imp导入oracle的dmp备份数据
imp system/oracle fromuser=lc0029999 touser=lc0029999 rows=y commit=y buffer=65536 feedback=10000 ig ...
- CentOS6 搭建Git仓库
近期上了Redmine以后,系统集成了Git的联动功能,于是萌生了搭建内网仓库的想法,特此记录一下: 1.安装Git yum -y install git 2.创建用户及密码 useradd git ...