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
Managing & Monitoring Memory
The Database Buffer Cache
ﻴﻘﻭﻡ ﺍلServer Processes ﺒﻌﻤل ﻨﺴﺦ ﻟلDatafile Block ﺇﻟﻲ Database Buffer Cache، ﻓﺈﺫﺍ ﺘﻡ ﺘﻌﺩﻴل ﺍلBlock ﻓﻲ ﺍلDatabase Buffer Cache ﻓﺴﻭﻑ
ﻴﻘﻭﻡ ﺍﻟﻤﻌﺎﻟﺞ DBWn ﺒﻜﺘﺎﺒﺔ ﺍلBlock ﻓﻲ ﺍلDatafiles.
ﺍﻟﺘﻬﻴﺌﺔ الإفتراضية ﻟلInstance ﺘﻘﻭﻡ ﻋﻠﻲ ﺘﻜﻭﻴﻥ ﺍلDatabase Buffer Cache ﻜﺠﺯﺀ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻻﺴﺘﻘﺒﺎل ﺍلBlocks ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻜﻥ ﻤﻥ ﺍﻟﻤﺤﺘﻤل ﺃﻥ ﻴﺘﻡ
ﺘﻘﺴﻴﻡ ﻫﺫﺍ ﺍﻟﺠﺯﺀ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻜﺄﺠﺯﺍﺀ ﺼﻐﻴﺭﺓ ﻟﺘﺤﺴﻴﻥ ﺍﺴﺘﻌﻤﺎل ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ.
ﺴﻨﺘﺤﺩﺙ ﺍﻵﻥ ﻋﻥ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻤﻬﺎ ﺍﻷﻭﺭﻜل ﻻﺨﺘﻴﺎﺭ ﺍلBuffers ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﻭﻀﻊ ﺍلBlocks ﻓﻴﻬﺎ، ﻭﺃﻴﻀﺎﹰ ﻟﺘﺤﺩﻴﺩ ﺍلBlocks ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﻜﺘﺎﺒﺘﻬﺎ ﻤﺭﻩ ﺃﺨﺭﻱ ﻓﻲ ﺍلDatafile.
:The LRU List and the Checkpoint Queue
ﺠﻤﻴﻊ ﺍلBuffers ﻓﻲ ﺍلDatabase Buffer Cache ﺴﺘﻜﻭﻥ ﻓﻲ ﺃﺤﺩ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺜﻼﺜﺔ ﺍﻟﺘﺎﻟﻴﺔ:
Pinned: ﻭﻫﻭ Buffer ﻴﺘﻡ ﺍﺴﺘﺨﺩﺍﻤﻪ ﺍﻵﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻤﺎ ﻟﻡ ﻴﺘﻡ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺍﻟﻌﻤل ﻓﻲ ﻫﺫﺍ ﺍلBuffer ﻓﻼ ﻨﺴﺘﻁﻴﻊ ﺍﺴﺘﻌﻤﺎل ﻫﺫﺍ ﺍلBuffer ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺃﺨﺭﻱ.
Dirty: ﻭﻫﻭ Buffer ﻴﺤﺘﻭﻱ ﻨﺴﺨﺔ Block ﻫﻲ ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﺘﺨﺘﻠﻑ ﻋﻥ ﺍﻟﻨﺴﺨﺔ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺩﻴﺴﻙ، ﻭﻫﻲ ﻋﺒﺎﺭﺓ Block ﺘﻡ ﻨﺴﺦ ﻟﻪ ﻓﻲ ﺍلCache ﻭﺘﻡ ﺘﻌﺩﻴﻠﻪ ﻭﻟﻜﻥ
ﻟﻡ ﻴﺘﻡ ﻜﺘﺎﺒﺘﻪ ﻓﻲ ﺍﻟﺩﻴﺴﻙ، ﻓﻤﻥ ﻏﻴﺭ ﺍﻟﻤﻤﻜﻥ ﺠﻠﺏ Block ﺁﺨﺭ ﻤﻥ ﺍلDatafile ﻭﻭﻀﻌﻪ ﻓﻲ ﻫﺫﺍ ﺍلBuffer ﻤﺎ ﻟﻡ ﻴﺘﻡ ﺘﻨﻅﻴﻔﻪ ﺃﻭﻻﹰ ﻋﻥ ﻁﺭﻴﻕ ﺍلDBWn ﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﻜﺘﺎﺒﺘﻪ ﺃﻭﻻﹰ ﻓﻲ ﺍلDatafile.
Free: ﻭﻫﻭ Buffer ﻟﻴﺱ Pinned ﻭﻻ Dirty ﻭﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﻫﺫﺍ ﺍلBuffer ﺇﻤﺎ ﻏﻴﺭ ﻤﺴﺘﻌﻤل ﺃﻭ ﺘﻡ ﺘﻨﻅﻴﻔﻪ.
ﻓﻠﺤﻅﺔ ﺘﺸﻐﻴل ﺍلInstance ﻓﺈﻥ ﺠﻤﻴﻊ ﺍلBuffers ﺘﻜﻭﻥ ﻏﻴﺭ ﻤﺴﺘﻌﻤﻠﻪ (Unused).
ﻓﻌﻨﺩﻤﺎ ﻴﺤﺘﺎﺝ ﺍلServer Process ﻟﻘﺭﺍﺀﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻴﺠﺏ ﻋﻠﻴﻪ ﺃﻭﻻﹰ ﺍﻟﺒﺤﺙ ﻋﻥ ﺍلBlock ﻓﻲ ﺍﻟﺩﻴﺴﻙ ﻭﺍﻟﺒﺤﺙ ﻋﻥ ﺍلFree Buffer ﻓﻲ ﺍلDatabase Buffer Cache
ﺍﻟﺫﻱ ﺴﻴﺴﺘﻘﺒل ﺍلBlock ﻤﻥ ﺍﻟﺩﻴﺴﻙ ﻤﻊ ﺍﻟﺘﺄﻜﻴﺩ ﻋﻠﻲ ﺃﻨﻪ ﻻ ﻴﻤﻜﻥ ﻨﺴﺦ Block ﻤﻥ ﺍﻟﺩﻴﺴﻙ لPinned Buffer ﻭﺫﻟﻙ ﻷﻨﻪ ﺴﻭﻑ ﻴﻜﻭﻥ ﻤﺤﻤﻲ ﻋﻥ ﻁﺭﻴﻕ (Locking Mechanism)،
ﻭﺃﻴﻀﺎﹰ ﻻ ﻴﻤﻜﻥ ﻨﺴﺦ Block ﻤﻥ ﺍﻟﺩﻴﺴﻙ لDirty Buffer ﻤﺎ ﻟﻡ ﻴﺘﻡ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﺩﻴﻼﺕ ﻓﻲ ﺍﻟﺩﻴﺴﻙ ﻋﻥ ﻁﺭﻴﻕ ﺍلDBWn، ﻭﻟﻜﻥ ﻴﻤﻜﻥ ﻨﺴﺦ ﺍلBlock ﻓﻲ ﺍلFree Buffer ﻭﺫﻟﻙ ﻷﻥ
ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺒﻪ ﻤﺘﺎﺤﺔ ﺃﻴﻀﺎﹰ ﻓﻲ ﺍﻟﺩﻴﺴﻙ. ﻫﻨﺎﻙ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍلFree Buffer ﻓﻲ ﺍلDatabase Buffer Cache ، ﻭﻟﻜﻥ ﺍﻟﺴﺅﺍل ﺍﻟﺫﻱ ﻴﻁﺭﺡ ﻨﻔﺴﻪ ﻤﺎ ﻫﻭ ﺍلFree Buffer
ﺍﻟﺫﻱ ﺴﻴﺨﺘﺎﺭﻩ ﺍلServer Process ﻟﺘﺨﺯﻴﻥ ﺍلBlock؟ ﻫﺫﺍ ﺍﻷﻤﺭ ﻤﻬﻡ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻸﺩﺍﺀ، ﺍﻻﺨﺘﻴﺎﺭ ﻴﺘﻡ ﺒﻨﺎﺀ ﻋﻠﻲ (LRU) Least Recently Used ﻓﺠﻤﻴﻊ ﺍلBuffers
ﻓﻲ ﺍلDatabase Buffer Cache ﻟﻬﺎ ﻋﻨﺎﻭﻴﻥ ﻭﻴﻭﺠﺩ ﻗﺎﺌﻤﺔ ﺘﻀﻡ ﺠﻤﻴﻊ ﺍلBuffers ﺘﺴﻤﻲ (LRU) ﻭﺘﺘﻡ ﺍﻹﻀﺎﻓﺔ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺒﻨﺎﺀً ﻋﻠﻲ ﺁﺨﺭ ﺍلBuffers ﻭﺼﻭﻻﹰ، ﻟﺫﻟﻙ ﻓﺈﻥ ﺍلBuffer
ﺍﻟﺫﻱ ﺘﻡ ﺍﻟﺤﺼﻭل ﻋﻠﻴﻪ ﻤﻨﺫ ﺒﺭﻫﺔ ﺴﺘﺘﻡ ﺇﻀﺎﻓﺘﻪ ﻓﻲ ﻨﻬﺎﻴﺔ ﺍﻟﻘﺎﺌﻤﺔ (LRU).
ﻋﻨﺩﻤﺎ ﻴﺘﻡ ﺍﻟﺒﺤﺙ ﻋﻥ ﻁﺭﻴﻕ ﺍلServer Process ﻴﺘﻡ ﺘﺭﺸﻴﺢ ﺍلBuffer ﺍﻷﻗل ﺍﺴﺘﺨﺩﺍﻡ ﻤﺅﺨﺭﺍﹰ (Least recently used end of the LRU list)، ﺒﻴﻨﻤﺎ ﻴﺘﻡ ﻭﻀﻊ ﺍلBuffer ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺒﻨﺎﺀً
ﻋﻠﻲ ﺍﻷﻜﺜﺭ ﺍﺴﺘﺨﺩﺍﻡ ﻤﺅﺨﺭﺍﹰ (Most recently used end of the LRU list) ﻟﺫﺍ ﻓﺈﻥ ﺍلVery Busy Buffer ﻻ ﺘﺘﻡ ﻜﺘﺎﺒﺔ ﻤﺤﺘﻭﻴﺎﺘﻪ ﻓﻲ ﺍﻟﺩﻴﺴﻙ ﻭﺫﻟﻙ ﻷﻥ ﺍلServer Process
ﻻ ﻴﺘﻡ ﺍﻟﻌﺜﻭﺭ ﻋﻠﻴﻪ ﻷﻨﻪ ﻴﻭﺠﺩ ﻓﻲ (Least recently used end of the LRU list).
ﻫﻨﺎﻙ ﻗﺎﺌﻤﺔ ﺃﺨﺭﻱ ﻟلBuffers ﺘﺴﻤﻲ Checkpoint Queue، ﻫﺫﻩ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺘﻭﻱ ﻋﻠﻲ ﺍلDirty Buffers ﻭﺍﻟﺘﻲ ﺘﻨﺘﻅﺭ ﻜﺘﺎﺒﺔ ﻤﺤﺘﻭﻴﺎﺘﻬﺎ ﻓﻲ ﺍﻟﺩﻴﺴﻙ ﻋﻥ ﻁﺭﻴﻕ ﺍلDBWn Process.
ﺍلServer Processes ﻴﻘﻭﻡ ﺒﻌﻤﻠﻴﺔ ﺍﻟﺒﺤﺙ ﻓﺈﺫﺍ ﻭﺠﺩ Free Buffer ﻗﺎﻡ ﺒﺈﻀﺎﻓﺘﻪ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ (LRU) ﻭﺇﺫﺍ ﺘﻡ ﺍﻟﻌﺜﻭﺭ ﻋﻠﻲ Dirty Buffer ﻴﻘﻭﻡ ﺒﺈﻀﺎﻓﺘﻪ ﻟﻠﻘﺎﺌﻤﺔ Checkpoint Queue.
ﺒﺎﻟﻁﺒﻊ ﻴﺘﻡ ﺇﻀﺎﻓﺔ ﺍﻟﻌﻨﺎﻭﻴﻥ ﻟﻠﻘﻭﺍﺌﻡ ﻭﻟﻴﺱ ﺍلBuffer.
ﺇﺫﺍﹰ ﺍلQueue Checkpoint ﺘﺤﺘﻭﻱ ﻋﻠﻲ ﺍلDirty Buffers ﻭﺒﻌﺩ ﻜل ﻓﺘﺭﺓ ﻴﺘﻡ ﻜﺘﺎﺒﺔ ﻤﺤﺘﻭﻴﺎﺕ ﻫﺫﻩ ﺍلBuffers ﻋﻥ ﻁﺭﻴﻕ ﺍلDBWn ﺇﻟﻲ ﺍﻟﺩﻴﺴﻙ ﻭﻤﻥ ﺜﻡ ﺘﺼﺒﺢ Clean or Free Buffer،
ﺤﺘﻰ ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻤﺭﻩ ﺃﺨﺭﻱ.
ﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﺍلServer Process ﻴﻨﺘﻅﺭﻩ ﻋﻤﻼﹰ ﻜﺜﻴﺭﺍ ﻓﻬﻭ ﻴﻘﻭﻡ ﺃﻭﻻﹰ ﺒﺎﻟﺒﺤﺙ ﻋﻥ ﺍلBlock ﻓﻲ ﺍﻟﺩﻴﺴﻙ ﻭﻴﻘﻭﻡ ﺒﺎﻟﺒﺤﺙ ﻋﻥ ﺍلFree Buffers ﻭﺃﻴﻀﺎﹰ ﻴﻘﻭﻡ
ﺒﺎﻟﺒﺤﺙ ﻋﻥ ﺍلDirty Buffer ﻭﻴﻘﻭﻡ ﺒﻭﻀﻌﻬﺎ ﻓﻲ ﺍلCheckpoint Queue ﻟﺘﺘﻡ ﻜﺘﺎﺒﺘﻪ ﻻﺤﻘﺎﹰ ﻓﻲ ﺍﻟﺩﻴﺴﻙ.
ﻫﺫﻩ ﺍﻵﻟﻴﺔ ﺍﻟﺒﺴﻴﻁﺔ ﺘﺴﻤﺢ ﻟﻸﻭﺭﻜل ﺒﺈﺒﻘﺎﺀ (Disk I/O) ﻓﻲ ﺍﻟﺤﺩ ﺍﻷﺩﻨﻰ.
ﻓﺎلDBWn ﻴﻘﻭﻡ ﺒﻜﺘﺎﺒﺔ ﻓﻘﻁ ﺍل Dirty and Static Buffer، ﺃﻤﺎ ﺍلBuffer ﺍﻟﺘﻲ ﻟﻡ ﻴﺘﻡ ﺘﻐﻴﻴﺭﻫﺎ ﻓﻠﻥ ﻴﺘﻡ ﻜﺘﺎﺒﺘﻬﺎ ﻓﻲ ﺍﻟﺩﻴﺴﻙ، ﻜﺫﻟﻙ ﺍلDirty Buffer ﺴﻭﻑ ﻴﺘﻡ ﻜﺘﺎﺒﺘﻬﺎ ﻓﻲ ﺍﻟﺩﻴﺴﻙ ﻓﻘﻁ
ﺇﺫﺍ ﻟﻡ ﻴﺘﻡ ﺍﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ﻟﺒﻌﺽ ﺍﻟﻭﻗﺕ. ﺍﻟﻠﺤﻅﺔ ﺍﻟﻭﺤﻴﺩﺓ ﺍﻟﺘﻲ ﺘﻜﺘﺏ ﺒﻬﺎ ﺠﻤﻴﻊ ﺍلDirty Buffer ﺇﻟﻲ ﺍﻟﺩﻴﺴﻙ ﻫﻲ ﻟﺤﻅﺔ ﺤﺩﻭﺙ ﺍل Database Checkpoint، ﻜﺫﻟﻙ ﻟﺤﻅﺔ ﺤﺩﻭﺙ
ﺍلTablespace Checkpoint ﻴﺘﻡ ﻨﻘل ﺠﻤﻴﻊ ﺍلDirty Buffer ﺍﻟﺨﺎﺼﺔ ﺒﻬﺫﺍ ﺍلTablespace ﺇﻟﻲ ﺍﻟﺩﻴﺴﻙ، ﻭﻴﺘﻡ ﺤﺩﻭﺙ ﺍلTablespace Checkpoint ﺒﺼﻭﺭﺓ ﺁﻟﻴﺔ ﻨﺘﻴﺠﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ:
Dropping the Tablespace
Making the Tablespace read-only
Putting the Tablespace into hot backup mode
Taking the Tablespace offline
--------------------------------------------------------------