Orcale Tutorial Content
Getting Started - البدء مع إدارة قواعد البيانات
Oracle Architectural Components - مكونات قاعدة البيانات أوركل
Installing Oracle Database - تثبيت الأوركل
Creating and Configuring Database - إنشاء قاعدة البيانات
Controlling The Database -التحكم في قاعدة البيانات
Administrating Users - إدارة المستخدمين
Database Security & Monitoring - تأمين ومراقبة قاعدة البيانات
Oracle Net Services & Database Link & Metrlized Viewِ
Undo Management & Flashback Technology
Managing Shared Servers
Using Globalization Support
Logical Backup & Recovery
Physical Backup & Recovery
Recovery Manager (RMAN)
Managing Resources
Automating Tasks with the Scheduler
Dealing with Locking
Diagnostic Sources
Dealing With Database Corruption
Managing & Monitoring Memory
Performance Tunning
Dealing with Locking
The Enqueue Mechanism
ﻟﻨﻔﺘﺭﺽ ﺃﻥ Session ﻁﻠﺒﺕ ﻋﻤل Lock ﻟﺠﺩﻭل ﺃﻭ ﺤﻘل ﻤﻌﻴﻥ ﻟﻜﻥ ﻭﺠﺩﺕ ﺫﻟﻙ ﺍﻟﺤﻘل ﺃﻭ ﺍﻟﺠﺩﻭل ﻤﻐﻠﻕ ﺒﻭﺍﺴﻁﺔ Session ﺃﺨﺭﻱ ﺴﺘﻅل ﻫﺫﻩ ﺍلSession ﻓﻲ ﺍﻹﻨﺘﻅﺎﺭ،
ﻟﻜﻥ ﻤﺎﺫﺍ ﻟﻭ ﻗﺎﻡ ﻋﺩﺩ ﻤﻥ ﺍلSessions ﺒﻨﻔﺱ ﺍﻟﻁﻠﺏ ﺴﻴﺘﻡ ﻭﻀﻊ ﻫﺫﻩ ﺍﻟﻁﻠﺒﺎﺕ ﻓﻲ ﺼﻑ ﺤﺘﻲ ﻴﺘﻡ ﺇﻨﻬﺎﺀ ﺍلLock ﻓﻴﺘﻡ ﺘﻤﻜﻴﻥ ﺍلSession ﺍﻟﺘﺎﻟﻴﺔ ﻤﻥ ﻋﻤل ﺍلLock ﻭﻫﻜﺫﺍ
ﺤﺘﻲ ﻨﻬﺎﻴﺔ ﺍﻟﺼﻑ ﻭﻫﺫﺍ ﻤﺎ ﻴﺴﻤﻲ ﺒﺎل(Enqueue).
ﻟﻜﻥ ﻜﻴﻑ ﻴﻤﻜﻥ ﺘﺠﺎﻭﺯ ﻋﻤﻠﻴﺔ ﺍﻹﻨﺘﻅﺎﺭ ﻓﻲ ﺍﻟﺼﻑ ﻓﻲ ﺤﺎل ﻭﺠﻭﺩ Lock ﻋﻠﻲ ﺍﻟﺠﺩﻭل ﺃﻭ ﺍﻟﺤﻘل؟
ﺍﻟﺤل ﻓﻲ ﻤﺜل ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺨﻴﺎﺭ NOWAIT، ﺒﺎﻟﻁﺒﻊ ﻋﻤﻠﻴﺔ ﺍﻹﺴﺘﻌﻼﻡ (SELECT) ﻻ ﺘﺤﺘﺎﺝ ﻟﻌﻤل Lock ﻭﻟﻜﻥ ﻋﻤﻠﻴﺎﺕ ﺍلDML ﺘﺤﺘﺎﺝ ﻟﻌﻤل Lock،
ﻓﻴﻤﻜﻥ ﺃﻥ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺨﻴﺎﺭ NOWAIT ﻟﺘﺠﺎﻭﺯ ﻋﻤﻠﻴﺔ ﺍﻟﻭﻗﻭﻑ ﻓﻲ ﺼﻑ ﺍﻹﻨﺘﻅﺎﺭ ﺃﺜﻨﺎﺀ ﻋﻤﻠﻴﺎﺕ ﺍلDML ﻓﻲ ﺤﺎل ﻭﺠﺩﻨﺎ ﺍﻟﺠﺩﻭل ﺃﻭ ﺍﻟﺼﻑ ﻤﻐﻠﻕ ﻋﻥ ﻁﺭﻴﻕ Session ﺃﺨﺭﻱ.
ﺫﻜﺭﻨﺎ ﺴﺎﺒﻘﺎﹰ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍلSELECT ﻻ ﺘﺤﺘﺎﺝ ﻹﻏﻼﻕ ﺍﻟﺤﻘﻭل ﺃﻭ ﺍﻟﺠﺩﻭل ﻭﻟﻜﻥ ﻋﺒﺎﺭ ﺍل SELECT UPDATE FOR ﺘﻘﻭﻡ ﺒﺈﻏﻼﻕ ﺍﻟﺤﻘﻭل ﺍﻟﻤﺴﺘﻬﺩﻓﺔ ﻓﺈﺫﺍ ﻭﺠﺩﺕ ﺃﻥ ﺘﻠﻙ ﺍﻟﺤﻘﻭل
ﻤﻐﻠﻘﺔ ﺒﻭﺍﺴﻁﺔ Session ﺃﺨﺭﻱ ﻓﻬﻨﺎﻙ ﺨﻴﺎﺭﺍﻥ ﺍﻷﻭل WAIT ﻭﻫﻭ ﻟﻺﻨﺘﻅﺎﺭ ﻭﻴﻤﻜﻥ ﺃﻥ ﻨﺤﺩﺩ ﻓﺘﺭﺓ ﺍﻹﻨﺘﻅﺎﺭ ﺒﺎﻟﺜﻭﺍﻨﻲ.
ﻭﺍﻟﺨﻴﺎﺭ ﺍﻻﺨﺭ ﻫﻭ NOWAIT ﻭﻫﻭ ﻹﻨﻬﺎﺀ ﺍﻟﻌﻤﻠﻴﺔ ﻓﻲ ﺤﺎﻟﺔ ﻭﺠﻭﺩ ﺍﻟﺤﻘﻭل ﻤﺸﻐﻭﻟﺔ ﺏSession ﺃﺨﺭﻱ.
SELECT * FROM TEST FOR UPDATE NOWAIT; |
---------------------------------------------------------------