复制一个用户的数据到另外一个用户----IMPDP

如何快速的复制一个用户的数据到另外一个用户(这个用户可能在不同的数据库中)?
一般答案:使用EXP(EXPDP)与IMP(IMPDP)相结合完成用户数据的导入和导出

高级方法:IMPDP工具提供的NETWORK_LINK参数可以一步到位的完成此项艰巨的任务。
这种方法非常类似于使用CTAS方法在表复制中的应用,只不过这里我们实现的是用户间的数据复制。

使用这种方法的一般步骤如下:
a.创建database link;
b.使用IMPDP的network_link、schemas和remap_schema相结合完成用户的数据的迁移;

真实的感受一下此项技术带给我们的快乐。
实现案例:同一个实例中不同用户间的迁移复制。

1.创建指向自身的DATABASE LINK
1)确认tnsnames.ora文件中的连接串
[email protected] /home/oracle$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/ora11gR2/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

SECOOLER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = secDB)(PORT = 1526))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = secooler)
    )
  )

2)在数据库系统中创建一个指向自身的DATABASE LINK
[email protected]> create public database link dblink_to_myself connect to system identified by sys using ‘SECOOLER‘;

Database link created.

2.复制sec用户的数据到secooler用户
1)确认sec用户下的T表及其数据量
[email protected]> conn sec/sec
Connected.
[email protected]> select * From cat;

TABLE_NAME                     TABLE_TYPE
------------------------------ -----------
T                              TABLE

[email protected]> select count(*) from t;

COUNT(*)
----------
     71325

2)查看secooler用户
[email protected]> conn secooler/secooler
Connected.
[email protected]> select * from cat;

no rows selected

此时secooler用户中不包含任何T表信息。

3)使用IMPDP工具实现数据从sec用户向secooler用户复制的功能
[email protected] /home/oracle$ impdp system/sys network_link=dblink_to_myself schemas=sec remap_schema=sec:secooler

Import: Release 11.2.0.1.0 - Production on Thu Apr 8 10:01:16 2010

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

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/******** network_link=dblink_to_myself schemas=sec remap_schema=sec:secooler
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 9 MB
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"SECOOLER" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "SECOOLER"."T"                               71325 rows
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at 10:02:45

3.查看secooler用户数据,验收迁移成果
[email protected] /home/oracle$ sqlplus secooler/secooler

SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 8 10:04:55 2010

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

[email protected]> select * from cat;

TABLE_NAME                     TABLE_TYPE
------------------------------ -----------
T                              TABLE

[email protected]> select count(*) from t;

COUNT(*)
----------
     71325

令人激动地时刻到了,sec用户下的T表及其数据已经成功的“复制”到了secooler用户中。

4.小结
使用IMPDP工具完成用户数据复制的优点:
1)节省了大量的磁盘空间,因为不用生成中间的dump文件;
2)操作简便,步骤精简;
3)因为操作环节的减少,整个操作过程不易出错。

时间: 2024-12-13 05:30:41

复制一个用户的数据到另外一个用户----IMPDP的相关文章

从一个用户导入数据到另一个用户的表中的4种方法

1.使用sys用户登陆:insert into 导入用户.表名 select * from 导出用户.表名例如:cms0706 -> cms0707 2. conn cms0706/[email protected]; 以t_ums_config为例 (1).select * from t_ums_config;(2).使用工具生成insert语句: Export Results -> SQL files conn cms0707/[email protected]; @+文件路径commit

java实现从一个数据库查询数据经过处理导入另外一个数据库中

当数据库表中有clob字段或要对表中数据做较复杂处理时就不太好用脚本从一个数据库导入数据到另外一个数据库中了,这时就要通过代码实现了,下面以orale数据库为例代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.text

第2章 利用用户行为数据

本笔记为自己学习之用,对笔记内容感兴趣的读者还请购买正版书籍<推进系统实践>,尊重作者著作权益! 2.1 用户行为数据简介 2.2 用户行为分析 2.2.1 用户活跃度和物品流行度的分布 Power Law,长尾分布 2.2.2 用户活跃度和物品流行度的关系 基于用户行为数据设计的推荐算法一般称为协同过滤算法,比如: 1.基于邻域的方法(neighborhood-based) 2.隐语义模型(latent factor model) 3.基于图的随机游走算法(random walk on gr

深入MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术.这是个技术人的好时代,仅数据库领域热门DB就有300+,围绕着Hadoop生态圈的大数据处理技术更是繁花似锦.在云栖社区2017在线技术峰会大数据技术峰会上,阿里云大数据计算平台架构师林伟做了题为<MaxCompute的大脑:基于代价的优化器>的分享,为大家分享阿里巴巴大数据计算服务的大脑--基于代价的优化器的设计和架构. MaxCompute简介 大数据

如何从一个DataTable中复制数据行到另一个DataTable中

DataTable dt = ""; //这里是填充DataTable数据 DataTable dtNew = dt.Copy(); //复制dt表数据结构 dtNew.Clear() //清楚数据 for (int i = 0; i < dt.Rows.Count; i++) { if (条件语句) { dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行 } } ===前提:我们已经有一个DataTable的数据表 现在需要的只是其中的一

android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访问的IP都是10.0.2.2,如果在apache虚拟主机配置文件中配置了多个虚拟主机,那么将默认解析为对第一个虚拟主机的请求,所以,在调试android应用时,应该将对应的服务端所配置的那个虚拟主机放在配置文件中的第一个虚拟主机的位置.否则就会出现请求的文件不存在等的错误. 服务端返回JSON数据及

如何做出一个好的数据产品

一.创造优秀数据产品需要的能力 创造力 富有创造力的人往往没有创造,只是把以前的经历联系起来,组成新的事物.他们富有创造力是因为有着更多的经历或者对自己的经历思考更加深刻. 敢于抛弃惯性思维 "大家这么做,肯定错不了" "一直这么做,就永远没有尽头" 要注重对日常重复工作的总结,找出业务方最需要的部分并把它自动化.系统化. 清晰的逻辑思考能力和想象力 "你的财富成就不会超过你的思维格局" 思考能力和想象力能帮你更清晰的描绘产品的各个细节 善于沟通

返回数据给上一个活动

我们都知道,android开发中一个活动跳转时是可以带数据传递给下一个活动的,那么能不能够返回数据给上一个活动呢?答案是肯定的.不过不同的是,返回上一个活动只需要按一下Back键就可以了,并没有一个用于启动活动Intent来传递数据.通过查阅文档你会发现,Activity中还有一个startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能返回一个结果给上一个活动.毫无疑问,这就是我们所需要的. startActivityForResult()方法接收

ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据

ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ————————————————————————————————————— ZeroMQ 官方地址:http://api.zeromq.org/4-1:zmq-send-const zmq_send_const(3)           ØMQ Manual - ØMQ/4.1.0 Name zmq_send_const – 从一个socket上发送一个固定内存数据