使用 Oracle SQL*Loader 进行导入
您可以考虑将 Oracle SQL*Loader 用于对象数量有限的大型数据库。由于从源数据库导出并加载到目标数据库的过程特定于架构,因此,下面的示例创建示例模式对象,从源导出,然后将数据加载到目标数据库。
安装 Oracle SQL*Loader 的最简单方法是安装 Oracle Instant Client。要下载该软件,请前往 https://www.oracle.com/database/technologies/instant-client.html
使用 Oracle SQL*Loader 导入数据
-
使用以下 SQL 语句创建示例源表。
CREATE TABLE customer_0 TABLESPACE users AS (SELECT ROWNUM id, o.* FROM ALL_OBJECTS o, ALL_OBJECTS x WHERE ROWNUM <= 1000000);
-
在目标 RDS for Oracle 数据库实例上,创建用于加载数据的目标表。子句
WHERE 1=2
可确保复制ALL_OBJECTS
的结构,但不复制任何行。CREATE TABLE customer_1 TABLESPACE users AS (SELECT 0 AS ID, OWNER, OBJECT_NAME, CREATED FROM ALL_OBJECTS WHERE 1=2);
-
将数据从源数据库导出到文本文件。以下示例使用 SQL*Plus。对于数据,您可能需要生成用于执行数据库中所有对象导出操作的脚本。
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS' SET LINESIZE 800 HEADING OFF FEEDBACK OFF ARRAY 5000 PAGESIZE 0 SPOOL customer_0.out SET MARKUP HTML PREFORMAT ON SET COLSEP ',' SELECT id, owner, object_name, created FROM customer_0; SPOOL OFF
-
创建一个控制文件来描述数据。您可能需要编写脚本来执行此步骤。
cat << EOF > sqlldr_1.ctl load data infile customer_0.out into table customer_1 APPEND fields terminated by "," optionally enclosed by '"' ( id POSITION(01:10) INTEGER EXTERNAL, owner POSITION(12:41) CHAR, object_name POSITION(43:72) CHAR, created POSITION(74:92) date "YYYY/MM/DD HH24:MI:SS" )
如果需要,将上述代码生成的文件复制到某一暂存区域,如 Amazon EC2 实例。
-
通过适用于目标数据库的用户名和密码,使用 SQL*Loader 导入数据。
sqlldr cust_dba@targetdb CONTROL=sqlldr_1.ctl BINDSIZE=10485760 READSIZE=10485760 ROWS=1000