

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Oracle SQL\$1Loader 匯入
<a name="Oracle.Procedural.Importing.SQLLoader"></a>

您可以考慮針對有數量物件限制的大型資料庫使用 Oracle SQL\$1Loader。因為此程序會從來源資料庫匯出並載入到目標資料庫，所以與結構描述非常相關；以下範例會建立範例結構描述物件、從來源匯出、然後將資料載入到目標資料庫。

安裝 Oracle SQL\$1Loader 最簡單的方法是安裝 Oracle Instant Client。若要下載該軟體，請前往 [https://www.oracle.com/database/technologies/instant-client.html](https://www.oracle.com/database/technologies/instant-client.html)。如需說明文件，請參閱《Oracle 資料庫公用程式》**手冊中的 [SQL\$1Loader 即時用戶端、匯出和匯入](https://docs.oracle.com/en/database/oracle/oracle-database/21/sutil/instant-client-sql-loader-export-import.html#GUID-FF1B6F75-09F5-4911-9317-9776FAD15965)。

**使用 Oracle SQL\$1Loader 匯入資料**

1. 使用下列 SQL 陳述式建立樣本來源資料表。

   ```
   CREATE TABLE customer_0 TABLESPACE users 
      AS (SELECT ROWNUM id, o.* 
          FROM   ALL_OBJECTS o, ALL_OBJECTS x 
          WHERE  ROWNUM <= 1000000);
   ```

1. 在目標 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);
   ```

1. 將資料從來源資料庫匯出成為文字檔。下列範例使用 SQL\$1Plus。針對您的資料，您可能需要建立指令碼來執行資料庫中所有物件的匯出。

   ```
   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
   ```

1. 建立控制檔案來描述資料。您可能需要撰寫指令碼來執行此步驟。

   ```
   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 執行個體中。

1. 使用 SQL\$1Loader 和適當的目標資料庫使用者名稱與密碼來匯入資料。

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