使用impdp在同一个数据库之间复制用户数据(转)

之前有同事问如何在一个数据库中复制一个用户信息,即将一个用户下的所有数据复制到另一个用户下,以方便进行开发测试,而不直接操作原有数据。当前,想到如何导出数据再导入之外,还没有其他方法,今天看到一个通过network_link来使用impdp复制数据的方法,可以解决这个问题,并且还不需要将数据先导出到本地中。

以下内容转自:http://tomszrp.itpub.net/post/11835/293879,原文为 使用数据泵复制schema,作者: Thomas Zhang.

impdp 的数据源既可以是expdp 导出来的DMP文件,也可以是一数据库.
通过network_link 参数来指定数据源
schemas 参数说明要复制的用户
remap_schema 参数说明源用户与目标用户的匹配关系
remap_tablepace 来调整原schemas使用的表空间与目标数据库用户要表空间的对应关系。

首先创建一个dblink: 
我是在一个db自身上创建的dblink,用来模拟2个不同的库。同样的道理也说明了一种在同一个库上复制一个schema的方法

SQL> create public database link link_study connect to study identified by study using 'study';

数据库链接已创建。

测试DBLINK:

SQL> desc study.test@link_study
名称 是否为空? 类型
-------------------- -------- ------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)

SQL> select username from dba_users where username='THOMAS';

开始使用impdp复制:
注意看下面impdp命令中的network_link参数,这是从自身数据库建立一个Dblink。即相当于从自身数据库进行导入数据。

E:>impdp system/admin network_link=link_study schemas=study remap_schema=study:thomas
Import: Release 10.2.0.1.0 - Production on 星期日, 10 6月, 2007 8:54:53
Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** network_link=link_study s
chemas=study remap_schema=study:thomas
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 10 MB
处理对象类型 SCHEMA_EXPORT/USER
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/TABLESPACE_QUOTA
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
. . 导入了 "THOMAS"."TEST" 49879 行
. . 导入了 "THOMAS"."EMP" 3 行
. . 导入了 "THOMAS"."TEST_NEW" 4 行
. . 导入了 "THOMAS"."UPDATE_TABLES" 1 行
. . 导入了 "THOMAS"."ZRP" 1 行
. . 导入了 "THOMAS"."TOMS_PART" 0 行
处理对象类型 SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
处理对象类型 SCHEMA_EXPORT/VIEW/VIEW
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
作业 "SYSTEM"."SYS_IMPORT_SCHEMA_01" 已于 08:56:00 成功完成

修改口令,验证新的schema

SQL> conn /as sysdba
已连接。
SQL> alter user thomas identified by thomas ;
用户已更改。

SQL> conn thomas/thomas
已连接。
SQL> select table_name from tabs;

TABLE_NAME
------------------------------
TEST_NEW
UPDATE_TABLES
EMP
ZRP
TEST
TOMS_PART

已选择6行。

好的,到这里可以简单的看到,study已经被复制到了thomas下了。

转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201208270001.html

相关文章:

作者: flym

I am flym,the master of the site:)

发表评论

电子邮件地址不会被公开。 必填项已用*标注