在 Oracle 数据库中,通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:
1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中
2. 建立数据库间的 dblink,然后用 create table B as select * from
A@dblink where ...,或 insert into B select * from A@dblink
where ...
3. exp A 表,再 imp 到 B 表,exp 时可加查询条件
4. 程序实现 select from A ..,然后 insert into B ...,也要分批提交
5. Sql Loader(sqlldr) 导入数据,效果比起逐条 insert 来很明显。
方法一
操作步骤:
用pl/sql developer登陆Oracle,选择工具->Export Tables...->选择需要的表->Export到指定目录
打开cmd命令窗口输入下面语句
imp 用户名/密码@数据库实例名 file=dmp文件存在的目录 log=日志文件存在的目录fromuser=用户名 touser=用户名 commit=y
如:imp system/system@ring218 file=D:\dbscript\usdp\usdp_212.dmp log=D:\imp_usdp_sh.log fromuser=usdp604 touser=usdp604 commit=y
方法二:
Sql Loader导入
eg:
创建一个控制文件(.ctl):
OPTIONS (skip=1,rows=128,errors=100000) --sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA
INFILE "users_data.csv" --要导入的文件,可以用多个infile也可以用 * 表示所有
BADFILE "路径" --指定BAD文件存放的路径
insert/append/replace/truncate --默认为insert
INTO TABLE users
when 字段2<>'8' --可以用 when 子句选择导入符合条件的记录
CHARACTER SET utf8 FIELDS TERMINATED BY ','--字符编码
Fields terminated by "," --数据中每行记录用 "," 分隔
--注意:请加上下面一行句子
Optionally enclosed by '"' --数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols
(
字段1 integer,--可以为字段指定类型
字段2 "user_seq.nextval",--直接取序列的下一值
字段3 FILLER,--跳过此字段
字段4 "'Hi '||upper(:字段4)",--用SQL函数或运算对数据进行加工处理
字段5 terminated by ",",NULLIF(字段5='NULL')--为列单独指定分隔符
字段6 DATE "YYYY-MM-DD HH24:MI:SS" NULLIF(字段6="NULL") --当字段为"NULL"时就是 NULL),
字段7 char(1000)--控制文件中的字段默认为char256,超过256需要指定长度,否则Log会报数据文件的字段超出最大长度
注:
1) insert --为缺省方式,在数据装载开始时要求表为空[/color]
2) append --在表中追加新记录[/color]
3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录
详细参数说明,要着重关注以下几个参数:
userid -- Oracle 的 username/password[@servicename]
control -- 控制文件,可能包含表的数据
----------------------------------------------------------------------log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad
data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
errors -- 允许的错误记录数,可以用他来控制一条记录都不能错
rows -- 多少条记录提交一次,默认为 64
skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描述
SQL *Loader 的性能与并发操作
1) ROWS 的默认值为 64,你可以根据实际指定更合适的 ROWS 参数来指定每次提交记录数。(体验过在 PL/SQL Developer 中一次执行几条条以上的 insert 语句的情形吗?)
2)常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的性能。当然,在很多情况下,不能使用此参数(如果主键重复的话会使索引的状态变成UNUSABLE!)。
3) 通过指定 UNRECOVERABLE选项,可以关闭数据库的日志(是否要 alter table table1 nologging 呢?)。这个选项只能和 direct 一起使用。
4) 对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务.
sqlldr userid=/ control=result1.ctl direct=true parallel=true
sqlldr userid=/ control=result2.ctl direct=true parallel=true
sqlldr userid=/ control=result2.ctl direct=true parallel=true
当加载大量数据时(大约超过10GB),最好抑制日志的产生:
SQL>ALTER TABLE RESULTXT nologging;
这样不产生REDO LOG,可以提高效率。然后在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此选项必须要与DIRECT共同应用。
在并发操作时,ORACLE声称可以达到每小时处理100GB数据的能力!其实,估计能到 1-10G 就算不错了,开始可用结构 相同的文件,但只有少量数据,成功后开始加载大量数据,这样可以避免时间的浪费。
1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中
2. 建立数据库间的 dblink,然后用 create table B as select * from
A@dblink where ...,或 insert into B select * from A@dblink
where ...
3. exp A 表,再 imp 到 B 表,exp 时可加查询条件
4. 程序实现 select from A ..,然后 insert into B ...,也要分批提交
5. Sql Loader(sqlldr) 导入数据,效果比起逐条 insert 来很明显。
方法一
操作步骤:
用pl/sql developer登陆Oracle,选择工具->Export Tables...->选择需要的表->Export到指定目录
打开cmd命令窗口输入下面语句
imp 用户名/密码@数据库实例名 file=dmp文件存在的目录 log=日志文件存在的目录fromuser=用户名 touser=用户名 commit=y
如:imp system/system@ring218 file=D:\dbscript\usdp\usdp_212.dmp log=D:\imp_usdp_sh.log fromuser=usdp604 touser=usdp604 commit=y
方法二:
Sql Loader导入
eg:
创建一个控制文件(.ctl):
OPTIONS (skip=1,rows=128,errors=100000) --sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA
INFILE "users_data.csv" --要导入的文件,可以用多个infile也可以用 * 表示所有
BADFILE "路径" --指定BAD文件存放的路径
insert/append/replace/truncate --默认为insert
INTO TABLE users
when 字段2<>'8' --可以用 when 子句选择导入符合条件的记录
CHARACTER SET utf8 FIELDS TERMINATED BY ','--字符编码
Fields terminated by "," --数据中每行记录用 "," 分隔
--注意:请加上下面一行句子
Optionally enclosed by '"' --数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols
(
字段1 integer,--可以为字段指定类型
字段2 "user_seq.nextval",--直接取序列的下一值
字段3 FILLER,--跳过此字段
字段4 "'Hi '||upper(:字段4)",--用SQL函数或运算对数据进行加工处理
字段5 terminated by ",",NULLIF(字段5='NULL')--为列单独指定分隔符
字段6 DATE "YYYY-MM-DD HH24:MI:SS" NULLIF(字段6="NULL") --当字段为"NULL"时就是 NULL),
字段7 char(1000)--控制文件中的字段默认为char256,超过256需要指定长度,否则Log会报数据文件的字段超出最大长度
注:
1) insert --为缺省方式,在数据装载开始时要求表为空[/color]
2) append --在表中追加新记录[/color]
3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录
详细参数说明,要着重关注以下几个参数:
userid -- Oracle 的 username/password[@servicename]
control -- 控制文件,可能包含表的数据
----------------------------------------------------------------------log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad
data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
errors -- 允许的错误记录数,可以用他来控制一条记录都不能错
rows -- 多少条记录提交一次,默认为 64
skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描述
SQL *Loader 的性能与并发操作
1) ROWS 的默认值为 64,你可以根据实际指定更合适的 ROWS 参数来指定每次提交记录数。(体验过在 PL/SQL Developer 中一次执行几条条以上的 insert 语句的情形吗?)
2)常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的性能。当然,在很多情况下,不能使用此参数(如果主键重复的话会使索引的状态变成UNUSABLE!)。
3) 通过指定 UNRECOVERABLE选项,可以关闭数据库的日志(是否要 alter table table1 nologging 呢?)。这个选项只能和 direct 一起使用。
4) 对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务.
sqlldr userid=/ control=result1.ctl direct=true parallel=true
sqlldr userid=/ control=result2.ctl direct=true parallel=true
sqlldr userid=/ control=result2.ctl direct=true parallel=true
当加载大量数据时(大约超过10GB),最好抑制日志的产生:
SQL>ALTER TABLE RESULTXT nologging;
这样不产生REDO LOG,可以提高效率。然后在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此选项必须要与DIRECT共同应用。
在并发操作时,ORACLE声称可以达到每小时处理100GB数据的能力!其实,估计能到 1-10G 就算不错了,开始可用结构 相同的文件,但只有少量数据,成功后开始加载大量数据,这样可以避免时间的浪费。
发表评论
-
ORACLE 手工备份与恢复
2013-10-25 09:50 8981、手工冷备 1.1、在非归档模式下,ORACLE只能 ... -
oracle 分页,oracle 随机数
2012-11-16 17:23 894oracle分页 select * from ( sele ... -
Oracle函数next_day
2012-11-14 17:53 1112--获取date日期的下一个星期weekday; next_d ... -
trunc函数截断日期
2012-11-08 14:26 1320截断日期: 先执行命令:alter session set ... -
复杂的SQL语句
2012-10-25 17:30 968--select 语句中执行判断 select sysdate ... -
oracle 密码永不过期
2012-07-06 11:54 16681. 成功安装ORACLE11g后,默认密码有效期为180天, ... -
ORACLE 错误记录
2012-06-29 17:34 8931. ORACL数据库表空间不够,试图增加表空间,之后进行大量 ... -
关于ORA-01034和ORA-27101的一种解决方法(转)
2012-06-29 17:11 20181 先看oracle的监听和oracle的服务是否都启动了。启 ... -
Oracle导出文件
2012-03-13 11:35 963SET echo off --是否显示脚本中正在 ... -
oracle 备份、还原(导入|导出)
2012-01-10 13:42 846下面介绍的是导入导出的实例。 数据导出: 1 将数据库TE ... -
oracle 启动状态介绍
2011-12-09 15:39 13961、startup nomount 读初始化参数文 ... -
oracle日期时间型timestamp相关学习
2011-09-14 15:12 353131、获取系统时间的语句(ssxff6获取小数点后面六位) se ... -
数据库性能优化
2011-07-12 14:14 915Oracle数据库性能优化 ... -
oracle死锁处理
2011-05-05 12:10 654--1.查看数据库中那些用户产生了锁 select usern ... -
ORACLE sysdate 相加减
2011-04-27 16:01 7957加法 select sysdate,add_months ... -
oracle job(定时任务)
2011-04-27 13:53 18641、创建job 使用Submit()过 ... -
Oracle snapshot (快照)
2011-03-28 16:56 2888--在BMS中创建快照日志 create snapshot l ... -
Oracle bug 汇总
2011-03-28 11:33 1019database link --访问database link ... -
oracle游标
2011-03-11 16:05 1373一 游标是什么 游标字面理解就是游动的光标。 用数据库 ... -
oracle 包、方法、存储过程
2011-03-11 15:30 971--定义包 create or replace package ...
相关推荐
在Oracle数据库管理中,将文本文件(如txt或csv)导入到数据库表是常见的操作,这对于数据迁移、数据加载或数据分析等工作来说至关重要。下面将详细解释如何将txt或csv文件导入Oracle数据库表。 首先,我们需要了解...
"Java编程将TXT文件数据导入Oracle数据库" Java 编程将 TXT 文件数据导入 Oracle 数据库是指使用 Java 语言编写程序将 TXT 文件中的数据导入 Oracle 数据库中,以方便进行计算、统计等操作。下面将详细介绍该知识...
"Linux 下向 Oracle 导入 dmp 文件" Linux 是一个开源的操作系统,而 Oracle 是一个关系型数据库管理系统。在实际工作中,我们经常需要将 dmp 文件导入到 Oracle 数据库中。下面我们将详细介绍如何在 Linux 下向 ...
"ORACLE导入数据文件到指定的表空间"这个主题涉及了Oracle数据库的导入工具(IMP)、数据泵(IMPDP)以及如何规划和管理表空间。 首先,我们需要了解Oracle的导入工具IMP。IMP是Oracle Data Pump Import的简称,它...
总结,Oracle导入CSV格式数据涉及多个步骤,包括准备CSV文件、创建控制文件、执行SQL*Loader导入以及处理可能出现的问题。理解并掌握这些步骤,能有效帮助你在实际工作中高效地导入大量CSV数据到Oracle数据库。
在Oracle数据库管理中,导入`.dmp`文件是一项常见的任务,通常用于数据迁移、备份恢复等场景。为了确保导入操作能够顺利进行,并且不会对现有系统造成不必要的影响,需要在导入`.dmp`文件之前做好一系列准备工作。...
远程工具连接到 Linux 进行操作,进行 Linux 上 dmp 文件的导入导出。 正文 a. 将用户 system 用户表导出到指定路径 D 盘 exp system/password@SID file=d:/daochu.dmp full=y b. 将用户 system 与 sys 用户的表...
oracle 使用sqlplus导入大sql文件,需熟悉linux命令,批量导入sql文件以及导入乱码解决方案
以下将详细介绍如何使用Oracle 10g进行DMP文件的导入导出。 ### 导出(Export) 1. **使用命令行工具**: - 导出数据通常通过`expdp`命令完成。例如,要导出用户`mmis`在服务名`pcms`下的所有对象到`d:\pcms.dmp`...
以下是对"oracle导入表导入数据实例"的详细解析: 1. **SQL*Loader简介** SQL*Loader是Oracle提供的一种快速、高效的数据加载工具,能够从文本文件或者二进制文件中批量导入大量数据到Oracle表中。它允许用户...
在开始将 DBF 文件导入到 Oracle 数据库之前,我们需要确保 Oracle 数据库的相关服务已经启动,并且已经安装了 PL/SQL 软件。 步骤 1: 启动 Oracle 数据库服务 首先,我们需要确保 Oracle 数据库的相关服务已经...
### 如何将 .dmp 文件导入 Oracle 数据库 在日常工作中,我们经常需要将数据从一个Oracle数据库迁移到另一个Oracle数据库。通常情况下,这可以通过使用Oracle的导出(exp)和导入(imp)工具来实现。本文将详细介绍...
Oracle数据库导入dmp文件
### Oracle数据库导入导出DMP文件操作详解 #### 一、Oracle数据库DMP文件导出操作 DMP文件是Oracle数据库特有的数据交换格式,主要用于数据的备份与迁移。通过使用Oracle的导出工具(EXPDP或传统的EXP),可以将...
本主题将探讨如何将TSV(Tab Separated Values,制表符分隔值)文件导入到Oracle数据库中,这是一个常见的数据迁移或数据加载任务。TSV文件是一种简单格式的数据文件,通常用于数据交换,其内容由列名和行数据组成,...
Oracle数据库导入导出命令(备份与恢复) ...* 需要确保导入文件的格式正确。 Oracle数据库的导入导出命令提供了强大且灵活的数据备份和恢复功能。通过正确地使用exp和imp命令,可以轻松地备份和恢复数据库。
### Oracle导入时表空间不一致解决方法 在Oracle数据库管理中,经常会出现因表空间不一致而导致的数据导入失败的问题。本文将详细介绍如何解决这一常见问题,并确保数据能够顺利地从一个环境迁移到另一个环境中。 ...
本文将详细介绍如何在Oracle中使用`exp`和`imp`命令来导入和导出备份文件。 1. 数据导出(Export): - 完全导出:`exp system/manager@TEST file=d:\daochu.dmp full=y` 这个命令将整个TEST数据库的数据和元数据...