数据泵对已经存在的表加载索引 imp 和impdp

这里探讨了使用imp 和impdp对含有索引的表的导入的一点差别。

使用imp可以在表存在的情况下,不删除表,且导入表的数据和索引。

1)创建实验表cust(已存在)

SQL> conn scott/yang
已连接。
SQL> select * from cust;

        ID CUTNAME                                                             
---------- ----------                                                          
         1 JANE                                                                
         2 Jone                                                                
         3 TOM                                                                 
         4 yang                                                                 
         5 yangyi                                                              
         6 xiaonan                                                             
已选择6行。
SQL> create index indcust_id on cust(id);
索引已创建。
2)导出表

HOST exp scott/yang file=cust.dmp   tables=cust

连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
. . 正在导出表                            CUST导出了           6 行
成功终止导出, 没有出现警告。

SQL> drop index indcust_id;
索引已删除

3)使用imp导入表

SQL> HOST imp scott/yang file=cust.dmp    tables=cust  ignore=y

连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

经由常规路径由 EXPORT:V11.01.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SCOTT 的对象导入到 SCOTT
. 正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                          "CUST"导入了           6 行
成功终止导入, 没有出现警告。
SQL> select * from cust;

        ID CUTNAME                                                             
---------- ----------                                                          
         1 JANE                                                                
         2 Jone                                                                
         3 TOM                                                                 
         4 yang                                                                 
         5  yangyi                                                              
         6 xiaonan                                                             
         1 JANE                                                                
         2 Jone                                                                
         3 TOM                                                                 
         4 yang                                                                 
         5 yangyi                                                                                                                      
         6 xiaonan                                                             
已选择12行。
SQL> select index_name from user_indexes
  2  where table_name='CUST';

INDEX_NAME                                                                     
------------------------------                                                 
INDCUST_ID          

4)impdp的默认工作并非如此,监测到表存在时,impdp会跳过索引的创建                                                        

SQL> create table texp(id number,name varchar2(30));

表已创建。

SQL> insert into texp
  2  select rownum,tname
  3  from tab;
已创建9行。
SQL> commit;
提交完成。
SQL> create index indtexp_id on texp (id);
索引已创建。

5)导出表

expdp scott/yang  directory=dump dumpfile=scottexp.dp tables=texp

连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SCOTT"."SYS_EXPORT_TABLE_01":  scott/******** directory=dump dumpfile=scotttexp.dmp tables=texp
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 64 KB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
. . 导出了 "SCOTT"."TEXP"                              5.507 KB       9 行
已成功加载/卸载了主表 "SCOTT"."SYS_EXPORT_TABLE_01"
******************************************************************************
SCOTT.SYS_EXPORT_TABLE_01 的转储文件集为:
  F:\DUMP\SCOTTTEXP.DMP
作业 "SCOTT"."SYS_EXPORT_TABLE_01" 已于 23:29:38 成功完成

清除数据,并删除索引:
SQL> drop index indtexp_id;
索引已删除。
SQL> truncate table texp;
表被截断。

6)然后再导入表

impdp scott/yang  directory=dump dumpfile=scottexp.dp tables=texp
SQL> select count(*) from texp;

  COUNT(*)                                                                     
----------                                                                     
         9                                                                     
SQL> select index_name from user_indexes
  2  where table_name='TEXP';
未选定行

数据虽然导入了,但是索引没有创建。不过要解决这个问题也很简单,通过INCLUDE就可以解决这个问题:
SQL> truncate table texp;
表被截断。
impdp scott/yang directory=dump  dumpfile=scottexp.dp tables=texp table_exists_action=truncate include=index    

 连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SCOTT"."SYS_IMPORT_TABLE_01"
