سلام! 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'
)
نکات مهم در فایل کنترل:
-
تولید خودکار مقادیر Sequence: ابتدا سعی کردم از
sequence1.nextval
برای فیلدID
استفاده کنم، اما با مشکلاتی مواجه شدم. در نهایت، فهمیدم که با ذکر کلمهsequence
این امر بهصورت خودکار انجام میشود. میتوانید جزئیات بیشتر را اینجا پیدا کنید. -
فرمت تاریخ: فایل کنترل شامل فرمت تاریخ است که به درستی مقادیر تاریخ را به فیلد
DATE
وارد میکند. -
اضافه کردن مقادیر ثابت: فایل کنترل همچنین نشان میدهد چگونه میتوان مقادیر ثابت را برای فیلدهای خاص اضافه کرد، همانطور که در
TEXT_CONSTANT
آمده است. -
استفاده از گزینه 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
فایلهایی را ایجاد میکنند که در صورتی که مشکلی وجود داشته باشد، بر اساس آنها قابل پیگیری و حل مشکل هستند.
این اطمینان میدهد که هرگونه مشکل میتواند بر اساس این فایلهای گزارش پیگیری و حل شود.