创建临时表导数据

本文讨论了在远程数据库上执行导数据存储过程时遇到的问题,特别是远程数据库连接导致的数据导入速度缓慢。通过创建本地临时表来解决远程数据库连接带来的性能瓶颈,并详细展示了相关SQL代码。

    这几天需要从一台远程的映射的数据库服务器导数据,在执行导数据存储过程的时候发现特别慢。在远程数据库上直接查询,速度很快。远程连数据库查也很快。
    但是,当把远程数据库上的表和本地数据库的表进行连接查询的时候就特别的慢,我执行了一个存储过程,一晚上都没执行完。后来请教同事,采用创建临时表,先把远程数据都导入到本地临时表,然后将本地表和临时表进行连接查询。数据导入后,再把临时表删除掉,问题解决。

 

代码如下:


create table T_TEMP_HOUSE as

    select id,col1,col2,col3

    from second.HOUSE@SECOND.US.ORACLE.COM;


DELETE FROM HOUSE where id in (SELECT b.id from T_TEMP_HOUSE a,HOUSE b 

     where a.id=b.idand a.upddate!=b.upddate );


insert into HOUSE (id,col1,col2,col3) 

     select id,col1,col2,col3

     from T_TEMP_HOUSE a,HOUSE b 

     where  a.id=b.id(+) and b.idIS NULL;

 

 

在Oracle中临时表导出数据可按以下步骤进行: ### 临时表 可以使用如下SQL语句创建一个临时表。例如创建一个名为`emp_temp`的临时表,保留提交后的行,且从`scott.emp`表中筛选出`job`不包含`SAL`的数据插入到临时表中: ```sql create global temporary table scott.emp_temp on commit preserve rows as select * from scott.emp where job not like 'SAL%'; ``` 以上代码实现了创建临时表的功能,代码解释如下: - `create global temporary table`:用于创建全局临时表。 - `scott.emp_temp`:指定临时表的所属用户和表名。 - `on commit preserve rows`:表示事务提交后,临时表中的数据仍然保留。 - `as select ...`:从`scott.emp`表中筛选符合条件的数据插入到临时表中 [^2]。 ### 导出数据 可以使用Oracle Data Pump工具来导出数据,该工具可高效传输数据,支持整个数据库、用户、表空间或单个表数据导出,在数据库备份和迁移中非常实用。 在导出前,可能需要先创建临时表空间以优化操作,以下是创建临时表空间的示例代码(在cmd中操作): ```plaintext 1. sqlplus /nolog 2. conn / as sysdba 3. create temporary tablespace user_temp 4. tempfile ‘D:\oradata\user_temp.dbf’ 5. size 50m 6. autoextend on 7. next 50m maxsize 20480m 8. extent management local; ``` 上述代码实现了临时表空间的创建,代码解释如下: - `sqlplus /nolog`:启动SQL*Plus但不立即登录。 - `conn / as sysdba`:以系统管理员身份连接到数据库。 - `create temporary tablespace user_temp`:创建名为`user_temp`的临时表空间。 - `tempfile ‘D:\oradata\user_temp.dbf’`:指定临时表空间的数据文件路径。 - `size 50m`:设置初始大小为50MB。 - `autoextend on`:开启自动扩展功能。 - `next 50m maxsize 20480m`:每次扩展50MB,最大扩展到20480MB。 - `extent management local`:使用本地管理的区管理方式 [^1][^3]。 创建临时表空间后,可使用Data Pump工具导出临时表数据,例如导出`scott.emp_temp`表的数据: ```plaintext expdp scott/password tables=emp_temp dumpfile=emp_temp.dmp logfile=emp_temp.log ``` 以上代码实现了使用Data Pump导出临时表数据的功能,代码解释如下: - `expdp`:Data Pump的导出命令。 - `scott/password`:指定用户名和密码。 - `tables=emp_temp`:指定要导出的表为`emp_temp`。 - `dumpfile=emp_temp.dmp`:指定导出文件名为`emp_temp.dmp`。 - `logfile=emp_temp.log`:指定日志文件名为`emp_temp.log` [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值