السلام عليكم ورحمه الله وبركاته
الاخوه الافاضل
أرغب بمعرفة طريقه تحويل بيانات من Text file إلى Oracle Database
هل يمكن ذلك ؟ وكيف ؟
وشكرا لكم
عمر باعقيل
المدينه المنوره
السلام عليكم ورحمه الله وبركاته
الاخوه الافاضل
أرغب بمعرفة طريقه تحويل بيانات من Text file إلى Oracle Database
هل يمكن ذلك ؟ وكيف ؟
وشكرا لكم
عمر باعقيل
المدينه المنوره
بكل تأكيد، وعليك إستخدام SQL LOADER. وهي بإختصار مجموعة أوامر تقوم بقراءة الملف بطريقة معينة وتحويل البيانات إلى ملف في الأوراكل، وذلك بشروط معينة، أهمها أن يكون ترتيب محتويات السطور متساوي، بعنى إذا كان لدينا ملف مثلاً (نصي) إسمه myfile.txt به ثلاث معلومات، الأولي رقم العميل، وتحتوى على ثلاث خانات، الثانيه إسمه وتحتوى على 35 خانة والثالثة تاريخ إلتحاقه وعلى شكل تاريخ. والمراد تحويلها لملف في الأوراكل بالإسم My_File وبه الحقول الثلاث المطلوبه، نقوم بعمل الآتي:
* نقوم بكتابة ملف سيطرة ولنسمه myfile.ctl ويحتوى على الآتي
LOAD DATA
INFILE 'myfile.txt'
DISCARDFILE 'myfile.dsc'
REPLACE
INTO TABLE MY_FILE
)
Client_no POSITION(01:03) Integer external,
Client_name POSITION(04:38) Integer External,
Client_Join_Date POSITION(39:48) Date "YYYYMMDDD"
(
* وقد قمت بإختيار بعض الحقول بأشكال مختلفة لتحديد ليفية تحميلها. كما أرجو ملاحظة أن الحقل يحدد ب (رقم الحرف الأول في السطر: رقم الحرف الأخير في السطر) وهو ما يعرف بنظام ال Ofset.
* نقوم بعد ذلك بتشغيل هذا الملف وكالآتي: -
SQLLOAD USER/PASSWORD control=myfile.ctl log=myfile.log
تقوم الأوراكل بقراءة الملف والذي يحدد لها موقع البيانات وإسم الملف الذي يحتويها، ثم تحمل البيانات في ملف الأوراكل المسمى MY_FILE وتقوم بإظهار عدد السطور التي تم تحويلها، كما وتقوم بحفظ ذلك في الملف المسمى MY_FILE.LOG للرجوع إليه.
أرجو أن أكون قد أوضحت بصورة مرضية
الأخ السني مشكور وماقصرت على الشرح
ولكن لو أردنا تحويل هذه البيانات إلى جداول موجودة فعلا في
قاعدة البيانات هل ذلك ممكن بحيث لو وجد لدينا جدول جاهز
في الأوراكل والبيانات موجودة على ملف نصي كيف يمكن نقلها
إلى نفس الجدول في أوراكل أرجوا التوضيح وجزاكم الله خيرا
واي احد من الشباب عند معلومة عن الموضوع ارجوا نا يساعدنا
في هذا الموضوع ....
هذا الشرح مبني على أساس أن الجدول موجود فعلا في قاعدة البيانات، وإن لم يكن موجودا، فعليك بنائه أولا، ثم عمل الخطوات السابقة
السلام عليكم ورحمه الله وبركاته
الاخ الفاضل السنى
السلام عليكم ورحمه الله وبركاته
شكرا على ردك على سؤالى
ولكن ارجوا منك التوضيح اكثر لو تكرمت
خصوصا بانى لم استخدم هذه الطريقه من قبل ابدا
كما نى لا اعرف كيفيه تشغيل البرنامج المسمي SQL-LOADER
ارجوا منك ومن العارفين الادلاء بدلوهم في هذا
الموضوع لو تكرمتم
وشكرا لكم
عمر باعقيل
المكدينه المنوره
حسناً سأبدا بشرح مبسط لل SQL*LOADER.
SQL*LOADER هي إحدى أدوات الأوراكل، والمنوط بها إدخال بيانات من ملف بيانات خارجي ولا يحمل سمات ملفات الأوراكل (ملف نصي مثلا)، إلى ملف بيانات معرف في قاعدة البيانات. وهو يتضمن عدد كبير من الإمكانيات والخصائص المتوفرة أداة التحميل المنتجة من قبل شركة أى بي إم IBM والمسماة DB2 Load Utility from IBM. وهي أداة يمكنها تحميل العديد عدد من الملفات في عدد من ملفات البيانات وبكل التباديل (عديد من المدخلات، في العديد من الملفات، مدخل واحد في العديد من الملفات، العديد من المدخلات في ملف واحد أو مدخل واحد في ملف واحد، وهو الخيار الأكثر شيوعا). كما يمكنك إضافة بعض الأوامر المنطقية للتحميل لقبول أو رفض البيانات (فلترات).
وتحتوى ال SQL*LOADER على عدد من المكونات، بعضها إجبارى والعديد من المكونات الإختيارية. وذلك داخل ما يعرف بملف السيطرة Control File.
والمكونات الإجبارية هي (الملف الذي يحتوى على البيانات المدخلة، والملف الذي ستدخل فيه البيانات)
أما المكونات الإختيارية فهي عديدة، منها ملف السجل (Log File) وهو ملف يقوم بتسجيل نتائج التحويل، وملف المرفوضات (Discard File) وتقوم أوراكل بتسجيل كل البيانات المرفوضة حسب المنطق)، وملف البيانات الغير سليمة (Bad File) وفيه يتم تسجيل البيانات المرفوضة بسبب سوء في تكوينها، كما هناك العديد من الأوامر الإختيارية التي تسطتيع من خلالها تحديد منطق قبول و رفض البيانات، وأوامر تحدد نوعية وفورمات البيانات .... إلخ
وبذلك وحسب طريقة تكوينك لملف السيطرة يمكنك إستغلال المهام الخصائص التى تمتلكها هذه الأداة والمتلخصة في الآتي: -
* إمكانية تحويل بيانات مختلفة الهيئة والتكوين إلى قاعدة البيانات
* إمكانية التعامل مع بيانات مختلفة التنسيق مثل
1. تنسيق متسق Fixed-Formated
2. تنسيق بفواصل Delemited-Formated
3. سجلات متغير الأطوال Variable Length Records
* التحكم في الحقول بإستخدام بعض أوامر ال SQL قبل إدخالها في قاعدة البيانات
* إمكانية التعامل مع قاعدة عريضة من أشكال البيانات (تاريخ، بايناري، أرقام عشرية ثابتة Pached-Decimal و أرقام عشرية موضعية Zoned-Decimal
* تحميل عدد من المدخلات في نفس أمر التشغيل، عن طريق تحديد السطور المختارة لكل ملف بيانات
* دمج عدد من السطور من المدخل، في سجل واحد في ملف البيانات
* تفتيت سطر واحد من المدخل إلى عدد من السجلات (عكس ما قبله)
* تكوين مفتاح تسلسلى أحادى (Unique Sequential Key) لكل سجل
* إستخدام ملفات نظام التشغيل لقراءة الملف المدخل
* تحميل المدخل من أي وسط ميغناطيسي أو ليزري (قرص ثابت، مرن، مدمج أو شريط)
* إنشاء تقرير عن عملية التحويل لتمكينك من متابعة الأخطاء
* إستخدام ملفات السيطرة الخاصة بـ IBM DB2 Load Utility وأيضا IBM DXT Utility
* التحميل إلى ملف البيانات مباشرة دونما تدخل من أي من أدوات الأوراكل، مما يوفر سرعة أداء عالية. (وهي خاصية يمكن شرحها لاحقا، ولها صفات مميزة وخاصة تسمى بالنطاق المباشر (Direct Path)
وللشرح بقية
ميكانيكياً هنالك طريقتين تتبعهما ال SQL LOADER للكتابة وتحويل البيانات. الطريقة الأولي وتسمي بالمسار التقليدي (Conventional Path)تقوم الأوراكل بتكوين مصفوفة في ذاكرة الجهاز، وتقوم ال SQL*LOADER بتحويل البيانات فيها في شكل مجموعات من الصفوف، وتتم عملية تفريغ محتويات المصفوفة في إحدى الحالتين
1. عند إمتلاء الجزء المخصص من الذاكرة لهذه المصفوفة. يقوم الجهاز بتفريغ محتوياتها في قاعدة البيانات ثم تفريغ المصفوفة للمجموعة التالية من الصفوف.
2. عند قراءة الصف الأخير من البيانات.
وفي هذه الحالة تستخدم ال SQL*LOADER خاصية الإدخال INSERT بعد الإنتهاء من التحميل في الذاكرة.
الطريقة الثانية هي طريقة المسار المباشر. وتكون فيها البيانات في شكل حزمي على قاعدة بيانات منسقة، وتقوم ال SQL*LOADER بقراءتها وكتابتها مباشرة في قاعدتها دونما وسيط متخطية بذلك اغلب عمليات ال RDBMS. وهو ما يوفر سعة وسرعة أكبر بكثير من الطريقة الأولي. ولكنها تشترط وجود البيانات في قاعدة بيانات. لذا نادراً ما تتوفر للمستخدم فرصة إستغلال إمكانياتها.
وهنا إسمحوا لي بعدم الخوض في العديد من التفاصيل التي قد لا تكون موضوع شرحنا. إذ ان هذه الأداة لها من الإمكانيات، ما يمكن الكتابة عنه إلى ما شاء الله تعالى. لذا سأركز على الشرح بالتفصيل في موضوع الأخ باعقيل، وهو حقيقة ما يحتاجة المستخدمون عادة. ألا وهو الطريقة التقليدية، وما تحتاجه منك للتهيئة .
كما ذكرنا أن هناك معطيين أساسيين يتدخلان في عملية تحويل البيانات لا يمكن الإستغناء عنهما في أغلب الحالات. لذا رأيت بأن اورد الأشكال السبعة التي تظهر عليها ال SQL*LOADER، ومدى حوجتك لهذه المعطيات الأساسية وهى (ملف البيانات، ملف السيطرة، ملف ال SQL). كما أود أن أشير إلى انه في بعض الحالات يمكن وجود البيانات داخل ملف السيطرة نفسه. لذا سأورد هذه الحالات السبعة، ثم أقوم بشرح كل منها للفائدة العامة مع وضع أمثلة.
1. الحالة الأولى:- تحويل بيانات متسقة متغير الأطوال، يتم الفصل بين كل حقل والآخر بفواصل معرفة (,) كما يمكن ان تكون داخل الفاصلة ("). وهنا تكون البيانات موجودة على ملف السيطرة، ويستخدم فيها ملف السيطرة وأوامر ال SQL ولكن سيتغنى عن ملف البيانات.
2. الحالة الثانية:- تحويل بيانات موحدة الأتساق والأطوال (Fixed Length & Format). ويستخدم فيها كل من ملفات البيانات والسيطرة وأوامر ال SQL
3.الحالة الثالثة:- وهي شبيهه بالأولى ولكن تختلف عنها بوجود حقول تسلسلية. وهنا تكون البيانات موجودة على ملف السيطرة، ويستخدم فيها ملف السيطرة وأوامر ال SQL ولكن سيتغنى عن ملف البيانات.
4. الحالة الرابعة: - التحويل مع دمج عدد من السطور في بيانات المدخل في سطر واحد من ملف قاعدة البيانات. وتتدخل فيها كل من ملف السيطرة وأوامر ال SQL وملف البيانات.
5. الحالة الخامسة:- تحويل البيانات إلى عدد من ملفات قاعدة البيانات في عملية واحدة. وتتدخل فيها كل من ملف السيطرة وأوامر ال SQL وملف البيانات.
6. الحالة السادسة:- تحويل البيانات بطريقة المسار المباشر. وتتدخل فيها كل من ملف السيطرة وأوامر ال SQL وملف البيانات.
7. الحالة السادسة:- قراءة وتحويل البيانات من تقرير منسق موجود على شكل نسخة مرنة. وتتدخل فيها كل من ملف السيطرة وأوامر ال SQL وملف البيانات، مع حالة خاصة لل SQL سيم ذكرها في حينه.
وفي المرحلة القادمة من الشرح، سأتناول كل حالة مع مثال لها.
السلام عليكم ورحمه الله وبركاته
الاخ السنى المحترم
شكرا جزيل الشكر على كل معلومه افدتنا بها
وجزاء الله خيرا
وانا في انتظار المزيد
عمر باعقيل
المدينه المنوره
لإجراء الأمثلة أرجو مراعاة التالي
لنفترض أن لدينا جدولين للتطبيق على الخاصية، الجدول الأول يسمى emp ويحتوى على الحقول التالية
emp_no NUMBER(4) CONSTRAINT pk_emp PRIMARY KEY
ename VARCHAR2(10)
job VARCHAR2(9)
mgr NUMBER(4)
hiredate DATE
sal NUMBER(8,3)
comm NUMBER(8,3)
depno NUMBER(2) CONSTRAINT fk_deptno REFERENCES dept
والجدول الآخر dept ويحتوى على الحقول
deptno NUMBER2) CONSTRAINT pk_dept PRIMARY KEY
dname VARCHAR2(14)
loc VARCHAR2(13)
مثال للحالة الأولى (البيانات متغيرة الأطوال):
=================
وللتبسيط ستدمج البيانات في نفس الأمر في ملف السيطرة والذي يكتب كالتالي (لاحظ ترقيم السطور للشرح فقط، ويجب أن لا يكتب في الملف الحقيقي)
1. LOAD DATA
2. INFILE *
3. INTO TABLE dept
4. FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
5. (deptno, dname, loc)
6. BEGINDATA
12,ACCOUNTS,"ABDULLAH"
5,"ADMINISTRATION","MOHAMMED"
71,IT DEPARTMENT,"ALI"
20,ADITORS,FATIMA
السطر الأول: كلمة LOAD DATA مطلوبة في بداية ملف السيطرة
" الثاني: علامة ال (*) تعني ان البيانات موجودة في نفس الملف
" الثالث: لتعريف الملف المستهدف
" الرابع: لتعريف الفواصل بين بيانات الحقول، وأن العلامة " هي إختيارية يمكن تجاهلها
السطر الخامس: يعرف فيه الحقول المستهدفة، من الملف المستهدف
" السادس: لتعريف البيانات
بعد كتابة هذه الأوامر في الملف (sql_type1.ctl) قم بتشغيلة كالآتي
SQLLOAD USERID=user/password CONTROL=sqltype1.ctl LOG=sql_type1.log
ويتم فيها تحويل البيانات من ملف نصي تتسق فيه البيانات بشكل عمودى (لتخيل ذلك، تخيل أن البيانات هى من ملف في إكسل، وبدون فواصل عمودية وأفقية)، وتتكون البيانات من سطور تتساوى في أطوالها ونوع البيانات عموديا.
ولنفترض أن لدينا الملف sql_type2.dat يحتوى على عدد من السطور متساويى الأطوال، وكل سطر يتكون من التالي، وعلى التتالي وبدون فواصل
رقم الموظف، وهو الأربعة خانات الأولى.
الإسم، وهو العشرة خانات التي تلى رقم الموظف.
الوظيفة، وهي التسعة خانات التي تلي الإسم.
الرقم الوظيفي للمدير، وهو الأربعة خانات التي تلي الوظيفة.
الراتب، وهو التسعة خانات التي تلى رقم المدير، وهو رقم عشرى
العمولة، التسعة خانات تلي الراتب، وهو رقم عشرى
رقم القسم، خانتين تليان العمولة.
أرجو ملاحظة أن الراتب في قاعدة اليرانات هو رقمي وطوله 8، ويحتوي على ثلاث أرقام عشرية NUMBER(8,3) ولكن هنا طوله تسعة أرقام، وذلك لإشغال العلامة العشرية للخانة الزائدة، والتي ستتجاهلها الأوراكل أثناء التحميل، ولكنها ستضع موضعها في الإعتبار لتحديد أي جزء من الرقم قبل الخانة العشرية وأي جزء بعدها
ملحوظة: في حساب طول الحقل الغير صحيح في قاعدة البيانات لا تحسب خانة الفاصلة العشرية، وإنما يتم تعريفها إفتراضيا، ففي الراتب، في هذا المثال، يتكون الراتب من خمسة أرقام صحيحة، وثلاث أرقام عشرية.
وأيضا سأقوم بترقيم السطور التي تكون الملف (SQL_TYPE2.CTL) وذلك لغرض الشرح فقط
1. LOAD DATA
2. INFILE 'sql_type2.dat'
3. INTO TABLE emp
4. (empno POSITION(01:04) INTEGER EXTERNAL,
ename POSITION(05:14) CHAR
job POSITION(15:23) CHAR
mgr POSITION(24:27) INTEGER EXTERNAL
sal POSITION(28:37) DECIMAL EXTERNAL
comm POSITION(38:46) DECIMAL EXTERNAL
deptno POSSITION(47:48) INTEGER EXTERNAL)
الشرح:
======
1. الأمر LOAD DATA تفيد امر بدية ملف السيطرة
2. لتحديد إسم الملف المحتوي على البيانات
3. لتحديد الملف المستهدف
4. لتحديد موقع كل حقل في السطر (البداية:النهاية) ثم تحديد نوع البيانات. ولاحظ هنا الآني: -
أ. لا يجب وضع الحقول حسب ترتيبها في ملف البيانات
ب. طول الحقل في الملف النصي يجب ان يكون مساوى أو أقصر من طوله في قاعدة البيانات.
ج. نوع البيانات يجب أن يتسق بين الملف النصي، والقاعدة
د. يجب حصر كل الحقول وتعريفاتها بين قوسين
هـ. الحقول التي يتضمنها ملف البيانات، ولا يتضمنها الملف النصي، تكون بقيمة تلقائية وهي (الفراغ)
يتم تشغيل الملف كما في السابق
الأخ العزيز الأستاذ عمر باعقيل
السلام عليكم ورحمة الله وبركاته
الرجاء من سعاتكم إرسال رسالة لي على البريد التالي
وأنا سأقوم بالرد عليكم نظرا لأنني أحتاج منكم شيئ مهم جدا
البريد هو mohh789@hotmail.com
أخوك محمد المتولي
ـــــــــــــــــــــــــــــــ
وآخر دعونا أن الحمدلله رب العالمين
هذا الموضوع مغلق.