impdp+network link如何跳过expdp直接导入目标库?
impdp命令有特殊用途,可以将数据库的用户迁移到另一台机器上的数据库用户。如果目标用户不存在,也可以相应创建用户,将A数据库的用户快速迁移到B数据库。
我们来看看命令格式:
在B库下执行命令:(目标库,需要导入数据到数据库)
>Impdp 用户名/密码 schema=userA remap_schema=userA:userB remap_tablespace=tbsA :tbsB network_link=dblink_name
描述:用户id:用户名/密码用户推荐是系统。
Remap_schema: userA:userB。数据库用户映射。对于同一用户,省略该参数
Remap_tablespace: tbsA:tbsB。默认表空间映射。
架构:userA。必须是dblink中指定的用户。建议不指定。
Directory:该模式下,该参数指定日志文件的路径。如果未指定,路径默认为 data_pump_dir。
Network_link:在库B上创建的dblink,用于连接库A。
但是有几个先决条件:
1.用户名:本次操作推荐数据库用户为system,如果是其他用户,需要有dba权限的用户才能执行;
2. dblink:必须能够连接到相应库上的数据库用户。
3. 优点:不用导出数据然后导入,数据直接从源数据库导入到目标数据库。
4.如果从原库导出schema A,并且在schema A上建立了db_link,则原库的schema A用户必须有exp_full_database权限,否则会报错:strong>
使用分区、OLAP 和数据挖掘选项 ORA-31631:需要权限 ORA-39149:无法将特权用户链接到非特权用户
< p>5.此操作是局域网内迁移数据最方便的工具,但也可能是最慢的工具。6.还可以用这个方法导入表空间,单独的表等......tablespaces=xxx_tbs就可以。 ...
3。在目标数据库上建立到源的db_link时,可以为系统用户建立,这样整个数据库的数据或者表空间就可以建立了ata 可以导出和导入。
7.为用户A创建db_link时,需要赋予用户A导出schema数据的exp_full_database权限。
8.导入过程中,要注意目标数据库中是否存在表数据。可以使用Table_exists_action来处理。
实验一
源库::192.168.56.20 hostname:slient
目标库::192.168.56.12 hostname:wang
一、目标库操作:
1.创建tns连接字符串:
[oracle@wang admin]$ pwd
/u01/app/oracle/product/11.2.0/db_1/network/admin
[oracle@wang admin]$
[oracle@wang admin]$ cat tnsnames.ora
# tnsnames.ora 网络配置文件:/u01/app /oracle/product/11.2.0/db_1/network/admin/tnsnames.ora< br/># 由 Oracle 配置工具生成。
DBDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
(CONNECT_DATA =
(服务器 = 专用)
(SERVICE_NAME = DBdb)
)< br/> )
20 =
(DESCRIPTION =
(地址 = (协议 = TCP)(HOST =192.168.56.20)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 测试)
)
)
[oracle@wang admin]$ tnsping 20
Linux 版 TNS Ping 实用程序:版本 11.2.0.4.0 - 于 2017 年 8 月 5 日 23:51:59 生产
版权所有 (c) 1997、2013,Oracle。保留所有权利。
使用的参数文件:
使用 TNSNAMES 适配器解析别名
尝试联系 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.56.20)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test)))
确定(0 毫秒)
[oracle@wang admin] $
注意:检查源库和目标库是否监听。
2.为源数据库创建dblink
SQL> create public database link test connect to scottidentified by Tiger using '20';
数据库链接c表示。
验证:
SQL> set rows 200 Pages 999
SQL> col db_link for a10
SQL> col host for a10
SQL> select OWNER, DB_LINK,用户名,主机,从 dba_db_links 创建;
所有者 bsp; ---------------------------- ---------- ---------- 公开> 创建由 hh 帐户解锁标识的用户 hh;
用户已创建。
2.为导出用户对应的源数据库授予导出权限:
SQL> grant EXP_FULL_DATABASE to scott;
授权成功。
3.导入目标库:
[oracle@wang admin]$ impdp system/oracle schemas=scott remap_schema=scott:hh network_link=test
导入:Release 11.2.0.4.0 - Production on 2017 年 8 月 6 日星期日 00:54:06
版权所有 (c) 1982, 2011,Oracle 和/或其附属公司。保留所有权利。
连接至:Oracle Database 11g 企业版版本11.2.0.4.0 - 64 位生产
使用分区、OLAP、数据挖掘和真实应用程序测试选项
自动启用闪回以保持数据库完整性。
启动“SYSTEM”。“SYS_IMPORT_SCHEMA_01”: system/******** schemas=scott remap_schema=scott:hh network_link=test
正在使用 BLOCKS 方法进行估计...
正在处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计:256 KB
处理对象类型 SCHEMA_EXPORT/USER
ORA -31684:对象类型 USER:“HH”已存在
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
HH "."DEPT" 14 行
E “5 行
/>...." 奖金 "0 行
... ."TEST":"P2" 0 rows
。 br/>。 。已导入 "HH"."TEST123" 0 行
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/IND EX /STATISTICS/INDEX_STATISTICS
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
作业“SYSTEM”。“SYS_IMPORT_SCHEMA_01”已完成,但出现 1 个错误( s) 2017 年 8 月 6 日星期日 00:54:23 已过去 0 00:00:15
[oracle@wang admin]$
四。验证:
SQL> conn hh /hh;
已连接。
SQL> select * from tab; --------------- ------- ----------
奖金表
DBXLsp;表
DEPT 表
EMP 表
TEST123表
选择了7行。
实验2
< br/>目标库:192.168.56.12 主机名:wang db_name:DBdb service_names:service1,service2,service3
源库:192.168.56.11 hostnamerhel db_name:orcl service_names:orcl
1.目标库操作:
--配置tns到源库
[oracle@wang admin]$ cat tnsnames. ora
# tnsnames.ora 网络配置文件:/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# 由 Oracle 配置工具生成。
orcl =
(DESCRIPTION =
(LOAD_BALANCE = yes)
(地址 = (协议 = TCP)(HOST = 192.168.56.11)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
[oracle@wang admin]$
--查看要导入的用户数据
SQL> conn hr/hr;
已连接。
SQL> select * from tab; ----------------------- ------- ----------
国家 ABLE
JOB_HISTORY TABLE
LOCATIONS TABLE
REGIONS TABLE
选择了 7 行。
--在中创建 hr 用户的 dblink源数据库:
SQL> 创建数据库链接 ol 连接到 hr 使用的 hr 标识的数据库g'ORCL';
数据库链接已创建。
SQL> 从 dba_db_links 中选择 *; -------------- --------------- ---------------------- ------ -------- --------------- ------------
SYS FTLINK SCOTT 20 OL out out 09-DEC-17
二、源数据库检查:
--检查要导出的测试表
SQL> conn hr /hr;
已连接。
SQL> select * from tab;
TNAME TABTYPE Clusterid
------------------------------------------ ----- -- ----------
国家 表
部门 表
JOB_HISTORY表
位置表
地区表
SYNO表
已选择 8 行。
SQL> select count(*) from syno;
COUNT(*)
------ ----
35
--创建索引
SQL> create index idx_object_id on syno(object_id );
索引已创建。
SQL>
3.导入目标库:
[oracle@wang ~]$ impdp \'\/ as sysdba\'tables=hr.SYNO network_link=ol
导入:Release 11.2.0.4.0 -制作于 2017 年 12 月 9 日星期六 08:54:17
版权所有 (c) 1982, 2011, Oracle 和/或其附属公司。保留所有权利。
连接至:Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产
具有分区、OLAP、数据挖掘和真实应用程序测试选项
ORA-31631:需要权限
ORA-39149:不能将特权用户链接到非特权用户
[oracle@wang ~]$
错误:需要将exp_full_database权限授予该用户源库要导出。
--源库授权:
SQL> conn / as sysdba
已连接。
SQL> grant EXP_FULL_DATABASE to hr;
Grant
--再次执行目标库中的导入:
[oracle@wang ~]$ impdp \'\/ as sysdba\'tables=hr.SYNO network_link= ol
导入:版本 11.2.0.4.0 - 于 2017 年 12 月 9 日星期六 09:03:34 生产< br/>
版权所有 (c) 1982、2011,Oracle 和/或其附属公司。保留所有权利。
连接到:Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产
具有分区、OLAP、数据挖掘和实际应用程序测试选项
/>启动“SYS”.“SYS_IMPORT_TABLE_01”:“/******** AS SYSDBA”tables=hr.SYNO network_link=ol
使用BLOCKS方法估计正在进行中...
处理中对象类型 TABLE_EXPORT/ TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计:64 KB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
。 。导入“HR”。“SYNO” ‐ 处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
Proc正在处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
作业“SYS”。“SYS_IMPORT_TABLE_01”已于 2017 年 12 月 9 日星期六 09:03:51 成功完成,已过去 0 00 :00:16
[oracle@wang ~]$
发现索引统计等信息已导入
4.验证:
--目标库验证:
SQL> conn / as sysdba
已连接。
SQL> setlines 200
SQL> selectowner,index_name,table_owner, table_name,来自 dba_indexes 的状态,其中 table_name='SYNO'; TABLE_NAME TABLE_NAME 状态
--- ---------------------------------------- ------------ ---------------------------------------------------------------- --------------- ---------------------------
HR bsp; IDX_OBJECT_ID HR 选项卡;
br/>-------------------------------- ------- -- --------
国家 表
部门 bsp;标签LE
员工表
工作表
JOB_HISTORY表
LOCATIONS表
REGIONS表
SYNO表
已选择8行。
/>
SQL> select count(*) from syno;
COUNT(*)
----------
35
实验三
源库和目标库参考实验二
任务:将源库下scott用户下的表a、b导入到目标库hr下user,表的表空间映射为TS_XXF,索引的表空间映射为TST
1。源数据库操作,模拟测试表a,b
SQL> conn scott/ Tiger;
已连接。
SQL> select * from tab;
TNAME 老虎; -------------- ---------- ----------
奖金TABLE
SALGRADE TABLE
SQL> create table a as select * from emp;
已创建表。
SQL> create table b as select * from user_objects;
已创建表。
SQL> 在 (deptno) 上创建索引 idx_deptno;
已创建索引。
SQL> 在 b(object_id) 上创建索引 idx_obj_id;
已创建索引。
SQL> select count(*) from a;
< br/> COUNT(*)
----------
14
SQL> select count(*) from b;
/> COUNT(*)
----------
8
SQL> conn / as sysdba
已连接。
SQL > col SEGMENT_NAME for a15
SQL> select OWNER,SEGMENT_NAME,TABLESPACE_NAME,BYTESfrom dba_segments where SEGMENT_NAME in('A','B');
OWNER SEGMENT_NAME TABLESPACE_NAME BYTES
- -------------- ---- ---------- ---------------------- --------- ---------- -
Scott B 用户 65536
Scott A 用户65536
SQL> 从 dba_indexes 中选择 OWNER、INDEX_NAME、TABLESPACE_NAME、STATUS,其中 TABLE_OWNER='SCOTT' 和 table_name in ('A','B');
OWNER INDEX_NAME INDEX_NAME TABLESPACE_NAME STATUS
---------------- ------------------------------------------ -------------------- --------------- --------
SCOTT IDX_DEPTNO 用户有效
SCOTT IDX_OBJ_ID 用户有效
2.目标库查询:
SQL> col name for a70
SQL> set rows 200 Pages 999
SQL> select f.file#,
2 t.name tablespace,
3 f.name,
4 trunc(f.bytes / 1048576, 2) size_mb,
5 to_char(f.creation_time, 'yyyy-mm-dd')creation_time,
6 状态
7 来自 v$datafile f,v$tablespacet
8 其中 f.ts# = t.ts#
9 按 f.creation_time 排序;
FILE#表空间名称 名称 SIZE_MB CREATION_T 状态
---------------- ------------------------------------ -------------------- ------------------------------------------ -------------------- ------ ---------- ---------- ---- ---
1 系统 ; /u01/app/oracle/oradata/DBdb/sysaux01.dbfbr/> 4 位用户 sp; /u01/app/oracle/oradata/DBdb/users01.dbf 3 UNDOTBS1 3466.25 2013-08-24 在线
3 UNDOTBS1 /u01/app/oracle/oradata/DBdb/undotbs01.dbf /u01/app/oracle/ oradata/DBdb/undotbs01.dbf
5 示例 /example01.dbf 自 a/DBDB/newback/ts_xxf_01.dbf 10 2017-12-07 上线
7 TST /u01/app /oracle/oradata/DBdb /tst.dbf 20 2017-12-09 ONLINE
已选择 7 行。
SQL> select df.tablespace_name "表空间名称",
2 totalspace "总空间 M" ,
3 freespace "剩余空间 M",
4 round((1 - 可用空间 / 总空间) * 100, 2) "使用率%"
5 from (select tablespace_name, round(sum (bytes) / 1024 / 1024)totalspace
6 from dba_data_files
7 group by tablespace_name) df,
8 (select tablespace_name, round(sum(bytes)) / 1024 / 1024) freespace
9 from dba_free_space
10 group by tablespace_name) fs
11 where df.tablespace_name = fs.tablespace_name;
表空间名称 总空间M 剩余空间 M 使用率%
---------------------------------------- ---------- -------- ----- ----------
TS_XXF p; 20 19 5
SYSAUX 710 41 94.23
UNDOTBS1 2585 2118 18.07
用户 3466 3435 29 91.45
已选择 7 行。
--为源库 scott 创建目标库的 dblink
SQL> create database link sc connect to scott recognizes by Tiger using 'orcl';
已创建数据库链接。
< br/>SQL> 选择 *from dba_db_links;
/>
所有者 DB_LINK 用户名------------------ --------------- ----------
SYS FTLINK 斯科特20 2017 年 8 月 13 日
HR ORA HR orcl 08-DEC-17
SYS OL OL HR HR orcl 09-DEC-17
SYS SC SCOTT SCOTT orcl 09-DEC-17
3.目标库执行导入:
导入表(排除,不包括索引)
impdp \'\/ as sysdba\' remap_schema=scott:hr REMAP_TABLESPACE=USERS:TS_XXF except=index table_exists_action=TRUNCATE TABLES= scott.a,scott.b network_link=sc
仅导入索引(包含)
impdp \'\ / as sysdba\' remap_schema=scott:hr REMAP_TABLESPACE=USERS:TST include=index TABLES=scott.a,scott.b network_link=sc
[oracle@wang ~]$ impdp \'\/ as sysdba\' remap_schema=scott:hr REMAP_TABLESPACE=USERS:TS_XXF except=index table_exists_action =TRUNCATE TABLES=scott.a,scott.b network_link=sc
导入:版本 11.2.0.4.0 - 于 2017 年 12 月 9 日星期六 10:32:50 生产
版权所有 (c) 1982、2011,Oracle 和/或其附属公司。保留所有权利。
连接到:Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产
具有分区、OLAP、数据挖掘和实际应用程序测试选项
ORA-31631: 需要权限
ORA-39149: 无法将特权用户链接到非特权用户
[oracle@wang ~]$
报错时,需要向源数据库 scott 用户授予 exp_full_database 权限。
--源数据库授权操作:
SQL> conn / as sysdba
已连接。
SQL> grant EXP_FULL_DATABASE to scott;
授权成功。
SQL>
--在目标库中再次执行导入操作:
[oracle@wang ~]$ impdp \'\/ as sysdba\ ' remap_schema=scott:hr REMAP_TABLESPACE=USERS:TS_XXF except=index table_exists_action=TRUNCATE TABLES=scott.a,scott.b network_link=sc
导入:版本 11.2.0.4.0 - 生产于2017 年 12 月 9 日星期六 10:37:37
版权所有 (c) 1982, 2011、Oracle 和/或其附属公司。保留所有权利。
连接到:Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产
具有分区、OLAP、数据挖掘和实际应用程序测试选项
启动“SYS”。“SYS_IMPORT_TABLE_01”:“/******** AS SYSDBA” remap_schema=scott:hr REMAP_TABLESPACE=USERS:TS_XXF 排除=索引 table_exists_action=TRUNCATE TABLES=scott.a,scott.b network_link=sc
正在使用 BLOCKS 方法进行估计...
正在处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计:128 KB
正在处理对象类型 TABLE_EXPORT/TABLE/TABLE< br/>。 。导入了“HR”。“A” 14 行
。 8 行
作业“SYS”。“SYS_IMPORT_TABLE_01”于 2017 年 12 月 9 日星期六 10:37:50 成功完成,已过去 0 00:00:12
[oracle@wang ~]$
[oracle@wang ~]$ impdp \'\/ assysdba\' remap_schema=scott:hr REMAP_TABLESPACE=USERS:TST include=index TABLES=scott.a,scott.b network_link=sc
导入:版本 11.2.0.4.0 - 于 2017 年 12 月 9 日星期六 10:39:07 生产
版权所有 (c) 1982、2011,Oracle 和/或其附属公司。保留所有权利。
连接到:Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产
具有分区、OLAP、数据挖掘和实际应用程序测试选项
启动“SYS”。“SYS_IMPORT_TABLE_01”:“/******** AS SYSDBA” remap_schema=scott:hr REMAP_TABLESPACE=USERS:TST include=index TABLES=scott.a,scott.b network_link=sc
正在使用 BLOCKS 方法进行估计...
使用 BLOCKS 方法进行总计估计:0 KB
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS /INDEX_STATISTICS
作业“SYS”。“SYS_IMPORT_TABLE_01”于 2017 年 12 月 9 日星期六 10:39:12 成功完成 elapsed 0 00:00:05
[oracle@wang ~]$
4.目标库验证:
SQL> col SEGMENT_NAME for a15
SQL> select OWNER,SEGMENT_NAME,TABLESPACE_NAME,来自 dba_segments 的字节,其中 SEGMENT_NAME in('A','B');
所有者 SEGMENT_NAME TABLESPACE_NAME BYTES
---------------------------- - -------------- ------------------- ----------- ------ ----
人力资源 nbsp; A TS_XXF TS_XXF 65536
SQL> select OWNER,INDEX_NAME,TABLESPACE_NAME,STATUS from dba_indexes where table_name in ('A','B');
OWNER INDEX_NAME TABLESPACE_NAME STATUS < br/>-------------- -------------------------------- -- - -------------------------- --------
HR IDX_DEPTNO TST 有效
HR IDX_OBJ_ID TST VALID
SQL>
SQL> conn hr/hr;
已连接。
SQL> select * from tab;
-- ----------
A 表
B 表
国家/地区表
部门表
员工表
工作表
JOB_HISTORYTABLE
位置表
REGIONS TABLE
已选择 9 行。
SQL> select count(*) from a;
COUNT(*)
-- --------
14
SQL> select count(*) from b;
COUNT(*)
--- -------
8
感谢您的阅读!这篇关于《如何跳过expdp,直接用impdp+网络链接导入目标库》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家学到更多的知识。如果您觉得文章不错,可以分享出去,让更多人看到!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > impdp+network link如何跳过expdp直接导入目标库?