之前有同事问如何在一个数据库中复制一个用户信息,即将一个用户下的所有数据复制到另一个用户下,以方便进行开发测试,而不直接操作原有数据。当前,想到如何导出数据再导入之外,还没有其他方法,今天看到一个通过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