数据泵导致表部分列

栏目: 数据库 · 发布时间: 6年前

看到群里有人提出一个需求,一张表数据量很大,只想导出其中一部分列。

无论是老版本exp还是数据泵expdp,Oracle都提供了QUERY的功能,这使得查询表中部分记录的功能可以实现,但是QUERY只能过滤行,而不能过滤列,Oracle数据泵会读取表中全部列的。

在12c中,Oracle为数据泵提供了VIEW功能,使得导出的时候可以根据视图的定义来导出表中的数据:

SQL> select banner from v$version;

BANNER

——————————————————————————–

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production

SQL> CREATE TABLE T_TABLES AS SELECT * FROM ALL_TABLES;

表已创建。

SQL> create view v_tables as select owner, table_name, tablespace_name from t_tables where owner not in (‘SYS’);

视图已创建。

利用数据泵的VIEWS_AS_TABLES参数可以直接导出视图对应的表数据:

C:\Users\yangt>expdp c##u1 directory=d_output dumpfile=t_tab_view views_as_tables=v_tables

Export: Release 18.0.0.0.0 – Production on 星期二 2月 26 13:37:31 2019

Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

口令:

连接到: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production

警告: 连接到容器数据库的根或种子时通常不需要 Oracle Data Pump 操作。

启动 “C##U1”.”SYS_EXPORT_TABLE_01″:  c##u1/******** directory=d_output dumpfile=t_tab_view views_as_tables=v_tables

处理对象类型 TABLE_EXPORT/VIEWS_AS_TABLES/TABLE_DATA

处理对象类型 TABLE_EXPORT/VIEWS_AS_TABLES/TABLE

. . 导出了 “C##U1″.”V_TABLES”                          8.289 KB      71 行

已成功加载/卸载了主表 “C##U1”.”SYS_EXPORT_TABLE_01″

******************************************************************************

C##U1.SYS_EXPORT_TABLE_01 的转储文件集为:

D:\TEMP\T_TAB_VIEW.DMP

作业 “C##U1”.”SYS_EXPORT_TABLE_01″ 已于 星期二 2月 26 13:37:40 2019 elapsed 0 00:00:06 成功完成

虽然是通过视图导出的,但是数据泵把它当作一个表来处理,因此这个dump文件是可以直接导入到数据库中变成表的:

SQL> drop view v_tables;

视图已删除。

完成导入操作:

C:\Users\yangt>impdp c##u1 directory=d_output dumpfile=t_tab_view full=y

Import: Release 18.0.0.0.0 – Production on 星期二 2月 26 14:33:02 2019

Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

口令:

连接到: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production

警告: 连接到容器数据库的根或种子时通常不需要 Oracle Data Pump 操作。

已成功加载/卸载了主表 “C##U1”.”SYS_IMPORT_FULL_01″

启动 “C##U1”.”SYS_IMPORT_FULL_01″:  c##u1/******** directory=d_output dumpfile=t_tab_view full=y

处理对象类型 TABLE_EXPORT/VIEWS_AS_TABLES/TABLE

处理对象类型 TABLE_EXPORT/VIEWS_AS_TABLES/TABLE_DATA

. . 导入了 “C##U1″.”V_TABLES”                          8.289 KB      71 行

作业 “C##U1”.”SYS_IMPORT_FULL_01″ 已于 星期二 2月 26 14:33:07 2019 elapsed 0 00:00:02 成功完成

查询表数据:

SQL> select count(*) from v_tables;

COUNT(*)

———-

71

SQL> select table_name, tablespace_name from user_tables where table_name = ‘V_TABLES’;

TABLE_NAME                     TABLESPACE_NAME

—————————— ——————————

V_TABLES                       USERS

这个功能是12c的特新特,如果是12c之前的版本,可以考虑使用ORACLE_DATAPUMP类型的外部表来实现:

SQL> create table t_external_tables (owner, table_name, tablespace_name) organization external

2  (type oracle_datapump

3  default directory d_output

4  location (‘external_table.dp’))

5  as select owner, table_name, tablespace_name from t_tables where owner not in (‘SYS’);

表已创建。

通过将外部表导出的external_table.dp文件拷贝到目标环境对应的目录下,根据上面的定义重建外部表,注意目标环境创建过程由于已经拷贝了导出的数据,因此语法截至到location语句就结束了,不要再包含as select部分。

SQL> create table t_target_ext_tab (owner varchar2(30), table_name varchar2(128), tablespace_name varchar2(30))

2  organization external

3  (type oracle_datapump

4  default directory d_output

5  location (‘external_table.dp’));

表已创建。

SQL> select count(*) from t_target_ext_tab;

COUNT(*)

———-

71

SQL> col table_name for a30

SQL> select * from t_target_ext_tab where owner = ‘SYSTEM’;

OWNER                          TABLE_NAME                     TABLESPACE_NAME

—————————— —————————— ——————————

SYSTEM                         OL$

SYSTEM                         OL$HINTS

SYSTEM                         OL$NODES

SYSTEM                         HELP                           SYSTEM

所以对于11g和10g的版本,也可以不通过新建表,然后拷贝数据的方式来实现数据的导出和转移。但是如果是9i及以前的版本,那么要不然通过建表然后exp导出的方式,要不然自己写程序实现数据的导出吧。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax for Web Application Developers

Ajax for Web Application Developers

Kris Hadlock / Sams / 2006-10-30 / GBP 32.99

Book Description Reusable components and patterns for Ajax-driven applications Ajax is one of the latest and greatest ways to improve users’ online experience and create new and innovative web f......一起来看看 《Ajax for Web Application Developers》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具