تعلم Oracle Sql Database
764 subscribers
100 photos
2 files
5 links
Download Telegram
الجزء A يتكلم بصورة عامة، و الجزء B & C أكثر توضيح.
هذه ال Architecture تعود لل Oracle 21c.
1. Request to execute Sql Query

بصوره عامة من ال user/client يريد يعمل execute لل SQL Statement معينة أول شي ال application تتصل بال listener حتى تطلب فتح اتصال مع ال database
.
فال listener يحول هذا الأتصال لل server process حتى الأخير يشوف شنو الطلب و ع أساسه يجهز الخدمة و يعمل execute و يرجع النتيجه لل client.


ال server process موضح بالصورة أعلاه بالقسم A و B, ب B موضح بمربع باللون الاصفر.


* ال listener هنا هو مثل موظف الأستقبال يكون الوسيط بين الزبون/العميل إلى يطلب خدمة و بين الموظف إلى ينجز هذه الخدمة.
2. Oracle Database Architecture


ال Oracle Database تحتوي على:

1. One Database.
2. At least One Database Instance
.

و هنا ال database و instance موضحتهم بمربعات باللون الأحمر بالجزء B من الصورة أعلاه.

******************************
1. Database

ال database بالحقيقة تسمى "Multitenant Container Database (CDB) " بعدين رح نوضح شنو نعني ب Multitenant.

المهم ال database تحتوي على physical files الي هي
_ Data files,
_ Control files,
_ Online Redo Log


لخزن ال data and metadata لل user. و كل وحده الها وظيفتها.. لتفاصيل أكثر ممكن نرجع للمصادر إلى رح اذكرهم بنهاية الموضوع.

هذه ال (CDB) تتضمن التالي:

1. One Root Container called (CDB$ Root).

2. One Seed Pluggable Database called (PDB$ Seed).

3. Zero or More User created Pluggable Database (PDBs).

4. zero or more application Container.

اول اثنين مبنيات مع النظام و آخر اثنين يتم أضافتهم من قبل ال user. و الفايلات الموجودة في كل وحده منهم موضحة بالصورة أعلاه الجزء C. طبعا ال Seed Pluggable منكدر نسوي عليها أي modify.

و مثال على Pluggable Database هو HR ( Human Resource) الي تحتوي ع 7 tables و تعاملنا معاها سابقا.


**********************************



2. Instance


بينما ال Instance تحتوي على:
A. memory and
B. background processes


موضحتهم بمربعات باللون الأخضر بالصورة أعلاه الجزء B.


A. Memory

ال memory في ال instance تتكون من:

1. SGA (System Gloable Area)
2. PGA ( Program Global Area)

ال SGA ( موضح بمربع لونه الأخضر في الصورة أعلاه الجزء B ). إلي بدوره ايضا تتكون من عدة أشياء منها:

_ Shared Pool.
_ Buffer Cache.


(موضحين بمربع لونه ازرق في الصورة أعلاه الجزء B ).

_ ال shared pool هي عبارة عن memory area تحتوي:

_ Parsed SQL Statements.
_ SQL Execution Plans.
_ Parsed and Compiled PL/SQL Program Units.

بالحقيقة هذه الأشياء تكون موجودة ضمن Shared Sql Area ضمن Library Cache ضمن Shared Pool و تكون مشتركة بين كل ال users.

_ ال buffer cache هو أيضا عبارة عن memory area لكن تستخدم لخزن ال data blocks ال يتم سحبها من data files وقت عمل execution ل sql statement.

ممكن نرجع للمصادر الي رح أرفعها لمعلومات اكثر.





B. Background Processes


* ال Background Processes تقوم بمهام مختلفة منها
_ Performing instance recovery,
_ Cleaning up processes,
_ Writing redo buffers to disk, and so on.


بالنهاية نقدر نقول ان Oracle database عبارة عن Operation System كامل:
نظام إدارة ال processes ...
نظام إدارة ال memory ...
نظام إدارة ال files...
تعلم Oracle Sql Database
SQL Statement Processing *اليوم رح نتكلم عن موضوع sql statement processing. طبعا احنه نعرف بأن هناك عدة أنواع لل SQL Statement ذكرناهم سابقاً. فطريقة التعامل مع أي نوع لل sql تتم حسب المخطط الشامل أدناه...
هسه نرجع لموضوعنا إلى ذكرناه بالبداية

Sql Statement Processing.

ذكرنا سابقا ان ال server process هو يتلقى الطلب و هو يجهز الخدمة المطلوبة.
فالخطوات تتم حسب هذا المخطط أدناه.
SQL Statement Processing


لو كانت ال SQL Statement هي من جماعة select، فأول شي ال Server Process يستلم هذه ال SQL Statement و يعمللها Parsing ( إلى دارس ال compiler المفروض عنده فكره عامه عن ال parsing)


المهم العملية كلها تصير بالخطوات التالية :

