在Oracle数据库里,有两种批量加载数据的工具:
SQLLDR(SQL*Loader) - 仍是加载数据的主流方法,是高速批量数据加载工具。
外部表 - 9i才开始加入的新特性,允许像访问数据库表一样来访问操作系统文件。
在我们公司的ETL中,两种数据加载方式都有使用。
SQLLDR有两种操作模式:
- 传统路径: SQLLDR利用SQL插入来加载数据
- 直接路径:SQLLDR直接格式化数据库块。
直接路径加载能绕过整个SQL引擎和undo生成,同时还可能避开redo生成。
要使用SQLLDR, 需要有一个控制文件 (control file),这个文件中包含描述输入数据的信息如输入数控的布局,数据类型等,另外还包含有目标表的信息。
比如:
OPTIONS(
ERRORS=9999999999)
LOAD DATA --> 告诉SQLLDR,这是要加载数据
INFILE 'XYZ.dat' --> 要加载的数据文件是XYZ_link.dat, 注意这个参数会被命令行data参数所代替
DISCARDMAX 99999999999
TRUNCATE --> 告诉SQLLDR要先执行TRUNCATE TABLE table_name REUSE STORAGE
INTO TABLE table_name --> 要加载到数据库的哪个表去
(
XXX POSITION(1) CHAR(5),
XXX_LOCATION POSITION(*) CHAR(100)
)
关于SQLLDR的详细信息,可以参考“Oracle® Database Utilities”。
SQLLDR(SQL*Loader) - 仍是加载数据的主流方法,是高速批量数据加载工具。
外部表 - 9i才开始加入的新特性,允许像访问数据库表一样来访问操作系统文件。
在我们公司的ETL中,两种数据加载方式都有使用。
SQLLDR有两种操作模式:
- 传统路径: SQLLDR利用SQL插入来加载数据
- 直接路径:SQLLDR直接格式化数据库块。
直接路径加载能绕过整个SQL引擎和undo生成,同时还可能避开redo生成。
要使用SQLLDR, 需要有一个控制文件 (control file),这个文件中包含描述输入数据的信息如输入数控的布局,数据类型等,另外还包含有目标表的信息。
比如:
OPTIONS(
ERRORS=9999999999)
LOAD DATA --> 告诉SQLLDR,这是要加载数据
INFILE 'XYZ.dat' --> 要加载的数据文件是XYZ_link.dat, 注意这个参数会被命令行data参数所代替
DISCARDMAX 99999999999
TRUNCATE --> 告诉SQLLDR要先执行TRUNCATE TABLE table_name REUSE STORAGE
INTO TABLE table_name --> 要加载到数据库的哪个表去
(
XXX POSITION(1) CHAR(5),
XXX_LOCATION POSITION(*) CHAR(100)
)
关于SQLLDR的详细信息,可以参考“Oracle® Database Utilities”。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28933671/viewspace-763280/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28933671/viewspace-763280/