سلام. 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
در sqlldr به یک فایل کنترل احتیاج داریم که اطلاعات جدول توش باشه و نحوه تبدیل داده رو بهش بگه:
[oracle@db11g-node2 ~]$ cat sqlldr.ctl OPTIONS ( SKIP=1, PARALLEL=true, DIRECT=true, SKIP_INDEX_MAINTENANCE=true ) LOAD DATA 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 'vahidnowrouzi.blog.ir' )
در فایل بالا چند نکته مهم هست. یک وجود خطی که sequence رو برامون میسازه. اول که خواستم شروع کنم، sequence ساختم و بصورت sequence1.nextval جلوی id قرار دادم . هر کاری که کردم نشد. (اگر کسی این روش رو تست کرده و جواب گرفته، لطفاٌ بگه که روش صحیح اون رو هم اضافه کنم) تا اینکه به لینک زیر برخوردم :
توی این مطلب توضیح جامعی اومده و گفته که با ذکر کلمه sequence این امر بصورت خودکار ساخته میشه.
مطلب دوم در فایل بالا خواندن تاریخ با فرمت مربوطه هست که می تونه به فیلدی که از نوع Date ساخته شده ، وارد بشه.
مطلب سوم مربوط میشه به اضافه کردن عبارات ثابت که در قسمت text_constant اومده.
دقت کنید که اگر csv که میخواید وارد کنید، در قسمت های که به عنوان متن هستند دارای علامت " باشند، عیناً وارد میشه.
جدولی که برای ورود این اطلاعات ساخته شده به شکل زیر هست:
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) );
و دستور رو بصورت زیر اجرا می کنیم:
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 فایلهایی رو ایجاد می کنند که در صورتی که مشکلی وجود داشته باشه، بر اساس اونها قابل پیگیری و حل مشکل میشن.
امیدوارم مفید واقع بشه.
--------------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.
- ۹۷/۰۶/۰۵