我无法将表格从DUMP文件导入到Oracle数据库中

时间:2019-06-16 19:36:30

标签: oracle dump impdp

这是我第一次使用转储文件,我是一个非常初学者。

所以, 我有包含表的DUMP文件,我需要将这些表导入到Oracle数据库。

这是我的客户端生成转储文件的方式:

  • 有几个类别(例如HR,Finance,Sales等。),他为每个类别进行SQL查询(每个查询与一个表相关)。让我们继续用一个称为A的类别进行推理。

  • 对于A类别,他为他所做的所有查询的结果生成了转储文件。所以我们有这样的东西:

    类别A:

    • 表_1
    • 表_2
    • Table_3
    • Table_4

生成的转储文件(dmp文件的数量取决于数据的大小):

  • CategorieA_01.dmp
  • CategorieA_02.dmp
  • CategorieA_03.dmp
  • CategorieA_04.dmp
  • CategorieA_05.dmp

所以我们不知道哪个表包含在哪个转储文件中。我需要将单个表导入Oracle数据库。

这就是我所做的。在命令提示符下:

C:\"path">sqlplus / as sysdba
SQL> alter session set "_ORACLE_SCRIPT"=true;
SQL> Grant dba to my_user;
SQL> CREATE DIRECTORY Dir_Name AS 'G:\Dir_Name';  -- This is where I copied all the dmp files and the logs

通常我需要创建一个表空间,但是根据我掌握的信息,我在任何地方都找不到要导入的表的表空间名称,所以我要做的是编写导入语句行并等待为它返回错误,指出它找不到表空间“ X”,然后创建表空间“ X”,并重复如下的import语句行(如果您对如何找到名称的想法有所了解)需要在不进行这种方式的情况下创建的表空间的大小,请告诉我):

C:\"paths">impdp my_user/pswd TABLES=SYSADM.table_1 directory=Dir_Name dumpfile=CategorieA_.%U.dmp logfile=Log_Name

所以在此之后,我得到了两个案例结果:

  1. 表已成功加载:x中已加载x行!好的,没什么好说的。

  2. 我收到此错误:

  

ORA-02374:加载表“ SYSADM”时发生转换错误。“ Table_1”
     ORA-12899:值对于列COL_1太大(实际:19,最大值:18)

所以在这里,我要做的是回到sql developer并(与下面的#b链接)并使用丢失的数据创建了table_1,并在提示命令中执行以下操作:

第1步:我仅导入元数据:

C:\> impdp my_user/pswd DIRECTORY=Dir_Name DUMPFILE=CategorieA_.%U.dmp CONTENT=METADATA_ONLY TABLES=SYSADM.table_1 LOGFILE=file_name

第2步:然后返回sql developer以扩展列的大小:

alter table Table_1 modify (COL_1 VARCHAR2(50));

第3步:然后返回到命令提示符,仅导入数据:

impdp my_user/pswd DIRECTORY=Dir_Name DUMPFILE=CategorieA_.%U.dmp CONTENT=DATA_ONLY TABLES=SYSADM.table_1 LOGFILE=file_name

再次,如果您对如何导入表格而不得到此列大小错误消息有任何建议,那将是很好的。

直到现在,没有任何障碍,即使花费太多时间,我也总是找到继续前进的方法。

现在,当我这样做时,我也会遇到两种情况:

  1. 一切都很好,效果很好!

  2. (b)在删除SQL开发人员创建的表之前,我一直收到一条错误消息,指出该表不存在。

好的,我尝试进一步执行这三个步骤,并在执行步骤1之后立即收到此错误消息:

  

错误:ORA-39151:表“ SYSADM”。“表_1”存在。由于跳过了table_exists_action,将跳过所有相关的元数据和数据

怎么可能? Oracle表示它不存在,并且同时在命令提示符中说它存在。

对此有什么解决方案?

谢谢您的阅读,直到这里我都知道这很长,但这只是为了让您清楚明白,以便您清楚地了解问题所在。

希望您能对此有所帮助。

预先感谢

1 个答案:

答案 0 :(得分:2)

此错误是由于导出数据的数据库的字符集与数据库之间的不匹配引起的。

  

ORA-02374:加载表“ SYSADM”时发生转换错误。“表_1”

一种解决方法是:

  1. 捕获导入将创建的DDL。使用sqlfile参数,例如SQLFILE=Dir_Name:CategorieA_01.dmp。您拥有如此众多转储文件的事实显然意味着这一步可能有点令人作呕。也许您可以在此处使用通配符-我不知道,我从未尝试过。
  2. 浏览生成的DDL文件,查看引用了哪些表空间并创建它们。
  3. 您还可以提取CREATE TABLE语句。编辑表定义,将所有VARCHAR2列的BYTE语义替换为CHAR。创建表。
  4. 然后仅导入数据。使用CONTENT = DATA_ONLY运行impdp。

步骤的替代方法是:

  1. 仅导入表结构。使用CONTENT = METADATA_ONLY参数
  2. 使用ALTER TABLE语句修改导入的表结构,以切换到CHAR语义。也许这是比较乏味的选择。

如果您经常与该客户打交道,则建议他们以更明智的方式进行出口。也许每个表一个文件。或仅一个文件。这一切无助于人。