启动 "SCOTT"."SYS_IMPORT_TABLE_01":  scott/******** directory=dump dumpfile=scotttexp.dmp tables=texp table_exists_action=truncate include=index
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
作业 "SCOTT"."SYS_IMPORT_TABLE_01" 已于 23:35:39 成功完成

SQL> select count(*) from texp;
  COUNT(*)                                                                     
----------                                                                     
         0                                                                
SQL> select index_name from user_indexes
  2  where table_name='TEXP';
INDEX_NAME                                                                     
------------------------------                                                 
INDTEXP_ID    

 SQL> drop index indtexp_id;
索引已删除。

impdp  scott/yangdirectory=dump dumpfile=scotttexp.dmp tables=texp table_exists_action=truncate include=index include=table_data

连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SCOTT"."SYS_IMPORT_TABLE_01"
启动 "SCOTT"."SYS_IMPORT_TABLE_01":  scott/******** directory=dump dumpfile=scotttexp.dmp tables=texp table_exists_action=truncate include=index include=table_data
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 导入了 "SCOTT"."TEXP"                              5.507 KB       9 行
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
作业 "SCOTT"."SYS_IMPORT_TABLE_01" 已于 23:37:57 成功完成

最后检查一下是否成功
SQL> select count(*) from texp;
  COUNT(*)                                                                     
----------                                                                     
         9                                                                     
SQL> select index_name from user_indexes
  2  where table_name='TEXP';
INDEX_NAME                                                                     
------------------------------                                                 
INDTEXP_ID                                                                     

 

时间: 2024-07-30 10:57:11

数据泵对已经存在的表加载索引 imp 和impdp的相关文章

Oracle数据泵如何对已经存在的表加载索引

一个朋友提到一个数据泵导入的问题,在表存在的情况下,不删除表,且导入表的数据和索引. 其实这个任务对于imp很简单,因为imp的工作方式就是如此. SQL> CREATE TABLE T_EXP 2  (ID NUMBER, NAME VARCHAR2(30)); 表已创建. SQL> CREATE INDEX IND_T_EXP_ID 2  ON T_EXP(ID); 索引已创建. SQL> INSERT INTO T_EXP 2  SELECT ROWNUM, TNAME 3  FR

oracle 10g数据泵和导入导出性能对比(二)IMP和IMPDP导入的区别

前一段时间在一次迁移中同时用到了数据泵和EXP,发现二者效率的差别还是相当大的.这里通过一个例子简单比较一下. 这篇文章比较一下IMP和IMPDP导入的区别. 前面对比了EXP和数据泵的导出,可以看到,数据泵导出速度与直接路径导出相比,速度并没有本质的提高,下面看看数据泵的导入方式与IMP的区别. 导入的DMP文件就用上面导出是得到的结果,先看看IMP的导入速度: $ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.3.0 - Produc

如何为goldengate的数据库中保证数据同步的情况下为表加列

问题描述 如何为goldengate的数据库中保证数据同步的情况下为表加列 数据库现在做GOLDENGATE,DML同步了部分表,现在在source端,需要同步的表中加一列,在target表中也加一列,该如何操作才能保证加列的过程中数据同步且不丢失

求.NET(C#)动态调用数据,移动手机,上拉加载,案例!谢谢!

问题描述 求.NET(C#)动态调用数据,移动手机,上拉加载,案例!谢谢!麻烦那位大神,给小弟一个案例,带数据的,上拉的时候加载数据.谢谢! 解决方案 解决方案二:没有人吗?

海量数据迁移之外部表加载

在并行生成了大量的dump文件后,可以在目标环境上对数据进行加载,这个加载的过程时间极短,都基本可以在毫秒级完成. 由于在外部表的加载过程中需要知道表结构的定义,所以可以通过如下的脚本得到表定义的基本语句,输出和desc类似. 因为目标环境中的表结构可能会和源dump文件中的表结构有一定的出入.所以可以在目标环境中生成表结构的定义语句. 批量加载生成的dump文件. 大体的效果如下 根据目标环境的表结构定义,生成黄色部分的表结构定义语句.然后在加载dump的时候,可以动态批量的加载dump文件,

实用SQL: 通过向表加clusted索引重整数据库

数据|数据库|索引 ----   ArrangeDB.SQL 重整数据库----   CopyRights @2003.12.29 Digital China Management System Co., Ltd.---- 重整流程:把所有用户表增加 clustered 索引,这样SQL SERVER会重整表,然后-- 再删除索引---- 使用时机:日常维护,建议每周做一次重整.---- 注意事项:做完后请做数据库收缩,更新统计,重新索引,及完整性检查 --drop table #dcms_in

《R数据可视化手册》——1.3 加载分隔符式的文本文件

1.3 加载分隔符式的文本文件 问题如何加载一个分隔符式的文本文件中的数据? 方法加载逗号分隔组(CSV)数据的最常用方法是: data <-read.csv("datafile.csv")``` 讨论 由于数据文件有许多不同的格式,为了加载它们,提供了很多对应的选项.如果一个数据集首行没有列名: data <-read.csv("datafile.csv", header=FALSE)`得到的数据框的列名将是V1.V2等,你可能想要重命名列: #手动为

《R数据可视化手册》——1.2 加载包

1.2 加载包 问题如何加载一个已经安装了的包? 方法使用library()函数,括号中写上要加载的包名.以加载ggplot2包为例,运行: library(ggplot2)``` 当然,必须确保要加载的包已经被安装了. 讨论 本书的大多数技巧都需要在运行代码前加载包,无论是为了绘图(ggplot2包)还是为了加载例子中的数据集(MASS和gcookbook包). R的一个不寻常之处是软件包(package)和软件库(library)的术语区别. 尽管我们使用library()函数来加载包(pa

EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

原文:EF如何操作内存中的数据以及加载相关联表的数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过ObjectContext来操作数据库的,一看是Object打头的,自然相当庞大,方法也比较多.到了经典的4.1版本,EF小组推出了一些更简单好用的API,就是DbContext,它包括更常用的方法.看看EF小组是怎么说