example:利用impdp通过dblink导入数据库

本文介绍如何通过创建数据库链接和调整用户权限等步骤,解决在Oracle数据库中跨库导入大量数据过程中遇到的问题。
部署运行你感兴趣的模型镜像

说明

本地数据库需要10g 以上版本

本地数据库没有新建账户,直接导入到scott 用户;

 

impdp 特色

只需要一个dblink ,就能实现将数据库从一台机器导入到另外一台机器

 

以下是测试全过程, 每个小格子,代表了一次尝试

准备工作

scott schemas 下创建到TESTDBDBlink

create database link TESTDB_aix

connect to TESTDB identified by "TESTDB123!" using 'aix_TESTDB_172';

 

测试DBlink

select * from dual@TESTDB_aix

 

 

C:/>impdp scott/scott schemas=TESTDB  NETWORK_LINK=TESTDB_aix  EXCLUDE=CONSTRAINT logfile=d:/impdp.log

 

Import: Release 10.2.0.1.0 - Production on 星期二, 24 5, 2011 10:49:03

 

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

ORA-31631: 需要权限

ORA-39149: 无法将特权用户链接到非特权用户

Google 后,将scott 用户权限调整到TESTDB 一致

 

 

 

 

 

 

C:/>impdp scott/scott schemas=TESTDB  NETWORK_LINK=TESTDB_aix  EXCLUD

E=CONSTRAINT logfile=d:/impdp.log

 

Import: Release 10.2.0.1.0 - Production on 星期二, 24 5, 2011 10:49:23

 

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

ORA-31626: 作业不存在

ORA-31633: 无法创建主表 "SCOTT.SYS_IMPORT_SCHEMA_05"

ORA-06512: "SYS.DBMS_SYS_ERROR", line 95

ORA-06512: "SYS.KUPV$FT", line 863

ORA-01536: 超出表空间 'USERS' 的空间限额

 

增加TESTDB 表空间

alter tablespace users add datafile 'D:/ORACLEAPP/PRODUCT/10.2.0/ORADATA/SDHTEST/USERS02.DBF' size 8G;

 

alter tablespace users add datafile 'D:/ORACLEAPP/PRODUCT/10.2.0/ORADATA/SDHTEST/USERS03.DBF' size 8G;

 

alter tablespace users add datafile 'D:/ORACLEAPP/PRODUCT/10.2.0/ORADATA/SDHTEST/USERS04.DBF' size 4G;

 

grant unlimited tablespace to scott

 

 

 


 

 

 

C:/Users/Administrator>impdp scott/scott schemas=TESTDB  NETWORK_LINK=TESTDB_aix  EXCLUDE=CONSTRAINT logfile=d:/impdp.log

 

Import: Release 10.2.0.1.0 - Production on 星期二, 24 5, 2011 11:10:42

 

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

ORA-39002: 操作无效

ORA-39070: 无法打开日志文件。

ORA-39088: 文件名不能包含路径说明

命令行中未指定directory,

新建 CREATE DIRECTORY dmpdir AS 'D:/OracleApp/product/10.2.0/datapump';

scott 赋予在dmpdir 目录的读写权限GRANT read, write ON DIRECTORY dmpdir TO scott;

Ps: 也可以使用oracle 默认的dir DATA_PUMP_DIR:

SELECT * FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR'

 

 

 

 

 

 

 

 

C:/>impdp scott/scott schemas=TESTDB  NETWORK_LINK=TESTDB_aix  EXCLUD

E=CONSTRAINT logfile=impdp.log directory=dmpdir

 

Import: Release 10.2.0.1.0 - Production on 星期二, 24 5, 2011 11:19:18

 

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

ORA-31631: 需要权限

ORA-39109: 未授权用户不能对其他用户的方案进行操作

在导入语句中添加schema 的映射

impdp scott/scott remap_schema=TESTDB:scott   NETWORK_LINK=TESTDB_

aix  EXCLUDE=CONSTRAINT logfile=impdp.log directory=dmpdir

 

 

 

 

 

 

 

 

 

C:/>impdp scott/scott remap_schema=TESTDB:scott   NETWORK_LINK=TESTDB_

aix  EXCLUDE=CONSTRAINT logfile=impdp.log directory=dmpdir

 

 

失败的 sql :

