search
HomeDatabaseMysql TutorialIMP-00008: unrecognized statement in the export file: string

上周需要将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语句在执行一次就绝对不会错误。
然后将执行完的结果复制一次,在用图形界面执行一次,就可以了
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What are stored procedures in MySQL?What are stored procedures in MySQL?May 01, 2025 am 12:27 AM

Stored procedures are precompiled SQL statements in MySQL for improving performance and simplifying complex operations. 1. Improve performance: After the first compilation, subsequent calls do not need to be recompiled. 2. Improve security: Restrict data table access through permission control. 3. Simplify complex operations: combine multiple SQL statements to simplify application layer logic.

How does query caching work in MySQL?How does query caching work in MySQL?May 01, 2025 am 12:26 AM

The working principle of MySQL query cache is to store the results of SELECT query, and when the same query is executed again, the cached results are directly returned. 1) Query cache improves database reading performance and finds cached results through hash values. 2) Simple configuration, set query_cache_type and query_cache_size in MySQL configuration file. 3) Use the SQL_NO_CACHE keyword to disable the cache of specific queries. 4) In high-frequency update environments, query cache may cause performance bottlenecks and needs to be optimized for use through monitoring and adjustment of parameters.

What are the advantages of using MySQL over other relational databases?What are the advantages of using MySQL over other relational databases?May 01, 2025 am 12:18 AM

The reasons why MySQL is widely used in various projects include: 1. High performance and scalability, supporting multiple storage engines; 2. Easy to use and maintain, simple configuration and rich tools; 3. Rich ecosystem, attracting a large number of community and third-party tool support; 4. Cross-platform support, suitable for multiple operating systems.

How do you handle database upgrades in MySQL?How do you handle database upgrades in MySQL?Apr 30, 2025 am 12:28 AM

The steps for upgrading MySQL database include: 1. Backup the database, 2. Stop the current MySQL service, 3. Install the new version of MySQL, 4. Start the new version of MySQL service, 5. Recover the database. Compatibility issues are required during the upgrade process, and advanced tools such as PerconaToolkit can be used for testing and optimization.

What are the different backup strategies you can use for MySQL?What are the different backup strategies you can use for MySQL?Apr 30, 2025 am 12:28 AM

MySQL backup policies include logical backup, physical backup, incremental backup, replication-based backup, and cloud backup. 1. Logical backup uses mysqldump to export database structure and data, which is suitable for small databases and version migrations. 2. Physical backups are fast and comprehensive by copying data files, but require database consistency. 3. Incremental backup uses binary logging to record changes, which is suitable for large databases. 4. Replication-based backup reduces the impact on the production system by backing up from the server. 5. Cloud backups such as AmazonRDS provide automation solutions, but costs and control need to be considered. When selecting a policy, database size, downtime tolerance, recovery time, and recovery point goals should be considered.

What is MySQL clustering?What is MySQL clustering?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

How do you optimize database schema design for performance in MySQL?How do you optimize database schema design for performance in MySQL?Apr 30, 2025 am 12:27 AM

Optimizing database schema design in MySQL can improve performance through the following steps: 1. Index optimization: Create indexes on common query columns, balancing the overhead of query and inserting updates. 2. Table structure optimization: Reduce data redundancy through normalization or anti-normalization and improve access efficiency. 3. Data type selection: Use appropriate data types, such as INT instead of VARCHAR, to reduce storage space. 4. Partitioning and sub-table: For large data volumes, use partitioning and sub-table to disperse data to improve query and maintenance efficiency.

How can you optimize MySQL performance?How can you optimize MySQL performance?Apr 30, 2025 am 12:26 AM

TooptimizeMySQLperformance,followthesesteps:1)Implementproperindexingtospeedupqueries,2)UseEXPLAINtoanalyzeandoptimizequeryperformance,3)Adjustserverconfigurationsettingslikeinnodb_buffer_pool_sizeandmax_connections,4)Usepartitioningforlargetablestoi

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools