编者按
云和恩墨大讲堂社群(本文底部有入群方式)里有人提出一个需求:一张表数据量很大,如何只导出其中一部分列?云和恩墨CTO、Oracle ACE总监、ACOUG核心专家杨廷琨老师使用了数据泵的方式,细致入微地解释了过程并给出具体的代码实现。数据和云(ID:OraNews)独家发布,以飨读者。
以下为正文
无论是老版本exp还是数据泵expdp,Oracle都提供了QUERY的功能,这使得查询表中部分记录的功能可以实现,但是QUERY只能过滤行,而不能过滤列,Oracle数据泵会读取表中全部列的。
在12c中,Oracle为数据泵提供了VIEW功能,使得导出的时候可以根据视图的定义来导出表中的数据:
SQL>select banner from v$version; BANNER--------------------------------------------------------------------------------OracleDatabase 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_tableswhere owner not in ('SYS');
视图已创建。
利用数据泵的VIEWS_AS_TABLES参数可以直接导出视图对应的表数据:
C:\Users\yangt>expdpc##u1 directory=d_output dumpfile=t_tab_view views