1. أول شي يعمل syntax check.

2. بعدين Semantic check, وحتى يعمل جيك لل Semantic رح يستعين ب Dictionary Cache الموجودة في SGA.

3. بعدها يروح يجيك ال Shared pool بالضبط يروح لل Library cache و يسأل هذه ال SQL Statement موجوده من قبل في Shared pool.

بمعنى هل ال current user from the current application or another user of ( the same application or another application) قام بعمل execute لها من قبل.


3.1. فإذا موجوده في Shared Pool من قبل, هنا مباشرة يعمل لها Execute. لكن قبل لايعمل لها Execute اذا مستخدم substitution variable إلى شرحناها من قبل فهنا يجب أعطاء قيم للمتغيرات الموجودة في Select Statement بمعنى يعمل لها binding و بعدها يعمل parallelize the execution.

و هذا الطريق يسمى ب Soft Parsing.


3.2. أما أذا كانت غيرموجوده في Shared Pool فيعمل مجموعة من الخطوات كلها تقع تحت مسمى واحد و هو Optimization.:

* فأول شي يخليها ب Shared SQL area.


* يولد مجموعة من execution plans من خلال describe query results which means provide information about the select list Item .


* بعدها يعمل Define Query Output by defines location, size, data type information required to store fetches values in variables.


*يعمل binding لل values and variables.


*و أخيرا يعمل execute لل Select Statement.


و هذا الطريق يسمى ب Hard Parsing.


4. ال Execution يصير من خلال انو ال server Process ياخذ نسخة من البيانات المطلوبه blocks of data في data files الموجوده ب database و يخليها بال Buffer Cache و بعدها يعمللها fetch و يعطيها للuser/client .
References

لتوضيح أكثر عن إلى ذُكر أعلاه بخصوص Oracle Database Architecture و Sql Statement Processing ممكن نستخدم المصادر أدناه:
Part 11: Managing tables using DML Statements


في السابق شرحنا مواضيع مختلفة واحدة منها ال Select Statement الي من خلالها نعمل retrieve للمعلومات من ال database , هي جزء من DML ...
الآن نُكمل ال SQL statements التابعة لل DML و هي:
1. Insert Statement.
2. Update Statement.
3. Delete Statement.
4. Truncate Statement.
1. Insert Statement

ال Insert Statement تمكننا من أضافة بيانات جديدة الى Table معين.

طبعا عدنا نوعين من Insert Statement:

1.1 Insert Into Statement.
1.2 Insert Into SELECT Statement.

- Table name
هو أسم الجدول الي نريد نضيف له بيانات جديدة.
- column1, Column2,...
هي أسماء الأعمدة Columns الي نريد نضيف لها بيانات جديدة و ممكن نستخدم اي ترتيب يعجبنا مو شرط نفس ترتيب الاعمدة بالجدول.
- Value1, Value2,...
هي القيم values الجديدة المراد أضافتها للأعمدة Columns الي حددناها.
1.1 SQL INSERT INTO Statement.

هذا النوع من Insert SQL Statement ممكن استخدامه بالصيغتين المذكورتين في الصورة أعلاه A and B .


كلاهما يستخدمان لأضافة row/ record واحد فقط في كل مرة لعدد من الأعمدة, لكن الفرق بينهم هو التالي:

- في A نحدد الأعمدة columns الي نريد نضيف لها بيانات و الترتيب يكون حسب ترتيب الأعمدة في عبارة Insert.

- في B نضيف بيانات لكل الأعمدة columns بالجدول لسجل واحد بدون ذكر أسماء الأعمدة, و هنا ترتيب القيم في عبارة Insert يكون حسب ترتيب الأعمدة في Table.
Notes:


1.
في A يجب أن يكون عدد ال columns المذكورة في insert statement مساوي لعدد ال values و بنفس النوع البياني data type و بنفس الترتيب order.

( يعني مثلا كتبت 5 أعمدة columns في عبارة ال insert فلازم أضيف 5 قيم values, و ال value1 هي القيمة الي سندخلها في ال column1 و هكذا, و اذا كان النوع البياني مثلاً لل column 3 هو Number فلازم القيمة value الي رح نضيفها لهاذ العمود column هي number وهكذا).


********************************************************


2. في B يجب أن يكون ترتيب ال values المضافة هو نفس ترتيب الأعمدة columns بالجدول و بنفس النوع البياني كما ذكر سابقا.

********************************************************

3. عند أخال قيم التاريخ Dates و النصوص Strings يجب أن تكون بين single quotation علامتي تنصيص فردية ' ' .

********************************************************

4. يجب الأنتباه لل constraints عند أدخال قيم values.

