oracle数据库中如何查询关联数据并导出指定数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库中如何查询关联数据并导出指定数据?相关的知识,希望对你有一定的参考价值。

是这样的,有两个表 信息表(XXB) 和 照片表(ZPB) XXB 字段有 XM(姓名) XB(姓别) RZSJ(入职时间) ZPID(照片ID) ZHAOPIAN(照片) ZPB 字段有 ZPID(照片ID) ZHAOPIAN(照片,以BLOB存放) 两表通过 ZPID(照片ID) ZHAOPIAN(照片) 关联 我想查出,某个年份以前入职的所有人的所有信息,包含图片,将查询出的结果,导出为 对应的两个表,数据量比较大,上十万,所以想导成DMP格式,然后导入到一个空数据库时,可以将两个表,结构,数据,一起导进去,语句应如何写呢? 两数据库不在同一局域网,不能远程直连

按表名导出:expdp
用户名/密码@数据库名称
TABLES=表名1,表名2
dumpfile=导出文件名.dmp
DIRECTORY=文件夹名称;
导入指定表空间:impdp
用户名/密码
DIRECTORY=文件夹名称
DUMPFILE=待导入文件名.dmp
TABLESPACES=表空间名;
参考技术A 先关系查询结果保存一个临时表,然后导出
create
table
exptt
as
select
*
from
xxb
a,zpb
b
where
a.zpid=b.zpid
and
extract(year
from
入职时间)<指定年份
exp
uname/npwd@sidno
file=c:\exptt.dmp
tables=test

如何向Oracle数据库表中进行大数据量的插入并提交?

我将A数据库里的一张表里的数据通过DBLink的方式插入到B数据库中,A表只有两个字段,但是却又几千万的数据,一句很简单的Sql却执行了两个小时还没有执行完毕,请问应该如何进行这种大数据量的插入操作?个人觉得应该是一次性插入并提交的数据量太大的缘故导致速度特别慢,请问谁有更好的方法解决这个问题呢。

大数据量提交可能会造成系统瘫痪,所以不建议这样做。

如果有需要,可以在导出insert语句的时候分批次commit(提交)。

方法如下:

1、登录plsql,进入导出表

2、选择要导出的表,然后下图位置根据需要写上每次多少行提交,选择导出路径,点击导出即可

参考技术A A和B数据库中的表结构完全一致,且仅是想一次性迁移A数据库中数据至B数据库的话,使用数据泵方式呢?将A的数据使用数据泵导出成dmp,在B数据库中使用该dmp导入 参考技术B 一次折腾几千万的话, 那么设置一下, 有 20W了, 就自动提交一下。
set autocommit on;
set autocommit 200000;

然后,假如你的目标数据库, 是归档的话, 可以

INSERT /*+ append */ INTO 目标表 nologging SELECT * FROM 源表@DBLINK;

commit;
set autocommit off;

假如你的 目标表 上面, 有 索引的话, 建议先删除 索引。
等 上面的 INSERT 语句执行完毕后, 再重建索引。追问

insert into T1 select * from T2@Oracle12;
commit;

请问set autocommit 200000;应该在哪里添加?!

追答

SQL Plus 里面应该可以.

在 PL/SQL Developer 里面, 好像不行。

本回答被提问者采纳

以上是关于oracle数据库中如何查询关联数据并导出指定数据?的主要内容,如果未能解决你的问题,请参考以下文章

linux下查询oracle数据库表中符合条件内容并导出到指定目录下txt文件

oracle怎么查询指定的数据

oracle 11g中怎么将查询指定的数据不在指定的字段方法

如何用exp导出oracle数据库并压缩

如何将 Laravel 数据表里的数据导出成 Seeder 文件

pl/sql 把查询结果导出为dmp文件