使用 Oracle SQL*Loader 进行导入 - Amazon Relational Database Service

使用 Oracle SQL*Loader 进行导入

您可以考虑将 Oracle SQL*Loader 用于对象数量有限的大型数据库。由于从源数据库导出并加载到目标数据库的过程特定于架构,因此,下面的示例创建示例模式对象,从源导出,然后将数据加载到目标数据库。

安装 Oracle SQL*Loader 的最简单方法是安装 Oracle Instant Client。要下载该软件,请前往 https://www.oracle.com/database/technologies/instant-client.html。有关文档,请参阅《Oracle 数据库实用程序》手册中的适用于 SQL*Loader、导出和导入的 Instant Client

使用 Oracle SQL*Loader 导入数据
  1. 使用以下 SQL 语句创建示例源表。

    CREATE TABLE customer_0 TABLESPACE users AS (SELECT ROWNUM id, o.* FROM ALL_OBJECTS o, ALL_OBJECTS x WHERE ROWNUM <= 1000000);
  2. 在目标 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);
  3. 将数据从源数据库导出到文本文件。以下示例使用 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
  4. 创建一个控制文件来描述数据。您可能需要编写脚本来执行此步骤。

    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 实例。

  5. 通过适用于目标数据库的用户名和密码,使用 SQL*Loader 导入数据。

    sqlldr cust_dba@targetdb CONTROL=sqlldr_1.ctl BINDSIZE=10485760 READSIZE=10485760 ROWS=1000