موضوع ال Constraints المفروض نشرحه فيما بعد عندما نشرح عن ال create table. و ال Constraints تستخدم لتحديد أو تعيين بعض القواعد على الأعمدة columns في Table.
( كل ال constraint توضع أو تحدد وقت أنشاء الجدول لكن هنا رح نتناول نبذه مختصرة عنهم حتى لازم نخليهم في بالنا عندما نضيف بيانات لل table.

أوراكل تجهزنا بعدد من ال Constraints, الشائع استخدامها هي التالي:


1- NOT NULL
يتأكد بأن العمود لا يتقبل قيمة ال Null. (هذه الخاصية تعطى عند اشاء ال Table رح نوضحه فيما بعد). المهم اذا كنت مخليين قيد Not Null على عمود معين فلازم ننتبه عند أعطاء القيم في جملة Insert بأن هذا العمود لا يتقبل أي قيمة Null)

2- UNIQUE
يتأكد بأن العمود column لا يتقبل قيم مكررة ضمن table.
مثلا في جدول ال Departments أسماء الإدارات ميصير تتكرر.

3- PRIMARY KEY

هو مزيج بين Unique and Not Null. يُعرّف كل صف row في الجدول بشكل فريد. فرقه عن ال unique بأنه لا يتقبل قيمة Null.

4- FOREIGN KEY
يبين بأن هذا العمود مرتبط مع جدول/جداول أخرى.
مثلا جدول ال Employees يتضمن column أسمه Department_id وهو foreign key لجدول ال Departments (يعني ال Department_id يستخدم للربط بين هذين الجدوليين) فعند أضافة بيانات لموظف بجدول ال Employees لازم ننتبه لعمود Department_id تكون قيمتة نفس القيم الموجوده بجدول ال Departments.

5- CHECK
يتأكد بأن القيمة value المدخلة لهذا العمود column تحقق شرط معين.
مثلا لو كان عندي جدول موظفين فيه عمود العمر age لكل موظف, لو فرضنا أقل عمر للموظفين ممكن يقبله النظام هو 18 فما فوق, فإذا مُدخل البيانات قام بأدخال قيمة للعمر فرضا 10 فهذا خطأ لأن منطقياً ميصير ( فهنا اخلي شرط وقت أنشاء ال table بأن عمود العمر لازم ميتقبل عمر أقل من 18(رح نوضحه بعدين)).. الفكره أنو أنتبه للعمود الي علية قيد ال check وقت أدخال البيانات.

6- DEFAULT
تعيين قيمة أفتراضيه للعمود column في حال لم نعطي قيمة وقت ال insert. هذا القيد ميأثر على insert.

7- CREATE INDEX
يستخدم لإنشاء واسترجاع البيانات من قاعدة البيانات بسرعة كبيرة.



أذن قبل أضافه اي بيانات لأي جدول لازم ننتبه للتالي:
1- لأسماء الأعمدة.
2- و للنوع البياني للأعمدة.
3- و لطول القيمه الي ممكن يتقبلها العمود.
4- و آخر شي لازم نعرف ال constraints و خصوصاً ال Not Null .

و أحنه سابقاً شرحنا command الي من خلاله ممكن أعرف الي تم ذكره بالنقاط الثلاثة أضافة لل Not Null constaint وهو ال Desc or Describe .
مثلا عندنا جدول ال department أريد أضيفله بيانات, فقبل لا أضيف له أي شي أحاول أعرف عدد, أسماء, النوع البياني,و ال Not Null الأعمدة columns الموجودة بالجدول من خلال أمر ال Desc...

بعد ما كُل شي صار واضح عندنا هنا نبدي نضيف بيانات لل table.
أعلاه هو example عن الصيغتين الي تم شرحهم حول Insert Into Statement.
Insert Null Values

اذا تذكرون قبل خطوتين من سوينا Describe للجدول Departments نلاحظ آخر عمودين ال manager_id and Location_id ممكن يتقبلون قيمة Null, فإذا ردنا نضيف قيمة Null كيف رح تكون الطريقة؟

تتم أضافة قيم ال Null بطريقتين:
1- عدم كتابة الأعمدة columns الي نريد نجعل فيها قيمة Null في Insert Statement.( لاحظ الجزء A من الصورة أعلاه)
2- أن نكتب الأعمدة columns في Insert Statement و نكتب قيمتها ال Null داخل الجزء values. ( لاحظ الجزء B من الصورة أعلاه)

أذن أضافة قيم فارغة Null تكون مقبولة فقط للأعمدة بالجدول الي مامخلين عليها قيد ال Not Null او primary key.
Insert Special Values
-أضافة Special values

واحدة من ال special values هي ال date...
مثلا أريد أضيف موظف جديد في جدول ال employees, واحدة من القيم الي المفروض أضيفها هي تاريخ تعيين هذا الموظف..
فمثلا ممكن أستخدم ال SysDate و هي حتجيبلي التاريخ من الحاسوب مالتي... (لاحظ جزء A من الصورة أدناه).
أو ممكن أعطي تاريخ بصيغة معينة و أستخدم ال function الخاصة بال date... (لاحظ جزء B من الصورة أدناه).