Oracle SQL*Loader
نشر بواسطة : Obay Salah , November 19, 2024
لقد استخدمنا ﺍلData Pump لقراءة وكتابة وإرسال البيانات من قاعدة بيانات إلى أخرى، ولكن كل البيانات التي تم التعامل معها كانت في الواقع Oracle proprietary format،
ولكن ماذا لو أردنا نقل البيانات إلى قاعدة بيانات Oracle ولم تكن هذه البيانات Oracle proprietary format،، فهنا لا يمكننا استخدام ﺍلData Pump بل استخدام SQL*Loader
إنها تقوم بتحميل البيانات من الملفات الخارجية إلى قاعدة بيانات .
يوضح الشكل أعلاه مكونات SQL*Loader.
1- Input Data Files:
هو الملف أو الملفات التي تحتوي على البيانات التي نريد نقلها إلى قاعدة البيانات عبر SQL*Loader، ويتم تحديد مسار هذا الملف في ملف Control File الذي يتم تكوينه بواسطة مدير قاعدة البيانات والذي سنتحدث عنه لاحقًا، ومن الممكن أيضًا تضمين البيانات المراد نقلها إلى قاعدة البيانات في ملف Control File، وفي هذه الحالة لا نحتاج إلى ﺍلInput File.
يجب أن يكون تنسيق البيانات في هذا الملف أحد ثلاثة:-
1- Fixed-record format:-
يجب أن تكون البيانات في هذا الملف على شكل صفوف متساوية الطول، وهذا النوع يزيد من الأداء أثناء عملية التحميل، ولكنه أقل مرونة.
إليك مثال على هذا الملف:
Mohammed,ali
Ahmed,yousif
Mogahid,omer
لاحظ أن جميع الصفوف في Input File هذا متساوية الطول وأن طول جميع الصفوف في هذا الملف هو 12 حرفًا.
2- Variable-record format:
البيانات في هذا الملف تكون على شكل صفوف غير متساوية الطول، ولكن طول أي صف يتم تحديده في بداية الصف، أي يتم تخصيص خلايا في بداية أي صف لتحديد طول الصف.
هذا النوع أكثر مرونة من النوع السابق، ولكن أداءه أقل من النوع الأول.
وهذا مثال على هذا الملف:
014Mohammed,ahmed
009Ahmed,ali
010telal,omer
تم حجز الحقول الثلاثة الأولى لتحديد طول الصف.
3- Stream-record format:-
البيانات في هذا الملف تكون على شكل صفوف غير متساوية الطول
طول الصفوف غير محدد في بداية الصفوف، مما يتطلب مسح كامل للصفوف قبل عملية التحميل لتحديد طول الصفوف،
لذلك، هذا النوع أكثر مرونة من النوعين السابقين، ولكنه بالطبع يقلل من الأداء.
لا يتم تحديد طول الصفوف في بداية الصفوف ولا تكون الصفوف متساوية.
2- Control File :
هو ملف نصي يتم كتابته وتنسيقه بواسطة مدير قاعدة البيانات، وهذا الملف ضروري أثناء عملية رفع البيانات إلى قاعدة البيانات، حيث يحتوي هذا الملف على مكان البيانات التي نريد رفعها من خلال تحديد ملف ﺍلInput Data أو من خلال احتواءه على البيانات المراد رفعها، كما يحدد كيفية رفع البيانات ومكان إنشائها، كما يحتوي على ملفات أخرى ومعلومات أخرى مهمة.
load data infile 'fixed.dat' "fix 14" insert into table names fields terminated by ',' (first,last)
هذه عينة من ﺍلControl File حيث تم تحديد ﺍلInput File وتنسيق البيانات هو fixed-record
طول الصفوف في الملف المراد تحميله هو 14 حرفًا والفواصل بين الحقول هي الأحرف ','.
هذا مثال آخر لملف ﺍلControl File.
load data infile 'names.dat' "var ٣" insert into table names fields terminated by ',' (first,last)
لاحظ هنا أن تنسيق البيانات التي يتم تحميلها قد تم تحديده في شكل Variable-record، وتم تحديد ثلاثة حقول لتحديد طول الصفوف، والفواصل بين الحقول هي الأحرف ','.
هذا مثال آخر لملف ﺍلControl File.
load data infile 'names.dat' "str '\n'" insert into table names fields terminated by ',' (first,last)
هنا يتم تحديد أن صيغة البيانات المراد تحميلها تكون على هيئة Stream-record
وأن الصفوف تنتهي بنهاية الصف وبداية الصف الجديد وأن الفاصل بين الحقول هو الحرف ,.
3-Log File:
هو ملف يتم إنشائه أثناء عملية التحميل بواسطة SQL Loader، وإذا فشلت عملية إنشاء هذا الملف تتوقف عملية التحميل.
يحتوي هذا الملف على معلومات حول عملية التحميل والأخطاء التي حدثت أثناء عملية التحميل.
4- Bad File:
يحتوي هذا الملف على السجلات التي تم رفضها لأن صيغتها غير متوافقة مع حقول الجدول. أثناء عملية التحميل
وعند إضافة البيانات إلى الجداول توجد بعض البيانات غير متوافقة مع الحقول، لذلك يتم رفضها وتخزينها في هذا الملف.
5- Discard File:
يتم إنشاء هذا الملف فقط عندما نريده، ويتم تحديده في ﺍلControl File،
مهمة هذا الملف أنه يحتوي على السجلات التي تم رفضها لأنها لا تتوافق مع شروط التحميل.
طريقة التحميل:
هناك طريقتان لتحميل البيانات باستخدام SQL*Loader:
1- Conventional Path Load:
في هذه الطريقة يتم بناء مصفوفة من الصفوف في الذاكرة ثم إضافتها إلى الجداول باستخدام SQL INSERT statement لتحميل البيانات إلى قاعدة البيانات.
2- :Direct Path Load:
في هذه الطريقة يتم بناء كتل (Blocks) من البيانات في الذاكرة ثم حفظها مباشرة في Extent الذي يحتوي على الجدول في قاعدة البيانات.
تحميل البيانات:
الآن دعنا نتبع المثال التالي الذي يشرح عملية تحميل ملف نصي إلى قاعدة بيانات Oracle باستخدام SQL*Loader.
لنفترض أننا نريد تحميل ملف النص التالي المسمى c:\name.txt، لاحظ الملف في الشكل. لاحظ أن الملف يحتوي على ستة صفوف وأن طول الصفوف غير متساوٍ
ولم يتم تحديد طول الصفوف في البداية؛ لذا فإن تنسيق البيانات في هذا الملف يكون في شكل Stream-record، ونريد تحميل هذه البيانات إلى الجدول tname الذي ينتمي إلى المستخدم Test.
الخطوة الأولى: نتأكد من أن الجدول موجود في قاعدة البيانات وأنه لا يحتوي على بيانات.
CONN TEST/TEST DESC TNAME; SELECT * FROM TNAME;
الخطوة الثانية: نكتب ﺍلControl File.
لاحظ أننا استخدمنا أمر INSERT لأن الجدول لا يحتوي على بيانات، ولكن إذا كان الجدول يحتوي على بيانات ونريد إضافة بيانات جديدة إليه، نستخدم أمر APPEND.
ولكن إذا أردنا حذف البيانات القديمة وإضافة بيانات جديدة، نستخدم أمر TRUNCATE.
الخطوة الثالثة : نستخدم SQL*Loader لتنفيذ ملف التحكم.
c:\sqlldr test/test control=c:\name.ctl log=name.log
الخطوة الرابعة : نقوم بتشغيل استعلام على الجدول للتأكد من تحميل البيانات.
بشكل عام، يمكن مراجعة جميع الخيارات المتاحة لـ SQL*Loader باستخدام الأمر ?- sqlldr
Comments
لايوجد تعليق حتى الان