Usage: SQLLDR keyword=value [,keyword=value,...]
部分关键字:
userid -- ORACLE username/password
control -- 控制文件
log -- 记录的日志文件
bad -- 坏数据文件
data -- 数据文件
discard -- 丢弃的数据文件
discardmax -- 允许丢弃数据的最大值 (默认全部)
skip -- Number of logical records to skip (默认0)
load -- Number of logical records to load (默认全部)
errors -- 允许的错误记录数 (默认50)
rows --(每次提交的记录数,默认: 常规路径 64, 直接路径 全部,所以使用直接路径的话,效率会比普通的好太多太多)
bindsize --( 每次提交记录的缓冲区的大小,字节为单位,默认256000)
silent -- 禁止输出信息 (header,feedback,errors,discards,partitions)
direct -- 使用直通路径方式导入 (默认FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- 并行导入
(默认FALSE,注意:parallel并不是让一个sqlldr语句起多个进程来加载数据,而是不锁住加载表,允许别的直接路径加载. 所以要使parallel起作用,应该先将要加载的数据文件分成多个,用多个sqlldr语句同时加载,如下例:
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默认FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(默认FALSE,这个最好设置为TRUE)
file -- file to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (默认 FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable (默认 FALSE)
commit_discontinued -- commit loaded rows when load is discontinued (默认 FALSE)
readsize -- size of read buffer (默认 1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (默认 NOT_USED)
columnarrayrows -- number of rows for direct path column array (默认 5000)
streamsize -- size of direct path stream buffer in bytes (默认 256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session (默认 FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE (默认 7200)
date_cache -- size (in entries) of date conversion cache (默认 1000)
0) 配置文件
************* 以下是4种装入表的方式
APPEND // 原先的表有数据 就加在后面
INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值
REPLACE // 原先的表有数据 原先的数据会全部删除
TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据
*************
import.ctl(含序列,不能设direct=true):
load data
infile '/home/oracle/data/import.dat'
append
into table sys_login_records_detail_1
fields terminated by ','
(
LOGIN_DATE DATE "yyyy-mm-dd" TERMINATED BY whitespace,
FILLER_1 FILLER,
GAME_ID,
FILLER_2 FILLER,
IP,
MAC,
NETBAR_ID,
PROVINCE,
CITY,
LOGIN_TIMES,
id POSITION(1:1) "sys_login_records_detail_seq_1.nextval" ---序列
)
import.ctl(不含序列,可设direct=true):
Load data
infile '/home/oracle/data/import.dat'
append
into table sys_login_records_detail_1
fields terminated by ','
(
LOGIN_DATE DATE "yyyy-mm-dd" TERMINATED BY whitespace,
FILLER_1 FILLER,
GAME_ID,
FILLER_2 FILLER,
IP,
MAC,
NETBAR_ID,
PROVINCE,
CITY,
LOGIN_TIMES
)
1) 老例 导入
sqlldr user/password@dbname
control=/home/oracle/data/install.ctl
log=/home/oracle/data/export.log
bad=/home/oracle/data/export.bad
##Space allocated for bind array: 132352 bytes(64 rows)
##Elapsed time was: 00:01:45.85
2) 1000条提交一次
sqlldr user/password@dbname
control=/home/oracle/data/install.ctl
log=/home/oracle/data/export.log
bad=/home/oracle/data/export.bad
rows=1000 readsize=2068000 bindsize=2068000
##Space allocated for bind array: 2068000 bytes(1000 rows)
##Elapsed time was: 00:00:22.80
3) 10000条提交一次
sqlldr user/password@dbname
control=/home/oracle/data/install.ctl
log=/home/oracle/data/export.log
bad=/home/oracle/data/export.bad
rows=10000 readsize=20680000 bindsize=20680000
##Space allocated for bind array: 20680000 bytes(10000 rows)
##Elapsed time was: 00:00:20.25
4) 设置direct=true, 含序列
sqlldr user/password@dbname
control=/home/oracle/data/install.ctl
log=/home/oracle/data/export.log
bad=/home/oracle/data/export.bad
direct=true
##ORA-01400: cannot insert NULL into ("EMOA"."sys_login_records_detail_1"."ID")
5) 设置direct=true, 去掉序列字段, 最快的行动
#SQL> alter table emoa.sys_login_records_detail_1 drop column id;
sqlldr user/password@dbname
control=/home/oracle/data/export.ctl
log=/home/oracle/data/export.log
bad=/home/oracle/data/export.bad
direct=true
##Elapsed time was: 00:00:10.98
##但是假如 有频频数据, 会把唯一索引置为unusable, 要确保数据源已剔重
6) 设置readsize和bindsize到最大值, 高效又稳妥的行动 , 终极 回收 方案
sqlldr user/password@dbname
control=/home/oracle/data/export.ctl
log=/home/oracle/data/export.log
bad=/home/oracle/data/export.bad
rows=100160 readsize=20971520 bindsize=20971520 PARALLEL=TRUE
##Space allocated for bind array: 20970240 bytes(10160 rows)
##Elapsed time was: 00:00:14.36
提高 SQL*Loader 的性能
1) 一个简单而容易忽略的问题是,没有对导入的表使用任何索引和/或约束(主键)。如果这样做,甚至在使用ROWS=参数时,会很明显降低数据库导入性能。
2) 可以添加 DIRECT=TRUE来提高导入数据的性能。当然,在很多情况下,不能使用此参数。
3) 通过指定 UNRECOVERABLE选项,可以关闭数据库的日志。这个选项只能和 direct 一起使用。
4) 可以同时运行多个导入任务。
常规导入与direct导入方式的区别
常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中。
1.direct对性能的影响是巨大的,如果为Fasle(默认值),1万的记录需要100秒,太慢了,后来设置为TRUE,配合其他的设置,200万的记录,330秒搞定,这个速度和MySQL中的select ....into的效率差不多,应该还算很不错的了。不过由于我在Oracle中
对大对象进行了压缩,所以需要10分钟
2.如果表中有索引的话,是不能指定direct=TRUE的,除非使用skip_index_maintenance=TRUE,这个就是在导入的时候忽略索引,所以在数据导入完毕以后,查看索引的状态应该都是无效的,需要重建之,如下SQL语句
select * from dba_indexes where table_name='?'
alter idnex index_name rebuild
不过在我测试过程中,这种方式是比较合理的,重建索引比新建索引要快很多,如我200W的记录,重建主键只需1分钟多,新建的话则要7分钟。
3.在数据导入的过程,让该表不记录日志,数据库不开启归档日志
alter database noarchivelog
alter table BLOG nologging
--End--
相关推荐
3. 使用sqlldr命令执行数据加载,根据需要设置错误处理和性能优化。 在实际操作中,需要根据具体的数据格式和需求调整控制文件,确保数据正确无误地导入到Oracle数据库中。同时,注意处理可能出现的数据转换问题,...
4. **性能调整**:根据硬件配置和数据库性能,调整SQL*Loader的参数,如缓冲区大小、读取记录数等,以达到最佳性能。 总结来说,通过Windows下的BAT命令与Oracle的SQL*Loader功能结合,我们可以构建一个高效的...
总结来说,SQL*Loader是Oracle数据库管理中不可或缺的数据导入工具,通过灵活的控制文件配置,可以高效、准确地处理各种数据导入需求。通过熟练掌握sqlldr的使用,你可以大大提高数据库管理的效率。在实际操作中,应...
Oracle 数据导入导出是数据库管理中的重要操作,用于在不同环境之间迁移数据、备份或恢复数据,以及批量加载大量数据。...通过不断的实践和学习,你可以更好地利用这些工具来优化你的数据库管理流程。
然而,为了确保内存数据库的性能达到最优,需要对多个方面进行考量和优化: 1. **硬件配置**:内存数据库的性能直接受到服务器硬件配置的影响,尤其是CPU性能、内存大小以及网络带宽等因素。 2. **软件优化**:包括...
杨廷琨拥有十六年一线DBA经验,并在个人博客中积累了大量原创技术文章,还参与了多本Oracle相关书籍的编写工作,如《Oracle数据库性能优化》、《Oracle DBA手记》系列等。此外,他还担任过ITPUB数据库管理区版主和...
Oracle数据库是广泛使用的大型...在实际使用中,根据具体需求和数据库环境调整导入策略,可以进一步优化数据导入性能。如果在导入过程中遇到问题,可以通过查看日志文件和错误文件来诊断问题所在,并进行相应的调整。
尽管这些策略在一定程度上缓解了问题,但当入库节点增多,如增加到2节点或4节点时,sqlldr的入库过程出现停顿,表明系统在处理并发入库时存在性能问题。 AWR(Automatic Workload Repository)报告被用来诊断性能...
总结来说,Oracle的学习涵盖了许多方面,从数据导入工具的使用到性能分析,都需要深入理解和实践。通过掌握SQLLoader和性能分析技巧,开发者能够更有效地管理和优化Oracle数据库,确保系统的高效运行。
5. **性能优化**:可能包含了一些额外的优化技巧,比如预分配表空间、禁用索引再启用、批量插入等,以进一步提升导入速度。 在使用这个工具包之前,你需要确保你的环境已经安装了Oracle客户端和相关的数据库连接...
- **加快exp速度**:优化导出性能,如减少锁定、关闭触发器等。 - **加快imp速度**:优化导入性能,如并行导入、预分配段等。 - **通过UNIX/Linux PIPE管道**:使用管道技术加速导出导入过程。 - **常见问题**...
信令监测是指通过对通信网络中的信令数据进行收集和分析,来监控网络状态、优化网络性能的一种手段。在这个具体案例中,主要探讨的是如何有效处理庞大的信令数据。 - **体系架构**: - 使用高性能的HP小型机作为...
- 点击“扳手”图标可以进一步定制性能评估的参数,如选择优化目标(Optimizer Goal),设置查询是否优先考虑首行还是所有行的返回速度。 #### 静态SQL示例 **连接查询** - 普通连接查询:`SELECT a.col1, b....
SQL*Loader具有许多性能优化选项,如并行加载、直接路径插入和错误处理策略,可以根据数据量和需求进行调整。 9. **数据预处理**: 在使用SQL*Loader之前,可能需要对数据进行预处理,例如清洗、转换或格式化,以...
总结来说,Oracle的SQL*Loader工具是数据库管理中的强大武器,尤其在需要大量数据导入时,它的高效和灵活性显著提高了工作效率。无论是在Linux还是Windows环境下,通过正确配置和使用控制文件,我们可以轻松实现数据...
- **性能提升**:通过改进的查询优化器、并行执行和存储优化,提高了数据处理速度。 - **高级安全性**:增强了访问控制、加密和审计功能,以满足严格的合规性要求。 - **集成云服务**:支持私有云和公有云部署,为...
2. `SQLserver fun.docx`:这可能包含的是关于Microsoft SQL Server的一些实用技巧或有趣的查询示例,可能是关于性能优化、复杂查询或者特定功能的讲解。 3. `sqlldr.docx`:和`oracle_sql_loader.doc`类似,这可能...
性能优化 为了进一步提升`sqluldr2`的性能,可以考虑以下优化策略: - **分区加载**:如果表有分区,可以考虑按分区进行加载,减少锁的争用。 - **并行加载**:使用多个控制文件,让`sqluldr2`并行处理不同的数据...
### 迁移MySQL数据到Oracle上的详细步骤 ...在整个迁移过程中,最重要的是确保数据的准确性和一致性,同时也要关注迁移效率和性能优化。此外,合理选择迁移工具和服务,可以大大减轻迁移的工作量,提高迁移的成功率。