استفاده از SQL Loader در Oracle برای بارگذاری سریع داده‌ها

سلام! SQL Loader یکی از ابزارهایی است که سرعت بسیار بالایی در ورود اطلاعات به دیتابیس دارد. بعضی اوقات فکر می‌کنم که بخشی از اطلاعات را از حفظ می‌زند! 😄

فایلی که امروز می‌خواهیم وارد کنیم به صورت زیر است:

DATE,NUMBER_TEST,PHONE,TEXT_TEST

2018/08/23-11:10:17,121,78903456789,1_row

2018/08/24-11:11:17,131,78903256789,2_row

2018/08/22-11:12:17,141,78903456789,3_row

2018/08/27-11:13:17,151,78903456789,4_row

2018/08/24-11:14:17,161,78903456789,5_row

2018/08/29-11:15:17,171,78903456789,6_row

2018/08/21-11:20:17,181,78903456789,7_row

2018/08/24-11:30:17,191,78903356789,8_row

2018/08/20-11:40:17,101,78903436789,9_row

2018/08/24-11:50:17,111,78903456789,10_row

2018/08/22-12:10:17,121,78903456789,11_row

2018/08/21-13:10:17,131,78903456789,12_row

2018/08/13-14:10:17,141,78903453339,13_row

2018/08/14-15:10:17,161,78903456739,14_row

2018/08/25-15:11:17,171,78903456389,15_row

2018/08/29-12:10:17,181,78903453789,16_row

2018/08/21-11:10:27,191,78903456789,17_row

برای استفاده از SQL Loader، به یک فایل کنترل نیاز داریم که اطلاعات جدول را در آن قرار دهیم و نحوه تبدیل داده را به آن بگوییم:

[oracle@db11g-node2 ~]$ cat sqlldr.ctl

OPTIONS (

  SKIP=1,

  PARALLEL=true,

  DIRECT=true,

  SKIP_INDEX_MAINTENANCE=true

)

LOAD DATA

CHARACTERSET UTF8

APPEND

INTO TABLE VAHID_TEST_SQLLDR

        FIELDS TERMINATED BY ","

        TRAILING NULLCOLS

  (

ID sequence,

DATE date 'yyyy/mm/dd-hh24:mi:ss',

NUMBER_TEST,

PHONE,

TEXT_TEST,

TEXT_CONSTANT constant 'vahiddb.com'

)

نکات مهم در فایل کنترل:

  1. تولید خودکار مقادیر Sequence: ابتدا سعی کردم از sequence1.nextval برای فیلد ID استفاده کنم، اما با مشکلاتی مواجه شدم. در نهایت، فهمیدم که با ذکر کلمه sequence این امر به‌صورت خودکار انجام می‌شود. می‌توانید جزئیات بیشتر را اینجا پیدا کنید.

  2. فرمت تاریخ: فایل کنترل شامل فرمت تاریخ است که به درستی مقادیر تاریخ را به فیلد DATE وارد می‌کند.

  3. اضافه کردن مقادیر ثابت: فایل کنترل همچنین نشان می‌دهد چگونه می‌توان مقادیر ثابت را برای فیلدهای خاص اضافه کرد، همان‌طور که در TEXT_CONSTANT آمده است.

  4. استفاده از گزینه CHARACTERSET: در هنگام بارگذاری داده‌های فارسی، باید از گزینه CHARACTERSET UTF8 استفاده کرد تا کاراکترهای فارسی به درستی نمایش داده شوند. در غیر این صورت، ممکن است کاراکترها به صورت نادرست نمایش داده شوند.

ساخت جدول

جدولی که برای ورود این اطلاعات ساخته شده به شکل زیر است:

CREATE TABLE VAHID_TEST_SQLLDR

   ( "ID" NUMBER(20,0),

     "DATE" DATE,

     "NUMBER_TEST" NUMBER(3,0),

     "PHONE" VARCHAR2(20 BYTE),

     "TEXT_TEST" VARCHAR2(50),

     "TEXT_CONSTANT" VARCHAR2(50)

   );

اجرای SQL Loader

دستور SQL Loader به صورت زیر اجرا می‌شود:

sqlldr vahid/vahid data=/home/oracle/sqlldr.data control=/home/oracle/sqlldr.ctl log=/home/oracle/sqlldr.log bad=/home/oracle/sqlldr.bad

قسمت log و bad فایل‌هایی را ایجاد می‌کنند که در صورتی که مشکلی وجود داشته باشد، بر اساس آنها قابل پیگیری و حل مشکل هستند.

این اطمینان می‌دهد که هرگونه مشکل می‌تواند بر اساس این فایل‌های گزارش پیگیری و حل شود.