CREATE TABLE "SCOTT"."NGN" ("NETLEVEL" VARCHAR2(255), "GWCATEGORY" VARCHAR2(255)

, "HARDWAREVERSION" VARCHAR2(255), "SOFEWAREVERSION" VARCHAR2(255), "TELENETIPAD

DR" VARCHAR2(255), "BEGINTIME" DATE, "ANALOGCAPACITY" NUMBER(10,0), "ANALOGACTUA

LCAPCITY" NUMBER(10,0), "PSTN2BDACTUALCAPACITY" NUMBER(10,0), "PSTN2BDCAPACITY"

NUMBER(10,0), "TOTALCAPACITY" NUMBER(10,0), "ACTUALTOTALCAPACITY" NUMBER(10,0),

"NUMOF2MSIGNA

ORA-39083: 对象类型 TABLE 创建失败, 出现错误:

ORA-00959: 表空间 'SDH_DATA' 不存在

 

添加从sdh_datasdh_indexusers 的映射

impdp scott/scott remap_schema=TESTDB:scott  NETWORK_LINK=TESTDB_

aix  EXCLUDE=CONSTRAINT logfile=impdp.log directory=dmpdir remap_tablespace=sdh_data:users,sdh_index:users

 

 

 

 

 

 

C:/>impdp scott/scott remap_schema=TESTDB:scott  NETWORK_LINK=TESTDB_

aix  EXCLUDE=CONSTRAINT logfile=impdp.log directory=dmpdir remap_tablespace=sdh_data:users,sdh_index:users

 

 

Import: Release 10.2.0.1.0 - Production on 星期二, 24 5, 2011 11:27:05

 

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

启动 "SCOTT"."SYS_IMPORT_SCHEMA_01":  scott/******** remap_schema=TESTDB:scott NETWORK_LINK=TESTDB_aix EXCLUDE=CONSTRAINT logfile=impdp.log directory=dmpdir remap_tablespace=sdh_data:users,sdh_index:users

正在使用 BLOCKS 方法进行估计...

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA

使用 BLOCKS 方法的总估计: 21.57 GB

处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

处理对象类型 SCHEMA_EXPORT/DB_LINK

处理对象类型 SCHEMA_EXPORT/SEQUENCE/SEQUENCE

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE

. . 导入了 "SCOTT"."CONNECTOR"                        31396764

. . 导入了 "SCOTT"."DNPORTAUDITS"                     12922037

. . 导入了 "SCOTT"."LOG_LIHQ"                         2142840

 

 

 

使用总结:

l  创建 dblink

l  复制源用户 ( 本例源用户为 TESTDB) 的权限,如果源用户和本地用户一直可以省略 schema 映射

l  扩展或者新建表空间,当然够大就不需要了,上面犯错是因为事先忘记查看两边数据库表空间大小

l  创建或者使用已用的 directory ,并给本地用户读写权限

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

### Oracle 数据导入方法:数据泵与 SQL*Loader(sqlldr) 在将数据导入 Oracle 数据库时,常用的方法包括使用 **Oracle Data Pump(数据泵)** 和 **SQL*Loader(sqlldr)**。这两种工具分别适用于不同的场景和数据源类型。 #### 1. 使用 Oracle 数据泵(Data Pump) Oracle 数据泵是 Oracle 提供的一种高效的数据导出与导入工具,支持大量数据的快速迁移。它由两个主要组件组成:`expdp`(导出)和 `impdp`(导入)。 ##### 导入步骤: - 启动命令行并连接到目标数据库- 创建目录对象以指定转储文件的位置: ```sql CREATE DIRECTORY dpump_dir AS '/u01/dpump'; ``` - 执行导入命令: ```bash impdp username/password@db_service_name directory=dpump_dir dumpfile=example.dmp logfile=import.log ``` - 可选参数包括 `remap_schema`、`table_exists_action` 等,用于控制导入行为 [^4]。 #### 2. 使用 SQL*Loader(sqlldr) SQL*Loader 是 Oracle 提供的一个实用程序,用于将外部格式的数据文件加载到数据库表中。它特别适合处理文本文件(如 CSV 或固定格式的文本文件),并且可以通过控制文件(`.ctl`)定义数据加载规则。 ##### 控制文件示例: 以下是一个 `.ctl` 文件的结构,用于定义如何解析输入数据: ```ctl LOAD DATA INFILE '/home/oracle/data.txt' BADFILE '/home/oracle/badfile.bad' APPEND INTO TABLE employees FIELDS TERMINATED BY '|' TRAILING NULLCOLS ( emp_id, name, department, salary ) ``` ##### 导入命令: 执行以下命令启动数据加载过程: ```bash sqlldr userid=username/password@db_service_name control=/home/oracle/memberpoint.ctl log=/home/oracle/2017_12_06_162045.log ``` 此命令指定了用户凭证、控制文件路径以及日志输出路径 [^1]。 ##### 高级特性: - 支持多种数据格式,包括定界符分隔、固定宽度等。 - 允许通过 `WHEN` 子句筛选特定记录。 - 可结合 `BINDARRAY` 和 `READSIZE` 参数优化性能 [^3]。 #### 3. 其他方法:通过 Database Link 进行导入 如果需要从另一个 Oracle 数据库导入数据,可以创建数据库链接(dblink),然后使用 `CREATE TABLE AS SELECT` 或 `INSERT INTO ... SELECT` 语句进行数据迁移: ```sql -- 创建数据库链接 CREATE DATABASE LINK remote_db CONNECT TO user IDENTIFIED BY password USING 'remote_tns'; -- 使用 dblink 导入数据 CREATE TABLE local_table AS SELECT * FROM remote_table@remote_db WHERE condition; -- 或者插入数据 INSERT INTO local_table SELECT * FROM remote_table@remote_db WHERE condition; ``` 这种方法适用于跨数据库的数据同步或复制需求 [^2]。 #### 4. 选择合适的方法 - **数据泵** 更适合大规模数据迁移和备份恢复操作,尤其在处理整个模式或数据库级别的导出/导入时表现优异。 - **SQL*Loader** 则更适合从外部系统(如第三方应用生成的文本文件)导入数据,尤其是在需要灵活定义字段映射和转换规则的情况下。 - **Database Link** 方法适用于简单的跨数据库数据复制,但不适用于非 Oracle 数据源。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值