IMP-00008: unrecognized statement in the export file: string的问题分析
分类: Linux
上周需要将oracle10g中的某一个用户下的对象导入到oracle11g中去。用exp在10g的数据库服务器上导出的dump文件,再用imp在11g的数据库服务器上将dump文件导入到数据库中,前面执行的都很正常,后来发现报如下错误:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
?
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
#
IMP-00008: unrecognized statement in the export file:
#
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
oracle官方文档的对这个错误的是这么说的:
IMP-00008: unrecognized statement in the export file: string
did not recognize a statement in the export file. Either the export file
was corrupted, or an Import internal error has occurred.
export file was corrupted, retry with a new export file. Otherwise,
report this as an Import internal error and submit the export file to
customer support.
看这个没有什么帮助。
后来查到是由于oracle11g有个新特性,不能导入空表:
11G中有个新特性,当表无数据时,不分配segment,以节省空间,这样就会没有导出数据
??
IMP-00008: unrecognized statement in the export file:
?
IMP-00008: unrecognized statement in the export file:
在用imp 导入数据的时候出现IMP-00008: unrecognized statement in the export file:的错误,
解决方法
在Oracle 11g中,exp默认不能导出空表。用传统的exp,imp进行异构平台数据库迁移会比较麻烦。不过可以使用expdp、impdp进行迁移。
把64位windows 2003的Oracle11gR2数据库迁移到64位Linux RedHat Enterprise 5中,可以使用expdp、impdp进行迁移数据。
如:Linux 为A服务器,Linux为B服务器,数据库用户为test,把A服务器的数据迁移到B服务器中
在A服务器操作
1、创建目录
SQL> create directory expdp_dir as '/home/oracle/expdp_dir'; //一台服务器只要创建一次
2 赋予导出的用户权限
SQL> grant read,write on directory expdp_dir to test;//一台服务器只要创建一次
3、在Linux目录创建目录/home/oracle/expdp_dir
mkdir -p /home/oracle/expdp_dir //一台服务器只要创建一次
4、在命令窗口导出:
expdp test/test DIRECTORY=expdp_dir DUMPFILE=test.dmp logfile=testexpdp.log //每次都要操作
在B服务器中操作:
5、SQL> create directory impdp_dir as '/home/oracle/impdp_dir';//一台服务器只要创建一次
SQL> grant read,write on directory impdp_dir to test;//一台服务器只要创建一次
6、 在系统中需要有/home/oracle/impdp_dir目录
7、用ftp把A服务器导出的数据上传到B服务器的/home/oracle/impdp_dir目录中
在A服务器中配置好B服务器的服务器名,在A服务器导入数据
8、在命令窗口导入:
impdp test/test@B_database DIRECTORY=impdp_dir DUMPFILE=test.dmp logfile=testimpdp.log
(这里注意大小写,如果test.dmp在linux中为大写,必须更改为大写。Linux区分大小写)
解决方法,原理就是往所有的空表中分配空间:
create or replace
procedure generate_tab_segement is
v_table NVARCHAR2(200);
v_sql VARCHAR2(200);
v_q NUMBER;
v_char_value NVARCHAR2(10);
v_varchar2_value NVARCHAR2(10);
v_number_value NVARCHAR2(10);
v_date_value NVARCHAR2(10);
v_add_value NVARCHAR2(10);
v_separate_value NVARCHAR2(10);
v_insert_sql NVARCHAR2(4000);
col_num NVARCHAR2(200);
tb_name NVARCHAR2(200);
TYPE TCUR IS REF CURSOR;
c2 TCUR;
begin
FOR r1 IN (SELECT table_name tn FROM tabs) LOOP
BEGIN
v_table :=r1.tn;
v_sql := 'SELECT count(*) as q FROM ' || v_table || ' where rownum = 1';
v_char_value := '''1''';
v_varchar2_value := '''1''';
v_number_value := '1';
v_date_value := 'sysdate';
v_separate_value := ',';
v_insert_sql := 'insert into ';
v_add_value :='null';
OPEN c2 FOR v_sql ;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
--DBMS_OUTPUT.PUT_LINE(v_table);
--构造插入行
FOR user_null_table IN (select to_char(count(*)) as col_num,
t.TABLE_NAME as tb_name
from user_tab_columns t
where t.TABLE_NAME= v_table
group by t.TABLE_NAME) LOOP
BEGIN
col_num := user_null_table.col_num;
tb_name := user_null_table.tb_name;
v_insert_sql := 'insert into ';
v_insert_sql := v_insert_sql || tb_name || ' values(' ;
FOR user_tab_cols IN (select * from
user_tab_columns t where t.TABLE_NAME = tb_name ORDER BY t.COLUMN_ID)
LOOP
BEGIN
v_add_value :='null';
IF user_tab_cols.COLUMN_ID = col_num THEN
v_separate_value := '';
else
v_separate_value := ',';
END IF;
if user_tab_cols.DATA_TYPE = 'CHAR' THEN
v_add_value := v_char_value;
END if;
IF user_tab_cols.DATA_TYPE = 'VARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NVARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NUMBER' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'LONG' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'DATE' THEN
v_add_value := v_date_value;
END IF;
IF substr(user_tab_cols.DATA_TYPE,0,9) = 'TIMESTAMP' THEN
v_add_value := v_date_value;
END IF;
v_insert_sql := v_insert_sql || v_add_value ||
v_separate_value;
end;
END LOOP;
v_insert_sql := v_insert_sql || ');';
DBMS_OUTPUT.PUT_LINE(v_insert_sql);
end;
END LOOP;
end if;
END LOOP;
CLOSE c2;
end;
END LOOP;
end generate_tab_segement;
/
然后用图形界面工具去调用该存储过程,让存储过程语句执行一次,并起作用,不知道什么原因有些表的数据没有插入进去,为了保证不会出错,大家可以将执行完显示的SQL语句在执行一次就绝对不会错误。
IMP-00008: unrecognized statement in the export file: string的问题分析的更多相关文章
- IMP-00009: abnormal end of export file解决方案
一.概述 最近在测试环境的一个oracle数据库上面,使用exp将表导出没有问题,而将导出的文件使用imp导入时却出现了如下错误. IMP-00009: abnormal end of export ...
- 【Oracle】IMP-00010: not a valid export file, header failed verification
别人给了一个Oracle文件,结果在导入的时候发现有问题,报错如下: IMP-00010: not a valid export file, header failed verification 在网 ...
- ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”
ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”,这在给定的上下文中无效 这是一个与Controller.F ...
- 【new File(String Path)加载资源问题】
2017-12-17 15:07:38 [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...
- File(File f, String child) File(String parent, String child)
(转载)File(File f, String child) 根据f 抽象路径名和 child 路径名字符串创建一个新 File 实例. f抽象路径名用于表示目录,child 路径名字符串用于表示目录 ...
- Python使用eval强制转换字符串为字典时报错:File "<string>", line 1, in <module> NameError: name 'nan' is not defined
文本中保存的内容为: { 'QQQ': [0.067, 0.167, 0.2, 0.033, 0.233, 0.267, 0.1, 0.133], 'TTT': [0.5, 0.375, 0.25, ...
- new File(String Path)加载资源问题
2017-12-17 15:07:38 [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...
- Oracle EBS Export File Format
Profile Option Name Site Application Responsibility Server Server Org User Remark Export MIME type t ...
- android uri , file , string 互转
1:android Uri 介绍 http://www.cnblogs.com/lingyun1120/archive/2012/04/18/2455212.html 2:File 转成Uri < ...
随机推荐
- switch case default 的使用
switch_case从页面输入五个同学的成绩,求出平均成绩,如果大于等于90为优秀,小于90大于等于80为良好,小于80大于等于70为一般,小于70大于等于60为较差,小于60为很差 SWITCH语 ...
- jQuery获取Select选择的Text(非表单元素)和 Value(表单元素)(转)
jQuery获取Select选择的Text和Value: 语法解释: . $("#select_id").change(function(){//code...}); //为Sel ...
- 现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值
问题描述:现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值 思路:参照两个数组归并的过程,每次选取最小的数据进行比较 ...
- 官网下载旧版本的Xcode
1.登录“苹果开发者中心”——>“SDKs” 2.点击“Xcode” 3.点击页面顶部的“Download” 4.点击页面左下方的“additional tools”,这样就可以查询到各个Xco ...
- qt检测网络连接状态【只能检测和路由器的连接,不能测试到外网的连接】
#include <QCoreApplication>#include <QDebug>#include <QTextStream>#include <QDi ...
- lua math libary
函数名 描述 示例 结果 pi 圆周率 math.pi 3.1415926535898 abs 取绝对值 math.abs(-2012) 2012 ceil 向上取整 math.ceil(9.1) 1 ...
- 腾讯QQ首次在PC端采用气泡式聊天界面(from:36kr)
小伙伴们,你们是否已经发觉,曾经爱过的姑娘在不知不觉中已变了模样,曾经鲜艳的红领巾也不再飘荡于前胸,而曾经最熟悉的QQ电脑 UI,竟在不知不觉中改头换面了. 没关系,少年,还不晚,今天,让我们携起手来 ...
- input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
input输入框在获得或失去焦点时隐藏或显示文字,这样的焦点效果想必很多朋友在填写form表格的时候都曾见识过吧,本文使用jquery实现以下,感兴趣的朋友可以参考下哈 大家可以看效果图的搜索输入框, ...
- zoj 2071 Technology Trader 最大权闭合子图
传送门 和上一题一样, 也是一个最大权闭合子图.不过建图好麻烦的感觉 写了好久. 源点和原材料连边, 权值为val. 汇点和产品连边, 权值为val. 产品与和它有关系的材料连边, 权值inf. 最 ...
- jquery 工作笔记,不断整理中..
$('input:radio[name="ruleType"]:checked').val() //获得radio选中的值 $("input[name='Q_lastU ...