Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle impdp content=data_only,如何指定首先导入哪些表_Oracle_Impdp - Fatal编程技术网

Oracle impdp content=data_only,如何指定首先导入哪些表

Oracle impdp content=data_only,如何指定首先导入哪些表,oracle,impdp,Oracle,Impdp,我正在尝试使用命令导入我的数据库 impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY 这在导入数据的某些部分时起作用,但是,我得到一个错误: ORA-02291:违反完整性约束(系统用户\角色\用户\ fk)- 找不到父项 基本上,我需要先从用户导入数据,然后才能从用户角色 使用IMPDP时,是否有方法指定操作顺序或首先导入哪个表数据 编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的

我正在尝试使用命令导入我的数据库

impdp SYSTEM/password DIRECTORY=dmpdir DUMPFILE=database.dmp CONTENT=DATA_ONLY
这在导入数据的某些部分时起作用,但是,我得到一个错误:

ORA-02291:违反完整性约束(系统用户\角色\用户\ fk)- 找不到父项

基本上,我需要先从
用户
导入数据,然后才能从
用户角色

使用IMPDP时,是否有方法指定操作顺序或首先导入哪个表数据


编辑:我发现一个糟糕的解决方案是简单地使用与上面相同的
impdp
语句两次。通过执行两次,我可以导入
用户
用户角色
,但是必须有一种更简单的方法来实现这一点。

您可以在导入之前禁用约束,然后重新启用它们。您可以使用一些动态SQL来实现这一点:

begin
  for r in (
    select 'ALTER TABLE "'||c.table_name||
      '" DISABLE CONSTRAINT "'||c.constraint_name||'"' as cmd
    from user_constraints c
    where c.constraint_type = 'R'
  )
  loop
    execute immediate r.cmd;
  end loop;
end;
/
运行该命令后,例如,通过SQL*Plus在shell脚本中使用herdoc,然后可以运行
impdp
命令一次性导入所有表;然后运行相同的PL/SQL块,但使用
ENABLE
而不是
DISABLE


在开始之前,您需要检查是否有任何禁用的约束。如果您这样做,禁用脚本可以根据它们的状态跳过它们,但启用脚本无法判断它们是否应该重新启用;因此,您可以创建一个静态启用脚本,或硬编码任何需要的异常。

您可以在导入之前禁用约束,然后重新启用它们。您可以使用一些动态SQL来实现这一点:

begin
  for r in (
    select 'ALTER TABLE "'||c.table_name||
      '" DISABLE CONSTRAINT "'||c.constraint_name||'"' as cmd
    from user_constraints c
    where c.constraint_type = 'R'
  )
  loop
    execute immediate r.cmd;
  end loop;
end;
/
运行该命令后,例如,通过SQL*Plus在shell脚本中使用herdoc,然后可以运行
impdp
命令一次性导入所有表;然后运行相同的PL/SQL块,但使用
ENABLE
而不是
DISABLE


在开始之前,您需要检查是否有任何禁用的约束。如果您这样做,禁用脚本可以根据它们的状态跳过它们,但启用脚本无法判断它们是否应该重新启用;因此,您可以创建一个静态启用脚本,或者硬编码您需要的任何异常。

显然,这是预期的行为;见MOS注释1062564.1。这是指,虽然不清楚它是否适用于这种情况。您是否能够在导入之前禁用约束?在过去,我运行了一个脚本来动态禁用所有约束,然后再重新启用它们。@AlexPoole-您可以使用您的脚本并对dmp文件运行它吗?不,您可以运行脚本来禁用;执行
impdp
(一次完成所有表格);然后运行脚本以重新启用。我想所有这些都可以在shell或批处理脚本包装器中完成。唯一的选择是您已经尝试过的,单独运行
impdp
以按您期望的顺序导入它们。您不能告诉导入订单。显然,这是预期的行为;见MOS注释1062564.1。这是指,虽然不清楚它是否适用于这种情况。您是否能够在导入之前禁用约束?在过去,我运行了一个脚本来动态禁用所有约束,然后再重新启用它们。@AlexPoole-您可以使用您的脚本并对dmp文件运行它吗?不,您可以运行脚本来禁用;执行
impdp
(一次完成所有表格);然后运行脚本以重新启用。我想所有这些都可以在shell或批处理脚本包装器中完成。唯一的选择是您已经尝试过的,单独运行
impdp
以按您期望的顺序导入它们。你不能告诉我你的订单。