0

0

IMP-00008: unrecognized statement in the export file: string

php中文网

php中文网

发布时间:2016-06-07 17:58:01

|

1708人浏览过

|

来源于php中文网

原创

上周需要将Oracle10g中的某一个用户下的对象导入到oracle11g中去。用exp在10g的数据库服务器上导出的dump文件,再用imp在11g的数据库服务器上将dump文件导入到数据库中,前面执行的都很正常,后来发现报如下错误: IMP-00008: unrecognized statement in the

上周需要将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
Cause:Import did not recognize a statement in the export file. Either the export file was corrupted, or an Import internal error has occurred.
Action:If the 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 directoryexpdp_diras '/home/Oracle/expdp_dir';  //一台服务器只要创建一次
2 赋予导出的用户权限
SQL> grant read,write on directoryexpdp_dirto test;//一台服务器只要创建一次


3、在Linux目录创建目录/home/Oracle/expdp_dir

mkdir -p /home/Oracle/expdp_dir //一台服务器只要创建一次


4、在命令窗口导出:

expdp test/test DIRECTORY=expdp_dirDUMPFILE=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区分大小写)


解决方法,原理就是往所有的空表中分配空间:


方法1:
用Oracle sqldeveloper ,建立下面的存储过程
--查询当前用户下的所有空表,并生成空表的插入语句脚本
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;
                IF v_q = 0 THEN
                    --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语句在执行一次就绝对不会错误。
然后将执行完的结果复制一次,在用图形界面执行一次,就可以了

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

286

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

126

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

42

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

19

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

23

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

421

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

51

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号