Arabic Oracle

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 169

1

‫ﺑﺴﻢ ﺍﷲ ﺍﻟﺮﺣﻤﻦ ﺍﻟﺮﺣﻴﻢ‬


‫ﺍﻟﺴﻼﻡ ﻋﻠﻜﻴﻡ ﻭﺭﺤﻤﺔ ﺍﷲ ﻭﺒﺭﻜﺎﺘﻪ‪:‬‬

‫ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻟﻠﺭﺍﻏﺒﻴﻥ ﻓﻲ ﺍﻟﻘﻴﺎﻡ ﺒﺈﻤﺘﺤﺎﻨﺎﺕ ﺍﻷﻭﺭﺍﻜل ‪ 9‬ﻭﺒﺎﻟﺘﺤﺩﻴﺩ ﻟﻺﻤﺘﺤﺎﻥ ﺍﻟﺜﺎﻨﻲ‬


‫ﺭﻗﻡ ‪ 1z0-031‬ﺍﻟﻤﺴﻤﻰ ﺒﺈﺴﻡ‪:‬‬

‫‪Oracle 9i DBA Fundamentals I‬‬

‫ﻋﺴﻰ أن ﯾﻨﻔﻌﻜﻢ وﺑﺎﻟﺘﻮﻓﯿﻖ إن ﺷﺎء اﷲ ﺗﻌﺎﻟﻰ‪.‬‬

‫ﺃﺨﻭﻜﻡ ﻤﺤﻤﺩ‪.‬‬

‫ھﺬا اﻟﻜﺘﺎب ﻣﺠﺎﻧﻲ وﻏﯿﺮ ﻣﺨﺼﺺ ﻟﻠﺒﯿﻊ‬

‫ﻧﺴﺨﺔ ﻣﺠﺎﻧﯿﺔ ﻓﻲ ﻣﻮﻗﻊ‬

‫‪http://www.cb4a.com/‬‬

‫‪2‬‬
‫اﻟﻤﻜﻮﻧﺎت‪:‬‬

‫اﻟﻔﺼﻞ اﻷول‪ :‬ﻣﻜﻮﻧﺎت اﻷوراﻛﻞ‪(4) .‬‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ‪ :‬ﺗﻨﺼﯿﺐ و إدارة اﻷوراﻛﻞ‪(26) .‬‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ‪ :‬ﺗﻜﻮﻳﻦ اﻟﺪاﺗﺎ ﺑﯿﺲ واﺳﺘﺨﺪام اﻟﺪاﺗﺎ دﻳﻜﺸﯿﻨﻮري‪(51) .‬‬

‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ‪ :‬ﻣﻠﻔﺎت اﻟﻜﻨﺘﺮول و اﻟﺮﻳﺪو ﻟﻮج‪(63) .‬‬

‫اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ‪ :‬ﻣﻠﻔﺎت اﻟﺪاﺗﺎ واﻟﺘﯿﺒﻞ ﺳﺒﯿﺲ‪(76) .‬‬

‫اﻟﻔﺼﻞ اﻟﺴﺎدس‪ :‬اﻟﺴﯿﺠﻤﻨﺖ و ﺧﺼﺎﺋﺺ اﻟﺘﺨﺰﻳﻦ‪(95) .‬‬

‫اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ‪ :‬إدارة اﻟﺘﺎﺑﻞ و اﻹﻧﺪﻛﺲ واﻟﻜﻮﻧﯿﺴﺘﺮاﻧﯿﺖ‪(106).‬‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻣﻦ ‪ :‬إدارة اﻟﯿﻮزرز و ﺑﺎﺳﻮرد ﺳﯿﻜﯿﻮرﺗﻲ و اﻟﺮﻳﺴﻮرﺳﯿﺲ‪(133).‬‬

‫اﻟﻔﺼﻞ اﻟﺘﺎﺳﻊ ‪ :‬إدارة اﻟﺒﺮﻳﻔﻠﯿﺞ و أودﻳﻮﺗﯿﻦ و اﻟﺮوﻟﺰ‪(146) .‬‬

‫اﻟﻔﺼﻞ اﻟﻌﺎﺷﺮ‪ :‬اﻟﺪﻋﻢ اﻟﻌﺎﻟﻤﻲ‪(164).‬‬

‫‪3‬‬




ORACLE ARCHITECTURE

4
‫‪ORACLE SERVER‬‬

‫ھﻮ ﻧﻈﺎم ﻻدارة ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت و ﯾﺘﻜﻮن ﻣﻦ ﻣﻜﻮﻧﯿﯿﻦ اﺳﺎﺳﯿﯿﻦ ھﻤﺎ ‪:‬‬

‫‪ORACLE INSTANCE, ORACLE DATABASE‬‬

‫‪: ORACLE INSTANCE‬‬

‫ﻣﻦ أھﻢ ﻣﻜﻮﻧﺎت اﻷوراﻛﻞ ﯾﺤﺘﻮي ﻋﻠﻰ ‪ Memory Structure‬و ‪ .Process structure‬ﻟﺘﺘﻤﻜﻦ ﻣﻦ‬
‫اﻟﻮﺻﻮل اﻟﻰ اﻟﺒﯿﺎﻧﺎت "‪ "Data‬ﯾﺠﺐ أن ﯾﻜﻮن ال ‪ Instance‬ﻓﻲ وﺿﻌﯿﺔ اﻟﻌﻤﻞ‪ ،‬أي اﻧﮫ ﯾﺘﻢ ﻣﻦ ﺧﻼﻟﮫ‬
‫اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ‪ ،‬وﻻ ﯾﺴﺘﻄﯿﻊ ال ‪ Instance‬ﻓﺘﺢ و ﺗﺸﻐﯿﻞ أﻛﺜﺮ ﻣﻦ ‪ Database‬واﺣﺪ ﻓﻘﻂ‬
‫ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ ،‬وﻟﻜﻦ ﻣﻦ اﻟﻤﻤﻜﻦ ﻷﻛﺜﺮ ﻣﻦ ‪ Instance‬اﻟﻌﻤﻞ ﻋﻠﻰ ذات ال ‪.Database‬‬

‫رﺳﻢ ‪1.1‬‬

‫‪: ORACLE DATABASE‬‬

‫ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻠﻔﺎت ﻟﺤﻔﻆ اﻟﺒﯿﺎﻧﺎت واﺳﺘﻌﺎدﺗﮭﺎ ﻋﻨﺪ اﻟﻄﻠﺐ وﯾﻨﻘﺴﻢ اﻟﻰ ﻗﺴﻤﯿﻦ ھﻤﺎ ‪Logical‬‬
‫‪ structure‬و ‪. Physical structure‬‬

‫اﻣﺎ ال ‪ Logical‬ﯾﺘﻜﻮن ﻣﻦ أﻗﺴﺎم ﻟﺘﺨﺰﯾﻦ وادارة ال ‪. Database‬‬


‫اﻣﺎ ال ‪ Physical‬ﯾﺘﻜﻮن ﻣﻦ اﻟﻤﻠﻔﺎت اﻟﺤﻘﯿﻘﯿﺔ اﻟﻤﻮﺟﻮدة ﻋﻠﻰ اﻟﻜﻤﺒﯿﻮﺗﺮ أو اﻟﺴﺮﯾﻔﺮ ‪.‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻋﻨﺪﻣﺎ ﺗﺸﺎھﺪ ﺻﻮرة ﻋﻠﻰ ﻣﻮﻗﻊ اﻧﺘﺮﻧﺖ ﻓﺈﻧﻚ ﺗﺸﺎھﺪ اﻟﺠﺰء ال ‪ Logical‬أﻣﺎ اﻟﻤﻠﻒ اﻟﺤﻘﯿﻘﻲ ﻟﻠﺼﻮرة واﻟﺬي‬
‫ﻣﺨﺰن ﻓﻲ اﻟﺴﯿﺮﻓﺮ ﯾﻜﻮن اﻟﺠﺰء ال ‪ .Physical‬ﯾﻜﻮن ھﻨﺎﻟﻚ ارﺗﺒﺎط ﺑﯿﻦ اﻟﺠﺰﺋﯿﻦ ﺑﺤﯿﺚ اذا ﺣﺬف أﺣﺪھﻤﺎ ﯾﺠﺐ‬
‫ﺣﺬف اﻟﺠﺰء اﻷﺧﺮ‪ ،‬اذ ﻻ ﻓﺎﺋﺪة ﻣﻦ إﺑﻘﺎء ﻣﻠﻒ اﻟﺼﻮرة ال ‪ Physical‬ﻓﻲ اﻟﺴﯿﺮﻓﺮ اذا ﻛﻨﺖ ﻻ ﺗﺮﯾﺪ ﻋﺮض‬
‫اﻟﺼﻮرة ﻋﻠﻰ اﻷﻧﺘﺮﻧﺖ‪.‬‬

‫‪5‬‬
‫وﯾﺘﻜﻮن ‪ Database physical structure‬ﻣﻦ ﺛﻼث ﻣﻠﻔﺎت ھﻲ ‪:‬‬

‫‪---------------------------------------------------------------------------------------------------‬‬
‫‪ :Control files‬ﻣﻠﻔﺎت اﻟﺘﺤﻜﻢ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻼزﻣﺔ ﻟﻠﻤﺤﺎﻓﻈﺔ ﻋﻠﻰ ال ‪ Database‬وﯾﺠﺐ ان‬
‫ﯾﺘﻮﻓﺮ ﻋﻠﻰ اﻷﻗﻞ ﻣﻠﻒ واﺣﺪ ﻟﯿﻌﻤﻞ ‪.Oracle Database‬‬

‫‪ :Data Files‬اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﻤﻌﻠﻮﻣﺎت واﻟﺒﯿﺎﻧﺎت داﺧﻠﮭﺎ‪.‬‬

‫‪ :Redo Log Files‬ﺗﻘﻮم ﺑﺘﺴﺠﯿﻞ ﺟﻤﯿﻊ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﻃﺮأت ﻋﻠﻰ ال ‪ Database‬ﻣﺜﻞ أﺿﺎﻓﺔ أو ﺣﺬف‬
‫ﺑﻌﺾ اﻟﺒﯿﺎﻧﺎت "‪ "Data‬ﻟﻨﺘﻤﻜﻦ ﻣﻦ اﺳﺘﻌﺎدة اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺣﺪوث ﺿﯿﺎع ﺑﯿﺎﻧﺎت ﺑﺸﻜﻞ ﻣﻔﺎﺟﺊ )ﻣﺜﻼً‪ :‬اﻧﻘﻄﺎع‬
‫اﻟﺘﯿﺎر اﻟﻜﮭﺮﺑﺎﺋﻲ ﻗﺒﻞ ﺣﻔﻆ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة(‪.‬‬

‫‪-------------------------------------------------------------------------------------------------------‬‬

‫وﯾﻮﺟﺪ ﻣﻠﻔﺎت أﺧﺮى ﻓﻲ ال ‪ physical‬وﻟﻜﻨﮭﺎ ﻟﯿﺴﺖ ﺿﻤﻦ ال ‪ Database‬اﻧﻤﺎ ﺿﻤﻦ ال ‪.Oracle Server‬‬
‫وﯾﺠﺐ أن ﺗﺘﻮاﺟﺪ ﻟﺘﺸﻐﯿﻞ واﺳﺘﺨﺪام واﻏﻼق ال ‪ Database‬ﻣﺜﻞ‪:‬‬

‫‪ :Password File‬اﻟﺬي ﯾﺤﺘﻮى ﻋﻠﻰ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻼزﻣﺔ ﻟﻠﺪﺧﻮل اﻟﻰ ال ‪ Instance‬ﻣﺜﻞ ‪.Privileges‬‬

‫‪ :Archived Redo Log files‬ﻋﺒﺎرة ﻋﻦ ﻧﺴﺦ ل ‪ Redo Log Files‬ﻟﻠﻤﺰﯾﺪ ﻣﻦ اﻷﻣﺎن ﻓﻲ ﺣﺎﻟﺔ ﺣﺪوث‬
‫أي ﺿﯿﺎع ﻟﻠﺒﯿﺎﻧﺎت‪.‬‬

‫‪ :Parameter File‬ﺗﺨﺰن اﻟﻤﻮاﺻﻔﺎت اﻟﺨﺎﺻﺔ ﻟﻞ ‪ Instance‬ﻣﺜﻼً ﺣﺠﻢ اﻟﺬاﻛﺮة اﻟﻤﻤﻨﻮﺣﺔ ﻟﻞ ‪Memory‬‬


‫‪ Structure‬وﻣﻮاﺻﻔﺎت أﺧﺮى ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬

‫رﺳﻢ ‪1.2‬‬

‫‪6‬‬
‫أﻣﺎ ال ‪ Logical Structure‬ﯾﺘﻜﻮن ﻣﻦ‪:‬‬

‫‪ :Tablespaces‬ﺗﻨﻘﺴﻢ ال ‪ Database‬اﻟﻰ وﺣﺪات أﺻﻐﺮ ﺗﺴﻤﻰ ال ‪ . Tablespaces‬ﻛﻞ ‪ Database‬ﯾﺠﺐ‬


‫ان ﯾﺘﻜﻮن ﻣﻦ واﺣﺪ أو أﻛﺜﺮ ‪ .Tablespace‬ﯾﻮﻓﺮ اﻷوراﻛﻞ ‪ System Tablespace‬ﻓﻲ ﺑﺪاﯾﺔ ﺗﻜﻮﯾﻦ ال‬
‫‪ Database‬ﻛﺤﺪ أدﻧﻲ ﺿﺮوري ﻟﻌﻤﻞ ال ‪.Database‬‬

‫‪ :Segments‬ﯾﻨﻘﺴﻢ ال ‪ Tablespace‬اﻟﻰ وﺣﺪات أﺻﻐﺮ ﺗﺴﻤﻰ ال ‪.Segments‬‬

‫‪ :Extent‬ﯾﻨﻘﺴﻢ ال ‪ Segments‬اﻟﻰ وﺣﺪات أﺻﻐﺮ ﺗﺴﻤﻰ ال ‪.Extents‬‬

‫‪ :Blocks‬ﺗﻨﻘﺴﻢ ال ‪ Extent‬اﻟﻰ وﺣﺪات أﺻﻐﺮ ﺗﺴﻤﻰ ال ‪ Blocks‬وھﻲ أﺻﻐﺮ وﺣﺪات ﺗﺨﺰﯾﻦ و ﻗﺮاءة‬
‫اﻟﺒﯿﺎﻧﺎت‪.‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ﺑﺎﻟﺘﻔﺎﺻﯿﻞ ﻓﻲ اﻟﻜﺘﺎب ﻟﻤﻜﻮﻧﺎت ال ‪.Logical Structure‬‬

‫رﺳﻢ ‪1.3‬‬

‫‪7‬‬
‫‪ORACLE MEMORY STRUCTURE‬‬
‫ﯾﺘﻜﻮن ﻣﻦ ﻣﻨﻄﻘﺘﯿﻦ ﺗﻌﺮﻓﺎن ﺑﺎﺳﻢ ‪:‬‬

‫)‪ :System Global Area (SGA‬وھﻲ ال ‪ Memory structure‬اﻟﺨﺎص ﺑﺎل ‪ Instance‬اﻟﺬي ﺗﻢ‬
‫اﻟﺘﺤﺪث ﻋﻨﮫ ﻣﺴﺒﻘﺎً )راﺟﻊ اﻟﺮﺳﻢ ‪ (1.1‬واﻟﺘﻲ ھﻲ أﺣﺪ أھﻢ ﻣﻜﻮﻧﺎت ال ‪ Instance‬وﺗﺤﺠﺰ اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﺻﺔ ﻟﮭﺎ‬
‫ﻣﻦ اﻟﺬاﻛﺮة )أو ﺗﺒﺪأ ﺑﺎﻟﻌﻤﻞ( ﻋﻨﺪ ﺗﺸﻐﯿﻞ ال ‪ .Instance‬وھﻲ ذاﻛﺮة ﻣﺸﺘﺮﻛﺔ ﺑﯿﻦ اﻷواﻣﺮ "‪ "Processes‬اﻟﺘﻲ‬
‫ﺗﺄﺗﻲ ﻟﻞ ‪ Instance‬ﻣﺜﻞ ‪ SQL Query Process‬واﯾﻀﺎً ﻣﺸﺘﺮﻛﺔ ﺑﯿﻦ ﻣﺴﺘﺨﺪﻣﻲ ال ‪Database‬‬
‫اﻟﻤﺨﺘﻠﻔﯿﻦ‪ ،‬وﺗﻌﺮف اﯾﻀﺎً ﺑﺎﺳﻢ ‪.Shared Global Area :‬‬

‫)‪ :Program Global Area (PGA‬وھﻲ اﻟﻤﺴﺎﺣﺔ اﻟﻤﺨﺼﺼﺔ ﻣﻦ اﻟﺬاﻛﺮة ل ‪ User Process‬وﺗﺤﺘﻮي‬
‫ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ .Server Process‬وھﻲ ذاﻛﺮة ﺧﺎﺻﺔ ﻷﻣﺮ "‪ "Process‬واﺣﺪ ﻓﻘﻂ‪.‬‬
‫وﺗﻌﺮف اﯾﻀﺎً ﺑﺎﺳﻢ ‪ Private Global Area :‬أو ‪.Process Global Area‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ل ‪ User Process‬و ‪.Server Process‬‬

‫رﺳﻢ ‪1.4‬‬

‫‪8‬‬
‫)‪SYSTEM GLOBAL AREA (SGA‬‬

‫ﺟﻤﯿﻊ ﻣﺴﺘﺨﺪﻣﻲ ال ‪ Database‬ﯾﺘﺸﺎرﻛﻮن اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ ھﺬه اﻟﻤﻨﻄﻘﺔ ﺣﯿﺚ ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﺸﺘﺮﻛﺔ ﻣﻦ ﻣﺨﺘﻠﻒ اﻷواﻣﺮ "‪ "Database Processes‬ﻟﻜﻲ ﺗﺴﮭﻞ ﻋﻤﻠﯿﺔ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ‪ .‬ﯾﻘﻮم ال‬
‫‪ Oracle‬ﺑﺤﺠﺰ اﻟﻤﺴﺎﺣﺔ اﻟﻤﺨﺼﺼﺔ ﻟﮫ ﻣﻦ اﻟﺬاﻛﺮة ﻋﻨﺪ ﺑﺪاﯾﺔ ﺗﺸﻐﯿﻞ ال ‪ Instance‬وﯾﻘﻮم ﺑﺘﺤﺮﯾﺮ اﻟﻤﺴﺎﺣﺔ‬
‫ﻋﻨﺪ اﻧﮭﺎء ﻋﻤﻞ ال ‪ ،Instance‬وﺗﻘﺴﻢ اﻟﻰ ﻋﺪة أﻗﺴﺎم ﻣﻨﮭﺎ أﻗﺴﺎم اﺳﺎﺳﯿﺔ ﺿﺮورﯾﺔ وﻣﻨﮭﺎ أﻗﺴﺎم اﺧﺘﯿﺎرﯾﺔ‪.‬‬

‫اﻟﺮﺳﻢ رﻗﻢ ‪ 1.5‬ﯾﻮﺿﺢ اﻷﻗﺴﺎم اﻻﺳﺎﺳﯿﺔ واﻷﻗﺴﺎم اﻻﺧﺘﯿﺎرﯾﺔ )اﻷﻗﺴﺎم اﻻﺧﺘﯿﺎرﯾﺔ ﺑﺎﻟﻠﻮن اﻻﺣﻤﺮ(‪ ،‬وﺳﻮف ﯾﺘﻢ‬
‫اﻟﺘﻄﺮق اﻟﻰ ﻛﻞ ﻗﺴﻢ ﻋﻠﻰ ﺣﺪه‪.‬‬

‫رﺳﻢ ‪1.5‬‬

‫ﺗﻌﺘﺒﺮ ال ‪ SGA‬ذاﻛﺮة ﻣﺮﻧﺔ داﯾﻨﺎﻣﯿﻜﯿﺔ أي ان ﺑﺎﺳﺘﻄﺎﻋﺔ أﻗﺴﺎﻣﮭﺎ ان ﺗﻜﺒﺮ أو ﺗﺼﻐﺮ ﻓﻲ اﻟﺤﺠﻢ دون أﻏﻼق ال‬
‫‪ Instance‬ﻷﺳﺒﺎب ﻣﺨﺘﻠﻔﺔ ﻣﺜﻞ ﻛﺜﺮة اﻟﻌﻤﻞ ) ﻛﺜﺮة اﻷواﻣﺮ( ﻋﻠﻰ أﺣﺪ أﻗﺴﺎﻣﮭﺎ اذ أن زﯾﺎدة اﻟﻌﻤﻞ ﻋﻠﻰ اﺣﺪ‬
‫اﻷﻗﺴﺎم ﯾﺘﺘﻄﻠﺐ ذاﻛﺮة اﺿﺎﻓﯿﺔ وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ ﻟﻠﺬاﻛﺮة اﻟﻌﺎﻣﺔ ﻟﻞ ‪ SGA‬ان ﺗﺘﺨﻄﻰ اﻟﺤﺪ اﻷﻋﻠﻰ اﻟﻤﺤﺪد ﺑﺎﻟﻌﺎﻣﻞ‬
‫"‪.SGA_MAX_SIZE "Parameter‬‬

‫ﻣﻼﺣﻈﺔ‪ SGA_MAX_SIZE:‬ھﻲ اﺣﺪ ﻣﻜﻮﻧﺎت ال ‪ Initialization Parameter File‬اﻟﺘﻲ ﺳﻮف ﯾﺘﻢ‬


‫اﻟﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬ال ‪ Parameter File‬اﻟﺘﻲ ﺟﺎء ذﻛﺮھﺎ ﻗﺒﻞ ﻗﻠﯿﻞ‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:1.1‬‬

‫ﻟﻤﻌﺮﻓﺔ ﺣﺠﻢ ال ‪ SGA‬اﻟﺤﺎﻟﻲ اﻛﺘﺐ اﻟﺘﺎﻟﻲ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪:SQLPLUS‬‬

‫;‪SHOW SGA‬‬

‫ال ‪ Total System Global Area‬ﺗﻤﺜﻞ ﺣﺠﻢ ال ‪ SGA‬اﻟﺤﺎﻟﻲ‪.‬‬

‫‪9‬‬
‫ﻣﺜﺎل‪:‬‬

‫اذا ﻛﺎﻧﺖ اﻟﺬاﻛﺮة اﻟﻤﺨﺼﺼﺔ ﻟﻞ ‪ SGA‬ﺣﻮاﻟﻲ ‪ 100‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ واﻟﺘﻲ ﺗﻌﺘﺒﺮ "‪ "SGA_MAX_SIZE‬وﻛﺎن‬
‫اﻟﺘﻮزﯾﻊ اﻟﻤﺒﺪﺋﻲ ﻟﻠﺬاﻛﺮة ﻋﻠﻰ اﻷﻗﺴﺎم اﻟﻤﺨﺘﻠﻔﺔ ﻋﻠﻰ اﻟﻨﺤﻮ اﻟﺘﺎﻟﻲ‪:‬‬
‫‪ 50 =Shared Pool Area‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‬
‫‪ 25 =Database Buffer Cache‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‬
‫‪ 10 =Redo Log Buffer‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ )ﻣﻨﻄﻘﺔ ﺛﺎﺑﺘﺔ ﻏﯿﺮ ﻣﺘﻐﯿﺮة(‬
‫ﺑﺎﻗﻲ اﻷﻗﺴﺎم = ‪ 15‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‪) .‬اﻷﻗﺴﺎم اﻟﻤﺘﻐﯿﺮة(‬
‫اﻟﺬاﻛﺮة اﻟﻜﺎﻣﻠﺔ = ‪ 100‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‬

‫وزاد ﺿﻐﻂ اﻟﻌﻤﻞ ﻋﻠﻰ ‪ Shared Pool Area‬ﺑﺤﯿﺚ أن ‪ 50‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ ﻟﻢ ﺗﻌﺪ ﺗﻜﻔﻲ‪ ،‬ﻓﺒﻤﻘﺪور ‪Shared‬‬
‫‪ Pool Area‬ﺑﺎن ﺗﺄﺧﺬ ذاﻛﺮة اﺿﺎﻓﯿﺔ ﻣﻦ ﺑﺎﻗﻲ اﻷﻗﺴﺎم وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ ﻟﻠﺬاﻛﺮة اﻟﻜﺎﻣﻠﺔ ﺑﺄن ﺗﺰﯾﺪ ﻋﻦ ‪ 100‬ﻣﯿﻐﺎ‬
‫ﺑﺎﯾﺖ‪.‬‬

‫‪ 60 =Shared Pool Area‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‬


‫‪ 20 =Database Buffer Cache‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‬
‫‪ 10=Redo Log Buffer‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ )ﻣﻨﻄﻘﺔ ﺛﺎﺑﺘﺔ ﻏﯿﺮ ﻣﺘﻐﯿﺮة(‬
‫ﺑﺎﻗﻲ اﻷﻗﺴﺎم = ‪ 10‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ )اﻷﻗﺴﺎم اﻟﻤﺘﻐﯿﺮة(‬
‫اﻟﺬاﻛﺮة اﻟﻜﺎﻣﻠﺔ = ‪ 100‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‬

‫اﻟﺬاﻛﺮة ﻓﻲ ال ‪ SGA‬ﻋﺒﺎرة ﻋﻦ وﺣﺪات ﻣﺘﻮاﺻﻠﺔ ﺗﺴﻤﻰ ‪ Granules‬وﺣﺠﻢ ال ‪ Granule‬ﯾﻌﺘﻤﺪ ﻋﻠﻰ‬


‫‪.SGA_MAX_SIZE‬‬

‫‪ SGA_MAX_SIZE‬أﺻﻐﺮ ﻣﻦ ‪ 128‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‪ ,‬اذاً ﺣﺠﻢ ﻛﻞ ‪ Granule‬ﯾﺴﺎوي ‪ 4‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ أﻣﺎ اذا ﻛﺎن‬
‫ﺣﺠﻢ ال ‪ SGA_MAX_SIZE‬اﻛﺒﺮ ﻣﻦ ‪ 128‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ اذاً ﺣﺠﻢ ﻛﻞ ‪ Granule‬ﯾﺴﺎوي ‪ 16‬ﻣﯿﻐﺎ ﺑﺎﯾﺖ‪.‬‬

‫اﻟﺤﺪ اﻷدﻧﻲ ﻣﻦ ﻋﺪد ال ‪ Granules‬ﻟﻞ ‪ SGA‬ھﻮ ﺛﻼث‪.‬‬

‫واﺣﺪ ‪ Granule‬ﻟﻠﻤﻨﻄﻘﺔ اﻟﺜﺎﺑﺘﺔ ﻓﻲ ‪ SGA‬ﻣﺜﻞ ‪Redo Log Buffer‬‬


‫واﺣﺪ ‪ Granule‬ل ‪Shared Pool Area‬‬
‫واﺣﺪ ‪ Granule‬ل ‪Database Buffer Cache‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻦ ﺑﯿﺎﻧﺎت ﻋﻦ ال ‪ Granules‬ﻣﻦ‪.V$BUFFER_POOL‬‬

‫‪10‬‬
‫‪:SHARED POOL AREA‬‬

‫ﺗﺴﺘﺨﺪم ﻟﺤﻔﻆ أﺧﺮ أو أﺣﺪث أواﻣﺮ ال ‪ SQL‬و ‪ PL/SQL‬وأﺧﺮ اﻟﺒﯿﺎﻧﺎت)اﻟﻤﻌﻠﻮﻣﺎت( اﻟﻤﺴﺘﺨﺮﺟﺔ ﻣﻦ ال‬
‫‪ .Data Dictionary‬ﺗﺘﻜﻮن ﻣﻦ ﻗﺴﻤﯿﻦ ھﻤﺎ ‪ Library Cache :‬و ‪.Data Dictionary Cache‬‬

‫رﺳﻢ ‪1.6‬‬

‫ﺑﺎﻋﺘﺒﺎرھﺎ ﻣﻨﻄﻘﺔ ﻣﮭﻤﮫ ﺟﺪاً ﻓﻤﻦ اﻟﻤﻤﻜﻦ ﺗﻐﯿﺮ ﺣﺠﻤﮭﺎ داﯾﻨﺎﻣﯿﻜﯿﺎً )ﺑﺪون اﻏﻼق ال ‪ (Instance‬ﺑﺤﯿﺚ ﻻ‬
‫ﯾﺘﺠﺎوزاﻟﺰﯾﺎدة ﻓﻲ اﻟﻤﺴﺎﺣﺔ ﻣﺴﺎﺣﺔ ال ‪ SGA‬اﻟﻤﺤﺪده ﺑﺎﻟﻌﺎﻣﻞ "‪.SGA_MAX_SIZE "Parameter‬‬
‫ﯾﻌﺘﺒﺮ ﺣﺠﻢ ال ‪ SHARED POOL AREA‬ﻣﺤﺪدة ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ "‪"Parameter‬‬
‫‪SHARED_POOL_SIZE‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‪:1.2‬‬

‫ﻟﻤﻌﺮﻓﺔ اﻟﺤﺠﻢ اﻟﺤﺎﻟﻲ ل ‪ Shared Pool Area‬اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪SHOW PARAMETER SHARED_POOL_SIZE‬‬

‫ﻓﻲ اﻟﻜﻤﺒﯿﻮﺗﺮ اﻟﺨﺎص ﺑﻲ اﻟﺤﺠﻢ ھﻮ ‪ MB 46 :‬و ﯾﻈﮭﺮ ﻛﺎﻟﺘﺎﻟﻲ = ‪46137344‬‬

‫ﻟﺘﻐﯿﯿﺮ ﻣﺴﺎﺣﺔ ال ‪ Shared Pool Area‬داﯾﻨﺎﻣﯿﻜﯿﺎً اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER SYSTEM SET SHARED_POOL_SIZE= 64M‬‬

‫ﻓﻲ ﺣﺎﻟﺔ ﻧﺠﺎح اﻷﻣﺮ ﯾﻈﮭﺮ اﻟﺠﻮاب اﻟﺘﺎﻟﻲ ﻣﻦ ‪.System altered : SQL PLUS‬‬

‫أﻣﺎ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم وﺟﻮد ذاﻛﺮة أﺿﺎﻓﯿﺔ ﻻن ﺗﻀﺎف ل ‪ Shared Pool Area‬ﯾﻈﮭﺮ اﻟﺠﻮاب‬
‫اﻟﺘﺎﻟﻲ‪.Insufficient memory to grow:‬‬

‫‪11‬‬
‫‪:Library Cache‬‬

‫ﺗﺤﺘﻮي ﻋﻠﻰ ‪:‬‬

‫‪ -‬اﻟﻤﻨﻄﻘﺔ رﻗﻢ ‪SQL Shared Statements :1‬‬


‫‪ -‬اﻟﻤﻨﻄﻘﺔ رﻗﻢ ‪PL/SQL Procedures or Packages: 2‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻋﻨﺪﻣﺎ ﯾﻘﻮم ﻣﺴﺘﺨﺪم ﻟﻞ ‪ Database‬ﺑﻄﻠﺐ ﺟﻤﻠﺔ ال ‪ SQL‬ﻓﺈن اﻟﺠﻤﻠﺔ وﻃﺮﯾﻘﺔ اﻧﺠﺎز ﻣﮭﺎﻣﮭﺎ ﺗﺨﺰن ﻓﻲ‬
‫اﻟﻤﻨ ﻄﻘﺔ رﻗﻢ ‪ 1‬وﺑﺬﻟﻚ ﯾﺴﮭﻞ ﻋﻤﻠﯿﺔ ﺗﻜﺮار اﻧﺠﺎز "‪ "Execute‬ال ‪ SQL‬ﻣﻦ اﻟﺬاﻛﺮة ﺑﺴﺮﻋﺔ أﻛﺒﺮ ﻓﻲ ﺣﺎل ﺗﻢ‬
‫ﻃﻠﺐ ﻧﻔﺲ اﻟﺠﻤﻠﺔ ﻣﻦ ﻣﺴﺘﺨﺪم أﺧﺮ وﺑﺬﻟﻚ ﺗﻜﻮن اﻟﻌﻤﻠﯿﺔ أﺳﺮع وﺗﺨﻔﻒ اﻟﻌﺒﺊ ﻋﻠﻰ ﻣﺎ ﯾﻌﺮف ﺑﺎﺳﻢ‬
‫‪ ،Compilations‬وﻛﺬﻟﻚ ﯾﻨﻄﺒﻖ اﻟﺤﺎل ﻋﻠﻰ ‪.PL/SQL‬‬

‫ﺧﻄﻮات ﻋﻤﻠﯿﺔ‪:‬‬

‫اﻟﺨﻄﻮة ‪ :1‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻷول ﺑﻄﻠﺐ ﺟﻤﻠﺔ ال ‪ SQL‬اﻟﺘﺎﻟﯿﺔ ‪select * from employees; :‬‬
‫اﻟﺨﻄﻮة ‪ : 2‬ﯾﻘﻮم ال ‪ Server Process‬ﺑﺪراﺳﺔ اﻟﺠﻤﻠﺔ وﻣﻌﺮﻓﺔ اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﺳﻮف ﯾﺘﻢ ﺑﻌﺪھﺎ‬
‫اﻧﺠﺎز"‪ "Execute‬اﻟﺠﻤﻠﺔ ﻋﻠﻰ اﻋﺘﺒﺎر أن ھﺬه اﻟﺠﻤﻠﺔ ﻟﯿﺴﺖ ﻣﺨﺰﻧﺔ ﻓﻲ ال ‪.Library Cache‬‬
‫اﻟﺨﻄﻮة ‪ :3‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟ ﺠﻤﻠﺔ وﻣﺮاﺣﻞ اﻧﺠﺎزھﺎ ﻓﻲ ‪.Library Cache‬‬
‫اﻟﺨﻄﻮة ‪ :4‬ﯾﺘﻢ اﻇﮭﺎر اﻟﺒﯿﺎﻧﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﺟﻤﻠﺔال ‪ SQL‬ﻟﻠﻤﺴﺘﺨﺪم اﻷول‪ ،‬وﺑﺬﻟﻚ ﺗﻜﻮن ﺟﻤﻠﺔ ال ‪ SQL‬ﺗﻢ‬
‫اﻧﺠﺎزھﺎ وﺗﻢ ﺗﺴﺠﯿﻞ ﺟﻤﯿﻊ اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﻣﺮت ﺑﮭﺎ اﻟﺠﻤﻠﺔ ﻓﻲ ال ‪.Library Cache‬‬
‫اﻟﺨﻄﻮة ‪ :5‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ﺑﻌﺪ ﻗﻠﯿﻞ ﺑﻜﺘﺎﺑﺔ ﻧﻔﺲ ﺟﻤﻠﺔ ال ‪ SQL‬وھﻲ ;‪select * from employees‬‬
‫اﻟﺨﻄﻮة ‪ :6‬ﯾﻘﻮم ال ‪ Server Process‬ﺑﺪراﺳﺔ اﻟﺠﻤﻠﺔ ﻓﯿﺠﺪ اﻧﮭﺎ ﻣﻮﺟﻮده ﻓﻲ ال ‪ Library Cache‬ﻓﯿﻨﻔﺬ‬
‫ﻣﺮاﺣﻞ اﻧﺠﺎز اﻟﺠﻤﻠﺔ دون دراﺳﺔ اﻟﺠﻤﻠﺔ ﺑﺎﻋﺘﺒﺎر ان اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﺗﻤﺖ ﻻﻧﺠﺎز اﻟﺠﻤﻠﺔ ﻣﺨﺰﻧﺔ ﻓﻲ ذاﻛﺮة ال‬
‫‪.Library Cache‬‬
‫اﻟﺨﻄﻮة ‪ :7‬ﯾﺘﻢ اﻇﮭﺎر اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻟﻠﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ﺑﺴﺮﻋﺔ أﻛﺒﺮ‪.‬‬

‫‪:Data Dictionary Cache‬‬

‫اﻟﻤﻜﻮن اﻟﺜﺎﻧﻲ ل ‪ SHARED POOL AREA‬واﻟﺘﻲ ﯾﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻣﻦ ال ‪Data Dictionary‬‬
‫ﺣﻮل‪ .Tables, Indexes, Privileges, etc… :‬وھﻲ ﺗﻌﻤﻞ ﺑﻨﻔﺲ ﻃﺮﯾﻘﺔ ال ‪. Library Cache‬‬

‫وﻋﻨﺪﻣﺎ ﺗﻤﺘﻠﺊ ﻣﻨﻄﻘﺔ ‪ Library Cache‬أو ‪ Data Dictionary Cache‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺎﺧﺮاج أﻗﺪم‬
‫ﺑﯿﺎﻧﺎت ﻟﻢ ﯾﺘﻢ ﺗﻜﺮار ﻃﻠﺒﮭﺎ ﻟﺘﻌﻮض ﺑﺒﯿﺎﻧﺎت ﺟﺪﯾﺪة وﺗﻌﺮف اﻟﻄﺮﯾﻘﺔ ﺑﺎﺳﻢ‪Least Recently Used (LRU) :‬‬

‫‪12‬‬
‫‪:DATABASE BUFFER CACHE‬‬

‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻓﯿﮭﺎ أﺣﺪث اﻟﺒﯿﺎﻧﺎت اﻟﺘﻰ ﺗﻢ اﺳﺘﺨﺮاﺟﮭﺎ ﻣﻦ اﻟﻤﻠﻔﺎت اﻟﻔﯿﺰﯾﺎﺋﯿﺔ "‪ ، "Data Files‬وﻓﻲ ﺣﺎﻟﺔ ﻃﻠﺐ‬
‫ذات اﻟﺒﯿﺎﻧﺎت ﻣﻦ ذات اﻟﻤﺴﺘﺨﺪم أو ﻣﻦ ﻣﺴﺘﺨﺪﻣﯿﻦ أﺧﺮﯾﯿﻦ ﻟﻞ ‪ Database‬ﯾﺘﻢ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺬاﻛﺮة‬
‫وﻟﯿﺲ ﻣﻦ ‪.Data Files‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺗﺘﻢ ادارﺗﮭﺎ اﯾﻀﺎً ﺑﻨﻈﺎم )‪.Least Recently Used (LRU‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻋﻨﺪﻣﺎ ﯾﻘﻮم ﻣﺴﺘﺨﺪم ﻟﻞ ‪ Database‬ﺑﻄﻠﺐ ﺑﯿﺎﻧﺎت ﻣﺤﺪدة ﻣﻦ ال ‪ Database‬ﻋﻦ ﻃﺮﯾﻖ ﻣﺜﻼً ﺟﻤﻠﺔ ال ‪SQL‬‬
‫ﻓﺈن اﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﺘﺨﺮﺟﺔ ﻣﻦ ال ‪ Data Files‬ﺗﺨﺰن ﻓﻲ ال ‪ Database Buffer Cache‬وﺑﺬﻟﻚ ﯾﺴﮭﻞ‬
‫ﻋﻤﻠﯿﺔ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت وﺑﺴﺮﻋﺔ أﻛﺒﺮ ﻓﻲ ﺣﺎل ﺗﻢ ﻃﻠﺐ ﻧﻔﺲ اﻟﺠﻤﻠﺔ ﻣﻦ ذات اﻟﻤﺴﺘﺨﺪم أو ﻣﺴﺘﺨﺪم أﺧﺮ وﺑﺬﻟﻚ‬
‫ﯾﺨﻒ اﻟﻌﺒﺊ ﻋﻠﻰ ﻣﺎ ﯾﻌﺮف ﺑﺎﺳﻢ ‪.Input/Output Load‬‬

‫راﺟﻊ اﻟﺮﺳﻢ ‪ 1.7‬ﻟﻤﺰﯾﺪ ﻣﻦ اﻟﺘﻮﺿﯿﺢ‪.‬‬

‫اﻟﺨﻄﻮات اﻟﻤﺒﯿﻨﺔ ﻋﻠﻰ اﻟﺮﺳﻢ ‪:1.7‬‬

‫اﻟﺨﻄﻮة ‪ :1‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻷول ﺑﻄﻠﺐ ﺑﯿﺎﻧﺎت ﻣﻦ ال‪. Database‬‬


‫اﻟﺨﻄﻮة ‪ :2‬ﯾﻘﻮم ال ‪ Server process‬ﺑﺪراﺳﺔ اﻟﻄﻠﺐ وﯾﺤﻀﺮ ال ‪ Server Process‬اﻟﺒﯿﺎﻧﺎت ﻣﻦ‬
‫ال‪ Data Files‬ﻋﻠﻰ اﻋﺘﺒﺎر أن ھﺬه اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻟﯿﺴﺖ ﻣﺨﺰﻧﺔ ﻓﻲ ال ‪.Database Buffer Cache‬‬
‫اﻟﺨﻄﻮة ‪ :3‬ﯾﺘﻢ اﺣﻀﺎر اﻟﺒﯿﺎﻧﺎت ﻣﻦ ال ‪ Data Files‬وﺗﺨﺰن اﻟﺒﯿﺎﻧﺎت ﻓﻲ ‪.Database Buffer Cache‬‬
‫اﻟﺨﻄﻮة ‪ :4‬ﯾﺘﻢ اﻇﮭﺎر اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻟﻠﻤﺴﺘﺨﺪم اﻷول‪.‬‬
‫اﻟﺨﻄﻮة ‪ :5‬ﯾﻘﻮم ﻣﺴﺘﺨﺪم أﺧﺮ ﺑﻌﺪ ﻗﻠﯿﻞ ﺑﻄﻠﺐ ذات اﻟﺒﯿﺎﻧﺎت ﻣﻦ ال ‪.Database‬‬
‫اﻟﺨﻄﻮة ‪ :6‬ﯾﻘﻮم ال ‪ Instance‬ﺑﺪراﺳﺔ اﻟﻄﻠﺐ ﻓﯿﺠﺪ ان اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﺗﻢ اﺳﺘﺨﺮاﺟﮭﺎ ﻗﺒﻞ ﻗﻠﯿﻞ ﻣﻦ ال‬
‫‪ Data Files‬وﻣﺎزاﻟﺖ ﻣﺨﺰﻧﺔ ﻓﻲ ال ‪ Database Buffer Cache‬ﻓﯿﺴﺘﺨﺮج اﻟﺒﯿﺎﻧﺎت ﻣﻦ ذاﻛﺮة ال‬
‫‪ Database Buffer Cache‬دون اﻟﺤﺎﺟﺔ اﻟﻰ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻘﺮص اﻟﻄﻠﺐ ﺣﯿﺚ ﺗﻮﺟﺪ ﻣﻠﻔﺎت‬
‫‪ ،Data Files‬وﻣﻦ ﺛﻢ ﯾﺘﻢ اﻇﮭﺎر اﻟﺒﯿﺎﻧﺎت ﻟﻠﻤﺴﺘﺨﺪم اﻟﺜﺎي ﺑﺴﺮﻋﺔ أﻛﺒﺮ وﺟﮭﺪ أﻗﻞ‪.‬‬

‫وﺗﺘﻜﻮن ال ‪ Database Buffer Cache‬ﻣﻦ ﺛﻼﺛﺔ أﺟﺰاء ﻣﺴﺘﻘﻠﺔ ﺗﺴﻤﻰ ‪:Sub Cache‬‬

‫‪ :Default‬ﯾﺨﺰن ﻓﻲ ھﺬا اﻟﻘﺴﻢ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻟﯿﺴﺖ ﻣﻦ ﺿﻤﻦ اﻷﻗﺴﺎم اﻷﺧﺮى )‪ .(Keep, Recycle‬وﯾﺘﺤﻜﻢ‬
‫ﺑﻤﺴﺎﺣﺘﮭﺎ اﻟﻌﺎﻣﻞ "‪.DB_CACHE_SIZE "Parameter‬‬

‫‪ :Keep‬ﺗﺤﺎﻓﻆ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ وﻻ ﺗﺴﺘﺒﺪل‪ ،‬وﯾﺘﺤﻜﻢ ﺑﻤﺴﺎﺣﺘﮭﺎ اﻟﻌﺎﻣﻞ "‪"Parameter‬‬


‫‪.DB_KEEP_CACHE_SIZE‬‬

‫‪ :Recycle‬ﯾﺘﻢ ازاﻟﺔ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ھﺬه اﻟﻤﻨﻄﻘﺔ ﻋﻨﺪ ﻋﺪم اﻟﺤﺎﺟﺔ اﻟﯿﮭﺎ ﻣﺠﺪداً‪ ،‬وﯾﺘﺤﻜﻢ ﺑﻤﺴﺎﺣﺘﮭﺎ اﻟﻌﺎﻣﻞ‬
‫"‪.DB_RECYCLE_CACHE_SIZE "Parameter‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻣﺴﺎﺣﺔ ال ‪ Default‬ﻻ ﯾﻤﻜﻦ أن ﺗﻜﻮن ان ﺗﺴﺎوي ﺻﻔﺮ أﺑﺪاً‪.‬‬

‫‪13‬‬
‫رﺳﻢ ‪1.7‬‬

‫‪14‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:1.3‬‬

‫ﻟﻤﻌﺮﻓﺔ أﺣﺠﺎم أﻗﺴﺎم ال ‪ Database Buffer Cache‬اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬


‫;‪SHOW PARAMETER DB_CACHE_SIZE‬‬

‫ﻟﺘﻐﯿﯿﺮ ﻣﺴﺎﺣﺔ ال ‪ Database Buffer Cache‬داﯾﻨﺎﻣﯿﻜﯿﺎً اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER SYSTEM SET DB_CACHE_SIZE= 30 M‬‬

‫‪:Data Block and Data Buffer‬‬

‫اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ﻣﻠﻔﺎت اﻷوراﻛﻞ ﺗﻜﻮن ﻣﺨﺰﻧﺔ ﺑﺸﻜﻞ ﻛﺘﻞ وﻟﺬﻟﻚ ﯾﻄﻠﻖ ﻋﻠﯿﮭﺎ اﺳﻢ ‪ Blocks‬أﻣﺎ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Database Buffer Cache‬ﻓﺘﻌﺮف ﺑﺎﺳﻢ ‪ .Data Buffer‬وﺣﺠﻢ ال ‪ Buffer‬ھﻮ ﻧﻔﺴﮫ‬
‫ﺣﺠﻢ ‪ Block‬واﻟﻤﺤﺪد ﺑﺎﻟﻌﺎﻣﻞ "‪.DB_BLOCK_SIZE "Parameter‬‬

‫)‪:Data Buffer Advisory Parameter (DB_CACHE_ADVICE‬‬

‫ﯾﺴﺎﻋﺪ ﻣﺪﯾﺮ اﻟﺒﯿﺎﻧﺎت )‪ (DBA‬ﻋﻠﻰ ادارة ال ‪ Database Buffer Cache‬وﺧﺎﺻﺔ ﻓﻲ أوﻗﺎت اﻟﺬروة ﺣﯿﺚ‬
‫ﯾﻘﻮم ﺑﺎﻇﮭﺎر اﺣﺼﺎﺋﯿﺎت وﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻣﺨﺘﻠﻒ ال ‪. Database buffer cache‬‬
‫ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﻨﺘﺠﮭﺎ اﻟﻌﺎﻣﻞ "‪ "Parameter‬ﻣﻦ ‪.V$DB_CACHE_ADVICE‬‬
‫وﻟﮫ ﺛﻼث ﺣﺎﻻت ھﻲ‪:‬‬

‫‪ :OFF‬ﻻ ﯾﻮﺟﺪ ﻣﺴﺎﺣﺔ ﻓﻲ اﻟﺬاﻛﺮة ﻣﺨﺼﺼﺔ ﻟﮫ وﺑﺎﻟﺘﺎﻟﻲ ﻻ ﯾﻘﻮم ﺑﺘﻜﻮﯾﻦ أي ﺑﯿﺎﻧﺎت‬


‫‪ :ON‬ﯾﻘﻮم ﺑﺘﻜﻮﯾﻦ اﻟﺒﯿﺎﻧﺎت وﻟﮫ ﻣﺴﺎﺣﺔ ﻣﺨﺼﺼﺔ ﻓﻲ اﻟﺬاﻛﺮة‪.‬‬
‫‪ :READY‬ﯾﻮﺟﺪ ﻣﺴﺎﺣﺔ ﻓﻲ اﻟﺬاﻛﺮة ﻣﺨﺼﺼﺔ ﻟﮫ وﻟﻜﻨﮫ ﻓﻲ وﺿﻌﯿﺔ اﻻﺳﺘﻌﺪاد وﻻ ﯾﻘﻮم ﺑﺘﻜﻮﯾﻦ اي ﺑﯿﺎﻧﺎت‪.‬‬

‫رﺑﻤﺎ ﺗﺘﺴﺎﺋﻞ ﻟﻤﺎذا اذاً ﺗﻮﺟﺪ اﻟﺤﺎﻟﺔ ‪ READY‬ﻟﻤﺎذا ﻟﻢ ﺑﺘﻢ اﻻﻛﺘﻔﺎء ﺑﺄول ﺣﺎﻟﺘﯿﯿﻦ ﻓﻘﻂ؟‬
‫اﻟﺠﻮاب ﻋﻠﻰ ذﻟﻚ ﯾﻜﻤﻦ ﻓﻲ ان اﻧﺘﻘﺎل اﻟﻌﺎﻣﻞ "‪ "Parameter‬ﻣﻦ وﺿﻌﯿﺔ ال ‪ OFF‬اﻟﻰ ‪ ON‬ﻗﺪ ﯾﺆدي اﻟﻰ‬
‫أﺧﻄﺎء ﻓﻲ اﻟﺬاﻛﺮة أو ﻓﺸﻞ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:1.4‬‬

‫ﻟﻤﻌﺮﻓﺔ اﻟﻮﺿﻊ اﻟﺤﺎﻟﻲ اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬


‫;‪SHOW PARAMETER DB_CACHE_ADVICE‬‬

‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ وﺿﯿﻌﺔ اﻟﻌﺎﻣﻞ "‪ DB_CACHE_ADVICE "Parameter‬داﯾﻨﺎﻣﯿﻜﯿﺎً ﺑﻜﺘﺎﺑﺔ ‪:‬‬

‫;‪ALTER SYSTEM SET DB_CACHE_ADVICE = READY‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻗﺪ ﺗﻔﺸﻞ اﻟﻤﺤﺎوﻟﺔ اذا ﻛﺎن اﻟﻮﺿﻊ اﻻﺑﺘﺪاﺋﻲ ‪.OFF‬‬

‫‪15‬‬
‫‪:REDO LOG BUFFER‬‬

‫ﻣﻦ أھﻢ اﺳﺲ ﺣﻤﺎﯾﺔ اﻟﺒﯿﺎﻧﺎت اذ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻋﻦ ﺟﻤﯿﻊ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﻃﺮأت ﻋﻠﻰ ال ‪ Database‬ﻣﺜﻞ‬
‫اﻟﺘﻐﯿﺮات اﻟﻨﺎﺗﺠﮫ ﻋﻦ أواﻣﺮ ‪.INSERT,DELETE,ALTER,DROP, CREATE‬‬
‫اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺣﺪﺛﺖ ﻓﻲ ال ‪ Database‬ﺗﺴﺠﻞ ﻓﻲ ال ‪ Redo Log Buffer‬ﺑﺎﺳﻢ ‪.Redo Entries‬‬
‫ﻣﺴﺎﺣﺔ ال ‪ Redo Log Buffer‬ﻣﺤﺪدة ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ " ‪.LOG_BUFFER "Parameter‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:1.5‬‬

‫ﻟﻤﻌﺮﻓﺔ اﻟﺤﺠﻢ اﻟﺤﺎﻟﻲ اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬


‫;‪SHOW PARAMETER LOG_BUFFER‬‬

‫ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ وﺿﯿﻌﺔ اﻟﻌﺎﻣﻞ "‪ LOG_BUFFER "Parameter‬داﯾﻨﺎﻣﯿﻜﯿﺎ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬ان ‪ Redo Log Buffer‬ﻣﻨﻄﻘﺔ ﺛﺎﺑﺘﺔ ﻏﯿﺮ ﻣﺘﻐﯿﺮة‪.‬‬

‫‪16‬‬
‫‪:LARGE POOL‬‬

‫ھﻲ ﻣﻨﻄﻘﺔ ذاﻛﺮة اﺧﺘﯿﺎرﯾﺔ وﻟﯿﺴﺖ اﺳﺎﺳﯿﺔ )اﺟﺒﺎرﯾﺔ( ﯾﻤﻜﻦ ﻟﻞ ‪ DBA‬ان ﯾﻘﻮم ﺑﺘﺸﻜﯿﻠﮭﺎ ﺣﯿﻦ اﻟﺤﺎﺟﺔ اﻟﯿﮭﺎ ﺣﯿﺚ‬
‫ﺗﻮﻓﺮ ذاﻛﺮة ﻛﺒﯿﺮة ﻟﻌﻤﻠﯿﺎت ﻋﺪﯾﺪة ﻣﺜﻞ ‪.BACKUP and RESTORE‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﻋﻠﻤﯿﺔ ال ‪ BACKUP‬ھﻲ اﻟﻌﻤﻠﯿﺔ اﻟﺘﻲ ﯾﻘﻮم ﻓﯿﮭﺎ ال ‪ DBA‬ﺑﺤﻔﻆ ﻧﺴﺦ "‪ "Copies‬ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﻏﺎﻟﺒ ًﺎ‬
‫ﻋﻠﻰ أﻗﺮاص ﺻﻠﺒﺔ ‪ Hard disk‬ﻟﻜﻲ ﯾﺘﻤﻜﻦ ﻣﻦ اﻟﻤﺤﺎﻓﻈﺔ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت واﺳﺘﺮﺟﺎﻋﮭﺎ ‪ RESTORE‬ﻋﻨﺪ‬
‫اﻟﺤﺎﺟﺔ‪.‬‬

‫‪ -2‬ال ‪ Large Pool‬ﻻ ﺗﻌﻤﻞ ﺑﻨﻈﺎم ال ‪.LRU‬‬

‫‪ -3‬ﻣﺴﺎﺣﺔ ال ‪ Large Pool‬ﻣﺤﺪدة ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ "‪.LARGE_POOL_SIZE "Parameter‬‬

‫‪ -4‬ﯾﻤﻜﻦ ﺗﻐﯿﺮ اﻟﻤﺴﺎﺣﺔ داﯾﻨﺎﻣﯿﻜﺎً ﺑﺎﺳﺘﺨﺪام ‪ ALTER SYSTEM‬ﻛﻤﺎ ﻋﻮ اﻟﺤﺎل ﻣﻊ ال ‪Shared Pool‬‬
‫وﻏﯿﺮھﺎ‪.‬‬

‫‪ -5‬ﺗﻌﻤﻞ ال ‪ Large Pool‬ﻓﻘﻂ ﻓﻲ ﺑﯿﺌﺔ ال ‪.Shared Server‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ل ‪.Shared Server‬‬

‫‪:JAVA POOL‬‬

‫ھﻲ ﻣﻨﻄﻘﺔ ذاﻛﺮة اﺧﺘﯿﺎرﯾﺔ اﺧﺮى ﺗﻮﻓﺮ ذاﻛﺮة ﻟﻌﻤﻠﯿﺎت ال ‪ Java‬اﻟﻤﺨﺘﻠﻔﺔ وﺗﻌﻤﻞ ﺑﻨﻔﺲ ﻓﻜﺮة ال ‪ SQL‬أو‬
‫‪ PL/SQL‬ﻓﻲ ال ‪ ،Shared Pool‬ﻣﺴﺎﺣﺔ ال ‪ Java Pool‬ﻣﺘﺤﻜﻤﺔ ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ‬
‫"‪.JAVA_POOL_SIZE "Parameter‬‬

‫‪17‬‬
‫‪CONNECTION‬‬
‫ﻟﻜﻲ ﺗﺴﺘﻄﯿﻊ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬ﻟﻠﻘﯿﺎم ﺑﻌﻠﻤﯿﺎت ﻣﺨﺘﻠﻔﺔ ﻣﺜﻞ اﺳﺘﺨﺮاج ﺑﯿﺎﻧﺎت ﻋﺒﺮ ﺟﻤﻞ ال ‪، SQL‬‬
‫ﯾﺠﺐ أوﻻً ان ﯾﻜﻮن اﻟﻤﺴﺘﺨﺪم ﻣﺘﺼﻼً ﺑﺎل ‪.Instance‬‬
‫ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺎﺳﺘﺨﺪام أﺣﺪ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﯾﻤﻜﻦ ﻋﺒﺮھﺎ اﻻﺗﺼﺎل ﺑﺎل ‪ Instance‬ﻣﺜﻞ ‪ SQLPLUS‬ﻓﯿﻨﺸﺊ ﻣﺎ‬
‫ﯾﻌﺮف ﺑﺎﺳﻢ ‪ .User Process‬وﺑﻌﺪ ان ﯾﺘﻢ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Oracle Server‬وﯾﺘﻢ اﻻﺗﺼﺎل ﺑﺎل ‪Instance‬‬
‫ﯾﻨﺸﺊ ﻣﺎ ﯾﻌﺮف ﺑﺎﺳﻢ ‪ .Server Process‬ﯾﻘﻮم ال ‪ Server Process‬ﺑﻌﻤﻠﯿﺔ اﻟﻮﺳﯿﻂ ﺑﯿﻦ اﻟﻤﺴﺘﺨﺪم ‪User‬‬
‫‪ Process‬وال ‪ Instance‬ﺣﯿﺚ ﯾﻘﻮم ﺑﺘﻨﻔﯿﺬ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﻃﻠﺒﮭﺎ اﻟﻤﺴﺘﺨﺪم ﻣﺜﻞ ﺟﻤﻞ ال ‪.SQL‬‬

‫رﺳﻢ ‪1.8‬‬

‫‪:Process‬‬

‫ﺗﻌﺮﯾﻒ ال ‪ Process‬ﺑﺸﻜﻞ ﻋﺎم ﻓﻲ اﻷوراﻛﻞ ھﻲ اﻟﻌﻤﻠﯿﺔ أو اﻟﻮﻇﯿﻔﺔ اﻟﺘﻲ ﺗﻨﻔﺬ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺨﻄﻮات أو‬
‫ﻣﮭﻤﺎت ﻣﺤﺪدة‪.‬‬

‫ﯾﻮﺟﺪ ﺛﻼث أﻧﻮاع ﻣﻦ ال ‪ Processes‬ﻓﻲ اﻷوراﻛﻞ ھﻢ‪User Process , Server Process, :‬‬
‫‪.Background Process‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ل ‪.Background Process‬‬

‫‪:Session‬‬

‫ال ‪ Session‬ھﻮ ﺣﺎﻟﺔ اﻻﺗﺼﺎل اﻟﻤﻮﺟﻮدة ﺑﯿﻦ اﻟﻤﺴﺘﺨﺪم و ال ‪ .Oracle Server‬ﯾﺒﺪأ ال ‪ Session‬ﻋﻨﺪ دﺧﻮل‬
‫اﻟﻤﺴﺘﺨﺪم ال ‪ Oracle Server‬وﯾﻨﺘﮭﻲ ﻋﻨﺪ ﺧﺮوج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال ‪ Oracle Server‬ﺳﻮاء ﺑﺈرادة‬
‫اﻟﻤﺴﺘﺨﺪم )ﻋﻨﺪ اﻧﺘﮭﺎء اﻟﻤﮭﻤﺔ( أو ﻻ ارادﯾﺎً )ﻋﻨﺪ ﺣﺪوث ﻋﻄﻞ ﻣﺎ(‪.‬‬
‫ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم اﻟﻮاﺣﺪ اﯾﻦ ﯾﻜﻮٌن أﻛﺜﺮ ﻣﻦ ‪ Session‬واﺣﺪ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ اذا اﺳﺘﺨﺪم أﻛﺜﺮ ﻣﻦ ﺑﺮﻧﺎﻣﺞ ﻣﺜﻞ‬
‫‪ SQL PLUS‬و ‪ ORACLE FORMS‬ﻋﺪا ﺑﻌﺾ اﻟﺤﺎﻻت اﻟﻘﻠﯿﻠﺔ‪.‬‬

‫‪18‬‬
‫)‪:PROCESSING A STATEMENT (DML‬‬

‫اﻟﺨﻄﻮات اﻟﺘﻲ ﺗﻤﺮ ﻋﺒﺮھﺎ ﺟﻤﻞ ال ‪) SQL‬ﺟﻤﻞ ال ‪ (DML‬ﻣﻠﺨﺼﺔ ﻓﻲ اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﯾﺘﻢ اﻻﺗﺼﺎل ﺑﺎل ‪ Instance‬وﺗﻜﻮﯾﻦ ‪ User Process‬و ‪.Server Process‬‬ ‫·‬

‫اذا ﻛﺎﻧﺖ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻏﯿﺮ ﻣﺘﻮﻓﺮة ﻓﻲ ال ‪ Database Buffer Cache‬ﻓﯿﻘﻮم ال ‪Server‬‬ ‫·‬
‫‪ Process‬ﺑﺎﺣﻀﺎر اﻟﺒﯿﺎﻧﺎت ﻣﻦ ‪.Data Files‬‬

‫ﯾﻘﻮم ال ‪ Server Process‬ﺑﻮﺿﻊ ﻗﯿﻮد "‪ "Locks‬ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﺘﻢ ﺗﻌﺪﯾﻠﮭﺎ‪ ،‬وﯾﺘﻢ ﺗﺨﺰﯾﻦ‬ ‫·‬
‫اﻟﺒﯿﺎﻧﺎت اﻟﺴﺎﺑﻘﺔ )ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ( ﻓﻲ ﻣﻨﻄﻘﺔ ﺗﺴﻤﻰ ‪ROLLBACK (SEGMENT) BLOCK‬‬
‫ﺣﺘﻰ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم ﺑﺎﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ ﻏﯿﺮ اﻟﻤﻌﺪﻟﺔ اذا ﺗﻢ اﺧﺘﯿﺎر ‪ Rollback‬ﻋﻮﺿﺎً‬
‫ﻋﻦ ‪.Commit‬‬

‫اذا ﺗﻢ اﺧﺘﯿﺎر ‪ Commit‬ﻓﺈن اﻟﺒﯿﺎﻧﺎت اﻟﻤﻌﺪﻟﺔ ﯾﺘﻢ ﻧﻘﻠﮭﺎ اﻟﻰ ‪. Data Files‬‬ ‫·‬

‫‪19‬‬
‫)‪PROGRAM GLOBAL AREA (PGA‬‬

‫ھﻲ ﻣﻨﻄﻘﺔ ذاﻛﺮة ﻏﯿﺮ ﻣﺸﺘﺮﻛﺔ و ﺧﺎﺻﺔ ﻟﻌﻤﻠﯿﺔ واﺣﺪة ﻓﻘﻂ "‪ ." Process‬ﺗﺨﺼﺺ ذاﻛﺮة ال ‪ PGA‬ﻟﻜﻞ‬
‫ﻋﻤﻠﯿﺔ "‪ " Process‬ﻋﻨﺪ ﺑﺪاﯾﺔ اﻟﻌﻤﻠﯿﺔ "‪ " Process‬و ﺗﺰال ذاﻛﺮة ال ‪ PGA‬ﻋﻨﺪ ﻧﮭﺎﯾﺔ اﻟﻌﻤﻠﯿﺔ‬
‫"‪ . "Process‬وﺗﺤﺘﻮي ذاﻛﺮة ال ‪ PGA‬ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺨﺎﺻﺔ ﻟﺘﻠﻚ اﻟﻌﻤﻠﯿﺔ "‪ ،"Process‬ﻣﻜﻮﻧﺎت ال ‪PGA‬‬
‫ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺗﻌﺮﯾﻒ ال ‪ Server‬ﺣﯿﺚ ﯾﻮﺟﺪ ﺗﻌﺮﯾﻔﺎن ھﻤﺎ ‪ Dedicated‬و‪.Shared‬‬
‫ﻓﻲ ﻧﻈﺎم ال ‪ Dedicated Server‬ﯾﺘﻜﻮن ‪ Server Process‬واﺣﺪ ﺧﺎص ﻟﻄﻠﺒﺎت ‪ User Process‬واﺣﺪ‬
‫)ﻣﺴﺘﺨﺪم واﺣﺪ(‪ ،‬أﻣﺎ ﻓﻲ ال ‪ Shared Server‬ﻓﯿﺘﻢ اﻟﻤﺸﺎرﻛﺔ ﻓﻲ ال ‪ Server Process‬ﻣﻦ ﻗﺒﻞ أﻛﺜﺮ ﻣﻦ‬
‫‪) User Process‬ﯾﻤﻜﻦ ان ﯾﻜﻮن ھﻨﺎك أﻛﺜﺮ ﻣﻦ ‪ Server Processes‬و ﻟﯿﺲ ﺑﺎﻟﻀﺮورة واﺣﺪ ﻓﻘﻂ أي ﻣﺜﻼً‬
‫ﯾﻤﻜﻦ ان ﯾﻮﺟﺪ ﺧﻤﺴﺔ ‪ Server Processes‬ﯾﺘﺸﺎرك ﺑﮭﻢ ﺧﻤﺴﯿﻦ ﻣﺴﺘﺨﺪم ‪(User Processes‬‬

‫ﺑﻌﺾ ﻣﻜﻮﻧﺎت ال ‪:PGA‬‬

‫‪ :SORT AREA‬ﺣﯿﺚ ﺗﺨﺼﺺ ﻷي ﻃﻠﺐ ﻣﻦ ﻗﺒﻞ ال ‪ Process‬ﯾﺤﺘﻮي ﻋﻠﻰ اﻷواﻣﺮ اﻟﺘﺎﻟﯿﺔ‪:‬‬ ‫·‬
‫‪ Distinct , Order By, Group By,‬أو ال ‪ Set Operators‬ﻣﺜﻞ ‪Union, Minus,‬‬
‫‪.Intersect‬‬

‫‪ :SESSION INFORMATION‬ﺣﯿﺚ ﺗﺨﺼﺺ ﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﺴﺘﺨﺪم ﻣﺜﻞ ال ‪User‬‬ ‫·‬


‫‪.Privileges‬‬

‫‪20‬‬
BACKGROUND PROCESSES
.Instance ‫ ﻣﺘﻮﻓﺮة وﺟﺎھﺰة ﻟﻠﻌﻤﻞ ﺑﻌﺪ ﺗﺸﻐﯿﻞ ال‬Background Processes ‫ﺗﻜﻮن ال‬
Background ‫ وﯾﻮﺟﺪ ﻧﻮﻋﯿﯿﻦ ﻣﻦ‬،‫ ﻣﺴﺆول ﻋﻦ ﻣﮭﻤﺎت ﺧﺎﺻﺔ‬Background Process ‫ﻛﻞ‬
.(‫ ھﻤﺎ أﺧﺘﯿﺎري و إﻟﺰاﻣﻲ ) أو إﺟﺒﺎري‬Processes

.Background Processes ‫ وﻣﻜﺎن وﺟﻮد ال‬1.1 ‫ اﻟﺮﺳﻢ رﻗﻢ‬:‫ﺗﺬﻛﺮ‬

:‫أﻣﺜﻠﺔ‬

Database Writer (DBWn) ·


Log Writer (LGWR) ·
System Monitor (SMON) ·
Process Monitor (PMON) ·
Checkpoint (CKPT) ·
Archiver (ARCn) ·

21
‫)‪:DATABASE WRITER (DBWn‬‬

‫ﯾﻘﻮم ﺑﻜﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة "‪ "Dirty Buffers‬ﻣﻦ ال ‪ Database Buffer Cache‬اﻟﻰ ال ‪Data‬‬
‫‪ Files‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺮﺳﻢ ‪ ،1.9‬وﺑﺬﻟﻚ ﯾﺘﻢ ﺗﻔﺮﻏﺔ ‪ Buffers‬ﺑﺎﺳﺘﻤﺮار ﻣﻦ أﺟﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة اﻟﻼﺣﻘﺔ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬أن اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Instance‬ﺗﺴﻤﻰ ‪ Buffers‬واﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Data Files‬ﺗﺴﻤﻰ‬


‫‪.Blocks‬‬

‫وﺗﻌﻤﻞ ال ‪ DBWn‬ﻋﻨﺪ ﺣﺪوث أﺣﺪ اﻷﺣﺪاث اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﻋﻨﺪ ﺣﻮدث ‪.Checkpoint‬‬ ‫·‬


‫ﻋﺪد ال ‪) Dirty Buffers‬أو ال ‪ Buffers‬اﻟﻤﻤﺘﻠﺌﺔ ﺑﺎﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة( ﯾﺼﻞ اﻟﻰ اﻟﺤﺪ اﻷﻋﻠﻰ‬ ‫·‬
‫اﻟﻤﺴﻤﻮح ﻓﯿﮫ‪.‬‬
‫ﻋﻨﺪ ﻋﺪم وﺟﻮد ﻣﻦ " ‪ "Free Buffers‬ﻓﺎرﻏﺔ ﺑﻌﺪ اﻟﺒﺤﺚ ﻋﻨﮭﺎ ﻣﻦ ﻗﺒﻞ ال ‪. Process‬‬ ‫·‬
‫ﻋﻨﺪ وﺿﻊ ‪ Tablespace‬ﺳﻮاء ﻣﻦ اﻟﻨﻮع اﻟﻌﺎدي أو اﻟﻤﺆﻗﺖ ﻓﻲ ﺣﺎﻟﺔ اﻹﻏﻼق "‪."Offline‬‬ ‫·‬
‫ﻋﻨﺪ وﺿﻊ ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ اﻟﻘﺮاءة ﻓﻘﻂ )اي ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت ﺑﻞ ﻓﻘﻂ اﻻﻃﻼع‬ ‫·‬
‫ﻋﻠﯿﮭﺎ("‪."Read Only‬‬
‫ﻋﻨﺪ وﺿﻊ ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.Backup‬‬ ‫·‬
‫ﻋﻨﺪ اﺳﺘﺨﺪام أواﻣﺮ ‪ Drop‬و ‪ Truncate‬اﻟﺨﺎﺻﺔ ﺑﺎل ‪.Table‬‬ ‫·‬
‫ﻋﻨﺪ ﺣﺪوث ‪.Timeout‬‬ ‫·‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ل ‪ Checkpoint‬و ال ‪.Tablespace‬‬

‫اﻟﺮﺳﻢ ‪1.9‬‬

‫‪22‬‬
‫)‪:LOG WRITER (LGWR‬‬

‫ﯾﻘﻮم ﺑﻨﻘﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Log Buffer Cache‬اﻟﻰ ال ‪ Redo Log Files‬ﺑﺸﻜﻞ دوري ﻣﻤﺎ‬
‫ﯾﺴﺎﻋﺪ ﻋﻠﻰ اﺧﻼء ذاﻛﺮة ﻟﻞ ‪ Redo Entries‬اﻟﺠﺪﯾﺪة ‪ ،‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺮﺳﻢ ‪.1.10‬‬

‫ﺗﺬﻛﺮ‪ :‬أن اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Redo Log Buffer‬ﺗﺴﻤﻰ ‪.Redo Entries‬‬

‫وﺗﻌﻤﻞ ال ‪ LGWR‬ﻋﻨﺪ ﺣﺪوث أﺣﺪ اﻷﺣﺪاث اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﻋﻨﺪ اﻣﺘﻼء ﺛﻠﺚ ال ‪.Redo Log Buffer‬‬ ‫·‬


‫ﻋﻨﺪ وﺟﻮد ﺑﯿﺎﻧﺎت ﻓﻲ ال ‪ Redo Log Buffer‬ﺣﺠﻤﮭﺎ اﻛﺒﺮ ﻣﻦ ‪.1 MB‬‬ ‫·‬
‫ﻗﺒﻞ ان ﺗﻘﻮم ال ‪ DBWn‬ﺑﻨﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ال ‪ Database Buffer Cache‬اﻟﻰ ال ‪. Data Files‬‬ ‫·‬
‫ﻛﻞ ‪ 3‬ﺛﻮان‪.‬‬ ‫·‬
‫ﻋﻨﺪ ‪.Transaction Commit‬‬ ‫·‬

‫اﻟﺮﺳﻢ ‪1.10‬‬

‫‪23‬‬
‫)‪:SYSTEM MONITOR (SMON‬‬

‫ﻓﻲ ﺣﺎﻟﺔ ﺣﺪوث اي ﻋﻄﻞ ﻣﻔﺎﺟﺊ ﻟﻞ ‪ Instance‬ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ ال ‪) Instance‬ﻣﺜﻞ ﺑﯿﺎﻧﺎت ال‬
‫‪ (Database Buffer Cache‬اﻟﺘﻲ ﻟﻢ ﯾﺘﻢ ﻧﻘﻠﮭﺎ اﻟﻰ ال ‪ Data Files‬ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ ﺗﻀﯿﻊ أو ﺗﻤﺴﺢ‪.‬‬
‫ﺑﻌﺪ ھﺬه اﻟﺤﺎﻟﺔ ﻣﻦ ﺿﯿﺎع ﺑﯿﺎﻧﺎت ال ‪ Instance‬ﯾﻌﻤﻞ ال ‪ SMON‬ﺑﺸﻜﻞ اﺗﻮﻣﺎﺗﯿﻜﻲ ﻻﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ال‬
‫‪ Instance‬و ﺗﺴﻤﻰ اﻟﻌﻤﻠﯿﺔ ب ‪.Instance Recovery‬‬

‫وﯾﻘﻮم ال ‪ SMON‬ﺑﺘﺄدﯾﺔ ﻋﺪد ﻣﻦ اﻟﻮﻇﺎﺋﻒ ھﻲ‪:‬‬

‫اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة اﻟﺘﻲ ﺗﻢ ﺗﺴﺠﯿﻞ ﻣﺎ ﻃﺮأ ﻋﻠﯿﮭﺎ ﻣﻦ ﺗﻐﯿﺮ ﻓﻲ ال ‪ Redo Log Files‬وﻟﻜﻦ ﻟﻢ‬ ‫·‬
‫ﯾﺘﻢ ﺗﺴﺠﯿﻠﮭﺎ ﻓﻲ ال ‪ .Data Files‬ﺣﯿﺚ ﯾﻘﻮم ال ‪ SMON‬ﺑﻘﺮاءة ال ‪ Redo Log Files‬و ﻣﻌﺮﻓﺔ‬
‫اﻟﺘﻐﯿﺮات اﻟﺘﻲ ﻃﺮأت ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت و ﺗﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ال ‪.Data Files‬‬
‫اﻋﺎدة ﺗﺠﮭﯿﺰ ال ‪ Database‬ﻟﯿﺘﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ اﻟﺪﺧﻮل ﻣﺠﺪداً ‪.‬‬ ‫·‬
‫اﻟﻐﺎء ﺟﻤﯿﻊ ال ‪ Transactions‬اﻟﺘﻲ ﻟﻢ ﯾﺤﺪث ﻟﮭﺎ ‪ Commit‬وازاﻟﺔ اﻟﻘﯿﻮد ﻋﻦ اﻟﺒﯿﺎﻧﺎت " ‪Data‬‬ ‫·‬
‫‪. "Lock‬‬
‫ﺗﺤﺮﯾﺮ ال ‪ Temporary Segments‬واﺳﺘﻌﺎدة ﻣﺴﺎﺣﺘﮭﺎ اﻟﻰ ال ‪.Data Files‬‬ ‫·‬
‫ﺟﻤﻊ اﻟﻤﺴﺎﺣﺎت اﻟﺨﺎﻟﯿﺔ اﻟﺼﻐﯿﺮة اﻟﻀﺎﺋﻌﺔ اﻟﺘﻲ ﺗﻨﺸﺊ ﺑﯿﻦ اﻟﺒﯿﺎﻧﺎت ﻧﺘﯿﺠﺔ ﻟﻠﺘﻐﯿﺮات اﻟﺘﻲ ﺗﺤﺪث و‬ ‫·‬
‫ﺗﻌﯿﺪھﺎ اﻟﻰ اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﻟﯿﺔ اﻟﺮﺋﯿﺴﯿﺔ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬أن ال ‪ LGWR‬ﯾﻌﻤﻞ ﻗﺒﻞ ال ‪.DBWn‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎ ًﻓﻲ اﻟﻔﺼﻮل اﻟﺘﺎﻟﯿﺔ ﻟﻞ ‪.Temporary Segment‬‬

‫)‪:PROCESS MONITOR (PMON‬‬

‫ﻓﻲ ﺣﺎﻟﺔ ﺣﺪوث أي ﻋﻄﻞ ﻟﻞ ‪ Processes‬ﻗﺪ ﯾﺆدي اﻟﻰ ﻣﺸﺎﻛﻞ داﺧﻠﯿﺔ ﻓﻲ ال ‪ Database‬ﻓﯿﻘﻮم ال ‪PMON‬‬
‫ﺑﺘﻨﻈﯿﻒ أﺧﻄﺎء ال ‪.Processes‬‬

‫وﯾﻘﻮم ال ‪ PMON‬ﺑﺘﺄدﯾﺔ ﻋﺪد ﻣﻦ اﻟﻮﻇﺎﺋﻒ ھﻲ‪:‬‬

‫ﺗﺤﺮﯾﺮ ﻛﻞ اﻟﻤﺼﺎدر وال ‪ Locks‬ﻋﻠﻰ ال ‪ Tables‬أو ال ‪ Rows‬اﻟﺘﻲ وﺿﻌﮭﺎ ال ‪ Process‬اﻟﻔﺎﺷﻞ‪.‬‬ ‫·‬


‫اﻋﺎدة )‪ (Rollback‬ال ‪ Transaction‬اﻟﺨﺎص ﺑﺎﻟﻤﺴﺘﺨﺪم )اي اﻟﻐﺎء اي ﺗﻌﺪﯾﻼت ﻟﻢ ﯾﺘﻢ ﺣﺪوث‬ ‫·‬
‫‪ Commit‬ﻟﮭﺎ(‬

‫‪24‬‬
‫) ‪:CHECKPOINT (CKPT‬‬

‫ال ‪ Checkpoint‬ھﻲ ﻋﻤﻠﯿﺔ ﻛﺘﺎﺑﺔ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة ﻓﻲ ‪ Database Buffer Cache‬اﻟﻰ ال ‪Data‬‬
‫‪ Files‬ﻋﺒﺮ ال ‪ .DBWn‬ﻣﻦ ﻓﻮاﺋﺪ ال ‪ Checkpoint‬ان اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺘﻐﯿﺮ ﺑﺎﺳﺘﻤﺮار ﺗﻨﻘﻞ ﺑﺸﻜﻞ ﻧﻈﺎﻣﻲ و‬
‫دوري اﻟﻰ ال ‪ Data Files‬وﺑﺬﻟﻚ ﯾﺘﻢ ﺣﻔﻆ اﻟﺒﯿﺎﻧﺎت ﺑﺸﻜﻞ أﻣﻦ‪.‬‬
‫ال ‪ Checkpoint Process‬ﯾﻘﻮم ﺑﺘﺠﺪﯾﺪ "‪ "Update‬ال ‪ Data Files Header‬و ال ‪.Control Files‬‬

‫ﻣﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺠﺪد "‪: "Update‬‬


‫· رﻗﻢ ال ‪ Checkpoint‬ﻓﻲ ال ‪.Data Files Header‬‬
‫· رﻗﻢ ال ‪ Checkpoint‬ﻓﻲ ال ‪.Control Files‬‬
‫· رﻗﻢ ال ‪ Log Sequence‬ﻓﻲ ال ‪.Control Files‬‬
‫· ال ‪ SCN‬ﻓﻲ ال ‪.Control Files‬‬
‫· اﺳﻤﺎء ال ‪.Archived Log‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎ ًﻓﻲ اﻟﻔﺼﻮل اﻟﺘﺎﻟﯿﺔ ﻟﻞ ‪ Data Files Header‬و ال ‪ Log Sequence‬وال ‪SCN‬‬
‫واﺳﻤﺎء ال ‪.Archived Log‬‬

‫)‪:ARCHIVER (ARCn‬‬

‫ھﻮ ‪ Process‬اﺧﺘﯿﺎري و ﻟﯿﺲ اﺟﺒﺎري ووﻇﯿﻔﺘﮫ ﺗﻜﻤﻦ ﻓﻲ ﻧﻘﻞ ﺑﯿﺎﻧﺎت ال ‪ Redo Log Files‬اﻟﻰ ‪Archived‬‬
‫‪ .Log Files‬ﺑﺎﻋﺘﺒﺎره اﺧﺘﯿﺎري ﻓﻠﮫ ﺣﺎﻟﺘﯿﯿﻦ إﻣﺎ ﯾﻌﻤﻞ أو ﻣﻐﻠﻖ‪ .‬و ﻟﻮﺿﻌﮫ ﻓﻲ وﺿﯿﻌﺔ اﻟﻌﻤﻞ ﯾﺠﺐ أن ﯾﻜﻮن ال‬
‫‪ Database‬ﻓﻲ وﺿﻌﯿﺔ ال ‪ ،ARCHIVELOG‬وﻓﻲ ﺣﺎل ﺗﻢ وﺿﻊ ال ‪ Database‬ﺗﺤﺖ ھﺬه اﻟﻮﺿﻌﯿﺔ ﻓﺈن‬
‫‪ ARCn‬ﯾﻌﻤﻞ‪.‬‬
‫اذاً ھﻨﺎك ﺣﺎﻟﺘﯿﯿﻦ ﻟﻮﺿﻌﯿﺔ ال ‪ Database‬ﺗﺤﺪدان ﻋﻤﻞ أو اﯾﻘﺎف ال ‪ ARCn‬ھﻤﺎ‪:‬‬

‫‪:Archivelog‬‬

‫ﻋﻨﺪ اﻣﺘﻼء اﻟﻤﻠﻒ اﻷول ﻣﻦ ﻣﻠﻔﺎت ال ‪ Redo Log Files‬ﯾﺘﻢ اﻟﺒﺪأ ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻤﻠﻒ اﻟﺜﺎﻧﻲ وﺗﺴﻤﻰ‬
‫ھﺬه اﻟﻌﻤﻠﯿﺔ ‪ ، Log Switch‬ﺛﻢ ﯾﻘﻮم ال ‪ ARCn‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ ﺑﻨﻘﻞ ﺑﯿﺎﻧﺎت اﻟﻤﻠﻒ اﻷول اﻟﻰ ال‬
‫‪.Archived Log Files‬‬

‫رﺳﻢ ‪1.11‬‬

‫‪: NoArchivelog‬‬

‫ﻋﻨﺪ اﻣﺘﻼء ﺟﻤﯿﻊ ﻣﻠﻔﺎت ال ‪ Redo Log Files‬ﯾﺘﻢ اﻋﺎدة ﻛﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت " ‪ "Overwrite‬ﻓﻲ اﻟﻤﻠﻒ اﻷول‬
‫ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺴﺎﺑﻘﺔ ‪ ،‬وﻟﻜﻦ ﻻ ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت ﻓﻮق اﻟﺒﯿﺎﻧﺎت اﻟﺴﺎﺑﻘﺔ ﻗﺒﻞ ان ﯾﺤﺪث ‪ Checkpoint‬ﻟﻠﻤﻠﻒ‬
‫أو ﻣﺠﻤﻮﻋﺔ اﻟﻤﻠﻔﺎت اﻟﻤﻤﺘﻠﺌﺔ‪.‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ﻟﻜﯿﻔﯿﺔ وﺿﻊ ال ‪ Database‬ﺗﺤﺖ ﺣﺎﻟﺔ ال ‪ Archivelog‬أو ﺣﺎل ‪.Noarchivelog‬‬

‫‪25‬‬











INSTALLING & MANAGING


ORACLE

26
DATABASE ADMINISTRATION TOOLS
: ‫" ﻓﻲ اﻻوراﻛﻞ أھﻤﮭﺎ‬Tools" ‫ﯾﺘﻮﻓﺮ ﻋﺪد ﻣﻦ اﻷدوات‬

ORACLE UNIVERSAL INSTALLER (OUI) ·

ORACLE DATABASE CONFIGURATION ASSISTANT ·

SQL PLUS ·

ORACLE ENTERPRISE MANAGER (OEM) ·

PASSWORD FILE UTILITY ·

:ORACLE UNIVERSAL INSTALLER (OUI)

‫" ﺗﺴﺘﻄﯿﻊ ﺑﺪأ ال‬Windows" ‫ ﻓﻲ ﻧﻈﺎم اﻟﻮﯾﻨﺪوز‬.‫" اﻻوراﻛﻞ‬Install" ‫ ﻟﺘﻨﺼﯿﺐ‬OUI ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ال‬
.runInstaller ‫ ﻓﯿﺠﺐ ﻛﺘﺎﺑﺔ‬Unix ‫ أﻣﺎ ﻓﻲ ﻧﻈﺎم ال‬، Setup.exe ‫ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ ﻣﻠﻒ اﻟﺘﻨﺼﯿﺐ ال‬OUI

."Windows" ‫ ﻓﻲ ﻧﻈﺎم اﻟﻮﯾﻨﺪوز‬OUI ‫ ﯾﻮﺿﺢ ال‬2.1 ‫اﻟﺮﺳﻢ‬

2.1 ‫اﻟﺮﺳﻢ‬

27
‫ﻣﻦ أھﻢ ﻣﻤﯿﺰات ال ‪:OUI‬‬

‫ﯾﻤﻜﻦ ﺗﻨﺼﯿﺐ اﻷوراﻛﻞ اﻛﺜﺮ ﻣﻦ ﻣﺮة ﻋﻠﻰ ذات ﻣﻮﻗﻊ اﻟﺘﺨﺰﯾﻦ ﻣﺜﻞ ال‪ Hard Disk‬ﺑﺎﺳﺘﺨﺪام اﺳﻢ‬ ‫·‬
‫ﻣﺨﻠﺘﻒ ﻟﻞ ‪ ORACLE HOME‬اﻟﻤﻮﺿﺢ ﻓﻲ رﺳﻢ ‪) 2.1‬أﺳﻔﻞ ﻛﻠﻤﺔ ‪ (Destination‬و ﯾﻤﻜﻦ‬
‫ﺗﻨﺼﯿﺐ ﻧﺴﺨﺔ ﻗﺪﯾﻤﺔ "‪ "Old Version‬ﻟﻼوراﻛﻞ ﻣﻊ ﻧﺴﺨﺔ ﺟﺪﯾﺪة "‪ "New Version‬ﻓﻲ ذات‬
‫اﻟﻤﻮﻗﻊ‪.‬‬

‫ﯾﻤﻜﻦ ﺗﻨﺼﯿﺐ اﻷوراﻛﻞ ﻣﻦ اﻹ ﻧﺘﺮﻧﺖ ﻋﺒﺮ وﺻﻠﺔ ال ‪ HTTP‬ﺣﯿﺚ ﺗﻮاﺟﺪ ﻧﺴﺨﺔ اﻷوراﻛﻞ‪ ،‬وﺑﺬﻟﻚ ﯾﻤﻜﻦ‬ ‫·‬
‫ﺗﻨﺼﯿﺐ اﻷوراﻛﻞ ﻣﻦ ﻗﺒﻞ ﻓﺮع ﺷﺮﻛﺔ ﻓﻲ دوﻟﺔ ﻏﯿﺮ اﻟﺪوﻟﺔ اﻟﺘﻲ ﯾﻮﺟﺪ ﺑﮭﺎ ﻣﻘﺮھﺎ اﻷﺻﻠﻲ ) ﺣﯿﺚ ﺗﺘﻮاﺟﺪ‬
‫ﻧﺴﺨﺔ اﻷوراﻛﻞ(‪.‬‬

‫ﯾﻤﻜﻦ أن ﯾﺴﺘﻌﻤﻞ ﻹزاﻟﺔ اﻷوراﻛﻞ ﻣﻦ اﻟﺠﮭﺎز أو اﻟﺴﯿﺮﻓﺮ )‪(Uninstall or Deinstall‬‬ ‫·‬

‫ﯾﻌﻤﻞ ﺑﻌﺪد ﻣﺨﺘﻠﻒ ﻣﻦ اﻟﻠﻐﺎت ﻣﺜﻞ اﻻﻧﺠﻠﯿﺰي و اﻟﻔﺮﻧﺴﻲ و اﻷﻟﻤﺎﻧﻲ و ﻏﯿﺮھﺎ‪.‬‬ ‫·‬

‫ﯾﻤﻜﻦ ان ﯾﻌﻤﻞ ﺗﺤﺖ اﻷﻧﻈﻤﺔ اﻟﺘﻲ ﻻ ﺗﻮﻓﺮ ﻧﻈﺎم ال ‪ GUI‬واﻟﺘﻲ ﺗﻜﻮن ﻓﯿﮭﺎ اﻷواﻣﺮ ﺑﺸﻜﻞ ﻛﺘﺎﺑﻲ‬ ‫·‬
‫‪ Command‬وﻟﯿﺲ ﻛﻤﺎ ﻓﻲ ال ‪ Windows‬اﻟﺬي ﯾﻌﻤﻞ ﺗﺤﺖ ﻧﻈﺎم ال ‪ GUI‬ﻣﺜﻞ اﻟﺮﺳﻢ ‪.2.1‬‬
‫وﺗﺴﻤﻰ اﻟﻄﺮﯾﻘﺔ ﺑﺎﺳﻢ اﻟﻄﺮﯾﻘﺔ اﻟﺼﺎﻣﺘﺔ "‪ "Silent Mode‬وﯾﺘﻢ اﺳﺘﻌﻤﺎل ﻣﻠﻒ ﯾﺴﻤﻰ ‪Response‬‬
‫‪.File‬‬

‫‪:Response File‬‬

‫ھﻮ ﻣﻠﻒ )‪ (any name.txt‬ﯾﺤﻔﻆ اﻟﺒﯿﺎﻧﺎت اﻟﻼزﻣﺔ ﻟﻌﻤﻠﯿﺔ اﻟﺘﻨﺼﯿﺐ ﻣﺜﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻓﻲ اﻟﺮﺳﻢ ‪2.1‬‬
‫) ﻣﺜﻞ ﺑﯿﺎﻧﺎت ال ‪ Source‬و ال ‪.(Destination‬‬

‫‪:ORACLE DATABASE CONFIGURATION ASSISTANT‬‬

‫ﯾﺴﺘﺨﺪم ﻟﻸﻏﺮاض اﻟﺘﺎﻟﯿﺔ )اﻧﻈﺮ اﻟﺮﺳﻢ ‪:(2.2‬‬

‫ﺗﻜﻮﯾﻦ اﻟﺒﯿﺎﻧﺎت "‪."Database‬‬ ‫·‬

‫ﺣﺬف اﻟﺒﯿﺎﻧﺎت "‪."Database‬‬ ‫·‬

‫ﺗﻌﺪﯾﻞ ﺧﻮاص اﻟﺒﯿﺎﻧﺎت "‪."Database‬‬ ‫·‬

‫ادارة ال ‪.Templates‬‬ ‫·‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎ ًﻓﻲ ﻓﺼﻞ أﺧﺮ ﻟﺠﻤﯿﻊ اﻷﻏﺮاض‪.‬‬

‫‪28‬‬
‫رﺳﻢ ‪2.2‬‬

‫‪:SQL PLUS‬‬

‫ھﻲ اداة ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ اﻟﺘﻔﺎﻋﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت‪ ،‬ﺣﯿﺚ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ اﻟﺪﺧﻮل اﻟﻰ اﻟﺒﯿﺎﻧﺎت‪ ،‬اﺳﺘﺨﺮاج‬
‫ﺑﯿﺎﻧﺎت‪ ،‬اﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت‪ ،‬ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎت‪ ،‬واﻏﻼق اﻟﺒﯿﺎﻧﺎت "‪ ."Database‬ﻣﻦ اﻟﻤﻔﺮوض أن ﺗﻜﻮن ﻗﺪ ﻋﻤﻠﺖ ﻣﻊ‬
‫ال ‪ SQL PLUS‬ﺧﻼل دراﺳﺘﻚ ﻟﻞ ‪ SQL‬وﺗﻌﺮﻓﺖ ﻋﻠﯿﮫ ﺟﯿﺪاً‪.‬‬

‫رﺳﻢ ‪2.3‬‬

‫‪29‬‬
‫)‪:ORACLE ENTERPRISE MANAGER (OEM‬‬

‫ھﻮ ﻧﻈﺎم أداري ﯾﻌﻤﻞ ﻋﻠﻰ اﻟﺘﺤﻜﻢ ﺑﻤﻜﻮﻧﺎت اﻷوراﻛﻞ وادارة اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل ﻧﻈﺎم ال ‪)GUI‬اي ﯾﺘﻢ اﻟﻘﯿﺎم‬
‫ﺑﻤﻌﻈﻢ اﻷواﻣﺮ ﻣﻦ ﺧﻼل اﺳﺘﻌﻤﺎل اﻟﻔﺄرة "‪.("Mouse‬‬

‫ﻣﻦ أھﻢ ﻣﻜﻮﻧﺎت ال ‪:OEM‬‬

‫‪CONSOLE‬‬ ‫·‬
‫‪ORACLE MANAGEMENT SERVER‬‬ ‫·‬
‫‪MANAGED NODES‬‬ ‫·‬

‫رﺳﻢ ‪2.4‬‬

‫‪:Console‬‬

‫أداة "‪ "GUI Tool‬ﻣﻦ اﻷدوات اﻟﮭﺎﻣﺔ ﺣﯿﺚ ﺗﻌﻤﻞ ﻛﻤﺤﻄﺔ ﻹدارة ﺟﻤﯿﻊ اﻟﻤﮭﻤﺎت ﻓﻲ أوراﻛﻞ‪ .‬ﻣﻦ ھﻨﺎ ﯾﻤﻜﻦ‬
‫اﻟﺘﺤﻜﻢ ﺑﺎل‪ Instance‬وﯾﻤﻜﻦ اﻟﺘﺤﻜﻢ ﺑﺎل ‪ Tables‬و ﻏﯿﺮھﺎ و ﺗﻨﻔﯿﺬ اﻟﻤﮭﻤﺎت ﻋﻦ ﻃﺮﯾﻖ اﻟﻔﺄرة "‪"Mouse‬‬
‫واﻹﺧﺘﯿﺎرات اﻟﻤﺘﻌﺪدة ﻋﻮﺿﺎً ﻋﻦ ﺗﻨﻔﯿﺬ اﻟﻤﮭﻤﺎت ﺑﻮاﺳﻄﺔ ﺟﻤﻞ ال ‪.SQL‬‬

‫‪30‬‬
‫رﺳﻢ ‪2.5‬‬

‫ﻣﻦ اﻟﻤﻼﺣﻆ ﻣﻦ اﻟﺮﺳﻢ ‪ 2.4‬أن ال ‪ Console‬ﯾﺴﺘﻄﯿﻊ اﻟﺪﺧﻮل اﻟﻰ ‪ Oracle Server‬ﺑﻄﺮﯾﻘﺘﯿﯿﻦ ھﻤﺎ‪:‬‬
‫‪ :Standalone‬ﺑﻄﺮﯾﻘﺔ ﻣﺒﺎﺷﺮة دون اﻟﺤﺎﺟﺔ اﻟﻰ ‪) .Oracle Management Server‬ﺳﮭﻢ رﻗﻢ ‪(2‬‬
‫ﻋﺒﺮ ال ‪ :OMS‬ﻋﺒﺮ ال ‪) .Oracle Management Server‬أﺳﮭﻢ رﻗﻢ ‪(1‬‬

‫‪:DBA Tools‬‬

‫ھﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﯾﻤﻜﻦ ﺗﺸﻐﯿﻠﮭﺎ ﻣﻦ ال ‪:Console‬‬

‫‪ :Instance Manager‬ﯾﺴﺘﺨﺪم ﻟﺘﺸﻐﯿﻞ واﻏﻼق وﻣﺮاﻗﺒﺔ اﻟﺒﯿﺎﻧﺎت "‪."Database‬‬


‫‪ :Security Manager‬ﯾﺴﺘﺨﺪم ﻹدارة ‪ Users Accounts‬و ‪.Privileges‬‬
‫‪ :Storage Manager‬ﯾﺴﺘﺨﺪم ﻟﻠﺘﺤﻜﻢ ﻓﻲ ال ‪ Tablespaces‬وال ‪ Data Files‬وﻏﯿﺮھﺎ‪.‬‬
‫‪ :Schema Manager‬ﯾﺴﺘﺨﺪم ﻟﺘﻜﻮﯾﻦ وادارة ال ‪ Tables‬و ‪ Views‬وال ‪.Indexes‬‬
‫‪ :SQL PLUS Worksheet‬اداة ﻟﻜﺘﺎﺑﺔ ﺟﻤﻞ ال ‪ SQL‬وﺗﻨﻔﯿﺬھﺎ‪.‬‬

‫)‪:Oracle Management Server (OMS‬‬

‫أھﻢ ﻣﻜﻮﻧﺎت ال ‪ Oracle Enterprise Manager‬ﯾﻘﻮم ﺑﺪور اﻟﻮﺳﯿﻂ ﺑﯿﻦ ال ‪ Console‬و ال ‪Managed‬‬
‫‪ Nodes‬ﻓﻲ ﺗﺒﺎدل اﻟﺒﯿﺎﻧﺎت ﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ ادارة ‪ User Accounts‬وﻋﻤﻠﯿﺎت ﻣﺨﺘﻠﻔﺔ ﻣﺜﻞ ‪.Jobs, Events‬‬
‫ﯾﻘﻮم ﺑﺎﺳﺘﻌﻤﺎل ال ‪ Repository‬ﻟﺘﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت اﻟﻨﻈﺎم "‪ "System Data‬وﺑﯿﺎﻧﺎت اﻟﺒﺮاﻣﺞ واﻷدوات و‬
‫ﺑﯿﺎﻧﺎت ال ‪.Managed Nodes‬‬

‫‪31‬‬
‫‪:Managed Nodes‬‬

‫ﻗﺪ ﺗﺘﻜﻮن ال ‪ Node‬ﻣﻦ ال ‪ Database‬وﺧﺪﻣﺎت أﺧﺮى‪ .‬ﯾﻮﺟﺪ ﻋﻠﻰ ﻛﻞ ‪ Node‬ﻣﺎ ﯾﻌﺮف‬


‫ﺑﺎﺳﻢ ‪ Oracle Intelligent Agent‬ﯾﻘﻮم ﺑﺎﻟﺘﻮاﺻﻞ ﻣﻊ ‪ OMS‬وﯾﺆدي اﻟﻤﮭﺎم اﻟﻤﺮﺳﻠﺔ ﻣﻦ ﻗﺒﻞ ال‬
‫‪ ،Console‬وھﻮ ﯾﻌﻤﻞ ﺑﺸﻜﻞ ﻣﻨﻔﺮد وﯾﻤﻜﻦ ان ﯾﺆدي ﻣﮭﺎم ﻣﺜﻞ اﻏﻼق و ﺗﺸﻐﯿﻞ ال ‪ Database‬وﯾﻠﺰم‬
‫‪ Oracle Intelligent Agent‬واﺣﺪ ﻓﻘﻂ ﻋﻠﻰ ﻛﻞ ‪.Node‬‬

‫‪:PASSWORD FILE UTILITY‬‬

‫ﺗﻌﺮف ﺑﺎﺳﻢ ‪ Orapwd‬وﺗﺴﺘﺨﺪم ﻓﻲ ﺗﻜﻮﯾﻦ ال ‪.Password File‬‬

‫ﻟﺘﻜﻮﯾﻦ ال ‪ Password File‬ﯾﺠﺐ اﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;‪$ORAPWD FILE = filename PASSWORD = yourpassword ENTRIES=number‬‬

‫ﺣﯿﺚ ان ال ‪ File‬ھﻮ اﺳﻢ اﻟﻤﻠﻒ وﻣﻮﻗﻌﮫ ﻋﻠﻰ اﻟﺠﮭﺎز‪ ،‬وال ‪ Password‬ھﻲ ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺨﺎﺻﺔ ب‬
‫‪ SYSDBA‬و ‪ ،SYSOPER‬وال ‪ Entries‬ﺗﻤﺜﻞ اﻟﻌﺪد اﻷﻗﺼﻰ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ اﻟﺬﯾﻦ ﯾﺤﻖ ﻟﮭﻢ اﻟﺪﺧﻮل‬
‫اﻟﻰ ال ‪ Database‬ﻓﻲ ھﯿﺌﺔ ‪ SYSDBA‬او ‪.SYSOPER‬‬

‫ﻋﻨﺪﻣﺎ ﺗﻘﻮم ﺑﺎﻟﺪﺧﻮل ﻛﻤﺴﺘﺨﺪم ال ‪ SYSDBA‬ﻓﺎﻧﻚ ﺗﺪﺧﻞ اﻟﻰ ‪ SYS Schema‬وﻟﯿﺲ ال ‪ Schema‬اﻟﺨﺎص‬
‫ﺑﻚ وﻛﺬﻟﻚ ﻋﻨﺪ اﻟﺪﺧﻮل ﻛﻤﺴﺘﺨﺪم ال ‪ SYSOPER‬ﻓﺎﻧﻚ ﺗﺪﺧﻞ اﻟﻰ ‪.PUBLIC Schema‬‬

‫ﺗﺬﻛﺮ‪ :‬ﻣﻠﻒ ال ‪ Password File‬ﻣﻦ اﻟﻔﺼﻞ اﻷول‪.‬‬

‫‪32‬‬
AUTHENTICATION METHODS

‫ ﻋﻨﺪ ﺑﺪاﯾﺔ‬User Accounts ‫" ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﻜﻮﯾﻦ اﺛﻨﯿﻦ‬Database" ‫ﻟﻠﻘﯿﺎم ﺑﺎﻟﻤﮭﻤﺎت اﻹدارﯾﺔ ﻟﻠﺒﯿﺎﻧﺎت‬
‫ ﻓﻲ‬Privileges ‫ اﻟﺬﯾﻦ ﯾﻤﻠﻜﺎن ﺟﻤﯿﻊ ال‬SYSTEM ‫ و ال‬SYS ‫" ھﻤﺎ‬Database" ‫ﺗﻜﻮﯾﻦ اﻟﺒﯿﺎﻧﺎت‬
.DBA Role ‫اﻷوراﻛﻞ أو ﻣﺎ ﯾﺴﻤﻰ ال‬

‫ اﻣﺎ ﻛﻠﻤﺔ اﻟﺴﺮ ﻟﻞ‬change_on_install ‫ ﻋﻨﺪ ﺑﺪاﯾﺔ ﺗﻜﻮﯾﻦ اﻟﺒﯿﺎﻧﺎت ھﻲ‬SYS ‫ ﻛﻠﻤﺔ اﻟﺴﺮ ﻟﻞ‬:‫ﻣﻼﺣﻈﺔ‬
.manager ‫ ھﻲ‬SYSTEM

.Database Data Dictionary ‫" ل‬Owner" ‫ ھﻮ اﻟﻤﺎﻟﻚ‬SYS ‫ ﯾﻌﺘﺒﺮ ال‬:2‫ﻣﻼﺣﻈﺔ‬

Database ‫ اﻟﺪﺧﻮل اﻟﻰ ال‬DBA Role ‫ھﻨﺎك ﻃﺮﯾﻘﺘﺘﯿﻦ ﯾﻤﻜﻦ اﻟﺴﻤﺎح ﻓﯿﮭﺎ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ اﻟﺬﯾﻦ ﯾﻤﻠﻜﻮن ال‬
.Operating System Authentication‫ و‬Password File Authentication :‫وادارة اﻟﺒﯿﺎﻧﺎت ھﻤﺎ‬

:PASSWORD FILE AUTHENTICATION

‫ وﻟﺘﺸﻐﯿﻞ ھﺬا اﻟﻨﻈﺎم ﯾﺠﺐ‬،‫ واﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻓﻲ ھﺬا اﻟﻨﻈﺎم‬Password File Utility ‫ﻟﻘﺪ ﺗﻄﺮﻗﻨﺎ ﻗﺒﻞ ﻗﻠﯿﻞ ﻟﻞ‬
:‫اﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‬

.ORAPWD ‫ ﻋﻦ ﻃﺮﯾﻖ ال‬Password File ‫ ﺗﻜﻮﯾﻦ ﻣﻠﻒ ال‬-1

‫ اﻟﺬي ھﻮ أﺣﺪ ﻣﻜﻮﻧﺎت ال‬REMOTE_LOGIN_PASSWORDFILE ‫ وﺿﻊ ال‬-2


.EXCLUSIVE ‫ اﻟﻰ اﻟﺤﺎﻟﺔ‬Initialization Parameter File

‫ اﻟﻰ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ‬SYSOPER ‫ أو‬SYSDBA ‫ اﻟﺨﺎص ب‬Privileges ‫" ال‬Grant" ‫ اﻋﻄﺎء‬-3


.DBA Role ‫اﻟﺠﺪد اﻟﺬﯾﻦ ﺗﻢ اﺧﺘﺎرھﻢ ﻟﻠﺤﺼﻮل ال‬

:2.1 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

SQL PLUS ‫ اﻛﺘﺐ اﻟﺘﺎﻟﻲ ﻓﻲ ال‬:1 ‫اﻟﺨﻄﻮة‬


$ORAPWD FILE=c:\oracle_home\ora92\dbs\myfile PASSWORD=newadmin
ENTRIES=5;

:2 ‫اﻟﺨﻄﻮة‬
SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE;

.Initialization Parameter File ‫ ﻓﯿﺠﺐ ﺗﻐﯿﯿﺮ اﻟﺤﺎﻟﺔ ﻓﻲ ال‬EXCLUSIVE ‫اذا ﻛﺎﻧﺖ اﻟﺤﺎﻟﺔ ﻏﯿﺮ‬

:3 ‫اﻟﺨﻄﻮة‬
GRANT SYSDBA TO Ahmad;

:‫ اﻛﺘﺐ اﻟﺘﺎﻟﻲ‬Database ‫ﻟﻠﺪﺧﻮل اﻟﻰ ال‬


CONNECT sys/newadmin AS SYSDBA;

33
‫‪:OPERATING SYSTEM AUTHENTICATION‬‬

‫ﺑﻤﺠﺮد اﻟﺪﺧﻮل اﻟﻰ ال ‪) Operating System‬ﻣﺜﺎل‪ :‬اﻟﻮﯾﻨﺪوز( ﺗﺴﺘﻄﯿﻊ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬دون‬
‫اﻟﺤﺎﺟﺔ اﻟﻰ ﻛﻠﻤﺔ ﺳﺮ أو اﺳﻢ ﻣﺴﺘﺨﺪم‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺠﺐ أن ﯾﻜﻮن ال ‪ REMOTE_LOGIN_PASSWORDFILE‬ﻓﻲ ﺣﺎﻟﺔ ‪ NONE‬ﻟﯿﻌﻤﻞ‬


‫اﻟﻨﻈﺎم‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.2‬‬

‫ﺑﻌﺪ اﻟﺪﺧﻮل اﻟﻰ ال ‪ SQLPLUS‬اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪CONNECT / AS SYSDBA‬‬

‫ﺣﺎﻻت ال ‪:Remote_Login_Passwordfile‬‬

‫ﯾﻮﺟﺪ ﺛﻼﺛﺔ ﺣﺎﻻت ﯾﻤﻜﻦ وﺿﻊ ال ‪ Remote_Login_Passwordfile‬ﻓﯿﮭﺎ ھﻲ‪:‬‬

‫‪ :EXCLUSIVE‬ﺗﺤﺪد ان ‪ Instance‬واﺣﺪ ﻓﻘﻂ ﯾﻤﻜﻦ ان ﯾﺴﺘﺨﺪم ال ‪ Password File‬وﯾﻤﻜﻦ‬ ‫·‬


‫اﻋﻄﺎء "‪ "Grant‬ال ‪ SYSDBA Privileges‬أو ال ‪ SYSOPER Privileges‬ﻟﻤﺴﺘﺨﺪﻣﯿﻦ‬
‫أﺧﺮﯾﻦ‪ ،‬وھﻲ ﺿﺮورﯾﺔ ﻟﻨﻈﺎم ال ‪.Password File Authentication‬‬

‫‪ :SHARED‬ﺗﺤﺪد ان ﺑﺎﺳﺘﻄﺎﻋﺔ أﻛﺜﺮ ﻣﻦ ‪ Instance‬اﺳﺘﺨﺪام ال ‪ Password File‬وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ‬ ‫·‬


‫اﺿﺎﻓﺔ ﻣﺴﺘﺨﺪﻣﯿﻦ أﺧﺮﯾﯿﻦ ﻟﻞ ‪ SYSDBA‬أو ‪ SYSOPER‬واﻟﻤﺴﺘﺨﺪم اﻟﻮﺣﯿﺪ اﻟﻤﻌﺮف ﻓﻲ اﻟﻤﻠﻒ‬
‫ھﻮ ‪.SYS‬‬

‫‪ :NONE‬ﺿﺮوري ﻟﻨﻈﺎم ‪.Operating System Authentication‬‬ ‫·‬

‫‪34‬‬
‫‪OPTIMAL FLEXIBLE ARCHITECTURE‬‬

‫ﯾﻌﺘﺒﺮ ال ‪ OFA‬ﻧﻈﺎم ﻟﺘﺮﺗﯿﺐ و ﺗﻮزﯾﻊ ﻣﻠﻔﺎت ال ‪ Database‬اﻟﻤﺨﺘﻠﻔﺔ ﻋﻠﻰ ﺣﺴﺐ ﻧﻮﻋﮭﺎ أو اﺳﺘﺨﺪاﻣﮭﺎ‪ ،‬وھﻮ‬
‫ﻣﻌﺘﻤﺪ ﻓﻲ ﺟﻤﯿﻊ اﻷﻧﻈﻤﺔ اﻟﺘﻲ ﯾﻌﻤﻞ ﺑﮭﺎ اﻷوراﻛﻞ ﻣﺜﻞ ‪.Windows, UNIX‬‬
‫ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم ال ‪ OFA‬ﯾﻤﻜﻦ ان ﻧﺤﻘﻖ ﻋﺪة ﻓﻮاﺋﺪ ﻣﻨﮭﺎ ﺳﮭﻮﻟﺔ اﻟﺘﻤﯿﯿﺰ ﺑﯿﻦ اﻟﻤﻠﻔﺎت اﻟﻤﺨﺘﻠﻔﺔ وﺳﮭﻮﻟﺔ اﯾﺠﺎدھﺎ‬
‫وﺳﮭﻮﻟﺔ ادارة اﻷوراﻛﻞ ﺑﺘﻮزﯾﻊ اﻟﻤﻠﻔﺎت ﻛﻞٌ ﺣﺴﺐ ﻧﻮﻋﮫ‪ ،‬وﺗﺴﮭﯿﻞ اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺘﻮﺳﻊ اﻟﺬي ﯾﻄﺮأ ﻋﻠﻰ ال‬
‫‪ Database‬ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ‪.‬‬

‫و ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم ال‪ OFA‬ﻧﺴﺘﻄﯿﻊ‪:‬‬

‫اﻋﺘﻤﺎد اﺳﻠﻮب ﺛﺎﺑﺖ ﻟﺘﺴﻤﯿﺔ اﻟﻤﻠﻔﺎت ﻟﻜﻲ ﻧﺴﺘﻄﯿﻊ اﯾﺠﺎد اﻟﻤﻠﻔﺎت ﺑﺴﮭﻮﻟﺔ‪.‬‬ ‫·‬

‫ﺗﻔﺮﯾﻖ ﻣﻠﻔﺎت ال ‪ Oracle Software‬ﻋﻦ ‪.Oracle Database‬‬ ‫·‬

‫ﺗﻔﺮﯾﻖ ﻣﻠﻔﺎت اﻟﻨﺴﺦ اﻟﻤﺨﺘﻠﻔﺔ "‪ "Versions‬ﻣﻦ اﻷوراﻛﻞ‪.‬‬ ‫·‬

‫ﺗﻔﺮﯾﻖ ﻣﻠﻔﺎت ال ‪ Data files‬ﻋﻦ ﻣﻠﻔﺎت ال ‪ Control Files‬ﻋﻦ ﻣﻠﻔﺎت ال ‪.Redo Log Files‬‬ ‫·‬

‫رﺳﻢ ‪2.6‬‬

‫ﻛﻤﺎ ﺗﻼﺣﻆ ﺗﻮزﯾﻊ ﻣﻠﻔﺎت ال ‪ Database‬اﻟﻤﺨﺘﻠﻔﺔ اﻟﻰ ﻣﺠﻠﺪات ﻣﺨﺘﻠﻔﺔ‪ .‬ﻓﻤﺜﻼً ﺗﺠﺪ ﻣﻠﻒ ال ‪Password File‬‬
‫ﺗﺤﺖ ﻣﺠﻠﺪ ال ‪ dbs‬ﺑﺎﻟﻤﻘﺎﺑﻞ ﺗﺠﺪ ﻣﻠﻔﺎت ال ‪ Control Files‬ﺗﺤﺖ ﻣﺠﻠﺪ ‪ oradata‬وھﻜﺬا‪...‬‬

‫‪35‬‬
‫‪INITIALIZATION PARAMETER FILE‬‬

‫ﻟﺘﺸﻐﯿﻞ ال ‪ Instance‬ﯾﺠﺐ ﺗﻮﻓﺮ ال ‪ .Initialization Parameter File‬ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل أﻛﺜﺮ ﻣﻦ ﻣﻠﻒ‬


‫ﻟﻨﻔﺲ ال ‪ .Database‬ھﻨﺎﻟﻚ ﻧﻮﻋﺎن ﻣﻦ ال ‪ Initialization Parameter File‬ھﻤﺎ‪:‬‬

‫‪ :PFILE‬ﯾﻄﻠﻖ ﻋﻠﯿﮫ اﺳﻢ اﻟﻤﻠﻒ اﻟﺜﺎﺑﺖ "‪ "Static File‬وﯾﻌﺮف ﺑﺎﺳﻢ ‪initSID.ora‬‬ ‫·‬

‫‪ :SPFILE‬ﯾﻄﻠﻖ ﻋﻠﯿﮫ اﺳﻢ اﻟﻤﻠﻒ اﻟﻤﻘﺎوم " ‪ "Persistent File‬وﯾﻌﺮف ﺑﺎﺳﻢ ‪spfileSID.ora‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ال ‪ SID‬ﻋﺒﺎرة ﻋﻦ رﻣﺰ ﻹﺳﻢ ال ‪ .Instance‬ﻓﺎذا ﻛﺎن اﺳﻢ ال ‪ "DbB" Instance‬ﻓﯿﻜﻮن اﺳﻢ‬
‫اﻟﻤﻠﻒ )‪.(initDbB.ora‬‬

‫ﺑﻌﺾ ﻣﺤﺘﻮﯾﺎت ال ‪:Initialization Parameter File‬‬

‫اﻟﻌﻮاﻣﻞ "‪ "Parameters‬اﻟﺨﺎﺻﺔ ﺑﺎل ‪ Instance‬وال ‪ SGA‬ﻣﺜﻞ ال ‪.SGA_MAX_SIZE‬‬ ‫·‬


‫اﺳﻢ ال ‪ Database‬اﻟﺘﻲ ﯾﻌﻤﻞ ﻋﻠﯿﮫ ال ‪.Instance‬‬ ‫·‬
‫اﺳﻤﺎء و ﻣﻮاﻗﻊ ال ‪.Control Files‬‬ ‫·‬
‫ﺑﯿﺎﻧﺎت ﻋﻦ ال ‪.Undo Segment‬‬ ‫·‬
‫ﺗﺤﺪﯾﺪ إﻣﺎ ‪Archivelog‬أو ‪.Noarchivelog‬‬ ‫·‬

‫رﺳﻢ ‪2.7‬‬

‫‪:PFILE‬‬

‫ھﻮ ﻣﻠﻒ ﻣﻦ ﻧﻮﻋﯿﺔ ال ‪ TXT‬اﻟﺬي ﯾﻤﻜﻦ ﻓﺘﺤﮫ وﺗﻐﯿﯿﺮه ﺑﻮاﺳﻄﺔ ال ‪ Notepad‬وﻏﯿﺮھﺎ ﻣﻦ ﺑﺮاﻣﺞ اﻟﻜﺘﺎﺑﺔ‪.‬‬
‫ﯾﺘﻢ ﻗﺮاءة ﻣﺤﺘﻮﯾﺎﺗﮫ ﻋﻨﺪ ﺑﺪاﯾﺔ ﺗﺸﻐﯿﻞ ال ‪ Instance‬وﻣﻌﻈﻢ اﻟﻌﻮاﻣﻞ "‪ "Parameters‬اﻟﻤﻮﺟﻮدة داﺧﻠﮫ ﻻ‬
‫ﺗﻌﻤﻞ ﺑﺸﻜﻞ داﯾﻨﺎﻣﯿﻜﻲ ) ﯾﺴﺘﻠﺰم اﻏﻼق وﻓﺘﺢ ال ‪ Instance‬ﻣﻦ ﺟﺪﯾﺪ ﻟﻜﻲ ﯾﺤﺪث اﻟﺘﻐﯿﯿﺮ( ﻋﺪا ﺑﻌﺾ اﻟﻌﻮاﻣﻞ‬
‫"‪ "Parameters‬اﻟﺘﻲ ﯾﻤﻜﻦ ﺗﻌﺪل داﯾﻨﺎﻣﯿﻜﯿﺎً ﻓﻲ اﻟﺬاﻛﺮة وﻟﻜﻦ ﺗﻈﻞ ﻓﻲ ال ‪ PFILE‬ﻛﻤﺎ ھﻲ )أي اﻧﮫ ﻋﻨﺪ‬
‫ﺗﺸﻐﯿﻞ ال ‪ Instance‬ﻣﺮة أﺧﺮى ﯾﺮﺟﻊ اﻟﻮﺿﻊ اﻟﻰ ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ اﻟﺪاﯾﻨﺎﻣﯿﻜﻲ(‪.‬‬
‫ﯾﻮﻓﺮ ال ‪ OUI‬ﻣﻠﻒ ﻣﺒﺪﺋﻲ ﻋﻨﺪ ﺑﺪاﯾﺔ ﺗﻜﻮﯾﻦ ال ‪ Database‬اﺳﻤﮫ ‪ init.ora‬ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎﻟﮫ ﻟﺘﻜﻮﯾﻦ ال‬
‫‪.PFILE‬‬

‫‪36‬‬
:PFILE ‫ﺑﻌﺾ ﻣﻜﻮﻧﺎت ال‬

db_block_size=4096
db_cache_size=33554432
open_cursors=300
background_dump_dest=C:\oracle2\ora92\admin\dbname\bdump
core_dump_dest=C:\oracle2\ora92\admin\dbname\cdump
timed_statistics=TRUE
user_dump_dest=C:\oracle2\ora92\admin\dbname\udump
db_domain=oracle
remote_login_passwordfile=EXCLUSIVE
control_files=("C:\oracle2\ora92\oradata\dbname\CONTROL01.CTL",
"C:\oracle2\ora92\oradata\dbname\CONTROL02.CTL",
"C:\oracle2\ora92\oradata\dbname\CONTROL03.CTL")
compatible=9.0.0
db_name=dbname
instance_name=dbname
java_pool_size=33554432
large_pool_size=1048576
shared_pool_size=33554432
processes=150
fast_start_mttr_target=300
sort_area_size=524288
undo_management=AUTO
undo_tablespace=UNDOTBS

:PFILE ‫ﻗﻮاﻋﺪ ال‬

"Parameters" ‫ ﻗﯿﻤﺔ اﻟﻌﻮاﻣﻞ‬DBA ‫ أي اذا ﻟﻢ ﯾﺤﺪد ال‬،‫" اﺧﺘﯿﺎرﯾﺔ‬Parameters" ‫ﻛﻞ اﻟﻌﻮاﻣﻞ‬ ·


‫ ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ‬PFILE ‫" ﻓﻲ ﻣﻠﻒ ال‬Parameter" ‫أو ﻟﻢ ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﻌﺎﻣﻞ‬
"Default Value" ‫" و ﺗﻜﻮن ﻗﯿﻤﺘﮫ ھﻲ اﻟﻘﯿﻤﺔ اﻟﻤﺤﺪدة ﺳﻠﻔﺎً ﻣﻦ ﻗﺒﻞ اﻷوراﻛﻞ‬Parameter"

.‫ ﻏﯿﺮ ﻣﮭﻢ‬PFILE ‫" ﻓﻲ ال‬Parameters" ‫ﺗﺮﺗﯿﺐ اﻟﻌﻮاﻣﻞ‬ ·

‫" اﻟﻮاﺣﺪ ﻓﯿﺠﺐ وﺿﻊ اﻟﻘﯿﻢ داﺧﻞ ﻗﻮﺳﯿﻦ و‬Parameter" ‫اذا ﻛﺎن ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ ﻟﻠﻌﺎﻣﻞ‬ ·
.Control_Files ‫ﺗﻔﺮﯾﻘﮭﻢ ﺑﻔﺎﺻﻠﺔ ﻛﻤﺎ ﻓﻲ‬

.(‫" ﺑﮭﺬه اﻟﺼﯿﻐﺔ )اﻟﻌﺎﻣﻞ = اﻟﻘﯿﻤﺔ‬Paramter" ‫ﺗﺤﺪد ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ‬ ·

‫ وﻻ ﯾﻘﺮأھﺎ‬DBA ‫( ﻓﻲ اﻟﻤﻠﻒ ﻟﻮﺿﻊ ﻣﻼﺣﻈﺎت داﺧﻞ اﻟﻤﻠﻒ )ھﺬه اﻟﺒﯿﺎﻧﺎت ﻟﻞ‬#) ‫ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل‬ ·
.(‫اﻷوراﻛﻞ‬

37
‫‪:SPFILE‬‬

‫ھﻮ ﻣﻠﻒ ﻣﻦ ﻧﻮﻋﯿﺔ ال ‪ binary‬اﻟﺬي ﯾﻘﻮم ﺑﺎدارﺗﮫ ال ‪ )Oracle Server‬ﻓﺘﺤﮫ و ﺗﻌﺪﯾﻠﮫ( وﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ﺟﻤﯿﻊ‬
‫ﻗﯿﻢ اﻟﻌﻮاﻣﻞ "‪ "Parameters‬اﻟﻤﻮﺟﻮدة داﺧﻠﮫ ﺑﺸﻜﻞ داﯾﻨﺎﻣﯿﻜﻲ )اي ﺑﺎﺳﺘﺨﺪام ال ‪(ALTER SYSTEM‬‬
‫ﺑﺤﯿﺚ ﯾﺘﻢ ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎت ال ‪ SPFILE‬ﻓﻲ اﻟﺬاﻛﺮة أو اﻟﻤﻠﻒ أو اﻷﺛﻨﯿﻦ ﻣﻌﺎً )أي اﻧﮫ ﻋﻨﺪ ﺗﺸﻐﯿﻞ ال ‪Instance‬‬
‫ﻣﺮة أﺧﺮى ﺗﻜﻮن اﻟﺘﻐﯿﺮات اﻟﺘﻲ اﺟﺮﯾﺖ ﻋﻠﻰ ال ‪ SPFILE‬ﺑﻮاﺳﻄﺔ ال ‪ ALTER SYSTEM‬ﻣﻮﺟﻮدة‬
‫وﺛﺎﺑﺘﺔ(‪.‬‬
‫ﻻ ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﻜﻮﯾﻦ ﻣﻠﻒ ‪ SPFILE‬اﺑﺘﺪاﺋﻲ ﻛﻤﺎ ﯾﺤﺪث ﻣﻊ ال ‪ PFILE‬وﻟﻜﻦ ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪SPFILE‬‬
‫ﻣﻦ ال ‪ PFILE‬ﻛﺎ ﺳﯿﺄﺗﻲ ﺷﺮﺣﮫ ﺑﻌﺪ ﻗﻠﯿﻞ‪.‬‬

‫ﻟﺘﻌﺪﯾﻞ اﻟﻌﻮاﻣﻞ "‪ "Parameters‬داﺧﻞ ‪ SPFILE‬ﯾﺠﺐ اﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;]‪ALTER SYSTEM SET PARAMETER = VALUE [SCOPE = SCOPE_VALUE‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اﺳﺘﺨﺪام ال ] [ ﻓﻲ اﻟﻘﻮاﻋﺪ ﯾﺪل ﻋﻠﻰ أن ھﺬا اﻟﺠﺰء اﺧﺘﯿﺎري و ﻓﻲ ﺣﺎﻟﺔ ﻟﻢ ﯾﺘﻢ ﻛﺘﺎﺑﺘﮫ ﯾﺨﺘﺎر اﻷوراﻛﻞ‬
‫ال ‪ . Default‬وال ‪ Default‬ﯾﻜﻮن أﺣﺪ اﻟﺤﻼت اﻷﻛﺜﺮ ﺷﯿﻮﻋﺎً وھﻲ ﺗﻢ اﺧﺘﯿﺎرھﺎ ﻣﺴﺒﻘﺎً ﻣﻦ ﻗﺒﻞ ﻣﺒﺮﻣﺠﻲ‬
‫اﻷوراﻛﻞ‪.‬‬

‫أﻣﺎ ﺣﺎﻻت ال ‪ SCOPE_VALUE‬ﺛﻼث ھﻲ‪:‬‬

‫‪ :MEMORY‬ﯾﺘﻢ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ "‪ "Value‬ال ‪ Parameter‬ﻓﻘﻂ ﻓﻲ اﻟﺬاﻛﺮة‪ ،‬أي ﻋﻨﺪ ﺗﺸﻐﯿﻞ ال‬ ‫·‬
‫‪ Instance‬ﻣﺮة أﺧﺮى ﺗﻠﻐﻰ اﻟﺘﻐﯿﺮات‪.‬‬

‫‪ :SPFILE‬ﯾﺘﻢ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ "‪ "Value‬ال ‪ Parameter‬ﻓﻲ ﻣﻠﻒ ال ‪ SPFILE‬ﻓﻘﻂ‪.‬‬ ‫·‬

‫‪ :BOTH‬ﯾﺘﻢ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ "‪ "Value‬ﻟﻠﻌﺎﻣﻞ "‪ "Parameter‬ﻓﻲ ﻣﻠﻒ ال ‪ SPFILE‬واﻟﺬاﻛﺮة‬ ‫·‬
‫ﻣﻌﺎً‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اذا ﻟﻢ ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﺠﺰء ‪ SCOPE=SCOPE_VALUE‬ﻓﯿﻌﺘﺒﺮ اﻷوراﻛﻞ اﻧﮭﺎ‬


‫‪ BOTH) SCOPE=BOTH‬ھﻲ ال ‪.(Default‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.3‬‬

‫‪ALTER SYSTEM SET SHARED_POOL_SIZE = 33554432‬‬ ‫;‪SCOPE=SPFILE‬‬

‫ﺑﻌﺾ ﻣﻜﻮﻧﺎت ال ‪:SPFILE‬‬

‫'‪*. background_dump_dest='C:\oracle2\ora92\admin\dbname\bdump‬‬
‫‪*. compatible='9.0.0' *.db_block_size=4096 *.db_cache_size=33554432‬‬
‫'‪*. db_domain='oracle‬‬

‫………………‬

‫‪38‬‬
‫ﻟﯿﺴﺖ ﻛﻞ اﻟﻌﻮاﻣﻞ "‪ "Parameters‬ﻓﻲ ال ‪ SPFILE‬اﺧﺘﯿﺎرﯾﺔ‪ ،‬ﯾﻮﺟﺪ ﺳﺒﻊ ﻋﻮاﻣﻞ "‪ "Parameters‬ﯾﺠﺐ‬
‫ان ﺗﺤﺪد ھﻲ‪:‬‬

‫‪.BACKGROUND_DUMP_DEST‬‬ ‫·‬
‫‪USER_DUMP_DEST‬‬ ‫·‬
‫‪DB_NAME‬‬ ‫·‬
‫‪SHARED_POOL_SIZE‬‬ ‫·‬
‫‪COMPATIBLE‬‬ ‫·‬
‫‪DB_BLOCK_BUFFERS‬‬ ‫·‬
‫‪CONTROL_FILES‬‬ ‫·‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ﻟﻠﻌﻮاﻣﻞ "‪ "Parameters‬اﻟﺠﺪﯾﺪة ﻻﺣﻘﺎً‪.‬‬

‫‪:Create SPFILE‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال ‪ SPFILE‬ﻣﻦ ال ‪ PFILE‬اذا ﻛﺎن اﻟﻤﺴﺘﺨﺪم ﯾﻤﻠﻚ ‪ SYSDBA ROLE‬أو‬


‫‪ SYSOPER Role‬ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;]'‪CREATE SPFILE [='location and name'] FROM PFILE[='location and name‬‬

‫ﯾﻤﻜﻦ اھﻤﺎل ذﻛﺮ اﺳﻢ و ﻣﻮﻗﻊ ﻣﻠﻒ ال ‪ SPFILE‬ﻓﻲ اﻟﻘﺎﻋﺪة اذ ﯾﻤﻜﻦ ﻟﻸوراﻛﻞ ﺗﻜﻮﯾﻦ اﻷﺳﻢ ﻋﻠﻰ اﻟﻨﻤﻂ‬
‫اﻟﻤﺬﻛﻮر ﺳﺎﺑﻘﺎً )‪ (spfileSID.ora‬وﻓﻲ اﻟﻤﻮﻗﻊ ال ‪ Default‬وھﻮ ﺿﻤﻦ اﻟﻤﺠﻠﺪ ‪ .dbs‬ﻛﺬﻟﻚ اﻟﺤﺎل ﺑﺎﻟﻨﺴﺒﺔ ﻟﻞ‬
‫‪ PFILE‬ﺣﯿﺚ ﯾﺨﺘﺎر اﻷوراﻛﻞ اﻟﻤﻠﻒ اﻟﻤﻌﺮف ﺑﺎﻷﺳﻢ ‪ initSID.ora‬وﺿﻤﻦ اﻟﻤﺠﻠﺪ ‪.dbs‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻗﺪ ﯾﺨﺘﻠﻒ اﻟﻤﻮﻗﻊ ال ‪ Default‬ﻣﻦ ﻧﺴﺨﺔ أوراﻛﻞ اﻟﻰ أﺧﺮى‪ .‬ﺑﻌﺾ ﻧﺴﺦ اﻷوراﻛﻞ ﺗﻜَﻮن اﻟﻤﻠﻒ ﺿﻤﻦ‬
‫اﻟﻤﺠﻠﺪ ‪.database‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.4‬‬

‫ﻣﻦ ال ‪SQL PLUS‬‬

‫;‪CONNECT / AS SYSDBA‬‬

‫;‪CREATE SPFILE FROM PFILE‬‬

‫‪39‬‬
‫ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ال ‪ SPFILE‬ﻣﻦ ال ‪ CONSOLE‬ﺑﺎﺗﺨﺎذ اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ‪.Enterprise Manager Console‬‬ ‫·‬


‫اﺧﺘﺮ اﻟﻮﺿﻊ ‪.Standalone‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﻗﺎﺋﻤﺔ ال ‪ Database‬ﺛﻢ ﻗﺎﺋﻤﺔ "اﺳﻢ ال ‪"Database‬‬ ‫·‬
‫ﯾﻄﻠﺐ ﻣﻨﻚ اﻻﺳﻢ و ﻛﻠﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫اﻛﺘﺐ اﺳﻢ ال ‪ SYSTEM‬وﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺨﺎص ﺑﮫ‪.‬‬ ‫·‬
‫ﺗﺄﻛﺪ ﻣﻦ وﺿﻊ ‪ Connect as‬اﻟﻰ اﻟﺤﺎﻟﺔ ‪.SYSDBA‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﻗﺎﺋﻤﺔ ال ‪.Instance‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Configuration‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.All Initialization Parameter‬‬ ‫·‬

‫رﺳﻢ ‪2.8‬‬

‫‪40‬‬
‫‪START UP A DATABASE‬‬

‫ﯾﻮﺟﺪ ﺛﻼث ﺣﺎﻻت ﯾﻤﻜﻦ أن ﻧﺒﺪأ ﺗﺸﻐﯿﻞ ال ‪ Database‬وﻟﻜﻞ ﻣﻨﮭﺎ ﺧﺎﺻﯿﺘﮫ واﻟﻮﻇﺎﺋﻒ اﻟﺘﻲ ﯾﻤﻜﻦ اﺟﺮاﺋﮭﺎ ﻓﻲ‬
‫ﺗﻠﻚ اﻟﺤﺎﻟﺔ‪ ،‬اﻟﺤﺎﻻت اﻟ ﺜﺎﻟﺜﺔ ﺑﺎﻟﺘﺮﺗﯿﺐ ‪.NOMOUNT , MOUNT , OPEN :‬‬

‫‪:NOMOUNT‬‬

‫ﺗﺴﻤﻰ ﻋﻤﻠﯿﺔ ‪ Staring the Instance‬ﻷﻧﮫ ﻓﻲ ھﺬه اﻟﻤﺮﺣﻠﺔ ﻓﻘﻂ ﯾﺒﺪأ ﺗﺸﻐﯿﻞ ال ‪ Instance‬دون ﺑﺎﻗﻲ أﺟﺰاء‬
‫ال ‪.Oracle Database‬‬

‫ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻮﻇﯿﻔﺘﯿﻦ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ھﻤﺎ‪:‬‬

‫ﺗﻜﻮﯾﻦ ال ‪ Database‬ﻋﺒﺮ ﺟﻤﻠﺔ ال ‪.(CREATE DATABASE) SQL‬‬ ‫·‬


‫ﺗﻜﻮﯾﻦ أواﻋﺎدة ﺗﻜﻮﯾﻦ ﻣﻠﻔﺎت ال ‪.Control Files‬‬ ‫·‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ﻟﻜﯿﻔﯿﺔ ﺗﻜﻮﯾﻦ ال ‪ Database‬ﺑﺎﺳﺨﺪام ﺟﻤﻞ ال ‪.SQL‬‬

‫ﯾﺘﻢ ﻓﻲ ھﺬه اﻟﻤﺮﺣﻠﺔ ﻋﺪة أﻣﻮر ھﻲ‪:‬‬

‫ﺗﺘﻢ ﻗﺮاءة ﻣﻠﻒ ال ‪ Initialization Parameter File‬ﺑﺤﯿﺚ ﯾﺒﺤﺚ اﻷوراﻛﻞ ﻋﻠﻰ ﻣﻠﻒ‬ ‫·‬
‫‪ SPFILE‬إن ﻟﻢ ﯾﺠﺪ ﯾﺒﺤﺚ ﻋﻦ ‪ PFILE‬وإن ﻟﻢ ﯾﺠﺪ ﺗﺘﻢ ﻗﺮاءة اﻟﻤﻠﻒ ‪.init.ora‬‬
‫ﺣﺠﺰ ﻣﺴﺎﺣﺔ ﻣﻦ اﻟﺬاﻛﺮة ﻟﻞ ‪.SGA‬‬ ‫·‬
‫ﺑﺪأ ال ‪.Background Processes‬‬ ‫·‬
‫ﻓﺘﺢ ﻣﻠﻒ ﯾﺴﻤﻰ ‪ alertSID.log‬وﻣﻠﻔﺎت ﺗﺴﻤﻰ ال ‪.Trace Files‬‬ ‫·‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ﻟﻞ ‪ alertSID.log‬و ‪.Trace Files‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺠﺐ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ "‪ DB_NAME "Parameter‬ﻟﻜﻲ ﯾﻌﻤﻞ ال ‪.NOMOUNT‬‬

‫‪:MOUNT‬‬

‫ﻓﻲ ھﺬه اﻟﻤﺮﺣﻠﺔ ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻮﻇﺎﺋﻒ ﻣﮭﻤﺔ ﻣﺜﻞ‪:‬‬

‫ﺗﻐﯿﯿﺮ "‪ "Rename‬اﺳﻤﺎء ال ‪.Data Files‬‬ ‫·‬


‫اﻣﻜﺎﻧﯿﺔ وﺿﻊ ال ‪ Database‬ﺗﺤﺖ وﺿﻌﯿﺔ ال ‪ ARCHIVELOG‬أو ‪.NOARCHIVELOG‬‬ ‫·‬
‫ﻋﻤﻞ ﺻﯿﺎﻧﺔ "‪ "Recovery‬ﻟﻞ ‪.Database‬‬ ‫·‬

‫ﯾﺘﻢ ﻓﻲ ھﺬه اﻟﻤﺮﺣﻠﺔ ﻋﺪة أﻣﻮر ھﻲ‪:‬‬

‫ﻓﺘﺢ وﻗﺮاءة ﻣﻠﻔﺎت ال ‪.Control Files‬‬ ‫·‬


‫رﺑﻂ ال ‪ Database‬ﺑﺎل ‪ Instance‬اﻟﺬي ﺳﻮف ﯾﻌﻤﻞ ﻋﻠﯿﮭﺎ‪.‬‬ ‫·‬

‫‪41‬‬
‫‪:OPEN‬‬

‫ھﻲ اﻟﺤﺎﻟﺔ اﻟﻌﺎدﯾﺔ اﻟﺘﻲ ﺗﻢ اﻟﻌﻤﻞ ﻓﯿﮭﺎ ﺑﻮاﺳﻄﺔ ال ‪ SQLPLUS‬وﯾﺘﻢ اﺟﺮاء ﺗﻌﺪﯾﻞ وﺣﺬف واﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت‬
‫وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﮭﺎم‪.‬‬

‫ﯾﺘﻢ ﻓﻲ ھﺬه اﻟﻤﺮﺣﻠﺔ ﻋﺪة أﻣﻮر ھﻲ‪:‬‬

‫ﻓﺘﺢ ال ‪. Online Data Files‬‬ ‫·‬


‫ﻓﺘﺢ ال ‪.Online Redo Log Files‬‬ ‫·‬

‫ﻓﻲ ﺣﺎﻟﺔ ﻓﺸﻞ ﻓﺘﺢ ﻣﻠﻔﺎت ال ‪ Data Files‬وال ‪ Redo Files‬او ﻓﻲ ﺣﺎﻟﺔ ﺣﺬﻓﮭﺎ أو ﻧﻘﻠﮭﺎ ﻣﻦ ﻣﻮاﻗﻌﮭﺎ اﻟﻤﺤﺪدة‬
‫ﻓﻲ ال ‪ Control Files‬ﻓﻼ ﯾﻤﻜﻦ ان ﺗﻌﻤﻞ اﻟﺤﺎﻟﺔ ‪.OPEN‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اﺳﻤﺎء وﻣﻮاﻗﻊ ال ‪ Control Files‬ﻣﺨﺰﻧﺔ ﻓﻲ ال ‪ Initialization Parameter Files‬اﻣﺎ‬


‫اﺳﻤﺎء و ﻣﻮاﻗﻊ ال ‪ Data Files‬وال ‪ Redo Log Files‬ﻓﮭﻲ ﻣﺨﺰﻧﺔ ﻓﻲ ال ‪.Control Files‬‬

‫‪:STARTUP Command‬‬

‫ﻟﺘﺸﻐﯿﻞ ال ‪ Database‬ﻓﻲ اﺣﺪى اﻟﺤﻼت اﻟﻤﺬﻛﻮرة ﺳﺎﺑﻘﺎً ﺗﺴﺘﻌﻤﻞ اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]'‪STARTUP [FORCE] [RESTRICT] [PFILE='location and name‬‬


‫; ] ‪[OPEN [recover] [database’s name] | MOUNT | NOMOUNT‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اﺳﺘﺨﺪام ال | ﻓﻲ اﻟﻘﻮاﻋﺪ ﯾﺪل ﻋﻠﻰ اﻧﮭﺎ )أو( "‪ ."OR‬ﻓﻤﺜﻼً ﻻ ﯾﻤﻜﻦ ﻟﻞ ‪ MOUNT‬و ال ‪OPEN‬‬
‫ان ﯾﻜﺘﺒﺎ ﻣﻌﺎً‪.‬‬

‫أواﻣﺮ اﻟﻘﺎﻋﺪة ‪:‬‬

‫‪ :PFILE‬ﺳﺒﻖ ذﻛﺮ ان اﻷوراﻛﻞ ﯾﺒﺤﺚ ﻋﻦ اﻟﻤﻠﻒ ﻋﻨﺪ ﺑﺪاﯾﺔ ﻣﺮﺣﻠﺔ ال ‪ NOMOUNT‬وﻟﻜﻦ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم‬
‫ﺗﺤﺪﯾﺪ ﻣﻠﻒ ﻣﺤﺪد ﻋﻮﺿﺎً ﻋﻠﻰ ان ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺎﻟﺒﺤﺚ ﻋﻨﮫ‪.‬‬

‫‪ :RECOVER‬ﺧﺎﺻﺔ ﻓﻘﻂ ﺑﻤﺮﺣﻠﺔ ال ‪ OPEN‬اذ ﻻ ﯾﻤﻜﻦ ﻛﺘﺎﺑﺘﮭﺎ ﻣﻊ ال ‪ ،MOUNT‬وﻋﻨﺪ اﺳﺘﺨﺪاﻣﮭﺎ‬


‫ﯾﻘﻮم اﻷوراﻛﻞ ﺑﻌﻤﻞ ﻋﻤﻠﯿﺔ ال ‪ RECOVERY‬ﻟﻠﺒﯿﺎﻧﺎت‪.‬‬

‫‪ :RESTRICT‬ﺗﺤﺪد اﻟﻤﺴﺘﺨﺪﻣﯿﻦ اﻟﺬﯾﻦ ﯾﺤﻖ ﻟﮭﻢ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬وھﻢ ﻣﻦ ﯾﻤﻠﻚ ال‬
‫‪ Restricted Session Privilege‬اﻟﺘﻲ ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬

‫‪ :FORCE‬اذا ﻛﺎن ال ‪ Instance‬ﯾﻌﻤﻞ ﻓﻲ اﺣﺪ اﻟﺤﺎﻻت ﻓﯿﻤﻜﻦ اﻏﻼﻗﮫ ﺛﻢ ﺗﺸﻐﯿﻠﮫ ﻣﺒﺎﺷﺮة ﻓﻲ اﻟﺤﺎﻟﺔ اﻟﻌﺎدﯾﺔ‪.‬‬
‫اذاً ھﻲ ﻣﺜﻞ ﻋﻤﻠﯿﺔ ال "‪ "Restart‬ﻓﻲ اﻟﻮﯾﻨﺪوز‪.‬‬

‫‪42‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.5‬‬

‫ﻻﺳﺘﺨﺪام ﻗﺎﻋﺪة ال ‪ STARTUP‬ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﺎﻟﺘﺎﻟﻲ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ SQLPLUS‬أو ﻋﺒﺮ ال ‪.Command Prompt‬‬ ‫‪-1‬‬


‫ادﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫‪-2‬‬
‫ﯾﺠﺐ اﻟﺪﺧﻮل اﻟﻰ ‪ SYSDBA‬ﻋﻦ ﻃﺮﯾﻖ ;‪CONNECT \ AS SYSDBA‬‬ ‫‪-3‬‬
‫اﻏﻠﻖ ال ‪ Database‬ﺑﻮاﺳﻄﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ‪SHUTDOWN; :‬‬ ‫‪-4‬‬

‫;‪ STARTUP‬ﻓﻲ ھﺬه اﻟﺠﻤﻠﺔ ﯾﻌﺘﺒﺮ اﻷوراﻛﻞ اﻧﮭﺎ ‪ OPEN‬ﺑﺎﻋﺘﺒﺎرھﺎ ال ‪.Default‬‬


‫;‪STARTUP MOUNT‬‬
‫;‪STARTUP NOMOUNT‬‬

‫‪:ALTER DATABASE Command‬‬

‫ﯾﻤﻜﻦ ان ﺗﺴﺘﺨﺪم ﻓﻲ ﻋﺪد ﻣﻦ اﻟﻮﻇﺎﺋﻒ ﻣﻨﮭﺎ ‪:‬‬

‫‪ -1‬ﺗﻐﯿﯿﺮ ﺣﺎﻟﺔ ال ‪ Database‬ﻣﻦ ‪:‬‬

‫‪ NOMOUNT‬اﻟﻰ ‪.MOUNT‬‬ ‫·‬


‫‪ MOUNT‬اﻟﻰ ‪OPEN‬‬ ‫·‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام أﻣﺮ ال ‪ ALTER DATABASE‬ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;‪ALTER DATABASE [database's name] MOUNT | OPEN‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.6‬‬

‫ﺑﯿﻨﻤﺎ ﯾﺘﻢ اﺳﺘﺨﺪام ﺣﺎﻟﺔ ال ‪ NOMOUNT‬ﯾﻤﻜﻦ اﻟﺘﺤﻮﯾﻞ اﻟﻰ ال ‪ MOUNT‬ﺑﻜﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER DATABASE MOUNT‬‬

‫‪ -2‬ﻟﻮﺿﻊ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ اﻟﻘﺮاءة ﻓﻘﻂ "‪:"Read-Only Database‬‬

‫ﯾﻤﻜﻦ ﻓﺘﺢ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ‪ OPEN‬ﺑﺪون اﻟﺴﻤﺎح ﺑﺘﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ال ‪ Database‬ﺑﺎﺳﺘﺨﺪام‬


‫اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;‪ALTER DATABASE [database's name] OPEN READ WRITE | READ ONLY‬‬

‫ﻣﻊ اﻟﻌﻠﻢ أن ‪ READ WRITE‬ھﻲ ال ‪.Default‬‬

‫‪43‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.7‬‬

‫ﺑﯿﻨﻤﺎ ال ‪ Database‬ﻓﻲ اﻟﺤﺎﻟﺔ اﻟﻌﺎدﯾﺔ "‪ "READ WRITE‬ﯾﻤﻜﻦ اﻟﺘﺤﻮﯾﻞ ﺑﻜﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;‪ALTER DATABASE OPEN READ ONLY‬‬

‫ﻣﻦ اﻟﻮﻇﺎﺋﻒ اﻟﺘﻲ ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﮭﺎ ﺑﯿﻨﻤﺎ ال ‪ Database‬ﻓﻲ وﺿﻌﯿﺔ ال ‪:READ ONLY‬‬

‫اﺳﺘﺨﺮاج ﺑﯿﺎﻧﺎت ﻋﺒﺮ ﺟﻤﻞ ال ‪.SQL‬‬ ‫·‬


‫ﺗﻐﯿﯿﺮ وﺿﻌﯿﺔ ال ‪ Data Files‬ﺑﯿﻦ ‪ Offline‬و ‪.Online‬‬ ‫·‬
‫اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال ‪ Recovery‬ﻋﻠﻰ ال ‪ Offline Data Files‬وال ‪.Tablespaces‬‬ ‫·‬

‫‪:Restricted Mode‬‬

‫ﯾﻤﻜﻦ ﺗﺸﻐﯿﻞ ال ‪ Database‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻹﻋﻄﺎء اﻟﻤﺠﺎل ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ اﻟﺬي ﯾﻤﻠﻜﻮن‬
‫‪ Restricted Session Privilege‬ﻣﻦ اﻟﻘﯿﺎم ﺑﻤﮭﺎت ﺧﺎﺻﺔ‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.8‬‬


‫ﻟﺘﺸﻐﯿﻞ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ال ‪: Restricted‬‬

‫;‪STARTUP RESTRICTED‬‬

‫ﯾﻤﻜﻦ ﺗﺤﻮﯾﻞ اﻟﺤﺎﻟﺔ ﺑﺸﻜﻞ داﯾﻨﺎﻣﯿﻜﻲ ﺑﺎﺳﺘﺨﺪام‪:‬‬

‫;‪ALTER SYSTEM ENABLE RESTRICTED SESSION‬‬


‫;‪ALTER SYSTEM DISABLE RESTRICTED SESSION‬‬

‫‪:Kill a Session‬‬

‫ﻓﻲ ﺑﻌﺾ اﻷوﻗﺎت )وﺧﺎﺻﺔ ﺑﻌﺪ وﺿﻊ ال ‪ (Restricted‬ﯾﺮﯾﺪ ال ‪) DBA‬أو ﻣﻦ ﯾﻤﻠﻚ اﻟﺼﻼﺣﯿﺎت( ﺑﺎﺧﺮاج‬
‫ﺑﻌﺾ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻣﻦ ال ‪ Database‬ﻟﻠﻘﯿﺎم ﺑﺒﻌﺾ اﻟﻤﮭﻤﺎت‪ .‬ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﮭﺬه اﻟﻤﮭﻤﺔ ﻋﺒﺮ‪:‬‬

‫;'‪ALTER SYSTEM KILL SESSION 'SID, SERIAL#‬‬

‫ال ‪ SID‬ھﻮ رﻗﻢ ال ‪ Session‬اﻟﺨﺎص )ﯾﻌﻄﻰ ﻟﻜﻞ ‪ Session‬ﻋﻨﺪ ﺑﺪاﯾﺔ ﺗﺸﻐﯿﻠﮫ رﻗﻢ ﺧﺎص ﺑﮫ( ﯾﻤﻜﻦ اﺳﺘﺨﺮاﺟﮫ‬
‫ﻣﻦ ‪.V$SESSION‬‬

‫ال ‪ SERIAL#‬ھﻮ رﻗﻢ أﺧﺮ ﻣﻤﯿﺰ "‪ "Unique‬ﯾﻌﻄﻰ ﻟﻜﻞ ‪ Session‬وﯾﻤﻜﻦ اﺳﺘﺨﺮاﺟﮫ ﻣﻦ اﯾﻀﺎً ﻣﻦ ال‬
‫‪.V$SESSION‬‬

‫‪44‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.9‬‬

‫ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ "‪ "Kill Session‬ﺑﺎﺗﺨﺎذ اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫· ﯾﺠﺐ أن ﯾﻜﻮن ھﻨﺎﻟﻚ أﻛﺜﺮ ﻣﻦ ﻣﺴﺘﺨﺪم ﯾﻌﻤﻠﻮن ﻋﻠﻰ ال ‪ Database‬ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ ،‬ﻟﻠﻘﯿﺎم ﺑﺬﻟﻚ‬
‫ادﺧﻞ اﻟﻰ ‪ SQLPLUS‬أوﻻً ﺑﺎﺳﻢ ﻣﺴﺘﺨﺪم ﺛﻢ اﻓﺘﺢ ال ‪ SQLPLUS‬ﻣﺮة أﺧﺮى وادﺧﻞ ﺑﺎﺳﻢ‬
‫ﻣﺴﺘﺨﺪم اﺧﺮ‪.‬‬
‫اﺳﺘﺨﺪم ‪ SYSTEM‬و اﺳﺘﺨﺪم ‪username = SCOTT , password =TIGER‬‬

‫ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ ﻣﻦ ال ‪:SYSTEM‬‬ ‫·‬

‫‪SELECT USERNAME, SID, SERIAL#‬‬


‫‪FROM V$SESSION‬‬
‫;'‪WHERE USERNAME = 'SCOTT‬‬

‫ﯾﻈﮭﺮ اﻟﻨﺎﺗﺞ اﻟﺘﺎﻟﻲ )ﯾﺨﺘﻠﻒ ﻣﻦ ﺟﮭﺎز اﻟﻰ أﺧﺮ(‬ ‫·‬

‫‪USERNAME‬‬ ‫‪SID SERIAL#‬‬


‫‪-------- ---------- ---------- ------------------------------‬‬
‫‪SCOTT‬‬ ‫‪9‬‬ ‫‪51‬‬

‫ﯾﻜﺘﺐ ﻣﺴﺘﺨﺪم ال ‪ SYSTEM‬اﻟﺘﺎﻟﻲ‪:‬‬ ‫·‬


‫;'‪ALTER SYSTEM KILL SESSION '9, 51‬‬

‫ﯾﺘﻢ اﻏﻼق ال ‪ Session‬اﻟﺨﺎص ﺑﺎﻟﻤﺴﺘﺨﺪم ‪ .SCOTT‬ﯾﻘﻮم ال ‪ PMON‬ﺑﻤﮭﺎﻣﮫ ﻣﺒﺎﺷﺮة ﻟﻤﻌﺎﻟﺠﺔ‬ ‫·‬


‫اﻷﺛﺎر اﻟﺘﻲ ﯾﻤﻜﻦ ان ﺗﻨﺠﻢ ﻋﻦ أﻏﻼق ال ‪ Session‬اﻟﺨﺎص ﺑﺎﻟﻤﺴﺘﺨﺪم ‪ SCOTT‬واذا ﻗﺎم ‪SCOTT‬‬
‫ﺑﻄﻠﺐ ﺟﻤﻠﺔ ‪ SQL‬ﺗﻈﮭﺮ اﻟﺮﺳﺎﻟﺔ اﻟﺘﺎﻟﯿﺔ‪YOUR SESSION HAS BEEN KILLED :‬‬

‫رﺳﻢ ‪2.9‬‬

‫‪45‬‬
‫‪SHUTTING DOWN THE DATABASE‬‬

‫ﯾﻤﻜﻦ اﻗﻔﺎل ال ‪ Database‬ﻓﻲ ارﺑﻊ ﺣﺎﻻت ھﻲ‪NORMAL, TRANSACTIONAL, :‬‬


‫‪.IMMEDIATE, ABORT‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻋﺎدةً ﻣﺎ ﺗﻜﻮن ﻋﻤﻠﯿﺔ اﻏﻼق ال ‪ Database‬ﻣﻦ أﺟﻞ ﻋﻤﻠﯿﺔ ال ‪.Backup‬‬

‫ﻣﻼﺣﻈﺔ‪ :2‬ﻹﻏﻼق ال ‪ Database‬ﺗﺤﺘﺎج اﻟﻰ ‪ SYSDBA‬أو ‪.SYSOPER‬‬

‫ﻹﻏﻼق ال ‪ Database‬ﻓﻲ اﺣﺪى اﻟﺤﻼت اﻟﻤﺬﻛﻮرة ﺗﺴﺘﻌﻤﻞ اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;]‪SHUTDOWN [NORMAL] | [TRANSACTIONAL] | [IMMEDIATE] | [ABORT‬‬

‫ﻣﻊ اﻟﻌﻠﻢ أن ‪ NORMAL‬ھﻲ ال ‪ ،Default‬أي ﻋﻨﺪ ﻛﺘﺎﺑﺔ ال ‪ SHUTDOWN‬ﺑﺪون أي ﻣﻦ اﻟﺤﺎﻻت‬


‫اﻷرﺑﻊ ﯾﻔﺘﺮض اﻷوراﻛﻞ أﻧﮭﺎ اﻟﺤﺎﻟﺔ ال ‪.Default‬‬

‫‪:NORMAL‬‬

‫ﻓﻲ ﺣﺎﻟﺔ اﻏﻼق ال ‪ Database‬ﺑﮭﺬه اﻟﺤﺎﻟﺔ ﯾﺘﻢ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﻻ ﯾﺴﻤﺢ ﺑﺪﺧﻮل ﻣﺴﺘﺨﺪﻣﯿﯿﻦ ﺟﺪد ﻟﻞ ‪.Database‬‬ ‫·‬


‫ﻻ ﯾﻐﻠﻖ ال ‪ Database‬ﻗﺒﻞ ﺧﺮوج ﺟﻤﯿﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻣﻨﮫ‪ ،‬أي ان اﻷوراﻛﻞ ﯾﻨﺘﻈﺮ ﺣﺘﻰ ﯾﻔﺮغ‬ ‫·‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ ﻣﮭﺎﻣﮭﻢ ﺛﻢ ﺧﺮوﺟﮭﻢ ﻟﻜﻲ ﯾﺘﻢ اﻋﻼق ال ‪.Database‬‬
‫ﯾﺘﻢ ﻧﻘﻞ ﺑﯿﺎﻧﺎت ال ‪ Redo Log Buffer‬اﻟﻰ ال ‪.Redo Log Files‬‬ ‫·‬
‫ﯾﺘﻢ ﻧﻘﻞ ﺑﯿﺎﻧﺎت ال ‪ Database Buffer Cache‬اﻟﻰ ال ‪.Data Files‬‬ ‫·‬
‫ﻓﻲ ﺣﺎل وﺟﻮد ﻋﻤﻠﯿﺎت ﻟﻢ ﯾﺘﻢ ﺣﺪوث ‪ COMMIT‬ﻓﯿﺤﺪث ﻟﮭﺎ ‪.ROLLBACK‬‬ ‫·‬
‫اﻧﮭﺎء وﺟﻮد ال ‪.Background Processes‬‬ ‫·‬
‫ازاﻟﺔ ﻣﺴﺎﺣﺔ ال ‪ SGA‬ﻣﻦ اﻟﺬاﻛﺮة‪.‬‬ ‫·‬
‫اﻏﻼق ال ‪ Database‬ﺛﻢ اﻏﻼق ال ‪.Instance‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﺴﺘﻠﺰم ان ﺗﺘﻢ ﻋﻤﻠﯿﺔ ‪ Recovery‬ﻟﻠﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻛﺎﻧﺖ ﻣﻮﺟﻮدة ﻓﻲ ال ‪ Instance‬ﺑﺎﻋﺘﺒﺎر اﻧﮭﺎ‬
‫ﻧﻘﻠﺖ اﻟﻰ اﻟﻤﻠﻔﺎت اﻟﻔﯿﺰﯾﺎﺋﯿﺔ‪ .‬وﻋﻤﻠﯿﺔ ال ‪ Recovery‬ھﻲ اﻟﻌﻤﻠﯿﺔ اﻟﻤﺸﺎﺑﮭﮫ ﻟﻮﻇﺎﺋﻒ ال‪ PMON‬و ‪. SMON‬‬

‫‪:TRANSACTIONAL‬‬

‫ﻓﻲ ﺣﺎﻟﺔ اﻏﻼق ال ‪ Database‬ﺑﮭﺬه اﻟﺤﺎﻟﺔ ﯾﺘﻢ ﺟﻤﯿﻊ ﺧﻄﻮات ال ‪ NORMAL‬ﻋﺪا اﻹﺧﺘﻼﻓﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﻻ ﯾﻐﻠﻖ ال ‪ Database‬ﻗﺒﻞ اﻧﮭﺎء اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﻃﻠﺒﮭﺎ ﺟﻤﯿﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻣﻨﮫ‪ ،‬أي أن اﻷوراﻛﻞ ﯾﻨﺘﻈﺮ‬ ‫·‬
‫ﺣﺘﻰ ﯾﻔﺮغ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ ﻣﮭﺎﻣﮭﻢ اﻟﺘﻲ ﻃﻠﺒﻮھﺎ ﻗﺒﻞ ﺣﺪوث أﻣﺮ اﻻﻏﻼق وﻻ ﯾﻨﺘﻈﺮ أن ﯾﺨﺮج‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻣﻦ ال ‪ Database‬ﻟﺘﺘﻢ ﻋﻤﻠﯿﺔ اﻻﻏﻼق ﻛﻤﺎ ﯾﺤﺪث ﻓﻲ ال ‪.NORMAL‬‬
‫ﻻ ﯾﺴﻤﺢ ﺑﺎﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت ﺟﺪﯾﺪة ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﺑﻌﺪ أﻣﺮ اﻹﻏﻼق‪.‬‬ ‫·‬
‫ﯾﺘﻢ اﺧﺮاج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال ‪ Database‬ﻋﻨﺪ اﻧﺘﮭﺎء اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﻃﻠﺒﺖ ﻗﺒﻞ ﻋﻤﻠﯿﺔ اﻻﻏﻼق‪.‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﺴﺘﻠﺰم ان ﺗﺘﻢ ﻋﻤﻠﯿﺔ ‪ Recovery‬ﻋﻨﺪ ﺗﺸﻐﯿﻞ ال ‪ Instance‬ﻣﺮة أﺧﺮى‪.‬‬

‫‪46‬‬
‫‪:IMMEDIATE‬‬

‫ﻓﻲ ﺣﺎﻟﺔ اﻏﻼق ال ‪ Database‬ﺑﮭﺬه اﻟﺤﺎﻟﺔ ﯾﺘﻢ ﺟﻤﯿﻊ ﺧﻄﻮات ال ‪ NORMAL‬ﻋﺪا اﻹﺧﺘﻼﻓﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﯾﺘﻢ اﻏﻼق ال ‪ Database‬ﻓﻮراً دون اﻧﺘﻈﺎر ﺧﺮوج اﻟﻤﺴﺘﺨﺪﻣﯿﻦ أو اﻧﮭﺎء ﻣﮭﺎﻣﮭﻢ اﻟﺘﻲ ﻃﻠﺒﻮھﺎ ﻗﺒﻞ‬ ‫·‬
‫أﻣﺮ اﻻﻏﻼق‪.‬‬
‫اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﺗﻢ ﻃﻠﺒﮭﺎ ﻗﺒﻞ أﻣﺮ اﻻﻏﻼق ﺗﻠﻐﻰ وأﯾﺔ ﺗﻌﺪﯾﻼت ﻃﺮأت ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت ﺑﺴﺒﺒﮭﺎ ﺗﺰال وﺗﻤﺴﺢ‬ ‫·‬
‫)ﺑﺸﺮط ان ﺗﻜﻮن اﻟﻤﮭﻤﺔ ﻣﺎ ﺗﺰال ﺗﻌﻤﻞ ﻋﻨﺪ أﻣﺮ اﻹﻏﻼق( وﯾﺤﺪث ﻟﮭﺎ ‪.ROLLBACK‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﺴﺘﻠﺰم ان ﺗﺘﻢ ﻋﻤﻠﯿﺔ ‪ Recovery‬ﻋﻨﺪ ﺗﺸﻐﯿﻞ ال ‪ Instance‬ﻣﺮة أﺧﺮى‪.‬‬

‫‪:ABORT‬‬

‫ﻓﻲ ﺑﻌﺾ اﻟﺤﻼت اﻟﺨﺎﺻﺔ ﻋﻨﺪ ﻋﺪم اﺳﺘﻄﺎﻋﺔ اﻷوراﻛﻞ اﻏﻼق ال ‪ Database‬ﺑﺄﺣﺪ اﻟﺤﻼت اﻟﺜﻼث اﻟﺴﺎﺑﻘﺔ ﯾﺘﻢ‬
‫اﺳﺘﺨﺪام ھﺬه اﻟﺤﺎﻟﺔ‪.‬‬
‫ﻓﻲ ﺣﺎﻟﺔ اﻏﻼق ال ‪ Database‬ﺑﮭﺬه اﻟﺤﺎﻟﺔ ﯾﺘﻢ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﯾﺘﻢ اﻏﻼق ال ‪ Database‬ﻓﻮراً دون اﻧﺘﻈﺎر ﺧﺮوج اﻟﻤﺴﺘﺨﺪﻣﯿﻦ أو اﻧﮭﺎء ﻣﮭﺎﻣﮭﻢ اﻟﺘﻲ ﻃﻠﺒﻮھﺎ ﻗﺒﻞ‬ ‫·‬
‫أﻣﺮ اﻻﻏﻼق‪.‬‬
‫اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﺗﻢ ﻃﻠﺒﮭﺎ ﻗﺒﻞ أﻣﺮ اﻻﻏﻼق ﺗﻠﻐﻰ و أﯾﺔ ﺗﻌﺪﯾﻼت ﻃﺮأت ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت ﺑﺴﺒﺒﮭﺎ ﺗﺰال وﺗﻤﺴﺢ‬ ‫·‬
‫)ﺑﺸﺮط ان ﺗﻜﻮن اﻟﻤﮭﻤﺔ ﻣﺎ ﺗﺰال ﺗﻌﻤﻞ ﻋﻨﺪ أﻣﺮ اﻹﻏﻼق( وﻻ ﯾﺤﺪث ﻟﮭﺎ ‪.ROLLBACK‬‬
‫ﻻ ﯾﺘﻢ ﻧﻘﻞ ﺑﯿﺎﻧﺎت ال ‪ Redo Log Buffer‬اﻟﻰ ال ‪.Redo Log Files‬‬ ‫·‬
‫ﻻ ﯾﺘﻢ ﻧﻘﻞ ﺑﯿﺎﻧﺎت ال ‪ Database Buffer Cache‬اﻟﻰ ال ‪Data Files‬‬ ‫·‬
‫اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﻟﻢ ﯾﺤﺪث ﻟﮭﺎ ‪ COMMIT‬ﻻ ﯾﺤﺪث ﻟﮭﺎ ‪.ROLLBACK‬‬ ‫·‬
‫ﯾﺘﻢ اﻏﻼق ال ‪ Database‬وال ‪ Instance‬ﺑﺸﻜﻞ ﻓﻮري‪.‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺴﺘﻠﺰم ان ﺗﺘﻢ ﻋﻤﻠﯿﺔ ‪ Recovery‬ﻋﻨﺪ ﺗﺸﻐﯿﻞ ال ‪ Instance‬ﻣﺮة أﺧﺮى‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :2‬ﺗﺄﺛﯿﺮات ال ‪ STARTUP FORCE‬و ﻋﻨﺪ ﺣﺪوث أي ﻋﻄﻞ ﻓﻲ ال ‪ Instance‬ﯾﺆدي اﻟﻰ اﻏﻼﻗﮫ‬
‫ھﻲ ذات اﻟﺘﺄﺛﯿﺮات ﻟﻞ ‪.SHUTDOWN ABORT‬‬

‫‪47‬‬
‫‪DIAGNOSTIC FILES‬‬

‫ﺗﻌﺘﺒﺮ ﻣﻠﻔﺎت ال ‪ Diagnostic‬ﻣﻠﻔﺎت ﻣﮭﻤﺔ ﻹدارة ال ‪ Instance‬ﻷﻧﮭﺎ ﺗﺨﺰن ﺑﯿﺎﻧﺎت ﺣﻮل اﻟﻌﻤﻠﯿﺎت اﻟﻤﺨﺘﻠﻔﺔ‬
‫اﻟﺘﻲ ﺗﺠﺮى ﻋﻠﻰ ال ‪ .Database‬ﯾﻮﺟﺪ ﻋﺪد ﻣﻦ ﻣﻠﻔﺎت ال ‪ Diagnostic‬ﻣﻨﮭﺎ‪:‬‬

‫· ‪ :ALERT LOG FILE‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﺣﻮل اﻟﻌﻤﻠﯿﺎت أو اﻟﻤﮭﺎم اﻟﯿﻮﻣﯿﺔ اﻟﺘﻲ ﺗﺠﺮى ﻋﻠﻰ ال‬
‫‪.Database‬‬

‫‪ :BACKGROUND TRACE FILES‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل ال ‪Background‬‬ ‫·‬


‫‪.Processes‬‬

‫‪ :USER TRACE FILE‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل اﻷﺧﻄﺎء اﻟﻔﺎدﺣﺔ اﻟﺘﻲ ﯾﻘﻮم ﺑﮭﺎ اﻟﻤﺴﺘﺨﺪﻣﻮن‬ ‫·‬
‫واﻟﺘﻲ ﻗﺪ ﺗﺆدي اﻟﻰ ﺗﻌﻄﻞ ال ‪ Database‬وﺑﺬﻟﻚ ﺗﺴﺎﻋﺪ ﻋﻠﻰ اﻛﺘﺸﺎف اﻻﺳﺒﺎب اﻟﺘﻲ أدت ﻟﺘﻌﻄﻞ ال‬
‫‪.Database‬‬

‫‪:ALERT LOG FILE‬‬

‫ﻟﻜﻞ ‪ Instance‬ﻣﻠﻒ ‪ Alert Log‬ﺑﺤﯿﺚ اذا ﻟﻢ ﯾﻘﻢ اﻟﻤﺴﺘﺨﺪم ﺑﺘﻜﻮﯾﻨﮫ ﯾﻘﻮم اﻷوراﻛﻞ ﺧﻼل ﺑﺪأ ال ‪Instance‬‬
‫ﺑﺘﻜﻮﯾﻦ اﻟﻤﻠﻒ )ﺧﻼل ﻣﺮﺣﻠﺔ ال ‪ (NOMOUNT‬وھﻮ ﯾﻌﺮف ﺑﺎﺳﻢ ‪ .alertSID.log‬ﯾﻌﺘﺒﺮ ال ‪Alert Log‬‬
‫ھﻮ اﻟﻤﺮﺟﻊ اﻷول ﻓﻲ اﻟﺒﺤﺚ ﻋﻦ اﻷﺧﻄﺎء )ﺗﺸﺨﯿﺺ( اﻟﺘﻲ ﺣﺪﺛﺖ ﻓﻲ ال ‪ Database‬ﺑﺸﻜﻞ ﯾﻮﻣﻲ‪.‬‬
‫ﻣﻮﻗﻊ ال ‪ Alert File‬ﻣﺤﺪد ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ "‪.BACKGROUND_DUMP_DEST "Parameter‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺟﺎء ذﻛﺮ اﻟﻌﺎﻣﻞ "‪ BACKGROUND_DUMP_DEST "Parameter‬ﻓﻲ ﻣﻮﺿﻮع ال‬


‫‪.SPFILE‬‬

‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﻋﺪﯾﺪة ﻓﻲ ‪ Alert Log File‬ﻣﻨﮭﺎ‪:‬‬

‫ﺗﻮﻗﯿﺖ ﺑﺪأ ﺗﺸﻐﯿﻞ ال ‪ Instance‬وﺗﻮﻗﯿﺖ اﻻﻏﻼق‪.‬‬ ‫·‬


‫ﺗﻮﻗﯿﺖ ﺑﺪأ ﺗﺸﻐﯿﻞ ال ‪.Background Processes‬‬ ‫·‬
‫ﺑﯿﺎﻧﺎت ﺣﻮل ال ‪.Log Switch‬‬ ‫·‬
‫ﺑﯿﺎﻧﺎت ﺣﻮل اﻻﺧﻄﺎء اﻟﺘﻲ ﻇﮭﺮت "‪."Error Messages‬‬ ‫·‬
‫ﺑﯿﺎﻧﺎت ﺣﻮل ﺗﻜﻮﯾﻦ ال ‪.Tablespaces‬‬ ‫·‬
‫ﺑﯿﺎﻧﺎت ﺣﻮل ﺗﻜﻮﯾﻦ ال ‪.Undo Segments‬‬ ‫·‬
‫ﺟﻤﻞ ال ‪ SQL‬اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ اﻷﻣﺮ ‪.ALTER‬‬ ‫·‬
‫رﻗﻢ ال ‪ Log Sequence‬اﻟﺨﺎص ﺑﺎل ‪ Online Redo Log File‬اﻟﺬي ﯾﺘﻢ اﻟﻌﻤﻞ ﻋﻠﯿﮫ ﻣﻦ ﻗﺒﻞ ال‬ ‫·‬
‫‪LGWR‬‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻻﺣﻘﺎً ﻟﻞ ‪.Undo Segments‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺟﺎء ذﻛﺮ ال ‪ Log Sequence Number‬ﻓﻲ اﻟﻔﺼﻞ اﻷول‪.‬‬

‫‪48‬‬
‫‪:BACKGROUND TRACE FILES‬‬

‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل اﻻﺧﻄﺎء اﻟﺘﻲ ﺗﺤﺪﺛﮭﺎ ال ‪ .Background Processes‬ﯾﺘﻢ ﺗﻜﻮﯾﻦ اﻟﻤﻠﻔﺎت ﻓﻘﻂ ﻋﻨﺪﻣﺎ‬
‫ﺗﺤﺪث اﻷﺧﻄﺎء )أي اﻧﮫ ﻓﻲ ﺣﺎل ﻋﺪم ﺣﺪوث اﺧﻄﺎء ﻻ ﺗﻜﻮن اﻟﻤﻠﻔﺎت ﻣﺘﻮاﺟﺪه(‪.‬‬
‫ﻣﻮﻗﻊ اﻟﻤﻠﻔﺎت ﻣﺤﺪد ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ "‪.BACKGROUND_DUMP_DEST "Parameter‬‬

‫‪:USER TRACE FILE‬‬

‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل اﻷﺧﻄﺎء اﻟﻔﺎدﺣﺔ اﻟﺘﻲ ﯾﻘﻮم ﺑﮭﺎ اﻟﻤﺴﺘﺨﺪﻣﻮن واﻟﺘﻲ ﻗﺪ ﺗﺆدي اﻟﻰ ﺗﻌﻄﻞ ال ‪Database‬‬
‫وﺑﯿﺎﻧﺎت ﺣﻮل ال ‪ SQL‬اﻟﺘﻲ ﺗﻢ ﻃﻠﺐ ﻣﺮاﻗﺒﺘﮭﺎ "‪ ." Trace‬ﻣﻮﻗﻊ اﻟﻤﻠﻒ ﻣﺤﺪد ﻣﻦ ﻗﺒﻞ اﻟﻌﺎﻣﻞ‬
‫"‪.USER_DUMP_DEST "Parameter‬‬
‫ﯾﺘﺤﻜﻢ ﻓﻲ ﺣﺠﻢ اﻟﻤﻠﻒ اﻟﻌﺎﻣﻞ "‪ MAX_DUMP_FILE_SIZE "Parameter‬و اﻟﻤﺤﺪد ب ‪ 10‬ﻣﯿﻐﺎ‬
‫ﺑﺎﯾﺖ‪ .‬ﯾﻤﻜﻦ ﺗﺸﻐﯿﻞ أو اﯾﻘﺎف اﻟﻤﻠﻒ ﻓﻲ ال ‪ Session‬اﻟﻮاﺣﺪ او ﻓﻲ ال ‪) Instance‬ﻛﻞ ال ‪ Sessions‬اﻟﺘﻲ‬
‫ﻣﻮﺟﻮدة ﻓﻲ ال ‪ (Instance‬ﻋﺒﺮ ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﻓﻲ ال ‪:Session‬‬

‫;‪ALTER SESSION SET SQL_TRACE = TRUE‬‬

‫ﻓﻲ ال ‪:Instance‬‬

‫او ﻋﻨﺪ وﺿﻊ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ "‪ "Parameter‬اﻟﺘﺎﻟﻲ ﻓﻲ ال ‪:Initialization Parameter File‬‬

‫‪SQL_TRACE = TRUE‬‬

‫وﺑﺬﻟﻚ ﯾﺘﻢ ﺗﻌﻘﺐ "‪ "Trace‬ﺟﻤﯿﻊ ﺟﻤﻞ ال ‪ SQL‬وﺗﺴﺠﯿﻞ ﺑﯿﺎﻧﺎت ﺣﻮﻟﮭﺎ واﻷﺧﻄﺎء اﻟﺘﻲ ﺳﺒﺒﺘﮭﺎ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺟﺎء ذﻛﺮ اﻟﻌﺎﻣﻞ "‪ USER_DUMP_DEST "Parameter‬ﻓﻲ ﻣﻮﺿﻮع ال ‪.SPFILE‬‬

‫ﺗﻌﺮف ﻣﻠﻔﺎت ال ‪ Trace Files‬ﺑﺎﻟﺮﻣﺰ )‪ .(trc‬ﻓﻤﺜﻼً ﻣﻠﻔﺎت ال ‪ Background Trace‬ﺗﺴﻤﻰ ﺑﺎﻟﻘﺎﻋﺪة‬


‫اﻟﺘﺎﻟﯿﺔ‪ ) :‬ﻛﻤﺎ اﻟﻤﻠﻔﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ ﻧﺴﺨﺔ اﻷوراﻛﻞ اﻟﺨﺎﺻﺔ ﺑﻲ( ‪ sidPROCESSNAME.trc‬ﻣﺜﻞ‬
‫‪ dbname) dbnamePMON.trc‬ھﻮ اﺳﻢ ال ‪ Instance‬ﻓﻲ ﺟﮭﺎزي واﻟﺬي ﯾﺤﺪد ﻋﻨﺪ ﻋﻤﻠﯿﺔ اﻟﺘﻨﺼﯿﺐ(‪.‬‬

‫وﻛﺬﻟﻚ اﻟﺤﺎل ﺑﺎﻟﻨﺴﺒﺔ ﻟﻤﻠﻔﺎت ال ‪ User Trace‬ﻓﻲ ﺗﺴﻤﻰ ﺑﺎﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ ﻓﻲ ﻧﺴﺨﺔ اﻷوراﻛﻞ اﻟﺨﺼﺔ ﺑﻲ‪:‬‬
‫‪ ORAPID.trc‬ﻣﺜﻞ ‪.ORA00853.trc‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻗﺪ ﺗﺨﺘﻠﻒ ﻗﺎﻋﺪة اﻟﺘﺴﻤﯿﺔ ﻣﻦ ﻧﺴﺨﺔ أوراﻛﻞ اﻟﻰ أﺧﺮى وﻟﻜﻦ ال ‪ Trace Files‬ﺗﻨﺘﮭﻲ داﺋﻤﺎً ب )‪(.trc‬‬

‫‪49‬‬
‫)‪ORACLE MANAGED FILES (OMF‬‬

‫ﺗﺴﮭﻞ ال ‪ OMF‬ادارة ﻋﺪد ﻣﻦ ﻣﻠﻔﺎت اﻷوراﻛﻞ اذ ﯾﻜﻔﻲ ﺗﺤﺪﯾﺪ ﻣﻮاﻗﻊ اﻟﻤﻠﻔﺎت ﻓﯿﻘﻮم اﻷوراﻛﻞ ﺑﺎﻻھﺘﻤﺎم‬
‫ﺑﺎﻟﻤﻠﻔﺎت و ﺗﻜﻮﯾﻨﮭﺎ وﺣﺬﻓﮭﺎ وﺗﺴﻤﯿﺘﮭﺎ‪ .‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻣﻮاﻗﻊ اﻟﻤﻠﻔﺎت ﺑﺎﺳﺘﺨﺪام ﻋﺎﻣﻠﯿﻦ " ‪ "Parameters‬اﺛﻨﯿﻦ‬
‫ﺟﺪﯾﺪن ﻣﻦ ﻋﻮاﻣﻞ ﻣﻠﻒ ال ‪ Initialization Parameter File‬اﺿﯿﻔﺎ ﻓﻲ اﻟﻨﺴﺨﺔ اﻟﺘﺎﺳﻌﺔ ﻣﻦ اﻷوراﻛﻞ‬
‫"‪ "Oracle9i‬ھﻤﺎ‪:‬‬

‫‪ :DB_CREATE_FILE_DEST‬اﻟﺬي ﯾﺤﺪد ﻣﻮاﻗﻊ ال ‪.Data Files‬‬ ‫·‬

‫· ‪ :DB_CREATE_ONLINE_LOG_DEST_n‬ﯾﺤﺪد ﻣﻮاﻗﻊ ﻣﻠﻔﺎت ال ‪ Redo Log‬وال‬


‫‪ .Control Files‬ﯾﺪل اﻟﺤﺮف )‪ (n‬ﻋﻠﻰ رﻗﻢ اﻟﻌﺎﻣﻞ "‪ "Parameter‬ﺑﯿﺤﺚ ﯾﻜﻮن ﻣﻦ واﺣﺪ اﻟﻰ‬
‫ﺧﻤﺴﺔ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام أﺣﺪھﻤﺎ أو ﻛﻼھﻤﺎ‪ ,‬وﻻ ﯾﺸﺘﺮط اﺳﺘﺨﺪام اﻻﺛﻨﯿﻦ ﻣﻌﺎً‪.‬‬

‫ﺗﺮﺗﺒﻂ ﻛﻞ ‪ Tablespace‬ﺑﻤﻠﻒ ﻣﻦ ﻣﻠﻔﺎت ال ‪ (Physical-Logical ) Data Files‬ﺑﺤﯿﺚ ﯾﻜﻮن ﻟﻜﻞ‬


‫‪ Tablespace‬ارﺗﺒﺎط ﺑﻤﻠﻔﺎت ﻣﻦ ‪ . Data Files‬اي اﻧﮫ ﻋﻨﺪ ﺣﺬف ال ‪ Tablespace‬ﯾﺠﺐ ﺣﺬف ﻣﻠﻒ ال‬
‫‪ Data Files‬اﻟﻤﺮﺗﺒﻂ ﻣﻌﮭﺎ وإﻻ ﻗﺪ ﯾﺴﺒﺐ ﻣﺸﺎﻛﻞ ﻋﻨﺪ ﻋﻤﻠﯿﺔ ال ‪ ،Backup‬اذ اﻧﮫ ﻻ ﻓﺎﺋﺪة ﻣﻦ ﺣﻔﻆ ال ‪Data‬‬
‫‪ Files‬ﺑﺎﻋﺘﺒﺎر ال ‪ Tablespace‬ﺗﻢ ﺣﺬﻓﮭﺎ‪.‬‬
‫ﯾﺠﺐ ﻋﻠﻰ ال ‪ DBA‬اﻟﺒﺤﺚ ﻋﻦ اﻟﻤﻠﻒ اﻟﻤﺮﺗﺒﻂ وﺣﺬﻓﮫ ﺑﻄﺮﯾﻘﺔ ﻋﺎدﯾﺔ )ﻛﻤﺎ ﯾﺘﻢ ﺣﺬف أي ﻣﻠﻒ ﻓﻲ اﻟﻮﯾﻨﺪوز أو‬
‫ال ‪ UNIX‬أو ﻏﯿﺮھﺎ(‪ .‬أﻣﺎ اذا ﺗﻢ اﺳﺘﺨﺪام ﻃﺮﯾﻘﺔ ال ‪ OMF‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺤﺬف ال ‪ Data Files‬دون ﺗﺪﺧﻞ‬
‫ال ‪ DBA‬أي ﺑﻄﺮﯾﻘﺔ أوﺗﻮﻣﺎﺗﯿﻜﯿﺔ وھﺬه أﺣﺪ ﻓﻮاﺋﺪ اﺳﺘﺨﺪام ال ‪.OMF‬‬

‫ﯾﺘﻢ اﺳﺘﺨﺪام )_‪ (ora‬ﻓﻲ ﺑﺪاﯾﺔ اﺳﻤﺎء ﻣﻠﻔﺎت ال ‪ OMF‬ﻟﻠﺪﻻﻟﺔ ﻋﻠﯿﮭﺎ‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.10‬‬

‫'‪DB_CREATE_FILE_DEST = 'C:\oracle\ora92\oradata\u01‬‬

‫'‪DB_CREAE_ONLINE_LOG_DEST_1 = 'C:\oracle\ora92\oradata\u02‬‬

‫'‪DB_CREAE_ONLINE_LOG_DEST_2 = 'C:\oracle\ora92\oradata\u03‬‬

‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ اﻟﻘﯿﻢ "‪ "Values‬ﺑﺸﻜﻞ داﯾﻨﺎﻣﯿﻜﻲ ﺑﺎﺳﺘﺨﺪام ‪.ALTER SYSTEM‬‬

‫‪ALTER SYSTEM SET‬‬


‫;'‪DB_CREATE_FILE_DEST='C:\oracle\ora92\oradata\u04‬‬

‫ﺑﻌﺪ ان ﯾﺘﻢ ﺗﺤﺪﯾﺪ اﻟﻌﻮاﻣﻞ "‪) "Parameter‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪ (2.10‬ﺗﺘﻢ ﻋﻤﻠﯿﺔ ﺗﻜﻮﯾﻦ ال ‪ Database‬ﺑﺎﺳﺘﺨﺪام‬
‫أﻣﺮ ‪ .CREATE DATABASE‬اذا ﻓﺸﻞ ﺗﻜﻮﯾﻦ ال ‪ Database‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺤﺬف اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﻜﻮﻧﺖ‬
‫ﻣﻦ ﺧﻼل ‪.OMF‬‬

‫ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﻜﻮﻧﺖ ﺑﻄﺮﯾﻘﺔ ال ‪ OMF‬ﻣﻦ ‪ DBA_DATAFILE‬و‬
‫‪.V$LOGFILE‬‬

‫‪50‬‬





CREATING A DATABASE &


USING THE DATA DICTIONARY

51
‫‪PRE-CREATING STAGES‬‬

‫ﻋﻤﻠﯿﺔ ﺗﻜﻮﯾﻦ ال ‪ Database‬ﺗﺤﺘﺎج اﻟﻰ ﺗﺨﻄﯿﻂ وﺗﺤﻀﯿﺮ ﻣﺴﺒﻖ‪ ،‬ﯾﺠﺐ ﻋﻠﻰ ال ‪ DBA‬اﻋﺪاد اﻟﺘﺎﻟﻲ‪:‬‬

‫اﻟﺤﺠﻢ اﻟﻜﺎﻓﻲ ﻟﻜﻞ ﻣﻦ اﻟﻘﺮص اﻟﺼﻠﺐ "‪ "Hard Disk‬و اﻟﺬاﻛﺮة ﻓﻲ اﻟﺴﯿﺮﻓﺮ‪.‬‬ ‫·‬

‫دراﺳﺔ ﻧﻮﻋﯿﺔ اﻟﻨﻈﺎم " ‪ "Operating System‬اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺴﯿﺮﻓﺮ‪.‬‬ ‫·‬

‫وﺿﻊ ﺧﻄﺔ ﻟﺘﻮزﯾﻊ اﻟﻤﻠﻔﺎت ﻓﻲ ﻣﻮﻗﻊ اﻟﺘﺨﺰﯾﻦ ﻟﺤﻤﺎﯾﺔ ﻣﻠﻔﺎت ال ‪.Database‬‬ ‫·‬

‫ﺗﺤﺪﯾﺪ اﻟﻌﻮاﻣﻞ ‪ Initialization Parameters‬وﺧﺎﺻﺔ ال ‪ DB_BLOCK_SIZE‬اﻟﺬي ﻻ‬ ‫·‬


‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮه ﺑﻌﺪ ﻋﻤﻠﯿﺔ اﻟﺘﻨﺼﯿﺐ‪.‬‬

‫اﺧﺘﯿﺎر ﻧﻈﺎم اﻟﺤﻤﺎﯾﺔ ) ‪ Operating System‬او ‪ (Password File‬و ﺗﻮﻓﺮ ال ‪.SYSDBA‬‬ ‫·‬

‫ﻣﻌﺮﻓﺔ اذا ﻛﺎن ﯾﺮاد ﺗﻜﻮﯾﻦ ‪ Database‬ﺟﺪﯾﺪة أو ﯾﺮاد ﻧﻘﻞ ال ‪ Database‬اﻟﻤﻮﺟﻮدة ﻣﻦ ﻧﺴﺨﺔ‬ ‫·‬
‫أوراﻛﻞ أﻗﺪم اﻟﻰ ﻧﺴﺨﺔ أﺟﺪ ‪ ،‬ﻋﻨﺪ ذﻟﻚ ﯾﺠﺐ اﺳﺘﺨﺪام ال ‪Data Migration Assistant‬‬

‫ﺗﺤﺪﯾﺪ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺳﻮف ﯾﺘﻢ ﺑﮭﺎ ﺗﻜﻮﯾﻦ ال ‪ Database‬اﻟﺠﺪﯾﺪة ‪ ،‬إﻣﺎ ﻋﻦ ﻃﺮﯾﻖ اﺳﺘﺨﺪام‬ ‫·‬
‫‪ CREATE DATABASE‬ﻓﻲ ال ‪) SQL‬ﺗﺴﻤﻰ اﻟﻄﺮﯾﻘﺔ اﻟﯿﺪوﯾﺔ( او ﻋﻦ ﻃﺮﯾﻖ ‪Database‬‬
‫‪.Configuration Assistant‬‬

‫وﺿﻊ ﺧﻄﺔ ﻋﻤﻠﯿﺔ دورﯾﺔ ﻹﺟﺮاء ﻋﻤﻠﯿﺔ ال ‪.Backup‬‬ ‫·‬

‫ﻧﻘﺎط ﻣﮭﻤﺔ‪:‬‬

‫‪ -1‬ﯾﻨﺼﺢ ﺑﺘﻮزﯾﻊ ﻣﻠﻔﺎت ال ‪ Control File‬ﻋﻠﻰ ﻣﻮاﻗﻊ ﻣﺨﺘﻠﻔﺔ أو أﻗﺮاص ﺻﻠﺒﺔ ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫‪ -2‬ﯾﻨﺼﺢ ﺑﺘﻮزﯾﻊ اﻟﻤﻠﻔﺎت اﻟﻤﺘﺸﺎﺑﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log‬اﻟﻰ ﻣﻮاﻗﻊ ﻣﺨﺘﻠﻔﺔ أو أﻗﺮاص ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫‪ -3‬وﺿﻊ ﻧﻈﺎم ﻟﺘﺴﻤﯿﺔ اﻟﻤﻠﻔﺎت ﻟﯿﺘﺴﻨﻰ اﯾﺠﺎدھﺎ ﺑﺴﮭﻮﻟﺔ‪.‬‬

‫‪ -4‬ﺗﻔﺮﯾﻖ ﻋﻨﺎﺻﺮ ال ‪ Database‬اﻟﺘﻲ ﻟﮭﺎ ﻣﺮاﺣﻞ ﺣﯿﺎة ﻣﺨﺘﻠﻔﺔ)ﻗﺼﯿﺮة أو ﻃﻮﯾﻠﺔ( اﻟﻰ ﻣﻮاﻗﻊ ﻣﺨﺘﻠﻔﺔ ﻟﻜﻲ ﯾﻘﻞ‬
‫ﻣﺎ ﯾﻌﺮف ﺑﺎﺳﻢ ‪.Disk Fragmentation‬‬

‫‪ -5‬ﺗﻔﺮﯾﻖ ال ‪ Tables‬وال ‪ Indexes‬اﻟﻰ ‪ Tablespaces‬ﻣﺨﺘﻠﻔﺔ ﻟﺘﻨﻈﯿﻢ ﻋﻤﻠﯿﺔ ال ‪.Input/Output‬‬

‫‪52‬‬
‫‪DATABASE CONFIGURATION ASSISTANT‬‬

‫ﯾﻤﻜﻦ ﻋﺒﺮ ال)‪ (DBCA‬اﻟﻘﯿﺎم ﺑﺎﻟﺘﺎﻟﻲ‪Create a Database, Configure Database Options, :‬‬
‫‪.Delete a Database, and Manage Templates‬‬

‫‪:CREATE A DATABASE‬‬

‫ﻟﻠﻘﯿﺎم ﺑﺘﻜﻮﯾﻦ ‪ Database‬ﺟﺪﯾﺪة أو اﻟﻘﺎﻟﺐ "‪ ."Template‬واﻟﻘﺎﻟﺐ ﻋﺒﺎرة ﻋﻦ اﺧﺘﯿﺎر ال ‪Database‬‬


‫‪ Options‬وﺣﻔﻈﮭﺎ ﻟﻜﻲ ﯾﺘﺴﻨﻰ اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ ﻣﻮﻗﻊ أﺧﺮ‪ .‬ﻣﺜﻼً ﯾﻤﻜﻦ ان ﯾﻘﻮم اﻟﻔﺮع اﻷﺳﺎﺳﻲ ﻟﻠﺸﺮﻛﺔ ﺑﺘﻜﻮﯾﻦ‬
‫ﻗﺎﻟﺐ ال ‪ Database‬وﺗﻮزﯾﻌﮫ ﻋﻠﻰ اﻟﻔﺮوع ﻟﺘﻜﻮﯾﻦ ‪ Databases‬ﻣﺘﺸﺎﺑﮫ ﻓﻲ ﺟﻤﯿﻊ اﻟﻔﺮوع‪.‬‬
‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ﻧﻮﻋﯿﻦ ﻣﻦ اﻟﻘﻮاﻟﺐ "‪ "Templates‬ھﻤﺎ‪:‬‬

‫ﺑﺪون ال ‪ :Data Files‬ﻓﻘﻂ اﺧﺘﯿﺎرت ال ‪ Database‬دون اﻟﻤﻠﻔﺎت )ﻟﻤﻌﺮﻓﺔ اﻻﺧﯿﺎرات اﺿﻐﻂ ﻋﻠﻰ‬ ‫·‬
‫"‪ .("Show Details‬ﺗﻜﻤﻦ ﻓﺎﺋﺪﺗﮫ اﻧﮫ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﺟﻤﯿﻊ اﻷﺧﺘﯿﺎرات وال ‪Initialization‬‬
‫‪ Parameters‬ﺑﻌﺪ ﺗﻜﻮﯾﻦ اﻟﻘﺎﻟﺐ "‪."Template‬‬

‫ﻣﻊ ال ‪ :Data Files‬ﯾﻜﻮن اﻟﻘﺎﻟﺐ ﻣﺘﻜﻮﻧﺎً ﻣﻦ اﺧﺘﯿﺎرات ال ‪ Database‬ﻣﻊ وﺟﻮد ﻣﻠﻔﺎت ال ‪Data‬‬ ‫·‬
‫‪ .Files‬ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪ Control Files‬و ال ‪ Redo Log Groups‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ‪ ،‬ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ‬
‫اﺳﻤﺎء وﻣﻮاﻗﻊ ال ‪ ،Data Files‬وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ ﺣﺬف ال ‪ Data Files‬وﺗﻜﻮﯾﻨﮭﺎ ﻣﻦ ﺟﺪﯾﺪ وﻛﺬﻟﻚ‬
‫ﯾﻨﻄﺒﻖ اﻟﺤﺎل ﻋﻠﻰ ‪ ،Tablespaces‬وﻻ ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ال ‪ Initialization Parameters‬ﺑﻌﺪ ﺗﻜﻮﯾﻦ‬
‫اﻟﻘﺎﻟﺐ "‪."Template‬‬

‫ﯾﻮﺟﺪ ﻋﺪد ﻣﻦ اﻟﻘﻮاﻟﺐ اﻟﻤﻌﺪة ﻣﺴﺒﻘﺎً "‪ "Template Name‬ﺗﻈﮭﺮ ﺑﺎﻟﺮﺳﻢ ‪:3.1‬‬

‫رﺳﻢ ‪3.1‬‬

‫‪53‬‬
‫ﺑﻌﺪ أن ﯾﺘﻢ اﺧﺘﯿﺎر أﺣﺪ اﻟﻘﻮاﻟﺐ "‪ "Templates‬ﯾﻄﻠﺐ اﺧﺘﯿﺎر اﺳﻢ ال ‪ Database‬واﺳﻢ ال ‪Instance‬‬
‫اﻟﻤﻌﺮف ﺑﺎﻟﺮﻣﺰ ‪.SID‬‬

‫رﺳﻢ ‪3.2‬‬

‫ﻓﻲ ﺣﺎل ﺗﻢ اﺧﺘﯿﺎر اﻟﻘﺎﻟﺐ "‪ "New Database‬ﯾﺘﻢ اﺧﺘﯿﺎر اﻟﻤﻤﯿﺰات "‪ "Features‬اﻟﺘﻲ ﺗﺮﯾﺪ اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ‬
‫ال ‪.Database‬‬

‫رﺳﻢ ‪3.3‬‬

‫‪54‬‬
‫اﻟﻤﺮﺣﻠﺔ اﻟﺘﺎﻟﯿﺔ ﯾﺘﻢ اﺧﺘﯿﺎر اﻟﺒﯿﺌﺔ اﻟﺘﻲ ﺳﻮف ﯾﻌﻤﻞ ﺑﮭﺎ ال ‪.Database‬‬

‫رﺳﻢ ‪3.4‬‬

‫ﺑﻌﺪ ذﻟﻚ ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﻋﻮاﻣﻞ "‪ "Parameters‬ال ‪ Initialization Parameter File‬اﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫رﺳﻢ ‪3.5‬‬

‫‪55‬‬
‫ﯾﺘﻢ ﺑﻌﺪ ذﻟﻚ ﻋﺮض اﺳﻤﺎء اﻟﻤﻠﻔﺎت اﻟﻔﯿﺰﯾﺎﺋﯿﺔ وال ‪ Tablespaces‬وﻣﻮاﻗﻌﮭﺎ وﻟﺪﯾﻚ اﻟﺨﯿﺎر ﺑﺤﺬف أو اﺿﺎﻓﺔ‬
‫ﻣﻠﻔﺎت اﺧﺮى‪.‬‬

‫رﺳﻢ ‪3.6‬‬

‫ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻟﺘﺎﻟﯿﺔ ﯾﺘﻢ اﺧﺘﯿﺎر ﻧﻮﻋﯿﺔ اﻟﺘﻜﻮﯾﻦ‪ ،‬ھﻞ ﺗﺮﯾﺪ ﺗﻜﻮﯾﻦ ‪ Database‬أو ﺗﺮﯾﺪ ﺗﻜﻮﯾﻦ ﻓﻘﻂ ﻗﺎﻟﺐ‬
‫"‪ "Template‬أو ھﻞ ﺗﺮﯾﺪ ﺗﻜﻮﯾﻦ ﺟﻤﻞ ‪ SQL Scripts‬اﻟﺘﻲ ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻣﻊ أﻣﺮ‬
‫‪.CREATE DATABASE‬‬

‫رﺳﻢ ‪3.7‬‬

‫‪56‬‬
‫‪:CONFIGURE DATABASE OPTIONS‬‬

‫ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ال ‪ Database‬اﻟﺘﻲ ﺗﻢ ﺗﻜﻮﯾﻨﮭﺎ ﺳﺎﺑﻘﺎً ﻣﻦ ﻧﺎﺣﯿﺔ ال ‪ Oracle Features‬واﻟﺒﯿﺌﺔ اﻟﺘﻲ ﺗﻌﻤﻞ ﻋﻠﯿﮭﺎ‬
‫)‪ Shared Server‬أو ‪.(Dedicated Server‬‬

‫‪:DELETE A DATABASE‬‬

‫ﻟﺤﺬف ‪ Database‬ﺗﻢ ﺗﻜﻮﯾﻨﮭﺎ ﺳﺎﺑﻘﺎً‬

‫‪:MANAGE A TEMPLATE‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻟﺘﻜﻮﯾﻦ ﻗﺎﻟﺐ "‪ "Template‬أو ﻟﺤﺬف ﻗﺎﻟﺐ "‪ "Template‬ﻣﻮﺟﻮد‪ .‬ﻋﻨﺪ ﺗﻜﻮﯾﻦ ﻗﺎﻟﺐ‬
‫"‪ "Template‬ﺟﺪﯾﺪ ﯾﻤﻜﻦ اﻻﺧﺘﯿﺎر ﺑﯿﻦ ﺛﻼت ﺧﯿﺎرات ھﻲ‪:‬‬

‫ﻣﻦ ﻗﺎﻟﺐ "‪ "Template‬أﺧﺮ ﻣﻮﺟﻮد‪ ،‬اذ ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ﻣﻮاﺻﻔﺎت اﻟﻘﺎﻟﺐ "‪ "Template‬ﻟﺼﻨﻊ ﻗﺎﻟﺐ‬ ‫·‬
‫"‪ "Template‬ﺟﺪﯾﺪ‪.‬‬
‫ﻣﻦ ﻣﻮاﺻﻔﺎت ‪ Database‬ﻣﻮﺟﻮدة )ﺗﻢ ﺗﻜﻮﯾﻨﮭﺎ ﺳﺎﺑﻘﺎً( ‪ ،‬اذ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ﻗﺎﻟﺐ "‪"Template‬‬ ‫·‬
‫ﻣﺸﺎﺑﮫ ﻟﻤﻮاﺻﻔﺎت ال ‪ Database‬وﻟﻜﻦ دون ﻣﻠﻔﺎت ال ‪.Data Files‬‬
‫ﻣﻦ ‪ Database‬ﻣﻮﺟﻮدة‪ ،‬اذ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ﻧﺴﺨﺔ ﻣﻄﺎﺑﻘﺔ ل ‪ Database‬ﻣﻮﺟﻮدة ﻣﻊ ال ‪Data‬‬ ‫·‬
‫‪ Files‬وﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت‪.‬‬

‫رﺳﻢ ‪3.8‬‬

‫‪57‬‬
CREATE A DATABASE MANUALLY

.CREATE DATABASE ‫ ﺑﻄﺮﯾﻘﺔ ﯾﺪوﯾﺔ ﺑﺎﺳﺘﺨﺪام اﻷﻣﺮ‬Database ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال‬


:‫اﻟﺨﻄﻮات اﻟﻤﺘﺒﻌﺔ ﺗﺘﻠﺨﺺ ﺑﺎﻟﺘﺎﻟﻲ‬

.Database ‫ وال‬Instance ‫ﺗﺤﺪﯾﺪ اﺳﻢ ال‬ ·


.‫ اﻟﺘﻲ ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً ﻓﻲ ﻓﺼﻞ أﺧﺮ‬Database Character Set ‫ﺗﺤﺪﯾﺪ ال‬ ·
.Initialization Parameter File ‫ﺗﺠﮭﯿﺰ ﻣﻠﻒ ال‬ ·
.SYSDBA ‫ ﻋﺒﺮ ال‬،NOMOUNT ‫ ﻓﻲ اﻟﻮﺿﻌﯿﺔ‬Database ‫ﺗﺸﻐﯿﻞ ال‬ ·
.CREATE DATABASE ‫ﻛﺘﺎﺑﺔ اﻷﻣﺮ‬ ·
. Data Dictionary ‫ ﻟﺘﻜﻮﯾﻦ ال‬SQL SCRIPTS ‫ﺗﺸﻐﯿﻞ ال‬ ·

‫ ﯾﺠﺪ ﺗﺤﺪﯾﺪ ﻣﺎ ﯾﻌﺮف ﯾﺎﺳﻢ ال‬UNIX ‫ ﻋﻠﻰ ﻧﻈﺎم ال‬Database ‫ اذا ﻛﻨﺖ ﺗﻘﻮم ﺑﺘﻜﻮﯾﻦ ال‬:‫ﻣﻼﺣﻈﺔ‬
: ‫ وﻣﻨﮭﺎ‬Environmental Variables

."Top of Tree" ‫" اﻟﺬي ﯾﺤﻮي ﻛﻞ ﻣﻠﻔﺎت اﻷوراﻛﻞ‬Directory" ‫ ھﻮ اﻟﻤﻮﻗﻊ‬:ORACLE_BASE


."Versions" ‫وھﻨﺎ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻛﻞ ﻧﺴﺦ اﻷوراﻛﻞ اﻟﻤﺨﺘﻠﻔﺔ‬

.Oracle Software ‫ ﻣﻮﻗﻊ ال‬:ORACLE_HOME

.‫ أﺧﺮ‬Instance ‫ واﻟﺬي ﯾﺠﺐ ان ﯾﻜﻮن ﻏﯿﺮ ﻣﺘﺸﺎﺑﮫ ﻣﻊ اﺳﻢ‬Instance ‫ ﺗﺤﺪد اﺳﻢ ال‬:ORACLE_SID

."Default" ً‫" ﻏﯿﺮ اﻟﺘﻲ ﺗﻢ ﺗﺤﺪﯾﺪھﺎ ﻣﺴﺒﻘﺎ‬Database Character Set" ‫ ﻟﺘﺤﺪﯾﺪ‬:ORA_NLS33

‫ وﻣﻦ اﻟﻤﻔﺘﺮض ان ﺗﻜﻮن‬،SQLPLUS ‫ ﻣﻮاﻗﻊ ﺑﺮاﻣﺞ اﻷوراﻛﻞ ﻣﺜﻞ ال‬:PATH


.$ORACLE_HOME\bin

‫ وﻋﺎدة ﻣﺎ ﺗﻜﻮن‬Oracle Library Files ‫ ﻣﻠﻔﺎت أﺧﺮى ﺗﺴﻤﻰ‬:LD_LIBRARY_PATH


.$ORACLE_HOME\lib

:‫ ﺑﺸﻜﻞ ﯾﺪوي ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‬Database ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ‬

CREATE DATABASE [name of database]


[CONTROLFILE REUSE]
[LOGFILE [GROUP number] C1
[MAXLOGFILES number]
[MAXLOGMEMBERS number]
[MAXLOGHISTORY number]
[MAXDATAFILES number]
[MAXINSTANCES number]
[ARCHIVELOG | NOARCHIVELOG]
[CHARACTER SET char]
[NATIONAL CHARACTER SET char]
[DATAFILE C1 [C2]]
[DEFAULT TEMPORARY TABLESPACE tablespace_name C1 [C3]]
[UNDO TABLESPACE tablespace_name DATAFILE C1 [C2]]
[SET TIME_ZONE [time_zone_region]]

58
‫أﻣﺎ ال اﻟﺮﻣﻮز ال ‪ C3،C2 ،C1‬ﻓﺘﺮﻣﺰ اﻟﻰ ﺟﺰء ﻣﻦ اﻟﻘﺎﻋﺪة ﺗﻢ ﺗﺨﻔﯿﻔﺔ اﻟﻰ رﻣﻮز ﻟﺴﮭﻮﻟﺔ ﻗﺮاءة اﻟﻘﺎﻋﺪة‪:‬‬

‫‪'filename' [SIZE number] [K | M] [REUSE] =C1‬‬

‫‪[AUTOEXTEND OFF | ON [NEXT number [K | M]] =C2‬‬


‫]]]‪[MAXSIZE UNLIMITED | number [K | M‬‬

‫‪EXTENT MANAGEMENT LOCAL UNIFORM [SIZE number] [K | M] =C3‬‬

‫اي اﻧﮫ ﻓﻲ اﻟﺠﻤﻠﺔ اﻟﺜﺎﻟﺜﺔ ﺗﻜﻮن اﻟﻘﺎﻋﺪة‪:‬‬

‫]‪[LOGFILE [GROUP number] 'filename' [SIZE number] [K | M] [REUSE‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺟﻤﻠﺔ ال ‪ CREATE DATABASE‬ھﻲ اﻟﺠﻤﻠﺔ اﻹﻟﺰاﻣﯿﺔ اﻟﻮﺣﯿﺪة و اﻟﺒﺎﻗﻲ اﺧﺘﯿﺎري‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :2‬ﻋﻨﺪ ﻋﺪم اﺳﺘﺨﺪام ﻛﻠﻤﺔ ال ‪ SIZE‬ﯾﺠﺐ اﺳﺘﺨﺪام ﻛﻠﻤﺔ ال ‪ REUSE‬واﻟﻌﻜﺲ ﺻﺤﯿﺢ‪.‬‬

‫أﻣﺎ أواﻣﺮ اﻟﻘﺎﻋﺪة ﻓﮭﻲ ‪:‬‬

‫]‪ :[name of database‬اﺳﻢ ال ‪ Database‬اﻟﻤﺮاد ﺗﻜﻮﯾﻨﮫ‪ .‬ﻓﻲ ﺣﺎل ﻋﺪم ﻛﺘﺎﺑﺘﮫ ﯾﺆﺧﺬ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ‬ ‫·‬
‫‪.DB_NAME‬‬
‫]‪ :[CONTROLFILE REUSE‬ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻟﻄﻠﺐ اﻋﺎدة اﺳﺘﺨﺪام " ‪"Overwrite‬‬ ‫·‬
‫ﻣﻠﻔﺎت ال ‪ Control Files‬اﻟﻤﻌﺮﻓﺔ ﻓﻲ ال ‪ Initialization Parameter File‬ﻋﻮﺿﺎً ﻋﻦ ﺗﻜﻮﯾﻦ‬
‫ﻣﻠﻔﺎت ﺟﺪﯾﺪة‪.‬‬
‫]‪ :[MAXLOGFILES number‬ﺗﺤﺪد اﻟﻌﺪد اﻷﻗﺼﻰ ﻟﻤﺠﻤﻮﻋﺎت ال ‪ Redo Log Files‬اﻟﺘﻲ‬ ‫·‬
‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮭﺎ ﻓﻲ ال ‪ Database‬ﻋﻠﻰ ﻣﺪى ﺣﯿﺎة ال ‪ ،Database‬اﻟﻌﺪد اﻷدﻧﻰ ھﻮ ‪.2‬‬
‫]‪ :[MAXLOGMEMBERS number‬ﺗﺤﺪد اﻟﻌﺪد اﻷﻗﺼﻰ ﻟﻤﻠﻔﺎت ال ‪ Redo Log‬ﺿﻤﻦ‬ ‫·‬
‫اﻟﻤﺠﻤﻮﻋﺎت‪.‬‬
‫]‪ :[MAXLOGHISTORY number‬ﺗﺤﺪد ﻋﺪد ال ‪ Archived Log Files‬اﻟﺘﻲ ﺗﺴﺨﺪم ﻓﻲ‬ ‫·‬
‫ﻋﻤﻠﯿﺔ ال ‪.Media Recovery‬‬
‫]‪ :[AUTOEXTEND‬ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬ ‫·‬
‫]‪ :[MAXDATAFILES‬ﺗﺤﺪد اﻟﻌﺪد اﻷﻗﺼﻰ ﻣﻦ ال ‪ Data Files‬اﻟﺬي ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮫ ﻋﻠﻰ ﻣﺪى‬ ‫·‬
‫ﺣﯿﺎة ال ‪.Database‬‬
‫]‪ :[MAXINSTANCES‬ﺗﺤﺪد اﻟﻌﺪد اﻷﻗﺼﻰ ﻣﻦ ال ‪ Instances‬اﻟﺬﯾﻦ ﯾﺴﺘﻄﯿﻌﻮن اﻟﻌﻤﻞ ﻋﻠﻰ ال‬ ‫·‬
‫‪ Database‬ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪.‬‬
‫]‪ :[CHARACTER SET char‬ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬ ‫·‬
‫]‪ :[NATIONAL CHARACTER SET‬ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬ ‫·‬
‫]‪ :[DEFAULT TEMPORARY TABLESPACE‬ﻟﺘﻜﻮﯾﻦ ال ‪Default Temporary‬‬ ‫·‬
‫‪ Tablespace‬اﻟﺘﻲ ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪ ،‬اذا ﻟﻢ ﺗﺤﺪد ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﻜﻮﯾﻨﮭﺎ ﻟﻠﻤﺴﺘﺨﺪم‪.‬‬
‫]‪ :[UNDO TABLESPACE‬ﻟﺘﻜﻮﯾﻦ ال ‪ Undo Tablespace‬اﻟﺘﻲ ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬ ‫·‬
‫]‪ :[SET TIME_ZONE‬ﺗﺤﺪﯾﺪ وﻗﺖ ال ‪.Database‬‬ ‫·‬

‫‪59‬‬
:3.1 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

CREATE DATABASE db01


CONTROLFILE REUSE
LOGFILE
GROUP 1 ('C: \oracle\ora92\oradata\db01\log101.log') SIZE 10M
GROUP 2 ('C: \ oracle\ora92\oradata\db01\log201.log') SIZE 10M
GROUP 3 ('C: \ oracle\ora92\oradata\db01\log301.log') SIZE 10M
MAXLOGFILES 4
MAXLOGMEMBERS 2
MAXLOGHISTORY 0
MAXDATAFILES 254
MAXINSTANCES 2
ARCHIVELOG
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
DATAFILE 'C: \oracle\ora92\oradata\db01\system01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
UNDO TABLESPACE UNDO01
DATAFILE 'C: \oracle\ora92\oradata\db01\undo01.dbf' SIZE 40M
DEFAULT TEMPORARY TABLESPACE TEMP01 TEMPFILE
'C: \oracle\ora92\oradata\db01\temp01.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
SET TIME_ZONE = 'CANADA /YUKON'
;

:‫ ﺑﺸﻜﻞ ﯾﺪوي‬Database ‫اﻷﺧﻄﺎء اﻟﺘﻲ ﻗﺪ ﺗﺆدي اﻟﻰ ﻓﺸﻞ ﺗﻜﻮﯾﻦ ال‬

.SQL ‫أﺧﻄﺎء ﻓﻲ ﻛﺘﺎﺑﺔ ﺟﻤﻞ ال‬ ·


(‫ﻃﻠﺐ ﺗﻜﻮﯾﻦ ﻣﻠﻔﺎت ﻣﻮﺟﻮدة ﻣﺴﺒﻘﺎً )ﺗﺄﻛﺪ ﻣﻦ ان اﺳﻢ اﻟﻤﻠﻒ ﻏﯿﺮ ﻣﺴﺘﺨﺪم‬ ·
."Operating System " ‫ﻣﺸﺎﻛﻞ أو اﺧﻄﺎء ﻧﺎﺗﺠﺔ ﻣﻦ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ‬ ·

:‫ ﺑﻌﺪ ﻣﺤﺎوﻟﺔ ﻓﺎﺷﻠﺔ ﯾﺠﺐ‬Database ‫ﻷﻋﺎدة ﺗﻜﻮﯾﻦ ال‬

.Instance ‫اﻏﻼق ال‬ ·


.‫ اﻟﺘﻲ ﻓﺸﻠﺖ‬CREATE DATABASE ‫ﺣﺬف أي ﻣﻠﻔﺎت ﺗﻜﻮﻧﺖ ﻣﻦ ال‬ ·
.‫ اﻟﺘﻲ ﺗﺤﻮي أﺧﻄﺎء‬SQL ‫ ﻣﺜﻞ ﺗﻌﺪﯾﻞ ﺟﻤﻠﺔ ال‬، ‫ﺗﺼﺤﯿﺢ ﺳﺒﺐ اﻟﻔﺸﻞ‬ ·
.‫ ﻣﻦ ﺟﺪﯾﺪ‬Database ‫ واﻟﻘﯿﺎم ﺗﻜﻮﯾﻦ ال‬NOMOUNT ‫ ﻓﻲ وﺿﻌﯿﺔ ال‬Instance ‫ﺗﺸﻐﯿﻞ ال‬ ·

‫ وﻟﻜﻦ ﯾﺘﻢ‬،‫ ﺑﺸﻜﻞ ﯾﺪوي‬Database ‫ ﺑﻌﺪ اﻻﻧﺘﮭﺎء ﻣﻦ ﺗﻜﻮﯾﻦ ال‬Data Dictionary ‫ ﻻ ﯾﺘﻜﻮن ال‬:‫ﻣﻼﺣﻈﺔ‬
.V$DATAFILE ‫ ﻣﺜﻞ ال‬Dynamic Views ‫ﺗﻜﻮﯾﻦ ال‬

.‫ ﻷﺧﺬ اﻷﻣﺎن‬SYSTEM ‫ و‬SYS ‫ ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﻟﻜﻞ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ‬:‫ﺗﺬﻛﺮ‬

.Database ‫ ﯾﺴﮭﻞ ﻋﻤﻠﯿﺔ ﺗﻜﻮﯾﻦ ال‬Oracle Managed Files (OMF) ‫ ان اﺳﺘﺨﺪام ال‬:‫ﺗﺬﻛﺮ‬

60
‫‪DATA DICTIONARY‬‬

‫ﯾﻌﺘﺒﺮ ال ‪ Data Dictionary‬أﺣﺪ أھﻢ ﻣﻜﻮﻧﺎت ال ‪ ،Database‬اذ ﯾﺘﻜﻮن ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪ Tables‬وال‬


‫‪ Views‬اﻟﺘﻲ ﺗﺤﺘﻮي ﻣﻌﻠﻮﻣﺎت ﻗﯿﻤﺔ ﻋﻦ ال ‪ .Database‬ﺗﺴﺘﺨﺪم ال ‪ Data Dictionary‬ﻟﻘﺮاءة اﻟﺒﯿﺎﻧﺎت‬
‫ﻓﻘﻂ وﻻ ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎﺗﮭﺎ ﺑﻮاﺳﻄﺔ ال ‪ ،DBA‬وﻟﻜﻦ ﯾﻘﻮم ال ‪ Oracle‬ﺑﺘﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻋﻨﺪ ﺣﺪوث‬
‫أواﻣﺮ ال )‪ .Data Definition Language (DDL‬ﯾﺴﺘﺨﺪم اﻷوراﻛﻞ ال ‪ Data Dictionary‬اﯾﻀﺎّ ﻋﻨﺪ‬
‫ﻃﻠﺐ اﻟﻤﺴﺘﺨﺪم اﻟﺪﺧﻮل اﻟﻰ ال ‪ ، Database‬اذ ﯾﻘﻮم ﺑﺎﻟﺘﺄﻛﺪ ﻣﻦ وﺟﻮد اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﺑﯿﺎﻧﺎت اﻟﻤﺴﺘﺨﺪم ﻣﺜﻞ‬
‫ال ‪.User Privileges‬‬

‫ﯾﺘﻜﻮن ال ‪ Data Dictionary‬ﻣﻦ ﻋﻨﺼﺮﯾﻦ ھﻤﺎ‪:‬‬

‫‪ :BASE TABLES‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل ال ‪ Database‬ﻓﻲ ال ‪ .Base Tables‬ﺗﻌﺘﺒﺮ أول‬ ‫·‬
‫ﺟﺰء "‪ "Object‬ﻣﻦ ال ‪ Database‬ﯾﺘﻢ ﺗﻜﻮﯾﻨﮫ‪ ،‬و ﯾﺘﻢ ﺗﻜﻮﯾﻨﮭﺎ ﺑﺸﻜﻞ أﺗﻮﻣﺎﺗﯿﻜﻲ ﻣﻦ ﻗﺒﻞ اﻷوراﻛﻞ‬
‫ﺑﺎﺳﺘﺨﺪام اﻟﻤﻠﻒ "‪ "Script‬اﻟﻤﺴﻤﻰ ﺑﺎﺳﻢ ‪ .sql.bsq‬ﻻ ﯾﺠﺐ ﺗﻌﺪﯾﻞ ال ‪ Base Tables‬أواﻟﻌﺒﺚ ﺑﮭﺎ‬
‫ﻷﻧﮭﺎ ﺿﺮورﯾﺔ ﻟﺘﺸﻐﯿﻞ ال ‪ ،Database‬وﻟﻜﻦ ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ واﺣﺪة ﻓﻘﻂ وھﻲ ال ‪ ، AUD$‬ﻣﻊ اﻟﻌﻠﻢ أﻧﮫ‬
‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ال ‪ Base Tables‬ﺑﺸﻜﻞ ﻣﺸﻔﺮ‪.‬‬

‫‪ :DICTIONARY VIEWS‬ﺗﻘﻮم ﺑﺘﻠﺨﯿﺺ وﺗﺮﺗﯿﺐ ﺑﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Base Tables‬ﻟﻜﻲ‬ ‫·‬


‫ﺗﺴﮭﻞ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت و ﻗﺮاﺋﺘﮭﺎ‪ .‬ﯾﺘﻢ ﺗﻜﻮﯾﻨﮭﺎ ﺑﺎﺳﺘﺨﺪام اﻟﻤﻠﻒ "‪ "Script‬اﻟﻤﺴﻤﻰ ﺑﺎﺳﻢ‬
‫‪.catalog.sql‬‬

‫ﺑﯿﺎﻧﺎت ال ‪:Data Dictionary‬‬

‫ﯾﻮﻓﺮ ال ‪ Data Dictionary‬ﺑﯿﺎﻧﺎت ﻣﮭﻤﺔ ﺣﻮل‪:‬‬

‫ﻣﻌﻠﻮﻣﺎت ﺗﻔﺼﯿﻠﯿﺔ ﺣﻮل ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮ "‪ "Objects‬ال ‪ Database‬ﻣﺜﻞ ال ‪Tables, Indexes,‬‬ ‫·‬
‫‪ Views, Synonyms, Data files, Control Files‬وﻏﯿﺮھﺎ‪.‬‬

‫ﺑﯿﺎﻧﺎت ﺣﻮل اﻟﻤﺴﺎﺣﺔ اﻟﻤﺸﻐﻮﻟﺔ واﻟﻤﺴﺎﺣﺔ اﻟﻔﺎرﻏﺔ ﻓﻲ ال ‪.Database‬‬ ‫·‬

‫ﺑﯿﺎﻧﺎت ﺣﻮل اﻟﻤﺴﺘﺨﺪﻣﯿﻦ "‪."Users‬‬ ‫·‬

‫ﺑﯿﺎﻧﺎت ﺗﻔﺼﯿﻠﯿﺔ ﻟﻞ ‪ Privileges‬و ال ‪ Roles‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻜﻞ ﻣﺴﺘﺨﺪم‪.‬‬ ‫·‬

‫ﺑﯿﺎﻧﺎت ﺣﻮل ال ‪ Auditing‬اﻟﺘﻲ ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻓﻲ ﻓﺼﻞ أﺧﺮ‪.‬‬ ‫·‬

‫ﺑﯿﺎﻧﺎت ﺣﻮل ال ‪. Integrity Constraint‬‬ ‫·‬

‫‪61‬‬
‫‪QUERYING DATA DICTIONARY‬‬

‫ﺗﺘﻮزع ال ‪ Dictionary Views‬اﻟﻰ ﺛﻼث ﻣﺠﻤﻮﻋﺎت ﻋﻲ‪:‬‬

‫_‪ :DBA‬ﺗﺤﺘﻮي ال ‪ Views‬ﻋﻠﻰ ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﻌﻨﺎﺻﺮ "‪ "Objects‬ﻓﻲ ال ‪ ،Database‬وھﻲ‬ ‫·‬
‫ﺧﺎﺻﺔ ﻟﻞ ‪ DBA‬و ﻛﻞ ﻣﺴﺘﺨﺪم ﻟﺪﯾﮫ ال ‪ Privileges‬اﻟﻼزﻣﺔ ﻟﻠﺪﺧﻮل اﻟﻰ ﺑﯿﺎﻧﺎﺗﮭﺎ‪.‬‬

‫_‪ :ALL‬ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﺣﻮل ﺟﻤﯿﻊ اﻟﻌﻨﺎﺻﺮ "‪ "Objects‬اﻟﺘﻲ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم اﺳﺘﺨﺮاج‬ ‫·‬
‫اﻟﺒﯿﺎﻧﺎت ﻣﻨﮭﺎ‪ ،‬ﺳﻮاء ﻣﺎ ﻛﺎن ﻣﻨﮭﺎ ﺿﻤﻦ ال ‪ Schema‬اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﺴﺘﺨﺪم أو ﻣﺴﺘﺨﺪﻣﯿﻦ أﺧﺮﯾﻦ أو‬
‫ال ‪.Public Schema‬‬

‫_‪ :USER‬ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﺣﻮل اﻟﻌﻨﺎﺻﺮ "‪ "Object‬اﻟﺘﻲ ﯾﻤﻠﻜﮭﺎ اﻟﻤﺴﺘﺨﺪم )أي اﻟﻌﻨﺎﺻﺮ ﻓﻲ‬ ‫·‬
‫ال ‪ Schema‬اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﺴﺘﺨﺪم(‪.‬‬

‫ﯾﻤﻜﻦ ﻣﻌﺮﻓﺔ ﺟﻤﯿﻊ ال ‪ Views‬اﻟﻤﺘﻮﻓﺮة ﻓﻲ ال ‪ Data Dictionary‬ﻣﻦ ﺧﻼل اﻟﺒﯿﺎﻧﺎت اﻟﻤﻌﺮوﺿﺔ ﻣﻦ ال‬
‫‪.DICTIONARY view‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:3.2‬‬

‫;‪SELECT * FROM DBA_OBJECTS‬‬

‫;‪SELECT * FROM ALL_OBJECTS‬‬

‫;‪SELECT * FROM USER_OBJECTS‬‬

‫;‪SELECT * FROM DICTIONARY‬‬

‫‪DYNAMIC PERFORMANCE‬‬

‫ﻃﻮال ﻓﺘﺮة ﻋﻤﻞ ال ‪ ،Database‬ﯾﻘﻮم ‪ Oracle Server‬ﺑﺘﺴﺠﯿﻞ ﺑﯿﺎﻧﺎت ﺣﻮل ﻋﻤﻞ ال ‪ Database‬ﻓﻲ‬
‫اﻟﺬاﻛﺮة ﻋﻠﻰ ﺷﻜﻞ ‪ Tables‬وﻋﻨﺪ اﻏﻼق ال ‪ Database‬أو اﻏﻼق اﻟﺴﯿﺮﻓﺮ ﺗﻀﯿﻊ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺬاﻛﺮة‪.‬‬
‫ﺗﻌﺘﺒﺮ ال ‪ Dynamic Performance View‬ﻣﻦ ﺿﻤﻦ ال ‪ ،SYS Schema‬وھﻲ ﺗﺴﺘﺨﺪم ﺑﺸﻜﻞ اﺳﺎﺳﻲ‬
‫ﻟﻤﺮاﻗﺒﺔ ال ‪ Database‬وﻻ ﯾﺴﻤﺢ اﻟﻘﯿﺎم ﺑﺄواﻣﺮ )‪ Data Manipulation Language(DML‬ﻋﻠﯿﮭﺎ‪.‬‬

‫ﻟﻤﻌﺮﻓﺔ ال ‪ Views‬اﻟﻤﺘﻮﻓﺮة ﯾﻤﻜﻦ اﺳﺘﺨﺪام ‪ ،V$FIXED_TABLE‬وﻟﻤﻌﺮﻓﺔ ال ‪ Columns‬ﺿﻤﻦ ال‬


‫‪ Views‬اﺳﺘﺨﺪم ‪.V$INSTANCE‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺮﻣﺰ ﻟﻞ ‪ Dynamic Performance Views‬ﺑﺎﻟﺮﻣﺰ ‪.V$‬‬

‫‪62‬‬




CONTROL & REDO LOG FILES














63
‫‪‬‬
‫‪‬‬

‫‪CONTROL FILE‬‬

‫ﯾﻌﺘﺒﺮ ‪ Control File‬ﺿﺮوري ﺟﺪً ﻟﺘﺸﻐﯿﻞ وﻋﻤﻞ ال ‪ ،Database‬ﺣﯿﺚ ﺗﺘﻢ ﻗﺮاﺋﺘﮫ ﻣﻦ ﻗﺒﻞ ال ‪Oracle‬‬
‫‪ Server‬ﻗﺒﻞ ﺑﺪء ﺗﺸﻐﯿﻞ ال ‪ ،Database‬اذ ﯾﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻣﮭﻤﺔ ﺣﻮل ال ‪ Database‬ﻣﺜﻞ اﺳﻤﺎء‬
‫وﻣﻮاﻗﻊ ﻣﻠﻔﺎت ال ‪ .Data Files‬ﺗﺘﻢ ﺗﻐﯿﺮ ﺑﯿﺎﻧﺎﺗﮫ أو ﺗﺠﺪﯾﺪھﺎ "‪ "Update‬ﻋﺒﺮ ال ‪ Oracle Server‬ﻓﻘﻂ ‪،‬‬
‫اذ ﻻ ﯾﺴﺘﻄﯿﻊ أي ﻣﺴﺘﺨﺪم أو ال ‪ DBA‬اﻟﻘﯿﺎم ﺑﮭﺬه اﻟﻤﮭﻤﺔ‪.‬‬
‫ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪ Control File‬ﺑﻌﺪ ﺗﻜﻮﯾﻦ ال ‪ Database‬ﻣﺒﺎﺷﺮة وﻻ ﯾﺴﺘﻄﯿﻊ ال ‪ Control File‬اﻟﻮاﺣﺪ‬
‫اﻟﻌﻤﻞ ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ ‪ Database‬واﺣﺪة ‪ ،‬وﯾﻠﺰم ‪ Control File‬واﺣﺪ ﻓﻘﻂ ﻋﻠﻰ اﻷﻗﻞ ﻟﺘﺸﻐﯿﻞ ال ‪Database‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺗﺴﻤﻰ ﻋﻤﻠﯿﺔ ﺗﻜﻮﯾﻦ أﻛﺜﺮ ﻣﻦ ﻧﺴﺨﺔ ﻣﺘﻄﺎﺑﻘﺔ ﻣﻦ ﻣﻠﻔﺎت ال ‪) Control Files‬ﯾﻨﻄﺒﻖ اﻟﺤﺎل ﻋﻠﻰ ال‬
‫‪ Redo Log‬اﯾﻀﺎ( ﺑﻌﻤﻠﯿﺔ ال ‪ ، Multiplex‬وﯾﻔﻀﻞ ﺗﻮزﯾﻌﮭﺎ ﻋﻠﻰ ﻣﻮاﻗﻊ أو اﻗﺮاص ﺻﻠﺒﺔ ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫ﻣﻼﺣ ﻈﺔ‪ :2‬ﻣﻠﻔﺎت ال ‪ Control Files‬ﻣﻦ ﻧﻮﻋﯿﺔ ال ‪.Binary‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺗﺘﻢ ﻗﺮاءة ﻣﻠﻔﺎت ال ‪ Control File‬ﻓﻲ ﻣﺮﺣﻠﺔ ال ‪.Mount‬‬

‫ﺗﺬﻛﺮ‪ :2‬ﻣﻠﻒ ال ‪ SPFILE‬ﻣﻦ ﻧﻮﻋﯿﺔ ال ‪.Binary‬‬

‫ﯾﻮﺟﺪ ﻋﻮاﻣﻞ "‪ "Parameters‬ﺗﺤﺪد ﺣﺠﻢ ال ‪ Control File‬وھﻲ‪:‬‬

‫‪MAXLOGFILES‬‬ ‫·‬
‫‪MAXLOGMEMBERS‬‬ ‫·‬
‫‪MAXLOGHISTORY‬‬ ‫·‬
‫‪MAXINSTANCES‬‬ ‫·‬
‫‪MAXDATAFILES‬‬ ‫·‬

‫ﯾﺤﺘﻮي ال ‪ Control File‬ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫اﺳﻢ ال ‪ Database‬اﻟﺘﻲ ﯾﻌﻤﻞ ﻟﮭﺎ ال ‪.Control File‬‬ ‫·‬


‫ﺗﺎرﯾﺦ وﺗﻮﻗﯿﺖ ﺗﻜﻮﯾﻦ ال ‪.Database‬‬ ‫·‬
‫اﺳﻤﺎء وﻣﻮاﻗﻊ ﻣﻠﻔﺎت ال ‪ Data Files‬و ال ‪.Redo Log‬‬ ‫·‬
‫اﺳﻤﺎء ال ‪.Tablespaces‬‬ ‫·‬
‫ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪.Checkpoint‬‬ ‫·‬
‫ﻣﻌﻠﻮﻣﺎت ﺣﻮل ‪.Archived Log File‬‬ ‫·‬
‫ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﻋﻤﻠﯿﺔ ال ‪.Backup‬‬ ‫·‬
‫ﺗﻮﻗﯿﺖ ﺑﺪء و ﺗﻮﻗﻒ ال ‪.Undo Segment‬‬ ‫·‬
‫اﻟﺮﻗﻢ اﻟﺤﺎﻟﻲ ل ‪ Log Sequence Number‬واﻟﺬي ﯾﺘﻢ ﺗﺨﺰﯾﻨﮫ ﻋﻨﺪ ﺣﺪوث ‪.Log Switch‬‬ ‫·‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﺤﺘﻮي ال ‪ alertSID.log‬اﯾﻀﺎً ﻋﻠﻰ ‪.Log Sequence Number‬‬

‫‪64‬‬
‫‪MULTIPLEXING CONTROL FILES‬‬

‫ﻟﻠﺤﻤﺎﯾﺔ ﻣﻦ أﯾﺔ ﺧﻠﻞ ﻗﺪ ﯾﺤﺪث ﻟﻞ ‪ Database‬ﻧﺘﯿﺠﺔ ﺗﻌﻄﻞ ال ‪ Control File‬ﯾﻨﺼﺢ ﺑﺸﺪة ﺑﺎﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال‬
‫‪ Multiplex‬ﻟﻞ ‪ Control File‬ﺑﯿﺤﺚ ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﻨﺴﺦ اﻟﻤﺘﻄﺎﺑﻘﺔ ﻓﻲ ﻣﻮاﻗﻊ ﺗﺨﺰﯾﻦ ﻣﺨﺘﻠﻔﺔ ﻟﻜﻲ ﯾﺘﺴﻨﻰ‬
‫اﺳﺘﻌﺎدة ‪ Control File‬ﻓﻲ ﺣﺎل ﺗﻌﻄﻠﮫ أو ﺿﯿﺎع ﺑﯿﺎﻧﺎﺗﮫ‪.‬‬
‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال ‪ Multiples‬ﯾﺠﺐ اﺳﺘﺨﺪام إﻣﺎ ال ‪ SPFILE‬أو ال ‪. init.ora‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ ﻋﻤﻞ ﺛﻤﺎﻧﯿﺔ ﻧﺴﺦ ﻟﻞ ‪.Control File‬‬

‫‪:MULTIPLEXING USING SPFILE‬‬

‫ﻟﻠﻘﯿﺎم ب ‪ Control File Multiples‬ﺑﻮاﺳﻄﺔ ال ‪ SPFILE‬ﯾﺠﺐ إﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﺗﻐﯿﯿﺮ ﻣﻠﻒ ال ‪ SPFILE‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﻞ اﻟﺘﺎﻟﻲ‪:‬‬ ‫·‬


‫= ‪ALTER SYSTEM SET CONTROL_FILES‬‬
‫‪('…\ora01\oradata\db01\ctr001.ctl', '…\ora02\oradata\db01\ctr002.ctl',‬‬
‫)'‪'…\ora03\oradata\db01\ctr003.ctl', '…\ora04\oradata\db01\ctr004.ctl‬‬
‫;‪SCOPE=SPFILE‬‬

‫ﻟﻜﻲ ﺗﺘﻢ اﻟﺘﻐﯿﺮات ﯾﺠﺐ اﻏﻼق ال ‪ Database‬ﺑﻜﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬ ‫·‬


‫;‪SHUTDOWN‬‬

‫ﻧﺴﺦ ﻣﻠﻒ ال ‪ Control File‬اﻟﻰ اﻟﻤﻮاﻗﻊ اﻟﺘﻲ ﺣﺪدت ﺑﺎﻟﻨﻘﻄﺔ اﻷوﻟﻰ )اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻛﻤﺎ ﻓﻲ‬ ‫·‬
‫ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ‪ ،‬اي ﻓﻲ اﻟﻮﯾﻨﺪوز ﯾﺴﺘﺨﺪم اﻟﻔﺄرة ﻣﻊ ‪ COPY‬و ‪.(PASTE‬‬

‫ﺗﺸﻐﯿﻞ ال ‪ Database‬ﺑﻜﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬ ‫·‬


‫‪STARTUP‬‬

‫‪:MULTIPLEXING USING init.ora‬‬

‫ﻟﻠﻘﯿﺎم ب ‪ Control File Multiples‬ﺑﻮاﺳﻄﺔ ال ‪ init.ora‬ﯾﺠﺐ إﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﯾﺠﺐ اﻏﻼق ال ‪ Database‬ﺑﻜﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬ ‫·‬


‫;‪SHUTDOWN‬‬

‫ﻧﺴﺦ ﻣﻠﻒ ال ‪ Control File‬اﻟﻰ اﻟﻤﻮاﻗﻊ اﻟﺠﺪﯾﺪة اﻟﺘﻲ ﺳﻮف ﺗﺤﺪد ﻓﻲ اﻟﻨﻘﻄﺔ اﻟﺜﺎﻟﺜﺔ‪.‬‬ ‫·‬

‫ﺗﻌﺪﯾﻞ اﻟﻌﺎﻣﻞ "‪ CONTROL_FILES "Parameter‬ﻓﻲ ﻣﻠﻒ ال ‪ init.ora‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل‪:‬‬ ‫·‬

‫)‪CONTROL_FILES =(…\disk1\ctr01.ctl, …\disk2\ctr02.ctl‬‬

‫ﺗﺸﻐﯿﻞ ال ‪ .Database‬‬ ‫·‬


‫‪‬‬

‫‪65‬‬
.‫( ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻟﻼﺧﺘﺼﺎر ﻓﻘﻂ‬...) ‫ اﺳﺘﺨﺪام اﻟﺜﻼث ﻧﻘﺎط‬:‫ﻣﻼﺣﻈﺔ‬

:USING OMF

‫ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال‬.Oracle Managed Files ‫ ﺑﺎﺳﺘﺨﺪام ال‬Control File ‫ﯾﻤﻜﻦ ﺗﺴﮭﯿﻞ إدارة ﻣﻠﻔﺎت ال‬
‫ اذا ﻟﻢ ﯾﺘﻢ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ‬Database ‫ ﺑﺸﻜﻞ أﺗﻮﻣﺎﺗﯿﻜﻲ ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال‬OMF ‫ ﻃﺒﻘﺎً ﻟﻄﺮﯾﻘﺔ ال‬Control Files
‫ وﺗﻢ ﺗﺤﺪﯾﺪ‬Initialization Parameter Files ‫ ﻓﻲ ال‬CONTROL_FILES "Parameter"
.DB_CREATE_ONLINE_LOG_DEST_n OMF ‫" ال‬Parameters" ‫ﻋﺎﻣﻞ‬
‫ ﻓﻲ ال‬Control File ‫ ﯾﺠﺐ ﺗﺴﺠﯿﻞ اﺳﻢ وﻣﻮﻗﻊ ال‬OMF ‫ ﺑﻄﺮﯾﻘﺔ ال‬Control File ‫ﺑﻌﺪ ﺗﻜﻮﯾﻦ ال‬
.‫ ﻓﺈن اﻻﺳﻤﺎء ﺗﺴﺠﻞ ﺑﺸﻜﻞ اﺗﻮﻣﺎﺗﯿﻜﻲ‬SPFILE ‫ اﻣﺎ اذا ﻛﻨﺖ ﺗﺴﺘﺨﺪم ال‬، PFILE

:DATA DICTIONARY & CONTROL FILE

:‫ ﻋﺒﺮ‬Data Dictionary ‫ ﻣﻦ ال‬Control File ‫ﯾﻤﻜﻦ اﺳﺘﺨﺮاج ﺑﯿﺎﻧﺎت ال‬

‫( اذ‬STATUS) ‫ واﻟﺤﺎﻟﺔ اﻟﺤﺎﻟﯿﺔ‬Control Files ‫ ﺗﻌﺮض اﺳﻤﺎء ال‬:V$CONTROLFILE ·


.INVALID ‫ ﻓﺘﺼﺒﺢ‬Control File ‫اﻧﮭﺎ داﺋﻤﺎ ﻓﺎرﻏﺔ إﻻ ﻓﻲ ﺣﺎل ﺿﯿﺎع ﻣﻠﻒ ﻣﻦ ﻣﻠﻔﺎت ال‬

SELECT STATUS, NAME FROM V$CONTROLFILE;

‫" ﻣﻦ‬Parameter" ‫" ﺟﻤﯿﻊ اﻟﻌﻮاﻣﻞ‬Values" ‫ ﺗﻌﺮض اﺳﻤﺎء وﻗﯿﻢ‬:V$PARAMETER ·


.Control Files ‫ﺿﻤﻨﮭﺎ ﻃﺒﻌﺎً ال‬

SELECT NAME, VALUE FROM V$PARAMETER


WHERE NAME = 'control_files';

‫ ﺗﻌﺮض ﺑﯿﺎﻧﺎت ﻋﻦ اﻷﺟﺰاء اﻟﻤﺨﺘﻠﻔﺔ ﻣﻦ‬:V$CONTROLFILE_RECORD_SECTION ·


.Control File ‫ال‬

SELECT TYPE, RECORD_SIZE, RECORDS_TOTAL, RECORD_USED


FROM V$CONTROLFILE_RECORD_SECTION;

Control Files ‫ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ھﺬه ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻮاﻗﻊ واﺳﻤﺎء ال‬:SHOW PARAMTER ·

SHOW PARAMETER CONTROL_FILES;

.alertSID.log ‫ ﺑﻌﺪ ﺗﻜﻮﯾﻨﮭﺎ ﻣﻦ ﻣﻠﻒ ال‬Control Files ‫ ﯾﻤﻜﻦ اﻟﺤﺼﻮل اﯾﻀﺎً ﻋﻠﻰ اﺳﻤﺎء ال‬:‫ﻣﻼﺣﻈﺔ‬



66
‫‪REDO LOG FILES‬‬

‫ﺗﻌﺘﺒﺮ ﻣﻠﻔﺎت ال ‪ Redo Log‬ﺿﺮورﯾﺔ ﺟﺪاً ﻟﻌﻤﻞ ال ‪ ، Database‬اذ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻛﻞ ﻣﺎ ﺟﺮى وﯾﺠﺮي ﻋﻠﻰ‬
‫اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺗﻐﯿﺮات ﻟﻜﻲ ﯾﺘﻢ اﺳﺘﻌﺎدة اﻟﺒﯿﺎﻧﺎت "‪ "Recovery‬ﻓﻲ ﺣﺎﻟﺔ ﺣﺪوث ﺿﯿﺎع ﻟﻠﺒﯿﺎﻧﺎت ﻋﻨﺪ ﺣﺪوث ﻋﻄﻞ‬
‫ﻣﻔﺎﺟﺊ‪ .‬ﺗﻨﻘﺴﻢ ﻣﻠﻔﺎت ال ‪ Redo Log‬اﻟﻰ ﻣﺠﻤﻮﻋﺎت "‪ "Groups‬ﻛﻞ ﻣﺠﻤﻮﻋﺔ ﺗﺤﻮي أﻋﻀﺎء‬
‫"‪ ،"Members‬و اﻷﻋﻀﺎء "‪ "Members‬ﺿﻤﻦ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻮاﺣﺪة ﻋﺒﺎرة ﻋﻦ ﻧﺴﺦ ﻣﺘﻄﺎﺑﻘﺔ‬
‫"‪ "Copies‬ﺗﺤﻮي ﻋﻠﻰ ﻧﻔﺲ اﻟﺒﯿﺎﻧﺎت وﯾﺘﻢ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻟﮭﺎ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪.‬‬
‫ﯾﺘﻄﻠﺐ اﻷوراﻛﻞ ﻋﻠﻰ اﻷﻗﻞ ﻣﺠﻤﻮﻋﺘﯿﻦ ﻣﻦ ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log Files‬وﻛﻞ ﻋﻀﻮ "‪ "Member‬ﺿﻤﻦ‬
‫اﻟﻤﺠﻤﻮﻋﺔ ﯾﻜﻮن ﻟﮫ ﻧﻔﺲ اﻟﺤﺠﻢ وذات ال ‪.Log Sequence Number‬‬
‫ﯾﻘﻮم اﻷوراﻛﻞ ﺑﻮاﺳﻄﺔ ال ‪ LGWR‬ﺑﻨﻘﻞ ﺑﯿﺎﻧﺎت ال ‪ Redo Log Buffer‬اﻟﻰ ال ‪ Redo Log Files‬ﺣﯿﺚ‬
‫ﺗﺘﻢ اﻟﻜﺘﺎﺑﺔ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ واﺣﺪة ﻓﻘﻂ وﻋﻨﺪﻣﺎ ﺗﻤﺘﻠﺊ اﻟﻤﺠﻤﻮﻋﺔ اﻷوﻟﻰ ﯾﻘﻮم ال ‪ LGWR‬ﺑﻜﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت ﻓﻲ‬
‫اﻟﻤﺠﻤﻮﻋﺔ اﻟﺜﺎﻧﯿﺔ وﺑﻌﺪ إﻣﺘﻼء اﻟﻤﺠﻤﻮﻋﺔ اﻷﺧﯿﺮة ﯾﻌﻮد ال ‪ LGWR‬ﺑﺎﻟﻜﺘﺎﺑﺔ ﻓﻲ اﻟﻤﺠﻤﻮﻋﺔ اﻷوﻟﻰ ‪ ،‬وﺗﺴﻤﻰ‬
‫ھﺬه اﻟﻌﻤﻠﯿﺔ ﺑﺎل ‪ Log Switch‬وﺗﺴﻤﻰ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺘﻲ ﯾﺘﻢ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻟﮭﺎ ﺑﺎﺳﻢ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺤﺎﻟﯿﺔ أو‬
‫"‪."Current Online Redo Log Group‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ اﻟﺤﺪ اﻷﻋﻠﻰ ﻟﻠﻤﺠﻤﻮﻋﺎت و اﻷﻋﻀﺎء ﺑﻮاﺳﻄﺔ ‪ MAXLOGMEMBERS‬و‬


‫‪ MAXLOGFILES‬ﻓﻲ ﺟﻤﻠﺔ ال ‪.CREATE DATABASE‬‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل ال ‪ Log Switch‬ﻓﻲ ال ‪.Alert Log File‬‬

‫رﺳﻢ ‪4.1‬‬

‫ﻛﻞ ﻣﺠﻤﻮﻋﺔ ‪ Redo Log File‬ﻣﻌﺮﻓﺔ ﺑﺮﻗﻢ ﻣﻤﯿﺰ ﯾﺴﻤﻰ ‪ Log Sequence Number‬ﯾﻤﻨﺤﮫ اﻷوراﻛﻞ ﻟﻜﻞ‬
‫ﻣﺠﻤﻮﻋﺔ ﻋﻨﺪ ﺑﺪاﯾﺔ ﻛﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت ﺑﮭﺎ ﺣﯿﺚ ﯾﺘﻢ ﺗﺠﺪﯾﺪ اﻟﺮﻗﻢ "‪ "Overwritten‬ﻛﻞ ﻣﺮة ﯾﺘﻢ إﻋﺎدة اﺳﺘﺨﺪام‬
‫اﻟﻤﺠﻤﻮﻋﺔ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ‪ Log Sequence Number‬ﻓﻲ‪:‬‬

‫‪Control File‬‬ ‫·‬


‫‪Data Files Header‬‬ ‫·‬

‫‪67‬‬
‫‪Alert Log File‬‬ ‫·‬

‫‪:Checkpoint‬‬

‫ﺗﻌﺮﺿﻨﺎ ﻟﻞ ‪ Checkpoint‬ﻓﻲ اﻟﻔﺼﻞ اﻷول وذﻛﺮﻧﺎ اﻧﮫ ﯾﻘﻮم ﺑﻜﺘﺎﺑﺔ ال ‪ Log Sequence Number‬ﻓﻲ ال‬
‫‪ .Control File‬وﻧﺘﻄﺮق ﻟﻞ ‪ Checkpoint‬ﻣﺮة أﺧﺮى ﻷن اﻟﻌﻼﻗﺔ ﺑﯿﻦ ال ‪ Checkpoint‬وال ‪Log‬‬
‫‪ Switch‬ﻣﺘﺰاﻣﻨﺔ ﺑﺤﯿﺚ ﻋﻨﺪ ﺣﻮدث ال ‪ Log Switch‬ﺗﺤﺪث ﻋﻤﻠﯿﺔ ال ‪ .Checkpoint‬وﯾﻘﻮم ال ‪Alert‬‬
‫‪ Log File‬ﺑﺘﺨﺰﯾﻦ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Checkpoint‬ﻛﻤﺎ ﯾﻘﻮم ﺑﺬﻟﻚ ﻣﻊ ال ‪ Log Switch‬وﻟﻜﻦ ﯾﺠﺐ وﺿﻊ‬
‫اﻟﻌﺎﻣﻞ "‪ "Parameter‬اﻟﺘﺎﻟﻲ ‪ LOG_CHECKPONT_TO_ALERT‬ﻓﻲ ﺣﺎﻟﺔ ‪ True‬ﻋﻜﺲ اﻟﺤﺎﻟﺔ‬
‫اﻹﻓﺘﺮاﺿﯿﺔ "‪ "Default‬وھﻲ ‪.False‬‬

‫ﯾﻤﻜﻦ ان ﺗﺤﺪث ﻋﻤﻠﯿﺔ ال ‪ Checkpoint‬ﻋﻨﺪ‪:‬‬

‫ﺣﺪوث ﻋﻤﻠﯿﺔ ‪.Log Switch‬‬ ‫·‬

‫ﻋﻨﺪ إﻏﻼق ال ‪ Database‬ﺑﺄي ﺣﺎﻟﺔ ﻋﺪا ال ‪.ABORT‬‬ ‫·‬

‫ﻋﻨﺪﻣﺎ ﯾﺤﺪد اﻟﻌﺎﻣﻞ "‪ FAST_START_MTTR_TARGET "Parameter‬اﻟﺬي ﯾﺤﺪد ﻛﻤﯿﺔ‬ ‫·‬


‫اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة " ‪ "Dirty Buffers‬اﻟﺘﻲ ﯾﺴﺘﻄﯿﻊ ال ‪ DBWn‬ﻛﺘﺎﺑﺘﮭﺎ‪.‬‬

‫ﻋﻨﺪﻣﺎ ﻃﻠﺐ ال ‪ DBA‬ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﮭﺎ ﺑﻜﺘﺎﺑﺔ ﺟﻤﻠﺔ ‪ SQL‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.4.1‬‬ ‫·‬

‫ﻋﻨﺪﻣﺎ ﺗﻜﺘﺐ ﺟﻤﻠﺔ ال ‪ SQL‬اﻟﺘﺎﻟﯿﺔ‪ALTER TABLESPACE OFFLINE NORMAL. :‬‬ ‫·‬

‫ﻋﻨﺪﻣﺎ ﺗﻜﺘﺐ ﺟﻤﻠﺔ ال ‪ SQL‬اﻟﺘﺎﻟﯿﺔ‪.ALTER TABLESPACE READ ONLY :‬‬ ‫·‬

‫ﻋﻨﺪﻣﺎ ﺗﻜﺘﺐ ﺟﻤﻠﺔ ال ‪ SQL‬اﻟﺘﺎﻟﯿﺔ‪.ALTER TABLESPACE BEGIN BACKUP :‬‬ ‫·‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.1‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال ‪ Checkpoint‬ﺑﻮاﺳﻄﺔ ال ‪ SQL‬ﯾﺠﺐ ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER SYSTEM CHECKPOINT‬‬

‫اذا ﺗﻢ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ "‪"Parameter‬‬


‫‪FAST_START_MTTR_TARGET = 400‬‬

‫ﯾﺪل ﻋﻠﻰ ﻋﻤﻠﯿﺔ ال ‪ Recovery‬ﯾﺠﺐ أن ﻻ ﯾﺰﯾﺪ وﻗﺘﮭﺎ ﻋﻦ ‪ 400‬ﺛﺎﻧﯿﺔ ﺣﯿﺚ أن ﻣﻦ ﺿﻤﻦ ﻋﻤﻠﯿﺔ ال‬
‫‪ Recovery‬ﻋﻤﻠﯿﺔ ال ‪ Checkpoint‬وﻋﻤﻠﯿﺔ ال ‪.Log Switch‬‬

‫ﯾﻤﻜﻦ أن ﯾﺘﻢ ﻃﻠﺐ ﻋﻤﻠﯿﺔ ال ‪ Log Switch‬اﯾﻀﺎً ﺑﻮاﺳﻄﺔ ال ‪ SQL‬ﻋﺒﺮ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER SYSTEM SWITCH LOGFILE‬‬

‫‪68‬‬
‫‪MAINTAINING REDO LOG FILES‬‬

‫ﺳﻮف ﻧﺘﻄﺮق اﻟﻰ ﻋﺪد ﻣﻦ اﻟﻤﮭﺎم اﻟﺘﻲ ﯾﻤﻜﻦ اﺟﺮاﺋﮭﺎ ﻟﻞ ‪ Redo Log Files‬ﻟﺤﻤﺎﯾﺘﮭﺎ أو ﻟﺘﻌﺪﯾﻠﮭﺎ‪.‬‬

‫‪:MULTIPLEXING‬‬

‫ﻟﺤﻤﺎﯾﺔ ال ‪ Database‬ﯾﺠﺐ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال ‪ Multiplex‬ﻋﻠﻰ ال ‪ ، Redo Log Files‬ﺑﺤﯿﺚ ﯾﻘﻮم ال‬
‫‪ LGWR‬ﺑﻜﺘﺎﺑﺔ ذات اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ اﻟﻨﺴﺦ اﻟﻤﺘﺸﺎﺑﮫ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ .‬ﻛﻞ اﻟﻨﺴﺦ اﻟﻤﺘﺸﺎﺑﮫ ﺗﻜﻮن ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ‬
‫"‪ "Group‬و ﯾﻄﻠﻖ ﻋﻠﻰ اﻟﻨﺴﺦ اﻟﻤﺘﺸﺎﺑﮫ اﺳﻢ ‪ .Members‬ﯾﻔﻀﻞ ﻓﺼﻞ اﻟﻨﺴﺦ اﻟﻤﺘﺸﺎﺑﮫ ﻋﻦ ﺑﻌﺾ واﺑﻘﺎﺋﮭﺎ‬
‫ﻓﻲ ﻣﻮﻗﻊ ﻣﺨﺘﻠﻒ أو ﻋﻠﻰ ﻗﺮص ﺻﻠﺐ ﻣﺨﺘﻠﻒ )أو أي وﺳﯿﻠﺔ ﻟﺤﻔﻆ اﻟﺒﯿﺎﻧﺎت( ﻛﻤﺎ ﻓﻲ اﻟﺮﺳﻢ ‪ 4.1‬ﯾﻈﮭﺮأن‬
‫اﻷﻋﻀﺎء )‪ (Member1 , Member2‬ﻓﻲ ذات اﻟﻤﺠﻤﻮﻋﺔ ﻋﻠﻰ ﻗﺮﺻﯿﻦ ﻣﺨﺘﻠﻔﯿﻦ )‪.(Disk1, Disk2‬‬
‫ﻓﻲ ﺣﺎل ﻋﺪم ﺗﻮﻓﺮ أي ﻋﻀﻮ "‪ "Member‬ﻣﻦ أي ﻣﺠﻤﻮﻋﺔ ﻟﻨﻘﻞ اﻟﺒﯿﺎﻧﺎت إﻟﯿﮫ ﯾﺘﻢ اﻏﻼق ال ‪Database‬‬
‫وﺗﺒﺪأ ﻋﻤﻠﯿﺔ ‪ Recovery‬ﻟﻞ ‪.Instance‬‬
‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ أﻛﺜﺮ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log Files‬ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪ Database‬أو ﯾﻤﻜﻦ‬
‫اﺿﺎﻓﺔ ﻣﺠﻤﻮﻋﺔ أﺧﺮى ﻻﺣﻘﺎً‪.‬‬

‫ﻧﻘﺎط ﻣﮭﻤﺔ ﻓﻲ ﻋﻤﻠﯿﺔ ال ‪:Multiplex‬‬

‫ﯾﻨﺼﺢ ﺑﺘﻔﺮﯾﻖ اﻷﻋﻀﺎء ﺿﻤﻦ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻮاﺣﺪة اﻟﻰ ﻣﻮاﻗﻊ أو اﻗﺮاص ﺻﻠﺒﺔ ﻣﺨﺘﻠﻔﺔ‪ ،‬ﻟﻜﻲ ﻻ ﯾﺤﺪث‬ ‫·‬
‫أﻏﻼق ﻟﻞ ‪ Database‬ﻓﻲ ﺣﺎل ﺗﻌﻄﻞ اﻟﻘﺮص اﻟﺼﻠﺐ اﻟﺬي ﯾﺤﻮي اﻟﻤﻠﻔﺎت‪.‬‬

‫ﯾﻨﺼﺢ ﺑﺘﻔﺮﯾﻖ ال ‪ Online Redo Log Files‬ﻋﻦ ال ‪ Archived Log Files‬اﻟﻰ أﻗﺮاص‬ ‫·‬
‫ﻣﺨﺘﻠﻔﺔ أو ﻣﻮاﻗﻊ ﻣﺨﺘﻠﻔﺔ ﻟﻜﻲ ﻻ ﯾﺤﺪث ﺗﺪاﺧﻞ ﺑﯿﻦ ﻋﻤﻞ ال ‪ LGWR‬و ال ‪.ARCn‬‬

‫ﯾﻨﺼﺢ ﺑﺘﻔﺮﯾﻖ ﻣﻠﻔﺎت ال ‪ Redo Log‬و ﻣﻠﻔﺎت ال ‪ Data Files‬اﻟﻰ ﻣﻮاﻗﻊ أو اﻗﺮاص ﻣﺨﺘﻠﻔﺔ‪ ،‬ﻟﻜﻲ‬ ‫·‬
‫ﻻ ﯾﺤﺪث ﺗﺪاﺧﻞ ﺑﯿﻦ ال ‪ DBWn‬وال ‪.LGWR‬‬

‫‪:SIZING ONLINE REDO LOG FILES‬‬

‫أﺻﻐﺮ ﺣﺠﻢ ﯾﻤﻜﻦ ان ﯾﻜﻮن ﻋﻠﯿﺔ ال ‪ Redo Log File‬ھﻮ ‪ ، 50 KB‬أﻣﺎ اﻛﺒﺮ ﺣﺠﻢ ھﻮ أﻛﺒﺮ ﺣﺠﻢ ﯾﺴﻤﺢ ﺑﮫ‬
‫ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ )ﻣﺜﻞ وﯾﻨﺪوز أو ‪.(UNIX‬‬
‫ﯾﻤﻜﻦ ﻟﻞ ‪ DBA‬ﺗﺤﺪﯾﺪ ﺣﺠﻢ ال ‪ Redo Log Files‬ﺑﺎﻷﺧﺬ ﺑﺎﻟﻤﻌﻄﯿﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫اﻟﺠﺤﻢ اﻟﻤﺘﻮﻓﺮ ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ أو أي ‪.Storage Device‬‬ ‫·‬

‫ﻋﺪد ﻣﺮات ال ‪ Log Switch‬و ال ‪ Checkpoint‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺤﺪث‪.‬‬ ‫·‬

‫اﻟﺤﺠﻢ اﻟﻤﺘﻮﻗﻊ ﻟﻞ ‪ Redo Entries‬واﻟﺬي ﯾﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﺗﺠﺮي ﻋﻠﻰ ال ‪Database‬‬ ‫·‬
‫واﻟﺘﻲ ﺗﺆدي اﻟﻰ ﺗﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت‪.‬‬

‫‪69‬‬
‫‪:ADDING ONLINE GROUP‬‬

‫ﻓﻲ ﺣﺎل وﺟﺪ ال ‪ DBA‬أن ال ‪ Database‬ﺑﺤﺎﺟﺔ اﻟﻰ ﻣﺠﻤﻮﻋﺔ ﺟﺪﯾﺪة ‪ ،‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮭﺎ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪:4.2‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.2‬‬

‫‪ALTER DATABASE ADD LOGFILE GROUP 4‬‬


‫;‪('…\oradata\db01\log11.log' , '…\oradata\db02\log12.log') SIZE 5M‬‬

‫‪:ADDING ONLINE MEMBER‬‬

‫ﯾﻤﻜﻦ اﺿﺎﻓﺔ أﻋﻀﺎء ﺟﺪد ﻟﻠﻤﺠﻤﻮﻋﺎت اﻟﻤﻮﺟﻮدة ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ALTER DATABASE [database's name] ADD LOGFILE MEMBER‬‬


‫]‪['filename' [REUSE] , 'filename' [REUSE], ….‬‬
‫;)… ‪TO [ GROUP number | ('filename', 'filename',‬‬

‫ﻓﻲ ﺣﺎﻟﺔ وﺟﻮد اﺳﻢ اﻟﻌﻀﻮ ﻋﻠﻰ اﻟﺠﮭﺎز وﺑﻨﻔﺲ اﻟﺤﺠﻢ )أي اﻟﻤﻠﻒ ﻣﻮﺟﻮد ﻣﺴﺒﻘﺎً( ﯾﺠﺐ اﺳﺘﺨﺪام ﻛﻠﻤﺔ‬
‫‪ REUSE‬اﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ اﻟﻰ اﻟﺠﻤﻠﺔ اﻷﺧﯿﺮة ﻓﻠﺪﯾﻚ ﺧﯿﺎران إﻣﺎ أن ﺗﺬﻛﺮ رﻗﻢ اﻟﻤﺠﻤﻮﻋﺔ أو اﺳﻤﺎء اﻷﻋﻀﺎء‬
‫اﻟﺤﺎﻟﯿﯿﻦ ﻓﻲ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺘﻲ ﺗﺮﯾﺪ اﺿﺎﻓﺔ ﻋﻀﻮ ﺟﺪﯾﺪ ﻟﮭﺎ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ اﺿﺎﻓﺔ ﻋﻀﻮ ﺟﺪﯾﺪ ﺑﺎﺳﺘﺨﺪام ال ‪ Storage Manager‬ﻓﻲ ال ‪.Console‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.3‬‬

‫‪ALTER DATABASE ADD LOGFILE MEMBER‬‬


‫‪'…\oradata\db04\log41.log' TO GROUP 1,‬‬
‫‪'…\oradata\db04\log42.log' TO GROUP 2,‬‬
‫‪'…\oradata\db04\log43.log' TO GROUP 3,‬‬
‫;‪'…\oradata\db04\log44.log' TO GROUP 4‬‬
‫أو ﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﺜﺎﻧﯿﺔ‪:‬‬
‫‪ALTER DATABASE ADD LOGFILE MEMBER‬‬
‫'‪'…\oradata\db04\log14.log‬‬
‫‪TO ('…\oradata\db01\log11.log' , '…\oradata\db02\log12.log' ,‬‬
‫;)'‪'…\oradata\db03\log13.log‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Redo Log Groups‬‬ ‫·‬
‫اﻛﺘﺐ اﺳﻢ اﻟﻌﻀﻮ اﻟﺠﺪﯾﺪ ﺛﻢ اﺿﻐﻂ ‪.Apply‬‬ ‫·‬

‫‪70‬‬
‫‪:DROPPING ONLINE LOG GROUP‬‬

‫اذا أردت زﯾﺎدة ﺣﺠﻢ أﺣﺪى ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log‬ﯾﻤﻜﻦ ازاﻟﺔ اﻟﻤﺠﻤﻮﻋﺔ وﺗﻜﻮﯾﻦ ﻣﺠﻤﻮﻋﺔ ﺟﺪﯾﺪة ﺑﺤﺠﻢ‬
‫أﻛﺒﺮ‪ ،‬ﺣﯿﺚ ﺗﺴﺘﻄﯿﻊ ازاﻟﺔ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log‬ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]‪ALTER DATABASE [database' name‬‬


‫;)‪DROP LOGFILE [GROUP number | ('filename',….‬‬

‫ﯾﺠﺐ أن ﻻ ﺗﻜﻮن اﻟﻤﺠﻤﻮﻋﺔ اﻟﻤﺰاﻟﺔ ھﻲ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺤﺎﻟﯿﺔ "‪ "Current‬أو ان ﺗﻜﻮن ﻓﻲ وﺿﻌﯿﺔ ‪ Active‬ﺑﻞ‬
‫ﯾﺠﺐ أن ﺗﻜﻮن ﻓﻲ وﺿﻌﯿﺔ ‪ .Inactive‬ﻻ ﯾﺴﻤﺢ اﻷوراﻛﻞ ﺑﺤﺬف اﻟﻤﺠﻤﻮﻋﺔ اذا ﻛﺎن ذﻟﻚ ﺳﻮف ﯾﺆدي اﻟﻰ ﺑﻘﺎء‬
‫ﻣﺠﻤﻮﻋﺔ واﺣﺪة ﻓﻘﻂ ‪ ،‬اذ أن اﻷوراﻛﻞ ﯾﺤﺘﺎج ﻋﻠﻰ اﻷﻗﻞ اﻟﻰ ﻣﺠﻤﻮﻋﺘﯿﻦ ﻣﻦ ﻣﺠﻤﻮﻋﺎت ال ‪.Redo Log Files‬‬
‫ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺴﺎﺑﻘﺔ ﯾﻤﻜﻦ ﺣﺬف اﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ ﺗﻌﺮﯾﻒ اﻷوراﻛﻞ ﻓﻘﻂ ‪ ،‬اﻣﺎ ﻣﻠﻔﺎت ال ‪ Redo Log‬اﻟﺤﻘﯿﻘﯿﺔ‬
‫اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻮﻗﻊ اﻟﻤﺤﺪد )ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪ :4.3‬ﻣﻠﻒ ‪ (log14.log‬ﻻ ﺗﻤﺴﺢ وﯾﺠﺐ ﺣﺬﻓﮭﺎ ﺑﻄﺮﯾﻘﺔ ﯾﺪوﯾﺔ‬
‫)ﻛﻤﺎ ﻓﻲ أواﻣﺮ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ‪ ،‬ﻓﻲ اﻟﻮﯾﻨﺪوز اﺳﺘﺨﺪم أﻣﺮ ‪.(Delete‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.4‬‬

‫;‪ALTER DATABASE DROP LOGFILE GROUP 4‬‬

‫أو ﺑﺬﻛﺮ أﺳﻢ أﺣﺪ أﻋﻀﺎء اﻟﻤﺠﻤﻮﻋﺔ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.4.3‬‬

‫ﯾﻤﻜﻦ أﯾﻀﺎ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال ‪ Redo Log File‬اﻟﻰ ﺣﺎﻟﺔ ال ‪ Inactive‬ﺑﻮاﺳﻄﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;‪ALTER SYSTEM SWITCH LOGFILE‬‬

‫ﺳﻮف ﻧﺘﻄﺮق اﻟﻰ اﻟﺤﻼت اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﻜﻮن ﻋﻠﯿﮭﺎ اﻟﻤﺠﻤﻮﻋﺔ أو اﻟﻌﻀﻮ ﺑﻌﺪ ﻗﻠﯿﻞ‪.‬‬

‫‪:DROPPING ONLINE LOG MEMBER‬‬

‫ﻛﻤﺎ ﯾﻤﻜﻦ ﺣﺬف ﻣﺠﻤﻮﻋﺔ ﯾﻤﻜﻦ ﺣﺬف ﻋﻀﻮ )أو أﻛﺜﺮ( ﻣﻦ اﻟﻤﺠﻤﻮﻋﺔ وﻟﻜﻦ ﯾﺠﺐ أن ﯾﺒﻘﻰ ﻋﻠﻰ اﻷﻗﻞ ﻋﻀﻮ ﻓﻌﺎل‬
‫"‪ "Valid‬ﻓﻲ اﻟﻤﺠﻤﻮﻋﺔ وإﻻ ﻓﺈن أوراﻛﻞ ﻟﻦ ﯾﺴﻤﺢ ﺑﻌﻤﻠﯿﺔ اﻟﺤﺬف‪ .‬ﻛﻤﺎ ﻓﻲ ﺣﺬف اﻟﻤﺠﻤﻮﻋﺔ ﯾﺠﺐ أن ﻻ ﯾﻜﻮن‬
‫اﻟﻌﻀﻮ ھﻮ اﻟﻌﻀﻮ اﻟﺤﺎﻟﻲ "‪ "Current‬و اﻟﻤﻠﻔﺎت اﻟﻔﯿﺰﯾﺎﺋﯿﺔ ﻻ ﺗﺤﺬف ﻣﻦ ﻣﻜﺎن ﺗﻮاﺟﺪھﺎ‪ .‬ﯾﻮﺟﺪ ﺣﺎﻟﺔ أﺧﺮى ﻻ‬
‫ﯾﺴﻤﺢ اﻷوراﻛﻞ ﺑﺤﺬف اﻟﻌﻀﻮ‪ ،‬ذﻟﻚ ﻋﻨﺪﻣﺎ ﯾﻜﻮن ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Archivelog‬وﻟﻢ ﯾﺘﻢ ﻋﻤﻞ‬
‫‪ Archive‬ﻟﻠﻤﺠﻮﻋﺔ اﻟﺘﻲ ﯾﻨﺘﻤﻰ ﻟﮭﺎ اﻟﻌﻀﻮ‪.‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ﻋﻀﻮ ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]‪ALTER DATABASE [database's name‬‬


‫…‪DROP LOG MEMBER 'filename','filename',‬‬

‫‪71‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.5‬‬

‫;'‪ALTER DATABASE DROP LOG MEMBER '…\oradata\db04\log4.log‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ ، Redo Log Groups‬ﺛﻢ اﺧﺘﺮ اﻟﻌﻀﻮ اﻟﻤﺮاد ﺣﺬﻓﮫ واﺿﻌﻂ ﻋﻠﻰ رﺳﻢ ﺳﻠﺔ اﻟﻤﮭﻤﻼت‪.‬‬ ‫·‬

‫‪:RENAMING LOG MEMBER‬‬

‫اذا ﻛﻨﺖ ﺗﺮﯾﺪ ﻧﻘﻞ ﻋﻀﻮ"‪ "Member‬ﻣﻦ ﻣﻮﻗﻊ اﻟﻰ أﺧﺮ أو ﺗﺮﯾﺪ ﺗﻐﯿﯿﺮ اﺳﻢ اﻟﻌﻀﻮ ﯾﺠﺐ اﺗﺒﺎع اﻟﺘﺎﻟﻲ‪:‬‬

‫اﻏﻠﻖ ال ‪.Database‬‬ ‫·‬


‫اﻧﺴﺦ اﻟﻤﻠﻒ اﻟﻔﯿﺰﯾﺎﺋﻲ )اﻟﺨﺎص ﺑﺎﻟﻌﻀﻮ( اﻟﻰ اﻟﻤﻮﻗﻊ اﻟﺠﺪﯾﺪ )ﻟﻨﻘﻞ اﻟﻤﻠﻒ( ‪ ،‬أوﻗﻢ ﺑﺘﻐﯿﯿﺮ اﺳﻢ اﻟﻤﻠﻒ‬ ‫·‬
‫)ﻟﺘﻐﯿﯿﺮ اﺳﻢ اﻟﻤﻠﻒ(‪.‬‬
‫ﻗﻢ ﺑﺘﺸﻐﯿﻞ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.MOUNT‬‬ ‫·‬
‫اﻛﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ‬ ‫·‬
‫;'‪ALTER DATABASE RENAME FILE 'old Filename' TO 'newFilename‬‬

‫ﻗﻢ ﺑﺘﺸﻐﯿﻞ ال ‪ Database‬وﻗﻢ ﺑﻌﻤﻠﯿﺔ ‪ Backup‬ﻟﻞ ‪ Control File‬ﻋﻠﻰ اﻋﺘﺒﺎر أن ﻣﺤﺘﻮﯾﺎﺗﮫ‬ ‫·‬
‫ﺗﻐﯿﺮت‪.‬‬

‫‪:CLEARING ONLINE REDO LOG FILES‬‬

‫ﻓﻲ ﺣﺎل ﺣﺪوث ﻓﺴﺎد ﻟﻠﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة داﺧﻞ ﻣﻠﻔﺎت ال ‪ Redo Log‬ﯾﻤﻜﻦ ﺗﻨﻈﯿﻒ اﻟﻤﻠﻔﺎت ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة‬
‫اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]‪ALTER DATABASE [database's name‬‬


‫;‪CLEAR [UNARCHIVED] LOGFILE GROUP number | 'filename' ,…..‬‬

‫ﯾﻤﻜﻦ اﻟﻌﺪول ﻋﻦ ﻋﻤﻠﯿﺔ ﺣﺬف ﺛﻢ اﺿﺎﻓﺔ ﻣﻠﻒ ‪ Redo Log‬ﺑﺎﻟﻘﯿﺎم ﺑﺘﻨﻈﯿﻒ ﻣﺤﺘﻮﯾﺎت اﻟﻤﻠﻒ ﻟﻤﺎ ﺗﻮﻓﺮه اﻟﻌﻤﻠﯿﺔ‬
‫ﻣﻦ ﺗﺴﮭﯿﻼت‪ ،‬اذ ﯾﻤﻜﻦ ﺗﻨﻈﯿﻒ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log‬ﺣﺘﻰ وﻟﻮ وﺟﺪ ﻣﺠﻤﻮﻋﺘﯿﯿﻦ ﻓﻘﻂ‬
‫وﺑﺪاﺧﻞ ﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻋﻀﻮ واﺣﺪ ﻓﻘﻂ ‪ ،‬وﯾﻤﻜﻦ ﺗﻨﻈﯿﻒ اﻟﻤﺠﻤﻮﻋﺔ اذا ﻛﺎﻧﺖ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ال‬
‫‪ Archivelog‬وﻟﻢ ﯾﺤﺪث ﻋﻤﻠﯿﺔ ‪ Archive‬ﻟﻠﻤﺠﻤﻮﻋﺔ وﻟﻜﻦ ﯾﺠﺐ اﺳﺘﺨﺪام ﻛﻠﻤﺔ ‪ UNARCHIVED‬ﻓﻲ‬
‫اﻟﻘﺎﻋﺪة‪.‬‬

‫‪72‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.6‬‬

‫ﻟﺘﻨﻈﯿﻒ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻣﺠﻤﻮﻋﺎت ال ‪ Redo Log‬اﻛﺘﺐ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER DATABASE CLEAR LOGFILE GROUP 3‬‬

‫أو ﺑﺬﻛﺮ اﺳﻤﺎء أﻋﻀﺎء اﻟﻤﺠﻤﻮﻋﺔ ﻋﻮﺿﺎً ﻋﻦ اﻟﻤﺠﻤﻮﻋﺔ ورﻗﻤﮭﺎ ﻛﻤﺎ ﺟﺎء ﺳﺎﺑﻘﺎً‪.‬‬

‫‪:USING OMF‬‬

‫ﻟﺘﺴﮭﯿﻞ ﻋﻤﻠﯿﺔ ادارة ال ‪ Redo Log Files‬ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪام ال ‪ OMF‬اﻟﺘﻲ ﺟﺎء ﺷﺮﺣﮭﺎ ﺳﺎﺑﻘﺎً‪ .‬ﺑﻮاﺳﻄﺔ ال‬
‫‪ OMF‬ﺗﻜﻮﯾﻦ ﻋﻤﻠﯿﺔ ﺗﻜﻮﯾﻦ ﻣﺠﻤﻮﻋﺔ ﺟﺪﯾﺪة أو ﺣﺬف ﻣﺠﻤﻮﻋﺔ أﺳﮭﻞ و ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺤﺬف اﻟﻤﻠﻔﺎت‬
‫اﻟﻔﯿﺰﯾﺎﺋﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ ﻣﻮﻗﻊ اﻟﺘﺨﺰﯾﻦ ﺑﺸﻜﻞ أﺗﻮﺗﻮﻣﺎﺗﯿﻜﻲ ﻋﻨﺪ ﺣﺬف أي ﻣﺠﻤﻮﻋﺔ‪.‬‬
‫ﻻﺳﺘﺨﺪام ﻃﺮﯾﻘﺔ ال ‪ ، OMF‬ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ ‪ DB_CREATE_ONLINE_LOG_DEST_n‬ﻓﻲ‬
‫ال ‪ Initialization Parameter File‬وﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال ‪ Multiplex‬ﻋﻠﻰ ال ‪ Redo Log Files‬ﯾﺠﺐ‬
‫اﺳﺘﺒﺪال ال ‪ n‬ﻓﻲ اﻟﻌﺎﻣﻞ "‪ " Parameter‬ﺑﺮﻗﻢ ﻣﻦ ‪ 1‬اﻟﻰ ‪.5‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.7‬‬

‫ﻟﺤﺬف ﻣﺠﻤﻮﻋﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻧﻈﺎم ال ‪ OMF‬ﯾﺠﺐ ﻛﺘﺎﺑﺔ‪:‬‬

‫;‪ALTER DATABASE DROP LOGFILE GROUP 3‬‬

‫أﻣﺎ ﻹﺿﺎﻓﺔ ﻣﺠﻤﻮﻋﺔ ﯾﺠﺐ ﻛﺘﺎﺑﺔ‪:‬‬

‫;‪ALTER DATABASE ADD LOGFILE‬‬

‫ﺣﯿﺚ ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﺤﺪﯾﺪ رﻗﻢ اﻟﻤﺠﻤﻮﻋﺔ واﺧﺘﯿﺎر اﺳﻤﺎء اﻷﻋﻀﺎء أوﺗﻮﻣﺎﺗﯿﻜﯿﺎً‪.‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ال ‪ Multiplex‬ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﺘﺎﻟﻲ ﻓﻲ ال ‪:Initialization Parameter File‬‬

‫'‪DB_CREATE_ONLINE_LOG_DEST_1 = '…\oradata\db01‬‬

‫'‪DB_CREATE_ONLINE_LOG_DEST_2 = '…\oradata\db02‬‬

‫'‪DB_CREATE_ONLINE_LOG_DEST_3 = '…\oradata\db03‬‬

‫‪73‬‬
‫‪:QUERYING LOG FILE INFORMATION‬‬

‫ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﻤﺠﻤﻮﻋﺎت و اﻷﻋﻀﺎء ﻣﻦ ﺧﻼل‪:‬‬

‫‪V$LOG‬‬ ‫·‬
‫‪V$LOGFILE‬‬ ‫·‬

‫‪:V$LOG‬‬

‫ﺗﺤﺘﻮى ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﺣﻮل اﻟﻤﺠﻤﻮﻋﺎت وأﺣﺠﺎﻣﮭﺎ واﻟﺤﺎﻟﺔ اﻟﺘﻲ ھﻲ ﻓﯿﮭﺎ‪ ،‬ﯾﻮﺟﺪ ‪ 7‬ﺣﺎﻻت ﯾﻤﻜﻦ أن ﺗﺘﻮاﺟﺪ ﻓﯿﮭﺎ‬
‫اﻟﻤﺠﻤﻮﻋﺔ وھﻢ‪:‬‬

‫‪ :UNUSED‬ﺗﺪل ﻋﻠﻰ أن اﻟﻤﺠﻤﻮﻋﺔ ﻟﻢ ﺗﺴﺘﺨﺪم ﻋﻠﻰ اﻷﻃﻼق ﻓﻲ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﯾﻜﻮن‬ ‫·‬
‫ھﺬا اﻟﻨﻮع ﻟﻠﻤﺠﻤﻮﻋﺎت اﻟﻤﻀﺎﻓﺔ ﺣﺪﯾﺜﺎً‪.‬‬
‫‪ :CURRENT‬ﺗﺪل ﻋﻠﻰ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺤﺎﻟﯿﺔ اﻟﺘﻲ ﯾﺴﺘﺨﺪﻣﮭﺎ ال ‪ LGWR‬ﻓﻲ ﻧﻘﻞ ﺑﯿﺎﻧﺎت ال ‪Redo‬‬ ‫·‬
‫‪.Log Buffer‬‬
‫‪ :ACTIVE‬ﺗﺪل ﻋﻠﻰ أن اﻟﻤﺠﻤﻮﻋﺔ ﺟﺎھﺰة ﻟﻌﻤﻠﯿﺔ ال ‪.Recovery‬‬ ‫·‬
‫‪ :CLEARING‬ﺗﺪل أن اﻟﻤﺠﻤﻮﻋﺔ ﻓﻲ ﺣﺎﻟﺔ ﺗﻨﻈﯿﻒ ﻟﺒﯿﺎﻧﺎﺗﮭﺎ ﺑﻌﺪﻣﺎ ﻃﻠﺐ ال ‪ DBA‬ذﻟﻚ ﺑﻮاﺳﻄﺔ‬ ‫·‬
‫ﺟﻤﻠﺔ ال ‪ SQL‬اﻟﺘﻲ ﺗﻄﺮﻗﻨﺎ ﻟﮭﺎ ﻗﺒﻞ ﻗﻠﯿﻞ وﺑﻌﺪ ان ﺗﻨﻈﻒ اﻟﻤﺠﻤﻮﻋﺔ ﺗﺘﺤﻮل اﻟﺤﺎﻟﺔ اﻟﻰ ‪.UNUSED‬‬
‫‪ :CLEARING_CURRENT‬ﺗﺪل أن اﻟﻤﺠﻤﻮﻋﺔ ﺗﻢ ﺗﻨﻈﯿﻔﮭﺎ ﺑﻌﺪ ﻃﻠﺐ ﺟﻤﻠﺔ ال ‪.SQL‬‬ ‫·‬
‫‪ :INACTIVE‬ﺗﺪل ﻋﻠﻰ أن ال ‪ Database‬ﻟﯿﺲ ﺑﺤﺎﺟﺔ اﻟﻰ اﻟﻤﺠﻤﻮﻋﺔ وﻻ ﺗﻠﺰم ﻓﻲ ﻋﻤﻠﯿﺔ ال‬ ‫·‬
‫‪ ، Recovery‬وھﺬا ھﻮ اﻟﻨﻮع اﻟﺬي ﯾﻤﻜﻦ ﺣﺬف‪.‬‬

‫‪:V$LOGFILE‬‬

‫ﺗﺤﺘﻮى ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﺣﻮل أﻋﻀﺎء اﻟﻤﺠﻤﻮﻋﺎت‪ .‬ﯾﻮﺟﺪ ‪ 4‬ﺣﺎﻻت ﯾﻤﻜﻦ أن ﯾﺘﻮاﺟﺪ ﻓﯿﮭﺎ اﻟﻌﻀﻮ وھﻢ‪:‬‬

‫‪ :INVALID‬ﺗﺪل ﻋﻠﻰ أن ﻣﻠﻒ اﻟﻌﻀﻮ ﻻ ﯾﻌﻤﻞ‪.‬‬ ‫·‬


‫‪ :STALE‬ﺗﺪل ﻋﻠﻰ أن ﺑﯿﺎﻧﺎت اﻟﻌﻀﻮ ﻏﯿﺮ ﻣﻜﺘﻤﻠﺔ‪.‬‬ ‫·‬
‫‪ :DELETED‬ﺗﺪل ﻋﻠﻰ أن اﻟﻌﻀﻮ ﻻ ﯾﺴﺘﺨﺪم‪.‬‬ ‫·‬
‫ﻓﺎرغ "‪ :"Blank‬ﺗﺪل ﻋﻠﻰ أن اﻟﻌﻀﻮ ﯾﺘﻢ اﺳﺘﺨﺪاﻣﮫ‪.‬‬ ‫·‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.8‬‬

‫‪SELECT GROUP# , SEQUENCE#, BYTES, MEMBERS, STATUS‬‬


‫;‪FROM V$LOG‬‬

‫;‪SELECT GROUP#, STATUS, TYPE, MEMBER FROM V$LOGFILE‬‬

‫‪74‬‬
‫‪ARCHIVED LOG FILES‬‬
‫ﻣﻦ أھﻢ اﻷﻣﻮر اﻟﺘﻲ ﯾﺠﺐ ﺗﺤﺪﯾﺪھﺎ ﻣﻦ ﻗﺒﻞ ال ‪ DBA‬ھﻮ ﻗﺮار وﺿﻊ ال ‪ Database‬ﻓﻲ وﺿﻌﯿﺔ ال‬
‫‪ Archivelog‬أو ‪ .Noarchivelog‬ﺗﻮﺟﺪ ال ‪ Database‬ﻓﻲ اﻟﺤﺎﻟﺔ اﻷﻓﺘﺮاﺿﯿﺔ "‪ "Default‬ﻓﻲ وﺿﻌﯿﺔ‬
‫ال ‪ Noarchivelog‬وﻟﻜﻦ وﺿﻌﯿﺔ ال ‪ Archivelog‬ﻣﻔﯿﺪة ﺟﺪاً ﺣﯿﺚ أن ﻣﻦ ﻓﻮاﺋﺪھﺎ ﺗﺴﮭﯿﻞ ﻋﻤﻠﯿﺔ ال‬
‫‪ Backup‬وﺗﻀﻤﻦ اﺳﺘﻌﺎدة "‪ "Recovery‬اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺣﺪث ﻟﮭﺎ ‪ .Commit‬ﯾﻤﻜﻦ أن ﺗﺘﻢ ﻋﻤﻠﯿﺔ ال‬
‫‪ Archive‬ﻟﻤﻠﻔﺎت ال ‪ Redo Log‬ﺑﻄﺮﯾﻘﺘﯿﯿﻦ ھﻤﺎ‪ :‬ﯾﺪوﯾﺔ أو أوﺗﻮﻣﺎﺗﯿﻜﯿﺔ واﻟﺬي ﯾﺘﺤﻜﻢ ﺑﮭﺎ ﻋﺎﻣﻞ ﻣﻦ ﻋﻮاﻣﻞ‬
‫ال ‪ Intialazation Parameter File‬ھﻮ ‪.LOG_ARCHIVE_START‬‬
‫ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻗﯿﻤﺔ ال ‪ LOG_ARCHIVE_START‬ﺗﺴﺎوي ‪ True‬ﻓﺈن ﻋﻤﻠﯿﺔ ال ‪ Archiving‬ﺗﺤﺪث‬
‫ﺑﺸﻜﻞ أﺗﻮﺗﻮﻣﺎﺗﯿﻜﻲ ﻟﻠﻤﺠﻤﻮﻋﺔ اﻟﻤﻤﺘﻠﺌﺔ ﺑﻮاﺳﻄﺔ ال ‪ ARCn‬ﺑﻌﺪ ﺣﺪوث ﻋﻤﻠﯿﺔ ‪.Log Switch‬‬
‫أﻣﺎ ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻗﯿﻤﺔ ال ‪ ARCHIVE_START_LOG‬ﺗﺴﺎوي ‪ ، False‬ﻓﺄن ﻋﻤﻠﯿﺔ ال ‪Archiving‬‬
‫ﯾﺠﺐ أن ﺗﺤﺪث ﺑﻄﺮﯾﻘﺔ ﯾﺪوﯾﺔ ﻋﺒﺮ اﺳﺘﺨﺪام ﺟﻤﻞ ال ‪.SQL‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﻓﻲ ال ‪ Control File‬اذا ﺗﻤﺖ ﻋﻤﻠﯿﺔ ال ‪ Archiving‬ﺑﻨﺠﺎح‪.‬‬ ‫·‬


‫ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Multiplex‬ﻟﻤﻠﻔﺎت ال ‪.Archived Redo Log‬‬ ‫·‬
‫ﻻ ﯾﻤﻜﻦ ﻟﻞ ‪ Archived Redo Log‬أن ﺗﺘﺒﻊ ﻧﻈﺎم ال ‪.OMF‬‬ ‫·‬

‫ﺗﺬﻛﺮ‪ :‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ال ‪ Redo Log File‬ﺣﺘﻰ ﺗﺘﻢ ﻋﻤﻠﯿﺔ ال ‪ Checkpoint‬وﯾﺘﻢ ﻋﻤﻠﯿﺔ ‪Archiving‬‬
‫ﻟﻠﻤﻠﻒ )ھﺬه اﻟﺤﺎﻟﺔ ﺗﺤﺪث ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﻮﺿﻊ ‪ ، Archivelog‬إﻣﺎ ﻋﻨﺪ ﺣﺎﻟﺔ ‪ Noarchivelog‬ﻓﻘﻂ ﻋﻤﻠﯿﺔ ال‬
‫‪ Checkpoint‬ﯾﺠﻠﺐ أن ﺗﺤﺪث(‪.‬‬

‫‪:QUERYING ARCHIVED REDO LOG‬‬

‫ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﺣﻮل ﻋﻤﻠﯿﺔ ال ‪ Archiving‬ﻣﻦ ‪ V$INSTANCE‬أو ﻣﻦ ال ‪.Console‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:4.9‬‬

‫;‪SELECT ARCHIVER FROM V$INSTANCE‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪ ، Instance Manager‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪.Configuration‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﻛﻠﻤﺔ ال ‪.Recovery‬‬ ‫·‬

‫‪75‬‬




DATA FILES & TABLESPACES

76
‫‪TABLESPACE‬‬

‫ﻛﻤﺎ ﻋﺮﻓﻨﺎ ﺳﺎﺑﻘﺄ أن ال ‪ Database‬ﺗﻨﻘﺴﻢ اﻟﻰ ‪ Logical‬و ‪ Physical‬ﺑﺤﯿﺚ ﺗﻜﻮن ال ‪ Tablespace‬ھﻲ‬


‫أﺣﺪى ﻣﻜﻮﻧﺎت ال ‪ Logical‬ﺑﺎﻹﺿﺎﻓﺔ اﻟﻰ ‪ Segment‬و ‪ Extents‬و‪ .Data Blocks‬ﻻ ﯾﻤﻜﻦ ﻟﻞ‬
‫‪ Tablespace‬اﻟﻌﻤﻞ ﻷﻛﺜﺮ ﻣﻦ ‪ Database‬واﺣﺪة وﻟﻜﻦ ﺑﺎﻟﻤﻘﺎﺑﻞ ﯾﻤﻜﻦ ﻟﻞ ‪ Tablespace‬أن ﺗﺤﺘﻮي ﻋﻠﻰ‬
‫أﻛﺜﺮ ﻣﻦ ‪.Data File‬‬
‫ﯾﻮﺟﺪ ﻧﻮﻋﺎن ﻣﻦ أﻧﻮاع ال ‪ Tablespace‬ھﻤﺎ‪:‬‬

‫‪ :SYSTEM TABLESPACE‬ھﻲ ال ‪ Tablespace‬اﻟﺘﻲ ﺗﺘﻜﻮن ﻣﺒﺎﺷﺮة ﻣﻊ ﺗﻜﻮﯾﻦ ال‬ ‫·‬


‫‪ Database‬ﻷﻧﮭﺎ ﺿﺮورﯾﺔ ﻟﻌﻤﻞ ال ‪ Database‬وﻻ ﯾﻤﻜﻦ ﻟﻞ ‪ Database‬اﻟﻌﻤﻞ ﺑﺪوﻧﮭﺎ‪ .‬ﺗﺤﺘﻮي‬
‫ﻋﻠﻰ ﺑﯿﺎﻧﺎت ال ‪ Data Dictionary‬وﺑﺮاﻣﺞ ال ‪ PL/SQL‬ﻣﺜﻞ ‪ .Stored Units‬ﺗﺤﺘﻮي اﯾﻀﺎً‬
‫ﻋﻠﻰ ال ‪ SYSTEM UNDO SEGMENT‬وﯾﻤﻜﻦ أن ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت "‪ "Data‬وﻟﻜﻦ ﻻ‬
‫ﯾﻔﻀﻞ ﺟﻤﻊ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ال ‪ System Tablespace‬ﺑﻞ ﻓﻲ اﻟﻨﻮع اﻟﺜﺎﻧﻲ ﻣﻦ ال ‪.Tablespace‬‬

‫‪ :NON-SYSTEM TABLESPACE‬ﻹﺿﺎﻓﺔ ﻣﺮوﻧﺔ ﻋﻠﻰ اﻟﺘﺤﻜﻢ ﺑﺎل ‪ ، Database‬ﯾﻨﺼﺢ‬ ‫·‬


‫ﺑﺎﺿﺎﻓﺔ ‪ Tablespaces‬اﻟﻰ ال ‪ Database‬ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ ﻣﺨﺘﻠﻒ أﻧﻮاﻋﮭﺎ‪ .‬ﻣﻦ ﻓﻮاﺋﺪ‬
‫اﺳﺘﻌﻤﺎﻟﮭﺎ أﻧﮭﺎ ﺗﻘﻮم ﺑﻔﺼﻞ ‪ ، Undo Data‬ﻋﻦ ‪ ، Temporary Data‬ﻋﻦ ‪Application‬‬
‫‪ Data‬أي أﻧﮭﺎ ﺗﻔﺼﻞ اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ ﺣﺴﺐ أﺧﺘﻼﻓﮭﺎ ‪ ،‬وﻣﻦ ﻓﻮاﺋﺪ اﺳﺘﻌﻤﺎﻟﮭﺎ اﯾﻀﺎً أن ال ‪DBA‬‬
‫ﯾﺴﺘﻄﯿﻊ اﻟﺘﺤﻜﻢ ﺑﺤﺠﻢ اﻟﻤﺴﺎﺣﺔ اﻟﻤﻤﻨﻮﺣﺔ ﻟﻜﻞ ﻣﺴﺘﺨﺪم ﻓﻲ ال ‪.Database‬‬

‫‪:CREATING TABLESPACES‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Tablespace‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪CREATE TABLESPACE tablespace's name‬‬


‫]‪[DATAFILE C1‬‬
‫]]‪[MINIMUM EXTENT number [K | M‬‬
‫] ]‪[BLOCKSIZE number [K‬‬
‫]‪[LOGGING | NOLOGGING‬‬
‫]‪[DEFAULT C2‬‬
‫]‪[ONLINE | OFFLINE‬‬
‫]‪[PERMANENT | TEMPORARY‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اﻟﻜﻠﻤﺎت اﻟﺘﻲ ﺗﺤﺘﮭﺎ ﺧﻂ ﻓﻲ اﻟﻘﺎﻋﺪة ھﻲ ال ‪.Default‬‬

‫أﻣﺎ ال اﻟﺮﻣﻮز ال ‪ ،C2 ،C1‬ﻓﺘﺮﻣﺰ اﻟﻰ ﺟﺰء ﻣﻦ اﻟﻘﺎﻋﺪة ﺗﻢ ﺗﺨﻔﯿﻔﮫ اﻟﻰ رﻣﻮز ﻟﺴﮭﻮﻟﺔ ﻗﺮاءة اﻟﻘﺎﻋﺪة‪:‬‬

‫‪'filename' [SIZE number [K | M] [REUSE] | REUSE] [AUTOEXTEND …] =C1‬‬

‫‪STORAGE (INITIAL number K|M NEXT number K|M =C2‬‬


‫)‪MINEXTENTS number PCTINCREASE number MAXEXTENTS number‬‬

‫ﺳﻮف ﯾﺄﺗﻲ ﺷﺮح ﺑﺎﻟﺘﻔﺼﯿﻞ ﻟﻌﻮاﻣﻞ ال ‪ C2‬اﻟﻤﺒﯿﻨﺔ )… ‪ (Initial, Next,‬و ﺟﻤﻠﺔ ال ‪.AUTOEXTEND‬‬

‫‪77‬‬
‫أﻣﺎ أواﻣﺮ اﻟﻘﺎﻋﺪة ﻓﮭﻲ ‪:‬‬

‫]‪ :[MINIMUM EXTENT‬ﺗﺤﺪد ﺣﺠﻢ ﺟﻤﯿﻊ ال ‪ Extents‬اﻟﺬﯾﻦ ﯾﻨﺘﻤﻮن اﻟﻰ ال‬ ‫·‬
‫‪ Tablespace‬ﺑﺤﯿﺚ ﯾﻜﻮن اﻟﺤﺠﻢ ﻣﻀﺎﻋﻔﺎت اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﺑﺠﺎﻧﺐ اﻟﺠﻤﻠﺔ‪ ،‬ﯾﻌﻨﻲ اذا ﻛﺎن اﻟﺮﻗﻢ ھﻮ ‪4‬‬
‫ﻓﯿﻜﻮن أﺣﺠﺎم ال ‪ Extents‬ﻣﻀﺎﻋﻔﺎت ھﺬا اﻟﺮﻗﻢ )…‪.(4, 8, 16,‬‬
‫]‪ :[BLOCKSIZE‬ﻟﺘﺤﺪﯾﺪ ﺣﺠﻢ ال ‪ Block Size‬ﺗﻌﺮﻓﻨﺎ اﻟﻰ اﻟﻌﺎﻣﻞ ‪DB_BLOCK_SIZE‬‬ ‫·‬
‫واﻟﺬي ﯾﺤﺪد اﻟﺤﺠﻢ اﻟﻤﺴﻤﻰ ﺑﺎل ‪ Standard‬وﻟﻜﻦ ﯾﺴﻤﺢ اﻷوراﻛﻞ ﺑﻮﺟﻮد أرﺑﻌﺔ أﺣﺠﺎم أﺧﺮى ﻟﻞ‬
‫‪ Block Size‬ﺗﺴﻤﻰ ‪ Non-Standard‬ﻓﻲ ﺣﺎﻟﺔ أن ﺣﺠﻢ ال ‪ Standard‬ﻻ ﯾﻨﺎﺳﺐ ال‬
‫‪ Tablespace‬وﻋﻨﺪﺋﺬ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ال ‪ Block Size‬ﺑﻮاﺳﻄﺔ ھﺬه اﻟﺠﻤﻠﺔ وﯾﻜﻮن ﺣﺠﻢ ال ‪Non-‬‬
‫‪ Standard‬ﺑﯿﻦ ‪ 2KB‬اﻟﻰ ‪.32KB‬‬
‫]‪ :[LOGGING‬ﺗﺤﺪد أن ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮ ال ‪ Tablespace‬ﻣﻦ ‪ Tables‬و ‪ Indexes‬وﻏﯿﺮھﺎ‬ ‫·‬
‫ﯾﺠﺐ أن ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺗﻄﺮأ ﻋﻠﯿﮭﺎ اﻟﻰ ال ‪.Redo Log Files‬‬
‫]‪ :[NOLOGGING‬ﺗﺤﺪد أن ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮ ال ‪ Tablespace‬ﻣﻦ ‪ Tables‬و ‪Indexes‬‬ ‫·‬
‫وﻏﯿﺮھﺎ ﯾﺠﺐ أن ﻻ ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺗﻄﺮأ ﻋﻠﯿﮭﺎ اﻟﻰ ال ‪.Redo Log Files‬‬
‫]‪ :[DEFAULT C2‬ﺗﺤﺪد ﻋﻮاﻣﻞ ﺧﺎﺻﺔ ﺗﺴﻤﻰ ﻋﻮاﻣﻞ اﻟﺘﺨﺰﯾﻦ "‪"Storage Parameters‬‬ ‫·‬
‫اﻟﺘﻲ ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﻻﺣﻘﺎً‪.‬‬
‫]‪ :[OFFLINE‬ﯾﻮﺟﺪ ﻋﺪد ﻣﻦ اﻟﺤﺎﻻت اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﻜﻮن ﻋﻠﯿﮭﺎ ال ‪ Tablespace‬ﺑﻌﺪ ﺗﻜﻮﯾﻨﮭﺎ‬ ‫·‬
‫واﻟﺤﺎﻟﺔ ﺗﺤﺪد أﻧﮭﺎ ﻏﯿﺮ ﺟﺎھﺰة ﻟﻼﺳﺘﺨﺪام )ﺿﺪ ‪.(Online‬‬
‫]‪ :[PERMANENT‬ﺗﺤﺪد أن ﻧﻮﻋﯿﺔ ال ‪ Tablespace‬ﻣﻦ اﻟﻨﻮع اﻟﺬي ﯾﺤﻤﻞ ﺑﯿﺎﻧﺎت داﺋﻤﺔ‪.‬‬ ‫·‬
‫]‪ :[TEMPORARY‬ﺗﺤﺪد أن ﻧﻮﻋﯿﺔ ال ‪ Tablespace‬ﻣﻦ اﻟﻨﻮع اﻟﺬي ﯾﺤﻤﻞ ﺑﯿﺎﻧﺎت ﻣﺆﻗﺘﮫ‪.‬‬ ‫·‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.1‬‬

‫ﻟﺘﻜﻮﯾﻦ ال ‪ Tablespace‬ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ‪ SQL‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ‪:‬‬

‫‪CREATE TABLESPACE user_data‬‬


‫‪DATAFILE '…\oradata\db01\userdata01.dbf' SIZE 50M‬‬
‫‪AUTOEXTEND ON NEXT 5M MAXSIZE 100M‬‬
‫‪LOGGING‬‬
‫‪OFFLINE‬‬
‫‪TEMPORARY‬‬
‫‪DEFAULT STORAGE (INITIAL 1M NEXT 1M MINEXTENTS 2‬‬
‫‪PCTINCREASE 0 MAXEXTENTS‬‬
‫)‪999‬‬
‫;‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ Tablespace‬ﺛﻢ ﺑﻮاﺳﻄﺔ اﻟﻀﻐﻂ ﺑﺎﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ ال ‪ Tablespace‬ﺗﻈﮭﺮ‬ ‫·‬
‫أواﻣﺮ ‪ ،‬اﺧﺘﺮ ‪.Create‬‬
‫ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺟﺪﯾﺪة ‪ ،‬ادﺧﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻣﺜﻞ اﺳﻢ ال ‪ Tablespace‬وال ‪ Data Files‬اﻟﺘﺎﺑﻌﯿﻦ‬ ‫·‬
‫ﻟﻞ ‪ Tablespace‬وﺑﺎﻗﻲ اﻟﺒﯿﺎﻧﺎت ‪ ،‬ﺛﻢ اﺿﻐﻂ ‪.CREATE‬‬

‫‪78‬‬
‫‪MANAGING TABLESPACES SPACE‬‬

‫ﻋﻨﺪﻣﺎ ﯾﺘﻢ ﺗﺨﺼﯿﺺ ﻣﺴﺎﺣﺔ ﻷي ﻋﻨﺼﺮ داﺧﻞ ال ‪ Tablespace‬ﯾﻜﻮن ﻟﻜﻞ ﻋﻨﺼﺮ ‪ Segment‬ﺗﺤﻮي ﻋﻠﻰ‬
‫ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪ ،Extents‬وﯾﻤﻜﻦ ادارة ﻣﺴﺎﺣﺔ ال ‪ Extent‬ﺑﻄﺮﯾﻘﺘﯿﻦ ھﻤﺎ‪:‬‬
‫‪ Locally Managed Tablespace‬و‪Dictionary Managed Tablespace‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻃﺮﯾﻘﺔ إدارة ال ‪ Extents‬ﺑﻌﺪ ﺗﺤﺪﯾﺪھﺎ‪.‬‬

‫‪:LOCALLY MANAGED TABLESPACE‬‬

‫ﺗﺘﺒﻊ ال ‪ Tablespace‬ھﺬه اﻟﻄﺮﯾﻘﺔ ﻋﻨﺪﻣﺎ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻣﻌﻠﻮﻣﺎت ال ‪ Extents‬ﻓﻲ ال ‪ Data Files‬اﻟﺘﺎﺑﻌﺔ ﻟﻞ‬
‫‪ .Tablespace‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ ﺷﻜﻞ ‪) Bitmap‬ﺧﺮﯾﻄﺔ ﺑﺎﯾﺘﺎت( واﻟﺘﻲ ﺗﺪل ﻋﻠﻰ ال ‪Free Blocks‬‬
‫و ال ‪ Used Blocks‬ﻓﻲ ال ‪ ،Extents‬وﻋﻨﺪا ﯾﺤﺪث أي ﺗﻌﺪﯾﻞ ﻋﻠﻰ ال ‪ Blocks‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﺠﺪﯾﺪ ﺑﯿﺎﻧﺎت‬
‫ال‪ Bitmap‬ﻟﺘﻮاﻓﻖ اﻟﺘﻐﯿﺮات اﻟﺘﻲ ﻃﺮأت‪.‬‬

‫ﻣﻦ ﻓﻮاﺋﺪ اﺳﺘﺨﺪام ﻃﺮﯾﻘﺔ ال ‪:Locally Managed‬‬

‫ﺗﺨﻔﻒ اﻟﻀﻐﻂ ﻋﻠﻰ ال ‪.Data Dictionary‬‬ ‫·‬

‫ﺣﺠﻢ ال ‪ Extent‬ﯾﻤﻜﻦ أن ﯾﻘﺪر ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ و ﺟﻤﯿﻊ ال ‪ Extents‬ﺗﻜﻮن ﺑﻨﻔﺲ اﻟﺤﺠﻢ‪.‬‬ ‫·‬

‫ﻋﺪم اﻟﺤﺎﺟﺔ اﻟﻰ ﺟﻤﻊ اﻟﻤﺴﺎﺣﺎت اﻟﺨﺎﻟﯿﺔ اﻟﺼﻐﯿﺮة اﻟﻀﺎﺋﻌﺔ اﻟﺘﻲ ﺗﻨﺸﺊ ﺑﯿﻦ اﻟﺒﯿﺎﻧﺎت ﻧﺘﯿﺠﺔ ﻟﻠﺘﻐﯿﺮات‬ ‫·‬
‫اﻟﺘﻲ ﺗﺤﺪث وﺗﻌﯿﺪھﺎ اﻟﻰ اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﻟﯿﺔ اﻟﺮﺋﯿﺴﯿﺔ وﺗﺴﻤﻰ ھﺬه اﻟﻌﻤﻠﯿﺔ ‪Coalescing Space‬‬
‫) ﺑﻤﻌﻨﻰ أﺧﺮ أﻧﮭﺎ ﺗﻤﻨﻊ ﺣﺪوث ﻋﻤﻠﯿﺎت ﻋﺪﯾﺪة ﺗﺴﺒﺐ ﺿﻐﻂ ﻋﻠﻰ ال ‪.(Database‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ Tablespaces‬ﺗﺘﺒﻊ ھﺬه اﻟﻄﺮﯾﻘﺔ ‪ ،‬ﯾﺠﺐ اﺿﺎﻓﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ اﻟﻰ ﻗﺎﻋﺪة‬
‫‪:CREATE TABLESPACE‬‬

‫‪EXTENT MANAGEMENT LOCAL‬‬


‫] ] ]‪[AUTOALLOCATE | UNIFORM [SIZE number [K|M‬‬

‫ﻧﻘﺎط ﻣﮭﻤﺔ‪:‬‬

‫‪ -1‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ]‪[DEFAULT C2‬‬

‫‪ -2‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻛﻠﻤﺔ ال ‪.TEMPORARY‬‬

‫‪ -3‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ‪.MINIMUM EXTENT‬‬

‫أﻣﺎ أواﻣﺮ اﻟﺠﻤﻠﺔ ﻓﮭﻲ ‪:‬‬

‫‪ :AUTOALLOCATE‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﺤﺪﯾﺪ ﺣﺠﻢ ال ‪ Extents‬وﻻ ﯾﺴﺘﻄﯿﻊ ال‪ DBA‬ﻓﻌﻞ ذﻟﻚ‪.‬‬ ‫·‬
‫‪ :UNIFORM‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﺣﺠﻢ ال ‪ Extents‬ﻣﻦ ﻗﺒﻞ ال ‪.DBA‬‬ ‫·‬

‫‪79‬‬
:5.2 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

:‫ ﺑﻜﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‬Locally Managed ‫ ﺗﺘﺒﻊ ﻃﺮﯾﻘﺔ ال‬Tablespace ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ‬

CREATE TABLESPACE app_data


DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;

:Autoallocate ‫ وھﻮ‬Default ‫ وﯾﺆﺧﺬ ال‬Locally Managed ‫ ﻓﺘﻌﺘﺒﺮ‬، ‫أو اذا ﺗﻢ ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ ﻓﻘﻂ‬

CREATE TABLESPACE app_data


DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M;

:DICTIONARY MANAGED TABLESPACE

.Data Dictionary ‫ ﻓﻲ ال‬Extents ‫ ھﺬه اﻟﻄﺮﯾﻘﺔ ﻋﻨﺪﻣﺎ ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻣﻌﻠﻮﻣﺎت ال‬Tablespace ‫ﺗﺘﺒﻊ ال‬
‫ ﻋﻠﻰ‬Segment ‫ اﻧﮭﺎ ﺗﻮﻓﺮ ﻣﺮوﻧﺔ ﻓﻲ ﺗﺤﺪﯾﺪ ﺣﺠﻢ ﻛﻞ‬Dictionary Managed ‫ﻣﻦ ﻓﻮاﺋﺪ اﺳﺘﺨﺪام ﻃﺮﯾﻘﺔ ال‬
‫ وﻟﻜﻦ ﻓﻲ اﻟﻤﻘﺎﺑﻞ ﺗﻠﺰم اﻟﺤﺎﺟﺔ اﻟﻰ ﺟﻤﻊ اﻟﻤﺴﺎﺣﺎت اﻟﺨﺎﻟﯿﺔ‬.[DEFAULT C2] ‫ﺣﺪه ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ال‬
، ‫اﻟﺼﻐﯿﺮة اﻟﻀﺎﺋﻌﺔ اﻟﺘﻲ ﺗﻨﺸﺊ ﺑﯿﻦ اﻟﺒﯿﺎﻧﺎت ﻧﺘﯿﺠﺔ ﻟﻠﺘﻐﯿﺮات اﻟﺘﻲ ﺗﺤﺪث و ﺗﻌﯿﺪھﺎ اﻟﻰ اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﻟﯿﺔ اﻟﺮﺋﯿﺴﯿﺔ‬
.Database ‫أي ﺣﺪوث ﻋﻤﻠﯿﺎت ﻗﺪ ﺗﺴﺒﺐ ﻣﺰﯾﺪ ﻣﻦ اﻟﻀﻐﻂ ﻋﻠﻰ ال‬

‫ ﯾﺠﺐ اﺿﺎﻓﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ اﻟﻰ ﻗﺎﻋﺪة‬، ‫ ﺗﺘﺒﻊ ھﺬه اﻟﻄﺮﯾﻘﺔ‬Tablespaces ‫ﻟﺘﻜﻮﯾﻦ‬
:CREATE TABLESPACE

EXTENT MANAGEMENT DICTIONARY [DEFAULT C2]

:5.3 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

CREATE TABLESPACE app_data


DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE (INITIAL 1M NEXT 1M] ;

MINIMUM ‫[ أو ﺟﻤﻠﺔ ال‬DEFAULT C2] ‫ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻢ اﻟﻌﻮاﻣﻞ ﺿﻤﻦ اﻟﺠﻤﻠﺔ‬:‫ﻣﻼﺣ ﻈﺔ‬
.Console ‫ أو ﻋﺒﺮ ال‬، ALTER TABLESPACE ‫ ﺑﺎﺳﺘﺨﺪام اﻷﻣﺮ‬EXTENT

80
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.4‬‬

‫ﻟﺘﻐﯿﯿﺮ ﺟﻤﻠﺔ ال ‪:Minimum Extent‬‬

‫;‪ALTER TABLESPACE app_data MINIMUM EXTENT 2M‬‬

‫ﻟﺘﻐﯿﯿﺮ ﺟﻤﻠﺔ ال …‪:Default Storage‬‬

‫‪ALTER TABLESPACE user_data‬‬


‫( ‪DEFAULT STORAGE‬‬
‫‪INITIAL 2M‬‬
‫‪NEXT 2M‬‬
‫;)‪MINEXTENTS 1500‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ Tablespace‬ﺛﻢ اﻟﻀﻐﻂ ﺑﺎﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ اﺳﻢ ال ‪ Tablespace‬اﻟﻤﺮاد ﺗﻐﯿﺮ‬ ‫·‬
‫ﺧﻮاﺻﮭﺎ ﻟﺘﻈﮭﺮ ﻗﺎﺋﻤﺔ أواﻣﺮ‪ ،‬أﺧﺘﺮ ﻣﻦ اﻷواﻣﺮ ‪.View\Edit Details‬‬
‫ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺟﺪﯾﺪة ‪ ،‬اﺿﻐﻂ ﻋﻠﻰ ﻛﻠﻤﺔ ‪ Storage‬ﺛﻢ أدﺧﻞ اﻟﺘﻐﯿﺮات اﻟﻤﻄﻠﻮﺑﺔ‪ ،‬ﺛﻢ اﺿﻐﻂ ‪.Apply‬‬ ‫·‬

‫ﺗﺬﻛﺮ‪ :‬أﻧﮫ ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﺧﻮاص ال ‪ Storage‬ﻟﻞ ‪ Tablespace‬اﻟﺘﻲ ﺗﺘﺒﻊ ﻃﺮﯾﻘﺔ ال ‪.Locally Managed‬‬

‫‪81‬‬
‫‪NON-SYSTEM TABLESPACES‬‬

‫ﯾﻮﺟﺪ أﻛﺜﺮ ﻣﻦ ‪ Non-System Tablespaces‬وﻟﻜﻞ ﻣﻨﮭﺎ وﻇﺎﺋﻒ ﻣﺨﺘﻠﻔﺔ ﻓﻲ ال ‪ ، Database‬ﻣﻨﮭﺎ‬


‫‪ Permanent Tablespace‬و ‪ Undo Tablespace‬و ‪.Temporary Tablespace‬‬
‫أﻣﺎ ‪ Permanent Tablespace‬ﻓﻮﻇﺎﺋﻔﮭﺎ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت "‪ "Data‬ﻟﻔﺼﻞ ﺑﯿﺎﻧﺎت ال ‪ Database‬ﻋﻦ‬
‫ﺑﯿﺎﻧﺎت ال ‪ Data Dictionary‬و ﻟﺴﮭﻮﻟﺔ اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺒﯿﺎﻧﺎت ﺑﺤﯿﺚ اذا ﺗﻢ ﺣﺬف ال ‪ Tablespace‬اﻟﺨﺎص‬
‫ﺑﮭﺎ ﻻ ﯾﺆﺛﺮ ذﻟﻚ ﻋﻠﻰ ﻋﻤﻞ ال ‪ Data Dictionary‬و ﻟﺘﺨﻔﯿﻒ اﻟﻀﻐﻂ ﻋﻠﻰ ال ‪ System Tablespace‬وال‬
‫‪ Database‬ﺑﺸﻜﻞ ﻋﺎم‪.‬‬

‫‪:UNDO TABLESPACE‬‬

‫ﺗﺴﺘﺨﺪم ﻟﺤﻔﻆ ال ‪ Undo Segment‬وﻻ ﯾﻤﻜﻦ أن ﺗﺤﺘﻮي ﻋﻠﻰ ﻏﯿﺮھﺎ‪ .‬ﯾﺘﻢ إدارة ال ‪ Extents‬ﺑﻄﺮﯾﻘﺔ ال‬
‫‪ Locally Managed‬و ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮭﺎ ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ )أو ﺗﻜﻮﯾﻨﮭﺎ ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪Database‬‬
‫ﺑﺎﺳﺘﺨﺪام ‪:(CREATE DATABASE‬‬

‫‪CREATE UNDO TABLESPACE tablespace_name‬‬


‫]‪[DATAFILE C1‬‬
‫‪EXTENT MANAGEMENT LOCAL‬‬
‫] ] ]‪[AUTOALLOCATE | UNIFORM [SIZE number [K|M‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺗﺴﺘﺨﺪم ال ‪ Undo Tablespace‬ﻓﻲ ال ‪ Automatic Undo Management‬اﻟﺘﻲ ﺳﻮف‬


‫ﻧﺘ ﻄﺮق ﻟﮭﺎ ﻓﻲ ﻓﺼﻞ أﺧﺮ ﻣﻊ ال ‪.Undo Segment‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.5‬‬

‫‪CREATE UNDO TABLESPACE undo01‬‬


‫;‪DATAFILE '…\oradata\db01\undo101.dbf' SIZE 50M‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ Tablespace‬ﺛﻢ اﻟﻀﻐﻂ ﺑﺎﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ اﺳﻢ ال ‪ Tablespace‬اﻟﻤﺮاد ﺗﻐﯿﺮ‬ ‫·‬
‫ﺧﻮاﺻﮭﺎ ﻟﺘﻈﮭﺮ ﻗﺎﺋﻤﺔ أواﻣﺮ‪ ،‬أﺧﺘﺮ ﻣﻦ اﻷواﻣﺮ ‪.Create‬‬
‫ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺟﺪﯾﺪة ‪ ،‬أﺧﺘﺮ ‪ Undo‬ﻋﻮﺿﺄ ﻋﻦ ‪ Permanent‬ﺛﻢ ادﺧﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻣﺜﻞ اﺳﻢ ال‬ ‫·‬
‫‪ Tablespace‬ﺛﻢ أﺿﻐﻂ ‪.Create‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺑﯿﺎﻧﺎت ال ‪ Undo Segment‬ﺗﺨﺰن ﻓﻲ ال ‪ Control File‬و ال ‪ Alert Log File‬و ال‬
‫‪.Initialization Parameter File‬‬

‫‪82‬‬
‫‪:TEMPORARY TABLESPACE‬‬

‫ﺗﻮﻓﺮ اﻟﻤﺴﺎﺣﺔ اﻟﻼزﻣﺔ ﻟﻌﻤﻠﯿﺎت ال ‪ Sort‬اﻟﻤﺨﺘﻠﻔﺔ اﻟﻨﺎﺗﺠﺔ ﻋﻦ أواﻣﺮﻋﺪة ﻣﺜﻞ ‪ Order By‬أو‪.Group By‬‬
‫ﺑﻤﻌﻨﻰ أﺧﺮ أﻧﮭﺎ ﺗﺨﺰن اﻟﺒﯿﺎﻧﺎت اﻟﻤﺆﻗﺘﺔ "‪ ،"Temporary Data‬وﺗﺤﻮي ﻣﺎ ﯾﻌﺮف ب ‪Sort Segment‬‬
‫واﻟﺘﻲ ﺗﺘﻜﻮن ﻓﻲ ال ‪ Tablespace‬ﻋﻨﺪ أول ﻋﻤﻠﯿﺔ ‪ Sort‬ﺗﻄﻠﺐ ﻣﻦ ال ‪ .Instance‬ﯾﻤﻜﻦ إدارة ال ‪Extents‬‬
‫ﺑﺎﻟﻄﺮﯾﻘﺘﯿﻦ و ﻟﻜﻦ ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪام ‪.Locally Managed‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺗﺴﺘﻄﯿﻊ ال ‪ Sort Segment‬اﻟﺘﻮﺳﻊ ﻓﻲ اﻟﻤﺴﺎﺣﺔ ﺑﺤﺠﺰ اﻟﻤﺰﯾﺪ ﻣﻦ ال ‪ Extents‬ﻟﻜﻲ ﯾﺘﻢ ﺗﻐﻄﯿﺔ‬
‫اﻟﻤﺴﺎﺣﺔ اﻟﻼزﻣﺔ ﻟﻌﻤﻠﯿﺎت ال ‪ Sort‬اﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال ‪ Temporary Tablespace‬ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ CREATE TABLESPACE‬ﻣﻊ إﺿﺎﻓﺔ‬


‫ﻛﻠﻤﺔ ‪ TEMPORARY‬ﻓﻲ اﻟﺠﻤﻠﺔ و ﻟﻜﻦ ﯾﻔﻀﻞ اﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ ﻟﺘﻜﻮﯾﻦ ‪:Locally Managed‬‬

‫‪CREATE TEMPORARY TABLESPACE temp's name‬‬


‫'‪TEMPFILE 'filename‬‬
‫‪EXTENT MANAGEMENT LOCAL‬‬
‫] ] ]‪[AUTOALLOCATE | UNIFORM [SIZE number [K|M‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.6‬‬

‫‪CREATE TEMPORARY TABLESPACE temp01‬‬


‫‪TEMPFILE '…\oradata\db05\temp01.dbf ' SIZE 200M‬‬
‫;‪EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ Tablespace‬ﺛﻢ ﺑﻮاﺳﻄﺔ اﻟﻀﻐﻂ ﺑﺎﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ ال ‪ Tablespace‬ﺗﻈﮭﺮ‬ ‫·‬
‫أواﻣﺮ ‪ ،‬اﺧﺘﺮ ‪.Create‬‬
‫ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺟﺪﯾﺪة ‪ ،‬أﺧﺘﺮ اﻟﺨﯿﺎر ‪ Temporary‬ﻋﻮﺿﺄ ﻋﻦ ‪ Permanent‬ﺛﻢ ادﺧﻞ اﻟﺒﯿﺎﻧﺎت‬ ‫·‬
‫اﻟﻤﻄﻠﻮﺑﺔ ﻣﺜﻞ اﺳﻢ ال ‪ Tablespace‬و أدﺧﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﺎﺑﻌﺔ ﻟﻘﺴﻢ ال ‪ Storage‬ﻣﺜﻞ ال ‪.Size‬‬
‫ﺛﻢ أﺿﻐﻂ ‪.Create‬‬ ‫·‬

‫ﯾﻌﺘﺒﺮ ‪) TEMPFILE‬اﻟﺬي اﺳﺘﺨﺪم ﻓﻲ اﻟﻘﺎﻋﺪة( ﻣﺘﻄﺎﺑﻘﺎً ﻟﻞ ‪ DATAFILE‬ﻋﺪا ﻓﻲ اﻻﺧﺘﻼﻓﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﻻ ﯾﻤﻜﻦ وﺿﻌﮫ ﻓﻲ ﺣﺎﻟﺔ اﻟﻘﺮاءة ﻓﻘﻂ ‪.Read-Only‬‬ ‫·‬


‫ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ اﺳﻢ اﻟﻤﻠﻒ‪.‬‬ ‫·‬
‫ﻻ ﯾﻤﻜﻦ أن ﯾﺘﻢ ﻟﮫ ﻋﻤﻠﯿﺔ ‪.Recovery‬‬ ‫·‬
‫ﻻ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮫ ﺑﺎﺳﺘﺨﺪام ال ‪.ALTER DATABASE‬‬ ‫·‬
‫داﺋﻤﺎً ﻓﻲ وﺿﻌﯿﺔ ال ‪.NOLOGGING‬‬ ‫·‬
‫ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻣﻊ ﺟﻤﻠﺔ ال ‪.CREATE CONTROLFILE‬‬ ‫·‬

‫‪83‬‬
‫‪:Default Temporary Tablespaces‬‬

‫ﺑﺎﺳﺘﺨﺪام ﻗﺎﻋﺪة ‪ CREATE DATABASE‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Default Temporary Tablespace‬واﻟﺘﻲ‬


‫ﺗﺤﻤﻲ ال ‪ Database‬ﻣﻦ اﺳﺘﺨﺪام ال ‪ System Tablespace‬ﻋﻮﺿﺎً ﻋﻦ ال ‪ Temporary‬ﻓﻲ ﺗﻨﻔﯿﺬ‬
‫ﻋﻤﻠﯿﺎت ال ‪ Sorts‬واﻟﺘﻲ ﻗﺪ ﺗﺆدي اﻟﻰ ﻣﺸﺎﻛﻞ ﻋﺪة ﻓﻲ ال ‪ System Tablespace‬وازدﯾﺎد ﻧﺴﺒﺔ ال‬
‫‪ Fragmentation‬داﺧﻞ ال ‪.System Tablespace‬‬
‫ﻓﻲ ﺣﺎل ﻟﻢ ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪ Temporary Tablespace‬ﻣﻊ ﺗﻜﻮﯾﻦ ال ‪ Database‬وﺗﻢ ﺗﻜﻮﯾﻨﮭﺎ ﺑﻌﺪ ذﻟﻚ ‪،‬‬
‫ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ أﻧﮭﺎ ال ‪ Default Temporary‬ﺑﻮاﺳﻄﺔ أﻣﺮ ‪ ،ALTER DATABASE‬وﺟﻤﯿﻊ‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﻦ اﻟﺬﯾﻦ ﻛﺎﻧﻮا ﯾﺴﺘﺨﺪﻣﻮن ال ‪ System Tablespace‬ﻟﻌﻤﻠﯿﺎت ال ‪ Sorts‬ﯾﺘﻢ ﺗﺤﻮﯾﻠﮭﻢ ﺑﺸﻜﻞ‬
‫أوﺗﻮﻣﺎﺗﯿﻜﻲ اﻟﻰ ال ‪.Default Temporary Tablespace‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اذا اراد ال ‪ DBA‬ﺗﻐﯿﯿﺮ ال ‪ Default Temporary Tablespace‬اﻟﻰ ‪Temporary‬‬


‫‪ Tablespace‬أﺧﺮى ﻟﺘﻜﻮن ھﻲ ال ‪ ، Default‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ‪.ALTER DATABASE‬‬

‫ﻣﻼﺣﻈﺔ‪ :2‬اذا ﺗﻢ ﺗﻜﻮﯾﻦ ال ‪ Default Temporary Tablespace‬ﺑﻮاﺳﻄﺔ ‪CREATE‬‬


‫‪ DATABASE‬ﻓﺈﻧﮭﺎ ﺗﺘﺒﻊ ﻃﺮﯾﻘﺔ ال ‪.Locally Managed‬‬

‫ﻗﯿﻮد ال ‪:Default Temporary Tablespace‬‬

‫ﻻ ﯾﻤﻜﻦ ﺣﺬف ال ‪ Default Temporary Tablespace‬إﻻ ﺑﻌﺪ ﺗﺤﻮﯾﻠﮭﺎ اﻟﻰ ‪Temporary‬‬ ‫·‬
‫‪ Tablespace‬أﺧﺮى ﺑﻮاﺳﻄﺔ ال ‪.ALTER DATABASE‬‬

‫ﻻ ﯾﻤﻜﻦ ﺗﺤﻮﯾﻞ ال ‪ Default Temporary‬اﻟﻰ ‪.Permanent‬‬ ‫·‬

‫ﻻ ﯾﻤﻜﻦ وﺿﻌﮭﺎ ﻓﻲ ﺣﺎﻟﺔ ال ‪.Offline‬‬ ‫·‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.7‬‬

‫ﻟﺘﻌﺮﯾﻒ ال ‪ Temporary Tablespace‬ﻛﻨﻮﻋﯿﺔ ال ‪ Default‬أو ﻟﺘﻐﯿﯿﺮ ال ‪ Default Temporary‬اﻟﻰ‬


‫أﺧﺮى ﯾﺠﺐ ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp02‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ Tablespace‬ﺛﻢ ﺑﻮاﺳﻄﺔ اﻟﻀﻐﻂ ﺑﺎﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ ال ‪ Tablespace‬ﺗﻈﮭﺮ‬ ‫·‬
‫أواﻣﺮ ‪ ،‬اﺧﺘﺮ ‪.Create‬‬
‫ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺟﺪﯾﺪة ‪ ،‬أﺧﺘﺮ اﻟﺨﯿﺎر ‪ Temporary‬ﻋﻮﺿﺄ ﻋﻦ ‪ Permanent‬ﺛﻢ ادﺧﻞ اﻟﺒﯿﺎﻧﺎت‬ ‫·‬
‫اﻟﻤﻄﻠﻮﺑﺔ ﻣﺜﻞ اﺳﻢ ال ‪ Tablespace‬وأدﺧﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﺎﺑﻌﺔ ﻟﻘﺴﻢ ال ‪ Storage‬ﻣﺜﻞ ال ‪.Size‬‬
‫ﯾﺠﺖ ﺗﺤﺪﯾﺪ اﻟﺨﺎﻧﺔ ‪ Set as Default Temporary Tablespace‬ﺛﻢ أﺿﻐﻂ ‪.Create‬‬ ‫·‬

‫‪84‬‬
‫‪ALTERING A TABLESPACE‬‬

‫ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ‪ Tablespaces‬أو ﺣﺬﻓﮭﻢ ﺑﻮاﺳﻄﺔ أﻣﺮ ‪ ،ALTER TABLESPACE‬ﺑﺤﯿﺚ ﯾﻤﻜﻦ ﺗﻨﻔﯿﺬ‬
‫ﺑﻮاﺳﻄﺔ ھﺬا اﻷﻣﺮ‪ :‬ﺗﻐﯿﯿﺮ اﻟﺤﺎﻟﺔ ﺑﯿﻦ ‪ Offline‬و ‪ ، Online‬وﺿﻊ ال ‪ Tablespace‬ﻓﻲ وﺿﻌﯿﺔ اﻟﻘﺮاءة ﻓﻘﻂ‬
‫‪ ، Read-Only‬ﺣﺬف ‪ ، Tablespace‬ﺗﻐﯿﯿﺮ ﺣﺠﻢ ال ‪ ،Tablespace‬وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﮭﺎم‪.‬‬

‫‪:OFFLINE OR ONLINE‬‬

‫ﻋﻨﺪﻣﺎ ﺗﻜﻮن ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ‪ ،Offline‬ﻻ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال‬
‫‪ Tablespace‬ﻣﻦ ال ‪ .Database‬ﯾﻤﻜﻦ وﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Offline‬ﻟﻌﺪة اﺳﺒﺎب ﻣﻨﮭﺎ أن‬
‫ال ‪ DBA‬ﯾﺮﻏﺐ ﻓﻲ اﻏﻼق ﺟﺰء ﻣﻦ اﻟﺒﯿﺎﻧﺎت أو ﻋﻤﻞ ﻋﻤﻠﯿﺔ ‪ Backup‬أو ‪ Recovery‬ﻋﻠﻰ ھﺬا اﻟﺠﺰء دون‬
‫إﻏﻼق ال ‪ Database‬ﺑﺸﻜﻞ ﺗﺎم أو ﻧﻘﻞ أو ﺗﻐﯿﯿﺮ اﺳﻢ ‪ Data Files‬ﻟﻞ ‪ Tablespace‬دون إﻏﻼق ال‬
‫‪ Database‬ﺑﺸﻜﻞ ﻛﺎﻣﻞ‪.‬‬
‫ﻋﻨﺪﻣﺎ ﺗﺘﻐﯿﺮ ﺣﺎﻟﺔ ال ‪ Tablespace‬ﻣﻦ ‪ Online‬اﻟﻰ ‪ Offline‬أو ﺑﺎﻟﻌﻜﺲ‪ ،‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﻌﻤﻠﯿﺔ‬
‫ﻓﻲ ال ‪ Data Dictionary‬وﻓﻲ ال ‪ .Control File‬ﯾﻤﻜﻦ ﻟﻞ ‪ Instance‬ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال ‪Tablespace‬‬
‫ﺑﯿﻦ اﻟﺤﺎﻟﺘﯿﻦ ﻋﻨﺪ ﺣﺪوث أﺧﻄﺎء أو ﻣﺸﺎﻛﻞ ﻣﺜﻞ ﻋﺪم اﻟﻤﻘﺪرة ﻋﻠﻰ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻰ ال ‪.Tablespace‬‬
‫ﻻ ﯾﻤﻜﻦ وﺿﻊ ﺟﻤﯿﻊ ال ‪ Tablespaces‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Offline‬اذ ﯾﺴﺜﻨﻰ ﻛﻞ ﻣﻦ ال ‪System Tablespace‬‬
‫و ال ‪ Default Temporary‬وال ‪ Tablespace‬اﻟﺘﻲ ﺗﺤﻮي ‪ Undo Segment‬ﻓﻲ ﺣﺎﻟﺔ ‪.Active‬‬

‫ﯾﻤﻜﻦ اﻟﺘﺤﻮﯾﻞ ﺑﯿﻦ اﻟﺤﺎﻟﺘﯿﻦ ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ALTER TABLESPACE tablespace's name‬‬


‫| ‪ONLINE‬‬
‫]‪OFFLINE [NORMAL | TEMPORARY | IMMEDIATE| FOR RECOVER‬‬

‫أواﻣﺮ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :NORMAL‬ﯾﺘﻢ ﻛﺘﺎﺑﺔ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﻐﯿﺮة "‪ "Dirty Buffers‬اﻟﺨﺎﺻﺔ ﺑﺎل ‪Data Files‬‬ ‫·‬
‫ﻓﻲ ذاﻛﺮة ال ‪ SGA‬اﻟﻰ ال ‪ Data Files‬ﺿﻤﻦ ال ‪ Tablespace‬اﻟﻤﺮاد إﻏﻼﻗﮭﺎ‪.‬‬
‫‪ :TEMPORARY‬ﺗﻮﻓﺮ ﻋﻤﻠﯿﺔ ‪ Checkpoint‬ﻟﺠﻤﯿﻊ ال ‪ Online Data Files‬ﺿﻤﻦ ال‬ ‫·‬
‫‪ Tablespace‬اﻟﻤﺮاد إﻏﻼﻗﮭﺎ و ﻻ ﺗﻮﻓﺮ ذات اﻟﻌﻤﻠﯿﺔ ﻟﻞ ‪.Offline Data Files‬‬
‫‪ :IMMEDIATE‬ﻻ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺔ ‪ Checkpoint‬ﻋﻠﻰ ال ‪ Data Files‬ﺿﻤﻦ ال ‪Tablespace‬‬ ‫·‬
‫اﻟﻤﺮاد ﻏﻠﻘﮭﺎ وﺑﺎﻟﺘﺎﻟﻲ ﯾﺠﺐ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Recovery‬ﻋﻨﺪ اﻟﺮﻏﺒﺔ ﺑﺘﺤﻮﯾﻠﮭﺎ اﻟﻰ ‪.Online‬‬
‫‪ :FOR RECOVER‬ﻻﺳﺘﺨﺪام ال ‪ Tablespace‬ﻓﻲ ﻋﻤﻠﯿﺔ ‪.Recovery‬‬ ‫·‬

‫ﺗﺬﻛﺮ اﻟﻨﻘﺎط اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫أن ال ‪ DBWn‬ﯾﻌﻤﻞ ﻋﻨﺪﻣﺎ ﯾﺘﻢ وﺿﻊ ال ‪ Permanent Tablespace‬أو ‪Temporary‬‬ ‫·‬


‫‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.Offline‬‬

‫أن وﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Offline Normal‬ﯾﺆدي اﻟﻰ ﺣﺪوث ﻋﻤﻠﯿﺔ ال‬ ‫·‬
‫‪.Checkpoint‬‬

‫أﻧﮫ ﯾﻤﻜﻦ وﺿﻊ ال ‪ Tablespace‬ﻓﻲ اﺣﺪى اﻟﺤﺎﻟﺘﯿﻦ ﻋﻨﺪ ﺗﻜﻮﯾﻨﮭﺎ ﺑﻮاﺳﻄﺔ ‪CREATE‬‬ ‫·‬
‫‪.TABLESPACE‬‬

‫‪85‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.8‬‬

‫ﻟﻮﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Online‬ﯾﺠﺐ ﻛﺘﺎﺑﺔ‪:‬‬

‫;‪ALTER TABLESPACE user_data ONLINE‬‬

‫ﻟﻮﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Offline‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ‪:‬‬

‫;‪ALTER TABLESPACE user_data OFFLINE‬‬

‫;‪ALTER TABLESPACE user_data OFFLINE IMMEDIATE‬‬

‫;‪ALTER TABLESPACE user_data OFFLINE TEMPORARY‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪ +‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪ Tablespace‬ﻟﯿﻈﮭﺮ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎء ال ‪.Tablespaces‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Tablespace‬اﻟﻤﺮاد ﺗﺤﻮﯾﻞ ﺣﺎﻟﺘﮭﺎ‪.‬‬ ‫·‬
‫ﯾﻈﮭﺮ ﻋﻠﻰ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ ﺑﻌﺾ ﺧﺼﺎﺋﺺ ال ‪ ،Tablespace‬اﺧﺘﺮ ‪ Offline‬وﺣﺎﻟﺔ اﻹﻏﻼق ﻣﻦ‬ ‫·‬
‫اﻟﻤﺠﻤﻮﻋﺔ اﻟﺘﻲ ﺑﺠﺎﻧﺒﮭﺎ ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬

‫‪:READ-ONLY TABLESPACE‬‬

‫ﯾﻤﻜﻦ وﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ اﻟﻘﺮاءة ﻓﻘﻂ "‪ "Read-Only‬اذا رﻏﺐ ال ‪ DBA‬ﺑﺄن ﺗﺘﻢ ﻗﺮاءة‬
‫ﺑﯿﺎﻧﺎت ال ‪ Data Files‬ﺿﻤﻦ ال ‪ Tablespace‬دون ﺗﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت‪ .‬ﻟﻜﻲ ﯾﺴﺘﻄﯿﻊ ال ‪ DBA‬وﺿﻊ ال‬
‫‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Read-Only‬ﯾﺠﺐ أن ﯾﻜﻮن ﺟﻤﯿﻊ ال ‪ Data Files‬اﻟﺘﺎﺑﻌﯿﯿﻦ ﻟﻞ ‪Tablespace‬‬
‫ﻓﻲ وﺿﻌﯿﺔ ‪ Online‬وإﻻ ﻓﺄن اﻟﻌﻤﻠﯿﺔ ﻟﻦ ﺗﻨﺠﺢ ‪ ،‬واﻟﻌﻜﺲ ﺻﺤﯿﺢ ﻓﻲ ﺣﺎل ﺗﺤﻮﯾﻞ ال ‪ Tablespace‬ﻣﻦ‬
‫‪ Read-Only‬اﻟﻰ اﻟﺤﺎﻟﺔ اﻟﻌﺎدﯾﺔ ‪ Read-Write‬ﯾﺤﺐ ﺗﻮﻓﺮ ﺟﻤﯿﻊ ال ‪ Data Files‬ﻓﻲ وﺿﻌﯿﺔ ‪.Online‬‬
‫ﯾﻤﻜﻦ وﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ‪ Read-Only‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]‪ALTER TABLESPACE tablespace's name READ [ONLY | WRITE‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ﻋﻨﺎﺻﺮ )‪ (Tables, Indexes‬ﻣﻦ ال ‪ Read-Only Tablespace‬اذ أن ﺣﺬف ﻋﻨﺎﺻﺮ ﻻ ﺗﻜﻮن‬
‫ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة ﻓﻲ ال ‪ Tablespace‬وﻻ ﺗﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة إﻧﻤﺎ ﺗﻐﯿﯿﺮ ﺑﯿﺎﻧﺎت ال ‪.Data Dictionary‬‬
‫وﻓﻲ ﺣﺎل ﻛﺎﻧﺖ ﺗﺠﺮى ﻋﻠﻰ ال ‪ Tablespace‬ﻋﺪد ﻣﻦ اﻟﻤﮭﺎم "‪ "Transaction‬ﻋﻨﺪ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ ‪ ،‬ﯾﺘﻢ‬
‫ﻣﻨﻊ ﺣﺪوث ﻣﮭﺎم ﺟﺪﯾﺪة وﯾﺘﻢ اﻧﺠﺎز اﻟﻤﮭﺎم اﻟﺘﻲ ﺗﺠﺮي وإﻣﺎ أن ﺗﺴﺠﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻨﺎﺗﺠﺔ ﻋﻦ اﻟﻤﮭﺎم ﻋﻨﺪ ﺣﺪوث‬
‫‪ Commit‬أو ﺗﻠﻐﻰ ﻋﻨﺪ ﺣﺪوث ‪.Rollback‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ وﺿﻊ ال ‪ System Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.Read-Only‬‬

‫‪86‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.9‬‬

‫ﻟﻮﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Read-Only‬ﯾﺠﺐ ﻛﺘﺎﺑﺔ‪:‬‬

‫;‪ALTER TABLESPACE user_data READ ONLY‬‬

‫ﻟﻮﺿﻊ ال ‪ Tablespace‬ﻓﻲ اﻟﺤﺎﻟﺔ اﻟﻌﺎدﯾﺔ‪:‬‬

‫;‪ALTER TABLESPACE user_data READ WRITE‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪ +‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪ Tablespace‬ﻟﯿﻈﮭﺮ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎء ال ‪.Tablespaces‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Tablespace‬اﻟﻤﺮاد ﺗﺤﻮﯾﻞ ﺣﺎﻟﺘﮭﺎ‪.‬‬ ‫·‬
‫ﯾﻈﮭﺮ ﻋﻠﻰ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ ﺑﻌﺾ ﺧﺼﺎﺋﺺ ال ‪ ،Tablespace‬ﺿﻊ ﻋﻼﻣﺔ ﻓﻲ اﻟﻤﺮﺑﻊ ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ‬ ‫·‬
‫‪ ، Read Only‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬

‫ﺗﺬﻛﺮ‪ :‬أن وﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ Read-Only‬ﯾﺆدي اﻟﻰ ﻋﻤﻞ ال ‪ DBWn‬و ﺣﺪوث ﻋﻤﻠﯿﺔ ال‬
‫‪.Checkpoint‬‬

‫‪:DROPPING TABLESPACES‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ‪ Tablespace‬ﻣﻦ ال ‪ Database‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪DROP TABLESPACE tablespace's name‬‬


‫]]‪[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS‬‬

‫أواﻣﺮ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :INCLUDING CONTENTS‬اذا ﻛﺎﻧﺖ ال ‪ Tablespace‬ﺧﺎﻟﯿﺔ ﻻ ﺗﺤﻮي أي ﺑﯿﺎﻧﺎت‬ ‫·‬


‫"‪ "Data‬ﻓﻼ ﯾﺸﺘﺮط ﻛﺘﺎﺑﺔ ھﺬه اﻟﺠﻤﻠﺔ ‪ ،‬وﻟﻜﻦ اذا ﻛﺎﻧﺖ ﺗﺤﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت "‪ "Data‬ﻓﯿﺠﺐ ﻛﺘﺎﺑﺔ‬
‫ھﺬه اﻟﺠﻤﻠﺔ‪.‬‬
‫‪ :AND DATAFILES‬ﻛﻤﺎ ﺗﻌﺮف أن ﻟﻜﻞ ‪ Tablespace‬ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪ Data Files‬اﻟﺘﺎﺑﻌﺔ‬ ‫·‬
‫ﻟﮭﺎ ﺗﻜﻮن اﻟﺠﺰء اﻟﻔﯿﺰﯾﺎﺋﻲ )اﻟﻤﻠﻔﺎت اﻟﺤﻘﯿﻘﺔ( ﻋﻠﻰ ﻣﻮﻗﻊ اﻟﺘﺨﺰﯾﻦ )ﻣﺜﻞ اﻟﻘﺮص اﻟﺼﻠﺐ(‪ .‬ﻋﻨﺪﻣﺎ ﻻ‬
‫ﺗﻜﺘﺐ ھﺬه اﻟﺠﻤﻠﺔ ﻻ ﺗﺤﺬف ﻣﻠﻔﺎت ال ‪ Data Files‬ﻣﻦ ﻣﻮﻗﻊ اﻟﺘﺨﺰﯾﻦ واﻟﻌﻜﺲ ﺻﺤﯿﺢ اذ أن ﻛﺘﺎﺑﺔ‬
‫ھﺬه اﻟﺠﻤﻠﺔ ﺗﺆدي اﻟﻰ ﺣﺬف ﻣﻠﻔﺎت ال ‪ Data Files‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ‪.‬‬
‫‪ :CASCADE CONSTRAINTS‬ﯾﺠﺐ اﺳﺘﺨﺪام ھﺬه اﻟﺠﻤﻠﺔ ﻓﻲ ﺣﺎﻟﺔ وﺟﻮد ﻣﺎ ﯾﻌﺮف ب‬ ‫·‬
‫‪ (Foreign Key) Referential Integrity‬ﻣﻦ ‪ Table‬ﺗﻮﺟﺪ ﺧﺎرج ال ‪ Tablespace‬اﻟﻤﺮاد‬
‫ﺣﺬﻓﮭﺎ ﻣﻊ ‪ Primary Key‬أو ‪ Unique Key‬ل‪ Table‬ﻣﻮﺟﻮدة داﺧﻞ ال ‪ .Tablespace‬ﻓﻲ ﺣﺎل‬
‫وﺟﻮد ھﺬا اﻟﺮاﺑﻂ وﻟﻢ ﯾﺘﻢ اﺳﺘﺨﺪام ھﺬه اﻟﺠﻤﻠﺔ ‪ ،‬ﺗﻔﺸﻞ ﻋﻤﻠﯿﺔ اﻟﺤﺬف‪.‬‬

‫‪87‬‬
‫ﻧﻘﺎط ﻣﮭﻤﺔ‪:‬‬

‫‪ -1‬ﯾﻤﻜﻦ ﺣﺬف ال ‪ Tablespace‬اﻟﺘﻲ ﺗﻮﺟﺪ ﻓﻲ وﺿﻌﯿﺔ ‪.Read-Only‬‬

‫‪ -2‬ﯾﻨﺼﺢ ﺑﺘﺤﻮﯾﻞ ال ‪ Tablespace‬اﻟﻰ ﺣﺎﻟﺔ ‪ Offline‬ﻗﺒﻞ ﺣﺬﻓﮭﺎ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ﻋﺪم وﺟﻮد ﻣﮭﺎم أو ﻋﻤﻠﯿﺎت‬
‫ﺗﺠﺮي ﻋﻠﻰ ال ‪ ، Tablespace‬اذ ﺑﺘﺤﻮﯾﻠﮭﺎ اﻟﻰ ‪ Offline‬ﯾﺘﻢ وﻗﻒ اﻟﻌﻤﻠﯿﺎت اﻟﺠﺪﯾﺪة وإﻧﮭﺎء اﻟﻤﮭﻤﺎت اﻟﺤﺎﻟﯿﺔ‬
‫ﻛﻤﺎ ﺷﺮﺣﻨﺎ ﻗﺒﻞ ﻗﻠﯿﻞ‪.‬‬

‫‪ -3‬ﺑﻌﺪ ﺣﺬف ال ‪ Tablespace‬ﯾﺘﻢ ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎت ال ‪ Control File‬ﻟﺘﺘﻮاﻓﻖ ﻣﻊ اﻟﺘﻐﯿﯿﺮ اﻟﺬي ﺣﺪث ﻓﻲ ال‬
‫‪.Tablespace‬‬

‫ﺗﺬﻛﺮ‪ :‬أن ال ‪ Control File‬ﯾﺤﻮي ﻣﻌﻠﻮﻣﺎت ﺣﻮل أﺳﻤﺎء ال ‪ Tablespaces‬وأﺳﻤﺎء و ﻣﻮاﻗﻊ ال ‪Data‬‬
‫‪.Files‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪5.10‬‬

‫ﻟﺤﺬف ‪ Tablespace‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫‪DROP TABLESPACE user_data‬‬


‫;‪INCLUDING CONTENTS AND DATAFILES‬‬

‫‪DROP TABLESPACE user_data‬‬


‫;‪INCLUDING CONTENTS CASCADE CONSTRAINT‬‬

‫‪DROP TABLESPACE user_data‬‬


‫;‪INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINT‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪ +‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪ Tablespace‬ﻟﯿﻈﮭﺮ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎء ال ‪.Tablespaces‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Tablespace‬اﻟﻤﺮاد ﺣﺬﻓﮭﺎ‪.‬‬ ‫·‬
‫اﺳﺘﺨﺪم اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة اﺗﻈﮭﺮ ﻟﻚ ﻗﺎﺋﻤﺔ‪ ،‬اﺧﺘﺮ ‪.Remove‬‬ ‫·‬
‫أﺧﺘﺮ ‪ Yes‬ﻟﺘﺄﻛﯿﺪ اﻟﺤﺬف‪.‬‬ ‫·‬

‫‪88‬‬
‫‪:RESIZING A TABLESPACE‬‬

‫ﯾﻤﻜﻦ زﯾﺎدة ﺣﺠﻢ ال ‪ Tablespace‬ﺑﺰﯾﺎدة ﺣﺠﻢ ال ‪ Data Files‬اﻟﺘﺎﺑﻌﺔ ﻟﮭﺎ أو إﺿﺎﻓﺔ ‪ Data Files‬ﺟﺪﯾﺪة ﻟﻞ‬
‫‪ .Tablespace‬ﯾﻤﻜﻦ زﯾﺎدة ﺣﺠﻢ ال ‪ Data Files‬ﺑﻄﺮﯾﻘﺔ ﯾﺪوﯾﺔ أو أوﺗﻮﻣﺎﺗﯿﻜﯿﺔ‪.‬‬

‫‪:Automatic Extension‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ‪ AUTOEXTEND‬ﻟﺰﯾﺎدة ﺣﺠﻢ ال ‪ Data Files‬ﺑﻄﺮﯾﻘﺔ أوﺗﻮﻣﺎﺗﯿﻜﯿﺔ أو ﻟﻮﻗﻒ ھﺬه‬
‫اﻟﻌﻤﻠﯿﺔ‪ .‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ‪ AUTOEXTEND‬ﺑﻌﺪ ﺗﻜﻮﯾﻦ ال ‪ Database‬أو ال ‪Tablespace‬‬
‫ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]‪ALTER DATABASE [database's name‬‬


‫]‪DATAFILE 'filename' [SIZE number] [K | M] [REUSE‬‬
‫]]‪[AUTOEXTEND OFF|ON [NEXT number [K|M‬‬
‫]]‪[MAXSIZE UNLIMITED | number [K |M‬‬

‫أواﻣﺮ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :AUTOEXTEND OFF‬ﺗﻮﻗﻒ ﻋﻤﻠﯿﺔ زﯾﺎدة ﺣﺠﻢ اﻟﻤﻠﻔﺎت ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ‪.‬‬ ‫·‬


‫‪ :AUTOEXTEND ON‬ﻟﺘﺸﻐﯿﻞ ﻋﻤﻠﯿﺔ زﯾﺎدة ﺣﺠﻢ اﻟﻤﻠﻔﺎت ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ ﻋﻨﺪ أﻣﺘﻼء‬ ‫·‬
‫اﻟﻤﻠﻔﺎت‪.‬‬
‫‪ :NEXT‬ﺣﺠﻢ اﻟﺰﯾﺎدة ﻋﻨﺪ أﻣﺘﻼء ال ‪.Data Files‬‬ ‫·‬
‫‪ :MAXSIZE‬ﻟﺘﺤﺪﯾﺪ اﻟﺤﺠﻢ اﻷﻗﺼﻰ اﻟﺬي ﯾﻤﻜﻦ أن ﯾﺼﻞ ﻟﮫ ﺣﺠﻢ ال ‪ .Data Files‬ﯾﻤﻜﻦ أن ﯾﺤﺪد‬ ‫·‬
‫اﻟﺤﺪ اﻷﻗﺼﻰ أو ان ﯾﻜﻮن ﻏﯿﺮ ﻣﺤﺪد ﺑﺎﺳﺘﺨﺪام ‪.UNLIMITED‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ ال ‪ AUTOEXTEND‬ﻓﻲ ﻗﺎﻋﺪة ‪ CREATE DATABASE‬و ‪CREATE‬‬


‫‪.TABLESPACE‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪5.11‬‬

‫ﻟﺰﯾﺎدة ﺣﺠﻢ ال ‪ Data Files‬ﺿﻤﻦ ال ‪ Tablespace‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ‪:‬‬

‫'‪ALTER DATABASE DATAFILE '…\oradata\db01\userdata01.dbf‬‬


‫;‪AUTOEXTEND ON NEXT 10M MAXSIZE 250M‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪ +‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪ Data Files‬ﻟﯿﻈﮭﺮ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎء ال ‪.Data Files‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Data File‬اﻟﻤﺮاد ﺗﻜﺒﯿﺮھﺎ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﻛﻠﻤﺔ ال ‪ Storage‬ﻟﺘﺪﺧﻞ اﻟﻰ اﻟﻘﺴﻢ اﻷﺧﺮ ‪.‬‬ ‫·‬
‫ﺿﻊ ﻋﻼﻣﺔ ﻓﻲ اﻟﻤﺮﺑﻊ ﺛﻢ أﻛﺘﺐ ﻗﯿﻢ ﻛﻞ ﻣﻦ )‪ ، Increment (NEXT‬واﺧﺘﺮ إﻣﺎ ‪ Unlimited‬او‬ ‫·‬
‫ﻗﯿﻤﺔ ‪ Value‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬

‫‪89‬‬
‫‪:Manual Extension‬‬

‫ﯾﻤﻜﻦ زﯾﺎدة أو اﻧﻘﺎص ﺣﺠﻢ ال ‪ Data Files‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫… ]'‪ALTER DATABASE [database's name] DATAFILE 'filename', ['filename2‬‬


‫]‪RESIZE number [K|M‬‬

‫ﺳﺆال‪ :‬ﻟﻨﻔﺮض أﻧﮫ ﯾﻮﺟﺪ ﻟﺪﯾﻨﺎ ‪ Data File‬ﺣﺠﻤﮫ ‪ 100 MB‬وھﻮ ﯾﺤﻮي ﻋﻠﻰ ‪ 70 MB‬ﺑﯿﺎﻧﺎت ‪ ،‬واراد ال‬
‫‪ DBA‬ﺗﺼﻐﯿﺮ ﺣﺠﻤﮫ اﻟﻰ ‪ ، 60 MB‬ﻓﮭﻞ ﺗﻨﺠﺢ اﻟﻌﻤﻠﯿﺔ ؟ و ﻛﻢ ﯾﻜﻮن ﺣﺠﻢ ال ‪ Data File‬ﺑﻌﺪ اﻟﺘﺼﻐﯿﺮ؟‬

‫ﺟﻮاب‪ :‬ﻧﻌﻢ ﺗﻨﺠﺢ ﻋﻤﻠﯿﺔ اﻟﺘﺼﻐﯿﺮ وﻟﻜﻦ ﯾﻜﻮن ﺣﺠﻢ ال ‪ Data File‬ھﻮ ﺣﺠﻢ اﻟﺒﯿﺎﻧﺎت ﻓﯿﮫ وھﻮ ‪.70 MB‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ ﺗﻜﺒﯿﺮ أو ﺗﺼﻐﯿﺮ ﺣﺠﻢ أﻛﺜﺮ ﻣﻦ ﻣﻠﻒ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪5.12‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪5.12‬‬

‫ﻟﺰﯾﺎدة ﺣﺠﻢ ال ‪ Data Files‬ﺿﻤﻦ ال ‪ Tablespace‬ﺑﺸﻜﻞ ﯾﺪوي‪:‬‬

‫‪ALTER DATABASE DATAFILE '…\oradata\db01\userdata01.dbf',‬‬


‫'‪'….\oradata\db01\userdata02.dbf‬‬
‫;‪RESIZE 250M‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Storage Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪ +‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪ Data Files‬ﻟﯿﻈﮭﺮ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎء ال ‪.Data Files‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Data File‬اﻟﻤﺮاد ﺗﻜﺒﯿﺮھﺎ أو ﺗﺼﻐﯿﺮھﺎ‪.‬‬ ‫·‬
‫ادﺧﻞ اﻟﺤﺠﻢ اﻟﺠﺪﯾﺪ ﻓﻲ ﺧﺎﻧﺔ ‪ File Size‬ﺛﻢ اﺿﻐﻂ ‪.Apply‬‬ ‫·‬

‫‪90‬‬
:Adding Data File

:‫ ﻟﺘﻜﺒﯿﺮ ﺣﺠﻤﮭﺎ ﻋﺒﺮ اﻟﻘﺎﻋﺪة‬Tablespace ‫ اﻟﻰ ال‬Data Files ‫ﯾﻤﻜﻦ اﺿﺎﻓﺔ‬

ALTER TABLESPACE tablespace's name ADD DATAFILE


'filename' [SIZE number [K|M]] [REUSE] [AUTOEXTEND …] , ….

.‫ اﺳﺘﺨﺪم ﻓﺎﺻﻠﺔ ﻓﻲ أﺧﺮ اﻟﻘﺎﻋﺪة وأﻋﺪ ﻛﺘﺎﺑﺔ اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ‬.‫ ﯾﻤﻜﻦ اﺿﺎﻓﺔ أﻛﺜﺮ ﻣﻦ ﻣﻠﻒ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‬:‫ﻣﻼﺣﻈﺔ‬
.5.13 ‫ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل‬

:5.13 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

:Tablespace ‫ اﻟﻰ ال‬Data Files ‫ﻻﺿﺎﻓﺔ‬

ALTER TABLESPACE user_data ADD DATAFILE


'…\oradata\db01\userdata01.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 250M,
'…\oradata\db01\userdata02.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 250M;

:‫ ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‬Console ‫أو ﻋﺒﺮ ال‬

.Standalone ‫ ﻋﺒﺮ‬Console ‫ادﺧﻞ اﻟﻰ ال‬ ·


.‫ ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‬Database ‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال‬ ·
.Normal ‫ ﻋﻮﺿﺎً ﻋﻦ‬SYSDBA ‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر‬ ·
.Storage Manager ‫اﺿﻐﻂ ﻋﻠﻰ ال‬ ·
.Tablespaces ‫ ﻟﯿﻈﮭﺮ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎء ال‬Tablespace ‫ ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ‬+ ‫اﺿﻐﻂ ﻋﻠﻰ ال‬ ·
.‫ ﻟﮭﺎ‬Data File ‫ اﻟﻤﺮاد اﺿﺎﻓﺔ‬Tablespace ‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال‬ ·
.Add Datafile ،‫اﺳﺘﺨﺪم اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة اﺗﻈﮭﺮ ﻟﻚ ﻗﺎﺋﻤﺔ‬ ·
.Create ‫ ادﺧﻞ اﻟﺒﯿﺎﻧﺎت ﻣﺜﻞ اﺳﻢ اﻟﻤﻠﻒ ﺛﻢ اﺿﻐﻂ‬، ‫ﺗﻈﮭﺮ ﻟﻚ ﻧﺎﻓﺬة ﺟﺪﯾﺪة‬ ·

:MOVING DATAFILES

ALTER ‫ أو‬ALTER TABLESPACE ‫ ﻣﻦ ﻣﻮﻗﻊ اﻟﻰ أﺧﺮ ﺑﺎﺳﺘﺨﺪام إﻣﺎ‬Data Files ‫ﯾﻤﻜﻦ ﻧﻘﻞ ال‬
.DATABASE

:Alter Tablespace ‫ﺑﺎﺳﺘﺨﺪام‬

:‫ ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‬Data Files ‫ﯾﻤﻜﻦ ﻧﻘﻞ ﻣﻠﻔﺎت ال‬

ALTER TABLESPACE tablespace's name


RENAME DATAFILE 'filename' , ['filename']
TO 'filename' , ['filename'];

91
‫ﻃﺮﯾﻘﺔ اﻟﺘﻨﻔﯿﺬ‪:‬‬

‫ﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ‪.Offline‬‬ ‫·‬


‫ﻧﺴﺦ ﻣﻠﻒ ال ‪ Data File‬اﻟﻰ اﻟﻤﻮاﻗﻊ اﻟﺠﺪﯾﺪة )اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻛﻤﺎ ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ‪ ،‬اي ﻓﻲ‬ ‫·‬
‫اﻟﻮﯾﻨﺪوز ﯾﺴﺘﺨﺪم اﻟﻔﺄرة ﻣﻊ ‪ COPY‬و ‪.(PASTE‬‬
‫ﺗﻨﻔﯿﺬ اﻟﻘﺎﻋﺪة اﻟﺴﺎﺑﻘﺔ‪.‬‬ ‫·‬
‫ﺗﺤﻮﯾﻞ ال ‪ Tablespace‬اﻟﻰ اﻟﺤﺎﻟﺔ ‪Online‬‬ ‫·‬
‫ﯾﻤﻜﻦ ﺣﺬف ال ‪ Data Files‬اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻮﻗﻊ اﻟﻘﺪﯾﻢ ﻛﻤﺎ ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ‪.‬‬ ‫·‬

‫ﺷﺮوط اﻻﺳﺘﺨﺪام‪:‬‬

‫ﯾﺠﺐ أن ﺗﻜﻮن ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.Offline‬‬ ‫·‬


‫ﯾﺠﺐ ﺗﻮاﺟﺪ ﻣﻠﻔﺎت ال ‪ Data Files‬اﻟﻤﺮاد ﻧﻘﻠﮭﺎ ﻓﻲ اﻟﻤﻮﻗﻊ اﻟﻤﺤﺪد ﻓﻲ اﻟﻘﺎﻋﺪة‪.‬‬ ‫·‬
‫ﯾﺠ ﺐ أن ﺗﺘﻄ ﺎﺑﻖ اﺳ ﻤﺎء ال ‪ Data Files‬اﻟﻤﻨﻘﻮﻟ ﺔ ﻣ ﻊ اﺳ ﻤﺎء ال ‪ Data Files‬اﻟﻤﺨﺰﻧ ﺔ ﻓ ﻲ ال‬ ‫·‬
‫‪.Control File‬‬
‫ﻻ ﯾﻤﻜﻦ ﻧﻘﻞ ‪ Data Files‬اﻟﺘﺎﺑﻌﯿﯿﻦ ﻟﻞ ‪.System Tablespace‬‬ ‫·‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.14‬‬

‫ﺑﻌﺪ ﺗﻨﻔﯿﺬ اﻟﻨﻘﻄﺘﯿﻦ اﻷوﻟﻰ و اﻟﺜﺎﻧﯿﺔ ﻣﻦ ﻃﺮﯾﻘﺔ اﻟﻨﺘﻔﯿﺬ‪:‬‬

‫‪ALTER TABLESPACE app_data RENAME DATAFILE‬‬


‫'‪'…\oradata\db01\app01.dbf' , '…\oradata\db01\app02.dbf‬‬
‫‪TO‬‬
‫;'‪'…\oradata\db02\app01.dbf' , ' …\oradata\db02\app02.dbf‬‬

‫ﺑﺎﺳﺘﺨﺪام ‪:Alter Database‬‬

‫ﯾﻤﻜﻦ ﻧﻘﻞ ﻣﻠﻔﺎت ال ‪ Data Files‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ALTER DATABASE database's name‬‬


‫]'‪RENAME FILE 'filename' , ['filename‬‬
‫;]'‪TO 'filename' , ['filename‬‬

‫ﻃﺮﯾﻘﺔ اﻟﺘﻨﻔﯿﺬ‪:‬‬

‫اﻏﻼق ال ‪.Database‬‬ ‫·‬


‫ﻧﺴﺦ ﻣﻠﻒ ال ‪ Data File‬اﻟﻰ اﻟﻤﻮاﻗﻊ اﻟﺠﺪﯾﺪة )اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻛﻤﺎ ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ‪ ،‬أي ﻓﻲ‬ ‫·‬
‫اﻟﻮﯾﻨﺪوز ﯾﺴﺘﺨﺪم اﻟﻔﺄرة ﻣﻊ ‪ COPY‬و ‪.(PASTE‬‬
‫ﺗﺸﻐﯿﻞ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.Mount‬‬ ‫·‬
‫ﺗﻨﻔﯿﺬ اﻟﻘﺎﻋﺪة اﻟﺴﺎﺑﻘﺔ‪.‬‬ ‫·‬
‫ﺗﺸﻐﯿﻞ ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ‪.Open‬‬ ‫·‬

‫‪92‬‬
‫ﺷﺮوط اﻻﺳﺘﺨﺪام‪:‬‬

‫ﯾﺠﺐ أن ﺗﻜﻮن ال ‪ Database‬ﻓﻲ ﺣﺎﻟﺔ ال ‪.Mount‬‬ ‫·‬


‫ﯾﺠﺐ ﺗﻮاﺟﺪ ﻣﻠﻔﺎت ال ‪ Data Files‬اﻟﻤﺮاد ﻧﻘﻠﮭﺎ ﻓﻲ اﻟﻤﻮﻗﻊ اﻟﻤﺤﺪد ﻓﻲ اﻟﻘﺎﻋﺪة‪.‬‬ ‫·‬
‫ﯾﻤﻜﻦ ﻧﻘﻞ ‪ Data Files‬اﻟﺘﺎﺑﻌﯿﯿﻦ ﻟﻞ ‪.System Tablespace‬‬ ‫·‬

‫ﺗﺬﻛﺮ‪ :‬ھﻲ ﻧﻔﺲ اﻟﻘﺎﻋﺪة اﻟﺘﻲ اﺳﺘﺨﺪﻣﻨﺎھﺎ ﻟﻨﻘﻞ أو ﺗﻐﯿﯿﺮ اﺳﻤﺎء ال ‪.Redo Log Files‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.15‬‬

‫ﺑﻌﺪ ﺗﻨﻔﯿﺬ اﻟﺜﻼث ﻧﻘﺎط اﻷوﻟﻰ ﻣﻦ ﻃﺮﯾﻘﺔ اﻟﻨﺘﻔﯿﺬ‪:‬‬

‫‪ALTER DATABASE app_data RENAME FILE‬‬


‫'‪'…\oradata\db01\app01.dbf‬‬
‫‪TO‬‬
‫;'‪'…\oradata\db02\app01.dbf‬‬

‫‪:TABLESPACE WITH OMF‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Tablespace‬ﺗﺘﺒﻊ ﻧﻈﺎم ال ‪ OMF‬ﺑﺘﺤﺪد اﻟﻌﺎﻣﻞ "‪"Parameter‬‬


‫‪ DB_CREATE_FILE_DEST‬ﻟﻞ ‪ Data Files‬اﻟﺘﺎﺑﻌﯿﯿﻦ ﻟﻞ ‪ Tablespace‬واﺳﺘﺨﺪام ﻗﺎﻋﺪة ال‬
‫‪ CREATE TABLESPACE‬ﻣﻊ ﻋﺪة اﺧﺘﻼﻓﺎت ﻣﺜﻞ ﻋﺪم اﻟﻀﺮورة ﻟﺬﻛﺮ اﺳﻢ ال ‪ Data Files‬ﻓﻲ‬
‫اﻟﻘﺎﻋﺪة‪.‬‬

‫‪CREATE TABLESPACE tablespace's name‬‬


‫; ] ]‪[DATAFILE [filename] [SIZE number [K|M‬‬

‫ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪ Tablespace‬ﺑﻨﻈﺎم ال ‪ OMF‬ﺗﻜﻮن ال ‪:Data Files‬‬

‫ﺣﺠﻤﮭﺎ ال ‪) 100MB Default‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪(5.16‬‬ ‫·‬


‫ﺗﺴﺘﺨﺪم اﻟﻄﺮﯾﻘﺔ اﻷوﺗﻮﻣﺎﺗﯿﻜﯿﺔ ﻟﺰﯾﺎدة ﺣﺠﻤﮭﺎ )‪ (AUTOEXTEND‬ﻣﻊ ﻋﺪم ﺗﺤﺪﯾﺪ أﻗﺼﻰ ﺣﺪ‬ ‫·‬
‫ﻟﻠﺤﺠﻢ )‪.(UNLIMITED‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:5.16‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ Tablespace‬ﺑﻨﻈﺎم ال ‪ OMF‬ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ "‪"Parameter‬‬


‫‪ DB_CREATE_FILE_DEST‬ﺛﻢ ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪CREATE TABLESPACE new_data‬‬

‫‪93‬‬
‫‪:QUERYING INFORMATION‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Tablespaces‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_TABLESPACES‬ﯾﻮﻓﺮ ھﺬا ال ‪ View‬ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﺟﻤﯿﻊ ال ‪ Tablespaces‬ﻓﻲ‬ ‫·‬


‫ال ‪ Database‬ﻣﺜﻞ اﺳﻢ ال ‪ Tablespaces‬وﻧﻮﻋﯿﺔ ال ‪(Temporary, Undo) Tablespace‬‬
‫وﻧﻮﻋﯿﺔ ادارة ال ‪ (Locally, Dictionary) Extents‬وﻏﯿﺮھﺎ‪.‬‬

‫‪ :V$TABLESPACE‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﺳﻢ و رﻗﻢ ال ‪.Tablespaces‬‬ ‫·‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Data Files‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_DATA_FILES‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Data Files‬ﻣﺜﻞ اﺳﻢ ‪ Data Files‬وال‬ ‫·‬


‫‪ Tablespace‬اﻟﺘﻲ ﯾﻨﺘﻤﻲ ﻟﮭﺎ ال ‪ Data File‬وﺣﺠﻢ ال ‪ Data Files‬وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت‪.‬‬

‫‪ :V$DATAFILE‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Data Files‬ﻣﺜﻞ ﺣﺎﻟﺔ ال ‪Data File‬‬ ‫·‬


‫)‪ ، (Online,Offline‬ﺣﺠﻢ ال ‪ Data Files‬وﻏﯿﺮھﺎ‪.‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Temp Files‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫· ‪ :DBA_TEMP_FILES‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Temp Files‬ﻣﺜﻞ اﺳﻢ ‪ Temp Files‬و ال‬


‫‪ Tablespace‬اﻟﺘﻲ ﯾﻨﺘﻤﻲ ﻟﮭﺎ ال ‪ Temp File‬وﺣﺠﻢ ال ‪ Temp Files‬وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت‪.‬‬

‫‪ :V$TEMPFILE‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Temp Files‬ﻣﺜﻞ ﺣﺎﻟﺔ ال ‪Temp File‬‬ ‫·‬


‫)‪ ، (Online,Offline‬ﺣﺠﻢ ال ‪ Temp Files‬وﻏﯿﺮھﺎ‪.‬‬

‫‪94‬‬




SEGMENTS & STORAGE


STRUCTURES

95
SEGMENTS

، ‫ ﻓﻲ اﻟﺘﺮﺗﯿﺐ‬Tablespace ‫ وﺗﺄﺗﻲ ﺑﻌﺪ ال‬Logical Structure ‫ ھﻲ اﺣﺪى ﻣﻜﻮﻧﺎت ال‬Segment ‫ال‬


‫ أن ﺗﺘﻜﻮن ﻣﻦ أﻛﺜﺮ ﻣﻦ‬Segment ‫ ﻛﻤﺎ ﯾﻤﻜﻦ ﻟﻞ‬Segments ‫ أن ﺗﺤﻮي أﻛﺜﺮ ﻣﻦ‬Tablespace ‫ﯾﻤﻜﻦ ﻟﻞ‬
.Extent

:‫ ﻣﺜﻞ‬Segment ‫ﯾﻮﺟﺪ ﻋﺪة أﻧﻮاع ﻣﻦ ال‬

.TABLE SEGMENT ·
.TABLE PARTITION SEGMENT ·
.CLUSTER SEGMENT ·
.INDEX SEGMENT ·
.INDEX-ORGANIZED TABLE SEGMENT ·
.INDEX PARTITION SEGMENT ·
.TEMPORARY SEGMENT ·
.UNDO SEGMENT ·
.LOB SEGMENT ·
.NESTED TABLE SEGMENT ·

.ً‫ﺳﻮف ﯾﺄﺗﻲ ذﻛﺮ ﻛﻞ ﻧﻮع ﻻﺣﻘﺎ‬

96
‫‪DATA BLOCKS‬‬

‫ھﻲ أﺻﻐﺮ وﺣﺪة ﺗﺨﺰﯾﻦ ﻓﻲ اﻷوراﻛﻞ وﯾﺘﻢ ﺗﺤﺪﯾﺪ ﺣﺠﻤﮭﺎ ﺑﻮاﺳﻄﺔ اﻟﻌﺎﻣﻞ "‪"Parameter‬‬
‫‪ DB_BLOCK_SIZE‬ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪ Database‬وﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ اﻟﺤﺠﻢ ﻓﯿﻤﺎ ﺑﻌﺪ‪ .‬ﯾﺘﻜﻮن ال ‪Data‬‬
‫‪ Block‬ﻣﻦ‪:‬‬

‫‪ :BLOCK HEADER‬ﯾﺤﺘﻮي ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Data Block‬وﻧﻮﻋﮫ ) ‪Data, Index,‬‬ ‫·‬
‫‪ .(or Undo‬ﯾﺤﺘﻮي أﯾﻀﺎً ﻋﻠﻰ ال ‪ Table Directory‬اﻟﺬي ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Tables‬اﻟﺘﻲ‬
‫ﻟﮭﺎ ﺑﯿﺎﻧﺎت )‪ ( Data Rows‬ﻓﻲ ال ‪ .Data Block‬وﻣﻦ أﺟﺰاء ال ‪ Block Header‬اﯾﻀﺎً ﻣﺎ‬
‫ﯾﻌﺮف ﺑﺎﺳﻢ ‪ Row Directory‬اﻟﺬي ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﺒﯿﺎﻧﺎت )‪ (Rows‬اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪Block‬‬
‫ﻣﺜﻞ ال ‪ .Row Address‬اﻟﺠﺰء اﻷﺧﯿﺮ ﻣﻦ ال ‪ Block Header‬ھﻲ ال ‪Transaction Slots‬‬
‫اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻋﻨﺪﻣﺎ ﺗﺤﺪث ﺗﻐﯿﺮات ﻓﻲ اﻟﺒﯿﺎﻧﺎت "‪ "Rows‬ﻧﺘﯿﺠﺔ ﻟﻠﻤﮭﻤﺎت "‪"Transactions‬‬
‫اﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫‪ :DATA SPACE‬ھﻲ اﻟﻤﺴﺎﺣﺔ اﻟﺘﻲ ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﺑﮭﺎ "‪."Rows‬‬ ‫·‬

‫‪ :FREE SPACE‬ھﻲ ﻣﺴﺎﺣﺔ ﺧﺎﻟﯿﺔ ﺗﺴﺎﻋﺪ ﻛﻞ ﻣﻦ ال ‪ Block Header‬وال ‪Data Space‬‬ ‫·‬
‫ﻋﻠﻰ اﻟﺘﻮﺳﻊ ﻓﻲ اﻟﺤﺠﻢ اذا ﻟﺰم اﻷﻣﺮ‪ .‬ﻓﻲ ﺣﺎل ﺣﺪوث ﻋﻤﻠﯿﺎت ﻛﺜﯿﺮة ﺗﺴﺒﺐ أﺧﺬ ﻣﺴﺎﺣﺔ ﻣﻨﮭﺎ ﺛﻢ اﻋﺎدة‬
‫ﻣﺴﺎﺣﺔ ﻟﮭﺎ ﺑﺸﻜﻞ ﻣﺘﻜﺮر ﯾﺤﺪث ‪ Fragmentation‬وﯾﻘﻮم اﻷوراﻛﻞ ﺑﻌﻤﻠﯿﺔ ‪ Coalesce‬ﻟﮭﺎ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬ﻋﻤﻠﯿﺔ ال ‪ Coalescing‬ﻣﻦ درس ال ‪.Locally Managed Tablespace‬‬

‫ﺗﺬﻛﺮ‪ :2‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ رﻗﻢ ال ‪ Log Sequence Number‬ورﻗﻢ ال ‪ Checkpoint‬ﻓﻲ ال ‪Data Files‬‬
‫‪.Header‬‬

‫اﻟﺮﺳﻢ ‪6.1‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اﻷﺳﮭﻢ ﻓﻲ اﻟﺮﺳﻢ ‪ 6.1‬ﺗﺸﯿﺮ اﻟﻰ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺗﻜﺒﺮ ﺑﮭﺎ ﻣﺴﺎﺣﺔ ﻛﻞ ﻣﻦ ال ‪ Data Space‬وال‬
‫‪ Block Header‬وھﻲ ﻃﺮﯾﻘﺔ ﻋﻜﺴﯿﺔ ‪ ،‬ﻣﻦ أﺳﻔﻞ اﻟﻰ أﻋﻠﻰ وﻣﻦ أﻋﻠﻰ اﻟﻰ أﺳﻔﻞ ﻋﻠﻰ اﻟﺘﻮاﻟﻲ‪.‬‬

‫‪97‬‬
‫‪:BLOCK STORAGE PARAMETERS‬‬

‫ﻋﻨﺪﻣﺎ ﯾﺘﻢ ﺗﻜﻮﯾﻦ ‪ Table‬أو ﻋﻨﺼﺮ أﺧﺮ "‪ "Object‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻋﻮاﻣﻞ ﺗﺘﺤﻜﻢ ﻓﻲ ال ‪ Data Blocks‬اﻟﺘﻲ‬
‫ﺗﻨﺘﻤﻲ ﻟﮭﺬا اﻟﻌﻨﺼﺮ‪ .‬ﺗﺤﺪﯾﺪ ھﺬه اﻟﻌﻮاﻣﻞ ﻣﮭﻢ ﺟﺪاً ‪ ،‬ﻷﻧﮭﺎ ﺗﻌﻤﻞ ﻋﻠﻰ ﺗﻮﻓﯿﺮ ﻣﺴﺎﺣﺔ ﻛﺒﯿﺮة وﺗﺤﺴﯿﻦ اﻻداراة‬
‫واﻟﻌﻤﻞ‪.‬‬

‫‪ :PCTFREE‬ﻋﻨﺪ ﺗﺤﺪﯾﺪھﺎ ‪ ،‬ﯾﺘﻢ ﺣﺠﺰ ﻣﺴﺎﺣﺔ ﻣﻦ ﺣﺠﻢ ال ‪ Block‬ﺗﺨﺼﺺ ﻟﻠﺰﯾﺎدة اﻟﻤﺘﻮﻗﻌﺔ ﻓﻲ‬ ‫·‬
‫اﻟﺒﯿﺎﻧﺎت "‪ "Data Rows‬اﻟﻨﺎﻧﺘﺠﺔ ﻣﻦ ﺗﻐﯿﯿﺮ "‪ "Update‬اﻟﺒﯿﺎﻧﺎت "‪ "Data Rows‬ﻓﻲ ال‬
‫‪ ،Block‬اﻟﺤﺠﻢ ال ‪ Default‬ﻟﮭﺎ ھﻮ ‪.10%‬‬

‫‪ :PCTUSED‬ﺗﻤﺜﻞ اﻟﺤﺠﻢ اﻷدﻧﻲ ﻟﻠﺒﯿﺎﻧﺎت "‪ "Data Rows‬ﻓﻲ ال ‪ Block‬اﻟﺬي اذا ﻗﻞ ﺣﺠﻢ‬ ‫·‬
‫اﻟﺒﯿﺎﻧﺎت "‪ "Data Rows‬اﻟﻤﺨﺰﻧﺔ داﺧﻠﮫ ﻋﻦ ﺣﺠﻢ ال ‪ ، PCTUSED‬ﯾﺘﻢ ﺗﺤﻮﯾﻞ ال ‪ Block‬اﻟﻰ‬
‫ﻗﺎﺋﻤﺔ ال ‪ ،Freelist‬اﻟﺤﺠﻢ ال ‪ Default‬ھﻮ ‪.40%‬‬

‫‪ :FREELIST‬ﯾﻤﻜﻦ ﻟﻞ ‪ Segment‬اﻟﻮاﺣﺪة أن ﯾﻜﻮن ﻟﮭﺎ أﻛﺜﺮ ﻣﻦ ‪ Freelist‬واﺣﺪة ﺑﺘﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ‬ ‫·‬


‫‪ ،FREELISTS‬ال ‪ Default‬ھﻮ ﻟﻜﻞ ‪ Segment‬واﺣﺪة ‪ ،‬ﻗﺎﺋﻤﺔ ‪ Freelist‬واﺣﺪة‪.‬‬

‫‪ :INITRANS‬ﻋﻨﺪ ﺗﺤﺪﯾﺪھﺎ ﯾﺘﻢ ﺣﺠﺰ ﻣﺴﺎﺣﺔ ﻟﻞ "‪ "Transaction Slots‬ﻓﻲ ال ‪Block‬‬ ‫·‬
‫‪ Header‬ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﺣﻮل اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﺗﺠﺮي‪ .‬ﻓﮭﻲ ﺗﺤﺪد اﻟﺤﺪ اﻷدﻧﻰ ﻣﻦ اﻟﻤﮭﻤﺎت‬
‫"‪ "Transactions‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺠﺮى ﻋﻠﻰ ال ‪ Block‬ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ .‬اذا ﺗﻢ ﺗﺤﺪﯾﺪھﺎ ب ‪، 3‬‬
‫ﻓﺬﻟﻚ ﯾﻌﻨﻲ أﻧﮫ ﯾﺨﺼﺺ ﺛﻼث ‪ Transaction Slots‬ﺑﺤﯿﺚ ﯾﻤﻜﻦ أﺟﺮاء ﺛﻼث ﻣﮭﻤﺎت ﻋﻠﻰ اﻷﻗﻞ ﻋﻠﻰ‬
‫ال ‪ Block‬ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ‪ ،‬وﻋﻨﺪ اﻟﻀﺮورة ﯾﻤﻜﻦ ﺗﺨﺼﯿﺺ ﻣﺴﺎﺣﺔ ﻣﻦ ال ‪ Free Space‬ﻓﻲ ال‬
‫‪ Block‬ﻹﺿﺎﻓﺔ ‪ Transaction Slots‬أﺧﺮى‪ ،‬ال ‪ Default‬ھﻮ ‪.1‬‬

‫‪ :MAXTRANS‬ﻋﻨﺪ ﺗﺤﺪﯾﺪھﺎ ﯾﺘﻢ ﺣﺠﺰ ﻣﺴﺎﺣﺔ ﻟﻞ "‪ "Transaction Slots‬ﻓﻲ ال ‪Block‬‬ ‫·‬
‫‪ Header‬ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﺣﻮل اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﺗﺠﺮي‪ .‬ﻓﮭﻲ ﺗﺤﺪد اﻟﺤﺪ اﻷﻋﻠﻰ ﻣﻦ اﻟﻤﮭﻤﺎت‬
‫"‪ "Transactions‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺠﺮى ﻋﻠﻰ ال ‪ Block‬ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ .‬اذا ﺗﻢ ﺗﺤﺪﯾﺪھﺎ ب ‪، 200‬‬
‫ﻓﺬﻟﻚ ﯾﻌﻨﻲ أﻧﮫ ﯾﻤﻜﻦ أﺟﺮاء ‪ 200‬ﻣﮭﻤﺔ ﻋﻠﻰ اﻷﻛﺜﺮ ﻋﻠﻰ ال ‪ Block‬ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ Default ،‬ھﻮ‬
‫‪.255‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻘﺼﺪ ﺑﺎل ‪ FreeList‬ﺑﺄﻧﮭﺎ ﻗﺎﺋﻤﺔ "‪ "List‬ﺗﺤﺪد ال ‪ Blocks‬اﻟﺘﻲ ﯾﻮﺟﺪ ﺑﮭﺎ ﻣﺴﺎﺣﺔ ﺧﺎﻟﯿﺔ ﻗﺎدرة‬
‫ﻋﻠﻰ اﺳﺘﯿﻌﺎب ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة أو ال ‪.Free Blocks‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻓﻲ ﺣﺎل ﺗﻢ ﺗﺤﺪﯾﺪ ال ‪ PCTUSED‬ﺑﻨﺴﺒﺔ ‪ 30%‬وال ‪ PCTFREE‬ﺑﻨﺴﺒﺔ ‪:20%‬‬

‫‪ -1‬ﯾﺘﻢ ادﺧﺎل ﺑﯿﺎﻧﺎت "‪ "Rows‬اﻟﻰ ال ‪ Block‬اﻟﻰ أن ﺗﺼﻞ ﻧﺴﺒﺔ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺪﺧﻠﺔ اﻟﻰ ‪ 80%‬أو أﻗﻞ ﺑﺤﯿﺚ‬
‫ﯾﺠﺐ أن ﯾﻈﻞ ﺣﺠﻢ ﻣﻦ ال ‪ Block‬ﻓﺎرغ وھﻮ ﻧﺴﺒﺔ ال ‪ PCTFREE‬وھﻲ ﻛﻤﺎ ذﻛﺮﻧﺎ ‪ ،20%‬وھﻜﺬا ﯾﻈﻞ ﺣﺠﻢ‬
‫ﻓﺎرغ ﻣﻦ ال ‪ Block‬ﻓﻲ ﺣﺎل ﺗﻐﯿﺮ ﺑﯿﺎﻧﺎت ‪ Rows‬اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Block‬ﻣﺜﻞ ﺗﺤﻮﯾﻞ ﻗﯿﻤﺔ أﺣﺪ ال‬
‫‪ COLUMN‬ﻣﻦ ﺣﺎﻟﺔ ‪ NULL‬اﻟﻰ ﻗﯿﻤﺔ ﻓﻌﻠﯿﺔ‪ .‬ھﺬه اﻟﻤﺴﺎﺣﺔ اﻟﻔﺎرﻏﺔ ﻣﺨﺼﺼﺔ ﻟﻞ ‪ Rows‬اﻟﻤﻮﺟﻮدة ﻓﻲ‬
‫ﺣﺎل ﺗﻐﯿﺮ ﻗﯿﻤﮭﺎ وﻻ ﯾﻤﻜﻦ اﺿﺎﻓﺔ ‪ Rows‬ﺟﺪﯾﺪة ﻟﺘﺤﻞ ﻓﻲ اﻟﺤﺠﻢ اﻟﺨﺎﻟﻲ اﻟﻨﺎﺗﺞ ﻣﻦ ﺗﺤﺪﯾﺪ ال ‪.PCTFREE‬‬

‫‪ -2‬ﻓﻲ ﺣﺎل اﻧﺨﻔﺎض ﺑﯿﺎﻧﺎت ال ‪ Rows‬اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Block‬أو ﺗﻢ ﺣﺬف ﻋﺪد ﻣﻦ ال ‪ ، Rows‬ﻻ ﯾﺴﻤﺢ‬
‫ﺑﺎﺿﺎﻓﺔ ‪ Rows‬ﺟﺪﯾﺪة ﻓﻲ ال ‪ Block‬اذا ﻟﻢ ﺗﻨﺨﻔﺾ ﺑﯿﺎﻧﺎت ال ‪ Rows‬ﻓﻲ ال ‪ Block‬ﻋﻦ اﻟﺤﺪ اﻟﻤﺤﺪد ب‬
‫‪ PCTUSED‬وھﻮ ‪ .30%‬ﻓﻲ ﺣﺎل اﻧﺨﻔﺎض ﺣﺠﻢ ﺑﯿﺎﻧﺎت ال ‪ Rows‬ﻋﻦ ‪ ،30%‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ أن ال ‪Block‬‬
‫ﺟﺎھﺰ ﻻﺳﺘﻘﺒﺎل ‪ Rows‬ﺟﺪﯾﺪة )‪.(Freelist‬‬

‫‪98‬‬
‫‪MANAGING DATA BLOCKS‬‬

‫ﯾﻤﻜﻦ إدارة ال ‪ Data Blocks‬ﺑﻄﺮﯾﻘﺘﯿﻦ اﺣﺪاھﻤﺎ ﯾﺪوﯾﺔ واﻷﺧﺮى أوﺗﻮﻣﺎﺗﯿﻜﯿﺔ وھﻤﺎ‪:‬‬

‫‪:MANUAL DATA BLOCK MANAGEMENT‬‬

‫ﯾﺘﻢ اﺳﺘﺨﺪام ‪ Block Storage Parameters‬ﻓﻲ ﺗﺤﺪﯾﺪ ﺣﺠﻢ ال ‪.Blocks‬‬

‫‪:AUTOMATIC SPACE MANAGEMENT‬‬

‫ﯾﺘﻢ اﺳﺘﺨﺪام ‪ Bitmap‬ﻋﻮﺿﺎً ﻋﻦ ‪ Freelist‬ﻟﺘﺤﺪﯾﺪ ال ‪ Used Blocks‬وال ‪ .Free Blocks‬ﯾﺘﻢ ﺣﻔﻆ ال‬
‫‪ Bitmap‬ﻓﻲ ‪ Blocks‬ﻣﺨﺘﻠﻔﺔ ﺗﺴﻤﻰ )‪ .Bitmapped Blocks (BMBs‬ﻋﻨﺪﻣﺎ ﯾﺘﻢ ادﺧﺎل ﺑﯿﺎﻧﺎت‬
‫"‪ "Rows‬ﺟﺪﯾﺪة ‪ ،‬ﯾﺘﻢ اﻟﺒﺤﺚ ﻓﻲ ال ‪ Bitmap‬ﻋﻦ ‪ Block‬ﯾﺤﺘﻮي ﻣﺴﺎﺣﺔ ﺧﺎﻟﯿﺔ ﻣﻨﺎﺳﺒﺔ ﻟﺤﺠﻢ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﺠﺪﯾﺪة اﻟﻤﺪﺧﻠﺔ‪ ،‬وﻋﻨﺪ ﺣﺪوث أي ﺗﻌﺪﯾﻼت ﻋﻠﻰ ال ‪) Blocks‬ﻣﺜﻞ زﯾﺎدة اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﻟﯿﺔ ﻋﻦ اﻟﻤﺴﺎﺣﺔ‬
‫اﻟﻤﺸﻐﻮﻟﺔ( ﯾﺘﻢ ﺗﻌﺪﯾﻞ ال ‪ Bitmap‬ﻟﺘﻮاﻓﻖ اﻟﺘﻐﯿﺮات اﻟﺘﻲ ﻃﺮأت‪.‬‬
‫ﻓﻮاﺋﺪ اﺳﺘﺨﺪام ھﺬه اﻟﻄﺮﯾﻘﺔ ﻋﺪﯾﺪة ﻣﻨﮭﺎ ﺳﮭﻮﻟﺔ ادارة ال ‪ Blocks‬اذ ﯾﺘﻢ ﺗﺤﺪﯾﺪ ال ‪ PCTUSED‬و ال‬
‫‪ FREELIST‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ ‪ ،‬ﺗﺨﺼﯿﺺ اﻟﻤﺴﺎﺣﺔ ﻟﻠﻌﻨﺎﺻﺮ "‪ "Objects‬ﺑﺸﻜﻞ أﻓﻀﻞ ‪ ،‬وأداء أﻓﻀﻞ‬
‫ﺧﻼل ﻋﻤﻠﯿﺎت ال ‪ INSERT‬اﻟﻤﺘﺰاﻣﻨﺔ‪.‬‬

‫ﻧﻘﺎط ﻣﮭﻤﺔ‪:‬‬

‫‪ -1‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ھﺬه اﻟﻄﺮﯾﻘﺔ ﻣﻊ ‪ Locally Managed Tablespaces‬ﻓﻘﻂ‪.‬‬

‫‪ -2‬ﺗﻄﺒﻖ اﻟﻄﺮﯾﻘﺔ ﻋﻠﻰ ﻣﺴﺘﻮى ال ‪ ،Tablespace‬أي ﯾﺠﺐ أن ﺗﻜﻮن ﺟﻤﯿﻊ ال ‪ Segments‬داﺧﻞ ال‬
‫‪ Tablespace‬ﺗﻌﻤﻞ ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ‪.‬‬

‫‪ -3‬ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ اﻟﻄﺮﯾﻘﺔ اﻟﻰ اﻟﻄﺮﯾﻘﺔ اﻟﯿﺪوﯾﺔ ﺑﻌﺪ أن ﺗﺴﺘﺨﺪم‪.‬‬

‫‪ -4‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ھﺬه اﻟﻄﺮﯾﻘﺔ ﺑﺎﺿﺎﻓﺔ ﺟﻤﻠﺔ ‪SEGMENT SPACE MANAGEMENT AUTO‬‬
‫اﻟﻰ ﺟﻤﻠﺔ ‪.CREATE TABLESPACE‬‬

‫‪ -5‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻄﺮﯾﻘﺔ ﻣﻊ ‪ Tablespace‬ﺗﺤﻮي أو ﻗﺪ ﺗﺤﻮي ﻋﻠﻰ ‪.LOBs‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة ﺑﻮاﺳﻄﺔ ‪ LOBs‬ﻣﺜﻞ اﻟﺼﻮر واﻟﻔﯿﺪﯾﻮ وﻏﯿﺮھﺎ وﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻟﮭﺎ ﻓﻲ‬
‫ﻓﺼﻞ ﻻﺣﻖ‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:6.1‬‬

‫‪CREATE TABLESPACE APP_DATA‬‬


‫'‪DATAFILE '…\oradata\db05\appdata04.dbf‬‬
‫‪EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K‬‬
‫;‪SEGMENT SPACE MANAGEMENT AUTO‬‬

‫‪99‬‬
‫‪STORAGE INFORMATION‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Segments‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_SEGMENTS‬ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﺳﻢ ال ‪ ، Segment‬ال‬ ‫·‬


‫‪ Tablespace‬اﻟﺘﻲ ﺗﺤﻮي ال ‪ ، Segment‬ﻋﺪد ال ‪ Extents‬ﻓﻲ ال ‪ Segment‬وﻋﺪد ال ‪Data‬‬
‫‪ ، Blocks‬وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت‪.‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Used Extents‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_EXTENTS‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻣﺜﻞ رﻗﻢ ال ‪ Extent‬ورﻗﻢ ال ‪ Block‬اﻟﺘﻲ ﯾﻨﺘﻤﻲ ﻟﮭﺎ وﻋﺪد‬ ‫·‬
‫ال ‪ Blocks‬ﺿﻤﻦ ال ‪ Extent‬وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت‪.‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Free Extents‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_FREE_SPACE‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻣﺜﻞ اﺳﻢ ال ‪ Tablespace‬اﻟﺘﻲ ﺗﺤﻮي ال ‪Extent‬‬ ‫·‬


‫وال ‪Blocks‬اﻟﺘﺎﺑﻌﺔ ﻟﮭﺎ وﻏﯿﺮھﺎ‪.‬‬

‫‪100‬‬
‫‪UNDO SEGMENT‬‬

‫ﺗﺴﺘﺨﺪم ال ‪ Undo Segment‬ﻓﻲ ﺣﻔﻆ ﻧﺴﺨﺔ ﻋﻦ اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ ﺗﻌﺪﯾﻠﮭﺎ ﺑﻮاﺳﻄﺔ اﻟﻤﮭﻤﺎت‬
‫"‪ "Transactions‬اﻟﺘﻲ أﺟﺮﯾﺖ ﻋﻠﯿﮭﺎ‪ ،‬ﻣﺜﻼً ﻟﻜﻲ ﯾﺘﻤﻜﻦ اﻷوراﻛﻞ ﻣﻦ اﺳﺘﻌﺎدة اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ ﻓﻲ ﺣﺎل‬
‫ﻃﻠﺐ اﻟﻤﺴﺘﺨﺪم ‪ Rollback‬ﻋﻮﺿﺎً ﻋﻦ ‪ . Commit‬ﯾﺘﻢ اﺳﺘﺨﺪام ال ‪ Undo Segment Header‬ﻟﺘﺨﺰﯾﻦ‬
‫ﺑﯿﺎﻧﺎت ﺣﻮل اﻟﻤﮭﻤﺎت "‪ "Transactions‬اﻟﺤﺎﻟﯿﺔ اﻟﺘﻲ ﺗﺴﺘﺨﺪم ال ‪.Undo Segment‬‬

‫ﻣﻦ ﻓﻮاﺋﺪ اﺳﺘﺨﺪام ال ‪:Undo Segment‬‬

‫ﻟﻜﻲ ﯾﺘﻤﻜﻦ اﻷوراﻛﻞ ﻣﻦ اﺳﺘﻌﺎدة اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ ﻓﻲ ﺣﺎل ﻃﻠﺐ اﻟﻤﺴﺘﺨﺪم ‪ Rollback‬ﻋﻮﺿﺎً ﻋﻦ‬ ‫·‬
‫‪.Commit‬‬

‫ﻟﻜﻲ ﯾﺘﻤﻜﻦ اﻷوراﻛﻞ ﻣﻦ اﺳﺘﻌﺎدة اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ ﻓﻲ ﺣﺎل ﺗﻌﻄﻞ اﻟﻤﮭﻤﺔ أو ﺣﺪوث ﺧﻠﻞ ﻃﺎرئ ﻟﻞ‬ ‫·‬
‫‪ Instance‬ﯾﺘﻄﻠﺐ ﻋﻤﻠﯿﺔ ال ‪.Recovery‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻤﺎ ﯾﻌﺮف ﺑﺎﺳﻢ ‪.Read Consistency‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺗﺴﺘﺨﺪم اﻟﻤﮭﻤﺎت اﻟﻤﺮﺗﺒﻄﺔ ﺑﺒﻌﻀﮭﺎ "‪ Undo Segment ، "Serial Transaction‬واﺣﺪة ﻓﻘﻂ‬
‫وﯾﻤﻜﻦ ﻟﻠﻤﮭﻤﺎت اﻟﻤﺘﺰاﻣﻨﺔ اﺳﺘﺨﺪام ذات ال ‪.Undo Segment‬‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Undo Segment‬ﻓﻲ‪:‬‬


‫· ‪.Initialization Parameter File‬‬
‫· ‪.Alert Log File‬‬
‫· ‪.Control File‬‬

‫ﺗﺬﻛﺮ‪ :2‬ﺟﺎء ذﻛﺮ ال ‪ Undo Segment‬ﻓﻲ درس‪:‬‬


‫· ‪.Undo Tablespace‬‬
‫· ‪.Offline or Online‬‬

‫)‪:System Change Number (SCN‬‬

‫ھﻮ رﻗﻢ ﻣﻤﯿﺰ "‪ "Unique Number‬ﯾﺘﻢ ﺗﻜﻮﯾﻨﮫ ﻋﻨﺪ ﺣﻮث أﻣﺮ ‪ ،Commit‬وﯾﺴﺎﻋﺪ ﻓﻲ ﻋﻤﻠﯿﺔ ال ‪Read‬‬
‫‪ Consistency‬وﻋﻤﻠﯿﺔ ال ‪ .Recovery‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ال ‪ SCN‬ﻓﻲ ال ‪Redo Log ، Control Files‬‬
‫‪ ، Files‬و ‪.Block Headers‬‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﻘﻮم ال ‪ Checkpoint‬ﺑﻌﻤﻞ ﺗﺠﺪﯾﺪ ﻟﺮﻗﻢ ال ‪ SCN‬ﻓﻲ ال ‪.Control Files‬‬

‫‪:Read Consistency‬‬

‫ھﻲ إﻣﻜﺎﻧﯿﺔ رؤﯾﺔ أﺣﺪ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ ﺑﺎﻟﺮﻏﻢ ﻣﻦ ﻗﯿﺎم ﻣﺴﺘﺨﺪم أﺧﺮ ﺑﺘﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت‬
‫ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪ .‬ﻟﺤﺪوث ال ‪ Read Consistency‬ﯾﺠﺐ أن ﯾﻜﻮن اﻟﻤﺴﺘﺨﺪم اﻷول ﻗﺪ ﻃﻠﺐ اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ أن‬
‫ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ﺑﺘﺄﻛﯿﺪ اﻟﺘﻌﺪﯾﻼت ﻋﻠﻰ اﻟﺘﻐﯿﺮات ﺑﻮاﺳﻄﺔ ‪ ، Commit‬ﻋﻨﺪﺋﺬ ﯾﺤﻀﺮ اﻷوراﻛﻞ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤ ﻄﻠﻮﺑﺔ ﻟﻠﻤﺴﺘﺨﺪم اﻷول ﻣﻦ ال ‪.Undo Segment‬‬

‫‪101‬‬
‫ﻣﺜﺎل‪:‬‬

‫‪ -1‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻷول ﺑﻌﻤﻞ ﻣﮭﻤﺎت ﻋﻠﻰ ﺑﯿﺎﻧﺎت ال ‪ Employees Tables‬ﺗﺆدي اﻟﻰ ﺗﻐﯿﺮ اﻟﺒﯿﺎﻧﺎت ﻣﺜﻞ‬
‫ﻋﻤﻠﯿﺔ ‪.UPDATE‬‬
‫‪ -2‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺘﺨﺰﯾﻦ ﻧﺴﺨﺔ ﻟﺒﯿﺎﻧﺎت ال ‪ Employees Table‬ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ ﻓﻲ ال ‪.Undo Segment‬‬
‫‪ -3‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ﺑﻄﻠﺐ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻋﺒﺮ اﺳﺘﺨﺪام ‪ Query‬ﻣﺜﻞ ‪Select * From‬‬
‫‪ ،Employees‬وﻋﻨﺪھﺎ ﯾﺘﻢ ﺗﺤﺪﯾﺪ رﻗﻢ ال ‪ SCN‬اﻟﺬي ﯾﺴﺘﺨﺪم ﻟﻀﻤﺎن ﻋﺪم ﻋﺮض اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﺤﺪث ﻟﮭﺎ‬
‫ﺗﻐﯿﯿﺮ وﻟﻢ ﯾﺤﺪث ﻟﮭﺎ ‪.Commit‬‬
‫‪ -4‬اﻟﺒﯿﺎﻧﺎت اﻟﻤﻌﺮوﺿﺔ ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ھﻲ اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ اﻟﺘﻌﺪﯾﻼت اﻟﺘﻲ أﺟﺮاھﺎ وﯾﺠﺮﯾﮭﺎ اﻟﻤﺴﺘﺨﺪم اﻷول‬
‫و ھﻲ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪.Undo Segment‬‬
‫‪ -5‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻷول ﺑﺎﻧﮭﺎء و ﺗﺄﻛﯿﺪ اﻟﻤﮭﻤﺎت اﻟﺘﻲ أﺟﺮاھﺎ ﺑﺎﺳﺘﺨﺪام ‪ ، Commit‬ﻓﯿﺘﻢ ﺗﺠﺪﯾﺪ ال ‪.SCN‬‬
‫‪ -6‬ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ﺑﻌﺪ ﻗﻠﯿﻞ ﺑﻄﻠﺐ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﺮة أﺧﺮى ‪.Select * From Employees‬‬
‫‪ -7‬اﻟﺒﯿﺎﻧﺎت اﻟﻤﻌﺮوﺿﺔ ھﺬه اﻟﻤﺮة ھﻲ اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ اﻟﺘﻌﺪﯾﻼت اﻟﺘﻲ أﺟﺮاھﺎ اﻟﻤﺴﺘﺨﺪم اﻷول ‪.‬‬

‫‪:Snapshot Too Old Error‬‬

‫ﻋﻨﺪﻣﺎ ﻻ ﯾﺴﺘﻄﯿﻊ اﻷوراﻛﻞ ﺗﻮﻓﯿﺮ ﺧﺪﻣﺔ ال ‪ Read Consistency‬ﯾﻈﮭﺮ ھﺬا اﻟﺨﻄﺄ ﻟﻠﻤﺴﺘﺨﺪم‪ .‬ﯾﻤﻜﻦ أن ﯾﻈﮭﺮ‬
‫اﻟﺨﻄﺄ ﻋﻨﺪﻣﺎ ﯾﻄﻠﺐ اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ‪ Query‬ﯾﻜﻮن اﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﺘﺨﺮﺟﺔ ﻃﻮﯾﻠﺔ ﺟﺪاً‪ ،‬ﺑﺤﯿﺚ ﻗﺒﻞ أن ﯾﻨﺘﮭﻲ ال‬
‫‪ Query‬ﻣﻦ اﻟﻌﻤﻞ ﯾﺤﺪث أﻣﺮان‪ ،‬اﻷﻣﺮ اﻷول ھﻮ أن اﻟﻤﺴﺘﺨﺪم اﻷول ﻃﻠﺐ ‪ Commit‬ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت ‪ ،‬واﻷﻣﺮ‬
‫اﻟﺜﺎﻧﻲ أﻧﮫ ﺗﻢ اﺳﺘﺨﺪام ذات ال ‪ Undo Segment‬ﻣﻦ ﻗﺒﻞ ﻣﮭﻤﺔ أﺧﺮى ﺑﺤﯿﺚ ﺗﻢ ﺗﻐﯿﯿﺮ اﻟﺒﯿﺎﻧﺎت‬
‫"‪ "Overwritten‬ﻓﻲ ال ‪.Undo Segment‬‬
‫ﺑﺎﺳﺘﺨﺪام اﻟﻌﺎﻣﻞ "‪ UNDO_RETENTION "Parameter‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻛﻢ ﻣﻦ اﻟﻮﻗﺖ ﯾﺴﻤﺢ ﻟﻠﺒﯿﺎﻧﺎت‬
‫ﺑﺎﻟﺒﻘﺎء ﻓﻲ ال ‪ Undo Table pace‬وﺑﺬﻟﻚ ﺗﻮﻓﯿﺮ ﺧﺪﻣﺔ ال ‪ .Read Consistency‬اذا ﺗﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ‬
‫ب ‪ ، 900‬ﻓﮭﺬا ﯾﻌﻨﻲ أﻧﮫ ﯾﺴﻤﺢ ﻟﻠﺒﯿﺎﻧﺎت اﻟﺒﻘﺎء ﻟﻤﺪة ‪ 15‬دﻗﯿﻘﺔ‪ .‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ ﻓﻲ ال ‪Initialization‬‬
‫‪ ، Parameter File‬وﯾﻤﻜﻦ ﺗﻌﺪﯾﻠﮫ داﯾﻨﺎﻣﯿﻜﯿﺎً ﺑﻮاﺳﻄﺔ ‪.ALTER SYSTEM‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬اذا ﻛﺎن ﺣﺠﻢ ال ‪ Undo Tablespace‬ﺻﻐﯿﺮ‪ ،‬ﯾﻤﻜﻦ أن ﻻ ﺗﻈﻞ اﻟﺒﯿﺎﻧﺎت ﻟﻠﻮﻗﺖ اﻟﻤﺤﺪد ﺑﺎﻟﻌﺎﻣﻞ‬
‫‪ ، UNDO_RETENTION‬ﺣﯿﺚ ﯾﺘﻢ اﺳﺘﺨﺪام ﻋﻤﻠﯿﺎت ﺣﺴﺎﺑﯿﺔ ﻟﺘﺒﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ‪.‬‬

‫‪:UNDO SEGMENT TYPES‬‬

‫‪ :SYSTEM UNDO SEGMENT‬ﺗﺘﻜﻮن ﺿﻤﻦ ال ‪ System Tablespace‬ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال‬ ‫·‬


‫‪ Database‬ﻟﺘﻮﻓﺮ ﺧﺪﻣﺎﺗﮭﺎ ﻟﻠﻌﻨﺎﺻﺮ "‪ "Objects‬اﻟﻤﻮﺟﻮدة ﺿﻤﻦ ال ‪.System Tablespace‬‬

‫‪ :NON-SYSTEM UNDO SEGMENTS‬ﻋﻨﺪﻣﺎ ﯾﻮﺟﺪ ‪ Tablespaces‬ﻓﻲ ال ‪Database‬‬ ‫·‬


‫ﻏﯿﺮ ال ‪ ، System Tablespace‬ﯾﺠﺐ ﺗﻮﻓﺮ ﻋﻠﻰ اﻷﻗﻞ واﺣﺪة ﻣﻦ ‪Non-System Undo‬‬
‫‪ Segment‬ﻓﻲ ال ‪ Database‬ﻟﺘﺨﺪم ﺑﺎﻗﻲ ال ‪.Tablespaces‬‬

‫‪ :DEFERRED UNDO SEGMENTS‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮭﺎ ﻋﻨﺪ وﺿﻊ ال ‪ Tablespace‬ﻓﻲ ﺣﺎﻟﺔ‬ ‫·‬


‫‪ ، Offline‬اذ ﯾﻤﻜﻦ أن ﺗﺴﺘﺨﺪم ﻓﻲ ﻋﻤﻞ ‪ Rollback‬ﻟﻠﻤﮭﻤﺎت "‪ "Transactions‬اﻟﺘﻲ ﻗﺪ ﺗﺤﺪث‬
‫ﻋﻨﺪ ﺗﺤﻮﯾﻞ ال ‪ Tablespace‬اﻟﻰ ﺣﺎﻟﺔ ال ‪.Online‬‬

‫‪102‬‬
‫‪MANAGING UNDO DATA‬‬

‫ﯾﻮﺟﺪ ﻧﻮﻋﺎن ﻹدارة ال ‪ Undo Data‬ﻓﻲ اﻷوراﻛﻞ ھﻤﺎ‪:‬‬

‫‪.AUTOMATIC UNDO MANAGEMENT‬‬ ‫·‬


‫‪.MANUAL UNDO MANAGEMENT‬‬ ‫·‬

‫ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻓﻘﻂ اﻟﻰ اﻟﻨﻮع اﻷول ﻓﻲ اﻟﻜﺘﺎب‪.‬‬

‫‪:AUTOMATIC UNDO MANAGEMENT‬‬

‫ﯾﺘﻢ ﺗﺨﺼﯿﺺ ‪ Undo Tablespace‬واﺣﺪة ذات ﻣﺴﺎﺣﺔ ﻛﺒﯿﺮة ﻟﻜﻞ ‪ .Instance‬ﯾﺘﻢ اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﻮﺟﻮدة ﻓﻲ ال ‪ Undo Tablespace‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ ﻣﻦ ﻗﺒﻞ ال ‪ .Oracle Server‬ﯾﺘﻢ ﺗﺴﻤﯿﺔ أﺳﻤﺎء‬
‫‪ Undo Segment‬ﻃﺒﻘﺎً ﻟﻠﻄﺮﯾﻘﺔ اﻟﺘﺎﻟﯿﺔ ‪ _SYSSMUn$‬ﻣﺜﻞ ‪._SYSSMU1$‬‬
‫ﻟﻜﻲ ﺗﻌﻤﻞ ﻃﺮﯾﻘﺔ ال ‪ Automatic Undo Management‬ﯾﺠﺐ ﺗﻮﻓﺮ ‪ Undo Tablespace‬واﺣﺪة ﻓﻲ‬
‫ﺣﺎﻟﺔ ‪ .Active‬ﺑﺎﻟﺮﻏﻢ أﻧﮫ ﯾﻤﻜﻦ أن ﺗﺘﻮاﺟﺪ أﻛﺜﺮ ﻣﻦ ‪ Undo Tablespace‬ﻓﻲ ال ‪ Database‬وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ‬
‫أن ﯾﻜﻮن أﻛﺜﺮ ﻣﻦ واﺣﺪة ﻓﻲ ﺣﺎﻟﺔ ‪.Active‬‬
‫ﻻﺳﺘﺨﺪام ھﺬه اﻟﻄﺮﯾﻘﺔ ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ "‪ UNDO_MANAGEMENT "Parameter‬ﺑﺎﻟﻘﯿﻤﺔ‬
‫‪ AUTO‬ﻓﻲ ال ‪ .Initialization Parameter File‬ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ﺑﻄﺮﯾﻘﺔ داﯾﻨﺎﻣﯿﻜﯿﺔ ﺑﻌﺪ‬
‫ﺗﺸﻐﯿﻞ ال ‪،Database‬اﻟﻘﯿﻤﺔ ال ‪ Default‬ھﻲ ‪.MANUAL‬‬
‫ﻟﺘﺤﺪﯾﺪ ال ‪ Undo Tablespace‬اﻟﺘﻲ ﺳﻮف ﯾﺘﻢ اﻟﺘﺤﻜﻢ ﺑﮭﺎ ﺑﻮاﺳﻄﺔ ‪Automatic Undo‬‬
‫‪ Management‬ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ"‪ UNDO_TABLESPACE "Parameter‬ﻓﻲ ال‬
‫‪ ، Initialization Parameter File‬إﻻ أن ﯾﻜﻮن ھﻨﺎﻟﻚ ‪ Undo Tablespace‬واﺣﺪة ﻓﻲ ال ‪Database‬‬
‫ﻋﻨﺪﺋﺬ ﻻ ﯾﺸﺘﺮط ﺗﺤﺪﯾﺪ ھﺬا اﻟﻌﺎﻣﻞ "‪ ."Parameter‬ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ ھﺬا اﻟﻌﺎﻣﻞ ﺑﻄﺮﯾﻘﺔ داﯾﻨﺎﻣﯿﻜﯿﺔ ﺑﻮاﺳﻄﺔ‬
‫‪.ALTER SYSTEM‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:6.2‬‬

‫ﻟﺘﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ UNDO_TABLESPACE‬ﺑﺸﻜﻞ داﯾﻨﺎﻣﯿﻜﻲ )ﻟﻠﺘﺤﺪﯾﺪ ‪ Tablespace‬أﺧﺮى ﻓﻲ ﺣﺎﻟﺔ‬


‫‪:(Active‬‬

‫;‪ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBSPACE‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ال ‪.Instance Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Configuration‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﻗﺎﺋﻤﺔ ‪.Undo‬‬ ‫·‬
‫أﺧﺘﺮ ﻣﻦ ﻗﺎﺋﻤﺔ ‪ Current Undo Tablespace‬اﺳﻢ ال ‪.Undo Tablespace‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪103‬‬
‫‪:Snapshot Too Old Error‬‬

‫ﯾﻤﻜﻦ أن ﯾﺤﺪث ھﺬا اﻟﺨﻄﺄ اﯾﻀﺎً اذا ﻣﺎ ﺗﻢ ﺗﻐﯿﯿﺮ ال ‪ )Undo Tablespace‬ﺑﻮاﺳﻄﺔ ال ‪ALTER‬‬
‫‪ SYSTEM‬أو ﻋﺒﺮ ال ‪ ( Console‬وﻛﺎن ﻣﺎ ﯾﺰال ‪ Query‬ﯾﺴﺘﺨﺮج اﻟﺒﯿﺎﻧﺎت ﻣﻦ ال ‪Undo Tablespace‬‬
‫اﻟﺘﻲ ﺗﻢ ﺗﻐﯿﯿﺮھﺎ‪.‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﻓﻲ ﺣﺎل ﻟﻢ ﯾﺘﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ال ‪ UNDO TABLESPACE‬ﻓﻲ ﺟﻤﻠﺔ‪، CREATE DATABASE‬‬
‫وﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ UNDO_MANAGEMENT‬ﺗﺴﺎوي ‪ ، AUTO‬ﻓﺈن اﻷوراﻛﻞ ﺳﯿﺮﻓﺮ ﯾﻘﻮم ﺑﺘﻜﻮﯾﻦ‬
‫‪ Undo Tablespace‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ ﺑﻤﺴﻤﻰ ‪.SYS_UNDOTBS‬‬
‫‪ -2‬ﯾﻤﻜﻦ ﺣﺬف ‪ Undo Tablespace‬ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ DROP TABLESPACE‬اﻟﺘﻲ ﺟﺎء ﺷﺮﺣﮭﺎ‬
‫ﺳﺎﺑﻘﺎً‪ ،‬وﻟﻜﻦ ﻻ ﯾﻤﻜﻦ ﺣﺬف ال ‪ Undo Tablespace‬اذا ﻛﺎﻧﺖ ﺗﺴﺘﺨﺪم ﺑﻮاﺳﻄﺔ ال ‪.(Active)Instance‬‬

‫ﺗﺬﻛﺮ‪:‬‬

‫‪ -1‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال ‪ Undo Tablespace‬ﺑﻄﺮﯾﻘﺘﯿﯿﻦ ‪ ،‬إﻣﺎ ﻋﺒﺮ ﺟﻤﻠﺔ ال ‪ CREATE DATABASE‬أو‬


‫ﻋﺒﺮ ﺟﻤﻠﺔ ‪.CREATE UNDO TABLESPACE‬‬
‫‪ -2‬ﺟﺎء ذﻛﺮ ال ‪ Automatic Undo Management‬ﻓﻲ درس ال ‪.Undo Tablespace‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:6.3‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ال ‪ Undo Tablespace‬ﺑﻮاﺳﻄﺔ ‪ DROP TABLESPACE‬وﻟﻜﻦ ﯾﺠﺐ ﻋﻠﻰ ﻛﻞ اﻟﻤﮭﻤﺎت‬


‫اﻟﺘﻲ ﺗﺠﺮي ﻓﻲ ال ‪ Undo Tablespace‬أن ﺗﻨﮭﻲ ﻋﻤﻠﮭﺎ ﻗﺒﻞ اﺗﻤﺎم ﻋﻤﻠﯿﺔ اﻟﺤﺬف‪ ،‬ﯾﻤﻜﻦ ﻣﻌﺮﻓﺔ اذا ﻣﺎ ﻛﺎن‬
‫ھﻨﺎﻟﻚ أي ﻋﻤﻠﯿﺎت ﺗﺠﺮي ﻋﻠﻰ ال ‪ Undo Tablespace‬أو أي ‪ Tablespace‬ﻣﻦ ﺧﻼل ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫‪SELECT Z.NAME, X.STATUS‬‬


‫‪FROM V$ROLLNAME Z, V$ROLLSTAT X‬‬
‫‪WHERE Z.NAME IN‬‬
‫‪(SELECT SEGMENT_NAME FROM DBA_SEGMENTS‬‬
‫)'‪WHERE TABLESPACE_NAME = 'UNDOTBS‬‬
‫; ‪AND Z.USN = X.USN‬‬

‫اذا ﻛﺎﻧﺖ ﻗﯿﻤﺔ ال ‪ STATUS‬ھﻲ ‪ PENDING ONLINE‬ﻓﮭﺬا ﯾﻌﻨﻲ أن ال ‪ Tablespace‬ﻻ ﯾﻤﻜﻦ‬


‫ﺣﺬﻓﮭﺎ‪ ،‬أﻣﺎ اذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ ھﻲ ‪ PENDING OFFLINE‬ﻓﮭﺬا ﯾﻌﻨﻲ أﻧﮫ ﯾﻤﻜﻦ ﺣﺬف ال ‪.Tablespace‬‬

‫‪:Resource Manager‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ال ‪ Resource Manager‬ﻟﻠﺘﺤﻜﻢ ﺑﺎﻟﻨﻈﺎم ﺑﺤﯿﺚ ﯾﺘﻢ ﻣﻨﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ أو ﻣﺠﻤﻮﻋﺔ ﻣﻦ‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ اﺳﺘﮭﻼك ﻣﺴﺎﺣﺔ ﻛﺒﯿﺮة ﻟﻞ ‪ Undo Data‬ﺑﺤﯿﺚ ﯾﺘﻢ ﺗﺨﺼﯿﺺ ﻣﺴﺎﺣﺔ ﻗﺼﻮى "‪"Maxsize‬‬
‫ﻟﻜﻞ ﻣﺠﻤﻮﻋﺔ ﻻﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ ﺗﺨﺰﯾﻦ ال ‪ .Undo Data‬ﯾﺘﻢ ﺗﺨﺼﯿﺺ ﻣﺴﺎﺣﺔ ﻗﺼﻮى ﺑﺘﺤﺪﯾﺪ ال‬
‫‪ UNDO_POOL‬واﻟﺬي ھﻮ ﻓﻲ اﻟﺤﺎﻟﺔ اﻹﻓﺘﺮاﺿﯿﺔ "‪ "Default‬ﻣﺤﺪد ﺑﺎﻟﻘﯿﻤﺔ ‪.UNLIMITED‬‬

‫‪104‬‬
QUERYING UNDO INFORMATION

:Undo Segment ‫ اﻟﺘﺎﻟﯿﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال‬Views ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ال‬

‫ اذ ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل‬، Undo Tablespace ‫ ﯾﺴﺎﻋﺪ ﻓﻲ ﺗﺤﺪﯾﺪ ﺣﺠﻢ ال‬:V$UNDOSTAT ·


.‫ دﻗﺎﺋﻖ‬10 ‫ وﺿﻐﻂ اﻟﺒﯿﺎﻧﺎت ﻋﻠﯿﮭﺎ ﺧﻼل‬Undo Tablespace ‫ﻋﻤﻞ ال‬

SELECT BEGIN_TIME, END_TIME, UNDOBLKS


FROM V$UNDOSTAT;

‫ ﻓﻲ‬Undo Segment ‫ ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﺟﻤﯿﻊ ال‬:DBA_ROLLBACK_SEGS ·


.Offline Segment ‫ وﺣﺪھﺎ ﻓﻘﻂ ﺗﻮﻓﺮ ﺑﯿﺎﻧﺎت ﺣﻮل ال‬.Database ‫ال‬

SELECT SEGMENT_NAME, TABLESPACE_NAME, OWNER, STATUS


FROM DBA_ROLLBACK_SEGS;

.Online Segments ‫ ﺗﻮﻓﺮ اﺳﻤﺎء ﺟﻤﯿﻊ ال‬:V$ROLLNAME ·

SELECT USN, NAME FROM V$ROLLNAME;

‫ وﻋﺪد‬Segments ‫ ﻣﺜﻞ ﺣﺠﻢ ال‬Online Segments ‫ ﺗﻮﻓﺮ ﺑﯿﺎﻧﺎت ﺣﻮل ال‬:V$ROLLSTAT ·


.USN ‫ ﺑﻮاﺳﻄﺔ ال‬V$ROLLNAME ‫ ﻣﻊ ال‬Join ‫ ﯾﻤﻜﻦ ﻋﻤﻞ‬. ‫ وﻏﯿﺮھﺎ‬Extents ‫ال‬

SELECT A.NAME , B.EXTENTS


FROM V$ROLLNAME A , V$ROLLSTAT B
WHERE A.USN = B.USN;

105





Managing tables & indexes &


constraints

106
‫‪STORING DATA‬‬

‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ ال ‪ DATA‬ﻓﻲ أوراﻛﻞ ﻋﻠﻰ ﺷﻜﻞ ‪ Rows‬و ‪ Columns‬ﻓﻲ ال ‪ .Tables‬ﯾﻮﺟﺪ ﻋﺪة أﻧﻮاع ﻣﻦ ال‬
‫‪ Tables‬ﻣﺜﻞ‪:‬‬

‫‪) TABLES‬أو ‪ :(Regular Tables‬ھﻲ ال ‪ Table‬اﻟﺘﻲ ﯾﺘﻢ ﻣﻌﻈﻢ اﻟﻌﻤﻞ ﻋﻠﯿﮭﺎ واﻟﺘﻲ ﯾﻜﻮن‬ ‫·‬
‫اﻟﺘﺤﻜﻢ ﺑﺘﻮزﯾﻊ ﺑﺎل ‪ Rows‬ﻓﯿﮭﺎ ﻣﻦ وﻇﺎﺋﻒ ال ‪.Oracle Sever‬‬

‫‪ :PARTITIONED TABLES‬ﯾﻜﻮن ﻟﻞ ‪ Table‬أﻛﺜﺮ ﻣﻦ ﺟﺰء "‪ ،"Partition‬ﻛﻞ ﺟﺰء‬ ‫·‬


‫ﻋﺒﺎرة ﻋﻦ ‪ ،Segment‬ﻛﻞ ‪ Segment‬ﯾﻤﻜﻦ أن ﺗﺘﻮاﺟﺪ ﻓﻲ ‪ Tablespace‬ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫‪ :INDEX-ORGANIZED TABLE‬ﯾﺠﺐ ﺗﺨﺼﯿﺺ ال ‪ Primary Key‬ﻟﻞ ‪ Table‬وﯾﺘﻢ‬ ‫·‬


‫ﺗﺨﺰﯾﻦ ال ‪ PK‬وال ‪ Table‬ﻓﻲ ذات اﻟﻤﺴﺎﺣﺔ ‪ ،‬وذﻟﻚ ﻋﻜﺲ ال ‪ Regular Table‬اﻟﺘﻲ اذا ﺗﻢ ﺗﻜﻮﯾﻦ‬
‫‪ PK‬ﻟﮭﺎ )اﻹﺛﻨﺎن ﻓﻲ ﻣﺴﺎﺣﺔ ﻣﺨﺘﻠﻔﺔ "‪.("Separate Storage‬‬

‫‪ :CLUSTERED TABLE‬ﯾﻤﻜﻦ أن ﺗﺘﻜﻮن ﻣﻦ ‪ Table‬واﺣﺪة أو ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪Tables‬‬ ‫·‬


‫اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻣﻊ ﺑﻌﻀﮭﺎ ﺑﺤﯿﺚ ﺗﺘﺸﺎرك ﻧﻔﺲ ال ‪ .Data Blocks‬ﯾﻮﺟﺪ ﻣﺎ ﯾﻌﺮف ﺑﺎﺳﻢ ‪Cluster‬‬
‫‪ Key‬اﻟﺬي ﯾﺤﺪد ال ‪ Rows‬اﻟﺘﻲ ﯾﺠﺐ أن ﺗﺨﺰن ﻣﻊ ﺑﻌﻀﮭﺎ اﻟﺒﻌﺾ‪.‬‬

‫‪:DATA TYPES‬‬

‫ﯾﻮﻓﺮ اﻷوراﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ‪ Data Types‬ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ‪ ،‬ﺗﺘﺒﻊ ﺛﻼﺛﺔ أﻧﻮاع ھﻢ ‪Scalar, Collection,‬‬
‫‪.Relationship‬‬

‫‪:Scalar Data Types‬‬

‫ﺑﻌﺾ أﻧﻮاع ال ‪:Scalar Data Types‬‬

‫‪ :CHAR, NCHAR‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ﺛﺎﺑﺘﺔ"‪ "Fixed-Length‬ﻟﺘﺨﺰﯾﻦ اﻷﺣﺮف‬ ‫·‬


‫"‪ ."Characters‬اﻟﻤﻘﺼﻮد ﺑﺎﻟﻤﺴﺎﺣﺔ اﻟﺜﺎﺑﺘﺔ أﻧﮫ ﻋﻨﺪ ﺗﺨﺼﯿﺺ ﻣﺜﻼً ‪ 10 Bytes‬وﺗﻢ ﺷﻐﻞ ‪7‬‬
‫‪ Bytes‬ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت‪ ،‬ﻻ ﺗﻌﺘﺒﺮ ال ‪ 3bytes‬اﻟﻤﺘﺒﻘﯿﺔ ﻣﺴﺎﺣﺔ ﺧﺎﻟﯿﺔ ﺑﻞ ﻣﺴﺎﺣﺔ ﻣﺸﻐﻮﻟﺔ‪ .‬أﻗﺼﻰ ﻗﯿﻤﺔ‬
‫)ﻣﺴﺎﺣﺔ( ﯾﻤﻜﻦ اﺧﺘﯿﺎرھﺎ ھﻲ ‪ 2000‬ﺑﺎﯾﺖ ﻟﻜﻞ ‪ Row‬ﻣﻊ اﻟﻌﻠﻢ أن اﻟﻘﯿﻤﺔ ال ‪ Default‬ھﻲ ‪ .1‬ﺗﺨﺘﻠﻒ‬
‫‪ NCHAR‬ﻋﻦ ‪ CHAR‬أن اﻷوﻟﻰ ﯾﻤﻜﻦ أن ﺗﺨﺰن ‪ Unicode Character‬اﻟﺘﻲ ﺗﻮﻓﺮ ﺧﺪﻣﺔ ﺗﻌﺪد‬
‫اﻟﻠﻐﺎت‪.‬‬
‫‪ :VARCHAR2, NVARCHAR2‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ﻣﺘﻐﯿﺮة "‪ "Variable-Length‬ﻟﺘﺨﺰﯾﻦ ال‬ ‫·‬
‫‪ .Characters‬اﻟﻤﻘﺼﻮد ﺑﺎﻟﻤﺴﺎﺣﺔ اﻟﻤﺘﻐﯿﺮة أﻧﮫ ﻋﻨﺪ ﺗﺨﺼﯿﺺ ﻣﺜﻼً ‪ ، 20 Bytes‬واﺣﺘﺎﺟﺖ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Column‬اﻟﻰ ‪ 15 bytes‬ﻓﺈﻧﮫ ﯾﺘﻢ اﺳﺘﺨﺪام ‪ 15 Bytes‬ﻓﻘﻂ ﻣﻦ اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﻟﯿﺔ‬
‫ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ‪ ،‬وﻻ ﯾﺘﻢ ﺣﺠﺰ اﻟﻤﺴﺎﺣﺔ اﻟﻜﻠﯿﺔ اﻟﻤﺤﺪدة‪ .‬أﻗﺼﻰ ﻣﺴﺎﺣﺔ ﯾﻤﻜﻦ اﺧﺘﯿﺎرھﺎ ھﻲ ‪4000‬‬
‫ﺑﺎﯾﺖ ﻟﻜﻞ ‪ Row‬ﻣﻊ اﻟﻌﻠﻢ أﻧﮫ ﻻ ﯾﻮﺟﺪ ﻗﯿﻤﺔ ‪ ) Default‬ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻘﯿﻤﺔ(‪ .‬ﺗﺨﺘﻠﻒ‬
‫‪ NVARCHAR2‬ﻋﻦ ‪ VARCHAR2‬أن اﻷوﻟﻰ ﯾﻤﻜﻦ أن ﺗﺨﺰن ‪ Unicode Character‬اﻟﺘﻲ‬
‫ﺗﻮﻓﺮ ﺧﺪﻣﺔ ﺗﻌﺪد اﻟﻠﻐﺎت‪.‬‬
‫‪ :NUMBER‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ﻣﺘﻐﯿﺮة ﻟﺘﺨﺰﯾﻦ اﻷرﻗﺎم‪ .‬ﯾﻤﻜﻦ أن ﺗﺴﺘﻮﻋﺐ اﻟﻤﺴﺎﺣﺔ أرﻗﺎم ﺗﺘﻜﻮن ﻣﻦ ‪38‬‬ ‫·‬
‫ﺧﺎﻧﺔ‪.‬‬

‫‪107‬‬
‫‪ :DATE‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ﺛﺎﺑﺘﺔ ﻟﺘﺨﺰﯾﻦ اﻟﺘﺎرﯾﺦ واﻟﻮﻗﺖ‪ .‬ﺗﻮﻓﺮ ﺳﺒﻊ ﺧﺎﻧﺎت ﻟﻠﻘﺮن واﻟﺴﻨﺔ واﻟﯿﻮم‬ ‫·‬
‫واﻟﺴﺎﻋﺔ واﻟﺪﻗﯿﻘﺔ و اﻟﺜﺎﻧﯿﺔ وأﻗﺼﻰ ﺗﺎرﯾﺦ ﯾﻤﻜﻦ أن ﯾﺨﺰن ھﻮ ال‪ 31‬ﻣﻦ دﯾﺴﻤﺒﺮ ﻟﻌﺎم ‪ ، 9999‬أﻣﺎ أﻗﺪم‬
‫ﺗﺎرﯾﺦ ﯾﻤﻜﻦ أن ﯾﺨﺰن ھﻮ ﯾﻨﺎﯾﺮ ﻣﻦ ﻋﺎم ‪ 1.4712‬ﻗﺒﻞ اﻟﻤﯿﻼد‪.‬‬
‫‪ :TIMESTAMP‬ﺗﻮﻓﺮ ﺧﺪﻣﺔ ﻣﻤﺎﺛﻠﺔ ﻟﻞ ‪ DATE‬ﻋﺪا أﻧﮭﺎ ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ إﺿﺎﻓﯿﺔ ﻟﺘﺨﺰﯾﻦ أﺟﺰاء‬ ‫·‬
‫اﻟﺜﺎﻧﯿﺔ‪ .‬ﺗﻮﻓﺮ ‪ 9‬ﺧﺎﻧﺎت ﻟﺘﺴﺠﯿﻞ أﺟﺰاء اﻟﺜﺎﻧﯿﺔ )‪ ( 0.987654321‬واﻟﻌﺪد ال ‪ Default‬ھﻮ ‪ 6‬ﺧﺎﻧﺎت‪.‬‬
‫‪ :TIMESTAMP WITH TIME ZONE‬ﺗﻮﻓﺮ ﺧﺪﻣﺔ ﻣﻤﺎﺛﻠﺔ ﻟﻞ ‪ ، TIMESTAMP‬إﻻ‬ ‫·‬
‫اﻧﮭﺎ ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ إﺿﺎﻓﯿﺔ ﻟﻌﺮض اﻟﻔﺎرق اﻟﺰﻣﻨﻲ ﺑﯿﻦ اﻟﻤﺴﺘﺨﺪم واﻟﺘﻮﻗﯿﺖ اﻟﻌﺎﻟﻤﻲ )ﺗﻮﻗﯿﺖ ﺟﺮﯾﻨﺘﺶ(‪.‬‬
‫ﯾﻈﮭﺮ اﻟﻔﺎرق ﻋﻠﻰ ﺷﻜﻞ ﻋﺪد ﻣﻦ اﻟﺴﺎﻋﺎت واﻟﺪﻗﺎﺋﻖ ﻓﻘﻂ‪.‬‬
‫‪ :TIMESTAMP WITH LOCAL TIME ZONE‬ﺗﻮﻓﺮ ﺧﺪﻣﺔ ﻣﻤﺎﺛﻠﺔ ﻟﻞ‬ ‫·‬
‫‪ ، TIMESTAMP‬إﻻ اﻧﮭﺎ ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ إﺿﺎﻓﯿﺔ ﻟﻌﺮض ال ‪ ،Session Time Zone‬اﻟﺬي‬
‫ﯾﺴﺘﺨﺪم ﻓﻲ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﺑﯿﻦ ﻓﺮوع اﻟﺸﺮﻛﺎت اﻟﺒﻌﯿﺪة ﻋﻦ ﺑﻌﻀﮭﺎ‪ ،‬أي ﻓﻲ ﺣﺎل ادﺧﺎل اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻗﺒﻞ‬
‫اﻟﻤﺴﺘﺨﺪم اﻷول اﻟﺬي ﺑﯿﻨﮫ وﺑﯿﻦ اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ زاﺋﺪ ‪ 3‬ﺳﺎﻋﺎت زﻣﻨﯿﺔ ‪ ،‬ﻓﺈن اﻟﻤﺴﺘﺨﺪم اﻟﺜﺎﻧﻲ ﯾﺮى‬
‫ﺗﻮﻗﯿﺖ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﺑﺘﻮﻗﯿﺘﮫ ھﻮ ) زاﺋﺪ ‪ 3‬ﺳﺎﻋﺎت زﻣﻨﯿﺔ( و ﻟﯿﺲ ﺑﺘﻮﻗﯿﺖ اﻟﻤﺴﺘﺨﺪم اﻷول اﻟﺬي أدﺧﻞ‬
‫اﻟﺒﯿﺎﻧﺎت‪ .‬ﯾﻈﮭﺮ اﻟﻔﺎرق ﻋﻠﻰ ﺷﻜﻞ ﻋﺪد ﻣﻦ اﻟﺴﺎﻋﺎت واﻟﺪﻗﺎﺋﻖ ﻓﻘﻂ‪.‬‬
‫‪ :ROW‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ﻣﺘﻐﯿﺮة ﻟﺘﺨﺰﯾﻦ ال ‪ .Binary Data‬أﻗﺼﻰ ﻣﺴﺎﺣﺔ ﯾﻤﻜﻦ اﺧﺘﯿﺎرھﺎ ھﻲ ‪2000‬‬ ‫·‬
‫ﺑﺎﯾﺖ‪.‬‬
‫‪ :LONG RAW‬ﺗﻮﻓﺮ ﺧﺪﻣﺔ ﻣﻤﺎﺛﻠﺔ ﻟﻞ ‪ Row‬وﻟﻜﻦ ﻣﺴﺎﺣﺔ أﻛﺒﺮ ‪) 2GB‬ﻻ ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪاﻣﮭﺎ(‬ ‫·‬
‫‪ :LONG‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ﻛﺒﯿﺮة ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ‪ ،‬ﯾﻤﻜﻦ أن ﺗﺼﻞ اﻟﻤﺴﺎﺣﺔ اﻟﻰ ‪) 2GB‬ﻻ ﯾﻨﺼﺢ‬ ‫·‬
‫ﺑﺎﺳﺘﺨﺪاﻣﮭﺎ‪ ،‬وﯾﻔﻀﻞ اﺳﺘﺨﺪام ‪ CLOB‬أو ‪ .(NCLOB‬ﻻ ﯾﻤﻜﻦ ﻟﻞ ‪Table‬أن ﺗﺤﻮي أﻛﺜﺮ ﻣﻦ‬
‫‪ Long‬واﺣﺪة‪.‬‬
‫‪ :CLOB, NCLOB‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ‪ 4GB‬ﻟﺘﺨﺰﯾﻦ ال ‪.Character Data‬‬ ‫·‬
‫‪ :BLOB‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ‪ 4GB‬ﻟﺘﺨﺰﯾﻦ ‪ Unstructured Data‬ﻣﺜﻞ ‪ Binary Images‬و‬ ‫·‬
‫‪.Documents‬‬
‫‪ :BFILE‬ﺑﺎﺳﺘﺨﺪاﻣﮭﺎ‪ ،‬ﺗﺴﺘﻄﯿﻊ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺧﺎرج ال ‪ Database‬ﻓﻲ ﻣﻠﻔﺎت ﺧﺎرﺟﯿﺔ‪ ،‬ﯾﻤﻜﻦ أن‬ ‫·‬
‫ﯾﺼﻞ ﺣﺠﻢ اﻟﻤﻠﻒ اﻟﺨﺎرﺟﻲ اﻟﻰ ‪.4GB‬‬
‫‪ :ROWID, UROWID‬ﺗﻮﻓﺮ ﻣﺴﺎﺣﺔ ‪ 10 bytes‬ﻟﺘﺨﺰﯾﻦ رﻗﻢ ﻣﻤﯿﺰ ﻟﻜﻞ ‪ Row‬ﻓﻲ ال‬ ‫·‬
‫‪ Database‬ﻟﯿﺴﺘﻄﯿﻊ اﻷوراﻛﻞ ﺗﺤﺪﯾﺪ ال ‪ Row‬ﺑﺴﺮﻋﺔ أﻛﺒﺮ ﻋﻨﺪ اﻟﺒﺤﺚ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت‪ .‬اﻟﻔﺮق ﺑﯿﻦ‬
‫‪ ROWID‬و‪ UROWID‬أن اﻷﺧﯿﺮة ﺗﻮﻓﺮ ﻣﯿﺰة ﺗﺴﺠﯿﻞ رﻗﻢ ﻣﻤﯿﺰ ل ‪ Rows‬ﺗﺘﺒﻊ ‪No-Oracle‬‬
‫‪ )Tables‬أي ﻣﻦ ﻧﻮع ‪ Database‬اﺧﺮ ﻏﯿﺮ اﻷوراﻛﻞ(‪.‬‬

‫‪:Collections Data Types‬‬

‫ﯾﻮﺟﺪ ﻧﻮﻋﺎن ﻓﻘﻂ ھﻤﺎ‪:‬‬

‫)‪ :VARYING ARRAYS (VARRAY‬ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﺮﺗﺒﺔ ﻣﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺘﻜﻮن‬ ‫·‬
‫ﻣﻦ ﻧﻔﺲ ال ‪) Data Type‬ﻣﺜﻼً ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت أرﻗﺎم(‪.‬‬
‫‪ :NESTED TABLES‬ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻏﯿﺮ ﻣﺮﺗﺒﺔ ﻣﻦ ال ‪ ، Rows‬ﺗﺨﺰن ال ‪ Rows‬ﺑﺸﻜﻞ‬ ‫·‬
‫ﻣﻨﻔﺼﻞ ﻋﻦ ال ‪ Table‬ﺑﺤﯿﺚ ﯾﻮﺟﺪ وﺻﻠﺔ "‪ "Pointer‬ﻣﻦ ﻛﻞ ‪ Row‬اﻟﻰ ال ‪.Table‬‬

‫)‪:Relationship Data Types (REFs‬‬

‫ﯾﺘﻢ اﺳﺘﺨﺪام ‪ Pointers‬ﻟﺘﺪل ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻣﺨﺰﻧﺔ ﻓﻲ ‪ Tables‬ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫‪108‬‬
‫‪MANAGING TABLES‬‬

‫‪:CREATE TABLES‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ ، Table‬ﯾﺘﻢ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ CREATE TABLE‬اﻟﺘﻲ ﻣﻦ اﻟﻤﻔﺮوض ﻗﺪ ﺗﻌﺮﻓﺖ ﻋﻠﯿﮭﺎ ﺑﺎﻟﺘﻔﺼﯿﻞ‬
‫ﺧﻼل دراﺳﺘﻚ ﻟﻼﻣﺘﺤﺎن اﻷول "‪ ."Introduction to SQL‬ﻟﻜﻲ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم ﺗﻜﻮﯾﻦ ‪ Table‬ﻓﻲ ال‬
‫‪ Schema‬اﻟﺨﺎص ﺑﮫ ‪ ،‬ﯾﺠﺐ أن ﯾﻜﻮن ﻟﺪﯾﮫ ‪ ، CREATE TABLE privilege‬أﻣﺎ ﻟﺘﻜﻮﯾﻦ ‪ Table‬ﻓﻲ‬
‫‪ Schemas‬ﻟﻤﺴﺘﺨﺪﻣﯿﻦ أﺧﺮﯾﻦ‪ ،‬ﯾﺠﺐ أن ﯾﻜﻮن ﻟﺪﯾﮫ ‪.CREATE ANY TABLE privilege‬‬

‫ﯾﻨﺼﺢ ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪:Tables‬‬


‫· ﺗﻮزﯾﻊ ﻛﻞ ‪ Table‬ﻋﻠﻰ ‪ Tablespace‬ﻣﺨﺘﻠﻔﺔ ﻋﻦ ال ‪ Tablespaces‬اﻟﺘﻲ ﺗﺤﻮي ‪Undo‬‬
‫‪ Segments‬أو ‪ Temporary Segments‬أو ‪.Indexes‬‬
‫· اﺳﺘﺨﺪام ﻧﻈﺎم ‪) Locally Managed‬أي ﺑﺪون اﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ‪ (Storage‬ﻟﺘﺠﻨﺐ ال‬
‫‪.Fragmentation‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.1‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ Locally Managed Table‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ‪:‬‬

‫‪CREATE TABLE HR.TEST‬‬


‫;)‪(FIRST VARCHAR2 (10), LAST NUMBER‬‬

‫أو ﯾﻤﻜﻦ اﺿﺎﻓﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫‪CREATE TABLE HR.TEST‬‬


‫)‪(FIRST VARCHAR2 (10), LAST NUMBER‬‬
‫‪TABLESPACE EXAMPLE‬‬
‫‪PCTFREE 10 PCTUSED 20‬‬
‫;‪MAXTRANS 200 MINTRANS 1‬‬

‫ﻋﻠﻰ اﻋﺘﺒﺎر أن ذﻛﺮ ‪ ،TABLESPACE EXAMPLE‬ﯾﺪل ﻋﻠﻰ اﺳﻢ ال ‪ Tablespace‬اﻟﺘﻲ ﺗﺤﻮي ال‬
‫‪ Table‬وھﻲ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ‪ .Example Tablespace‬وﻓﻲ ﺣﺎل ﻋﺪم ذﻛﺮ ھﺬه اﻟﺠﻤﻠﺔ ﯾﺘﻢ اﺧﺘﯿﺎر ال‬
‫‪ Default‬وھﻲ ﻋﺎدة ﻣﺎ ﺗﻜﻮن ال ‪ .System Tablespace‬ﻣﻊ اﻟﻌﻠﻢ أﻧﮫ ﺗﻢ ﺗﻜﻮﯾﻦ ال ‪ Table‬ﻓﻲ ال‬
‫‪ Schema‬اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﺴﺘﺨﺪم ‪.HR‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻋﻠﻰ ‪ Table‬ﺛﻢ اﺧﺘﺮ ‪ Create‬ﻣﻦ اﻟﻘﺎﺋﻤﺔ‪.‬‬ ‫·‬
‫ادﺧﻞ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﻄﻠﻮﺑﺔ )ﻣﺜﻞ اﺳﻢ ال ‪ (Table‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪Apply‬‬ ‫·‬
‫ﯾﻤﻜﻦ اﺧﺘﯿﺎر ‪ Create Using Wizard‬ﻋﻮﺿﺎً ﻋﻦ ‪ Create‬ﻟﺘﺴﮭﯿﻞ ﺗﻜﻮﯾﻦ ال ‪.Table‬‬ ‫·‬

‫‪109‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.2‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ Dictionary Managed Table‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ‪:‬‬

‫‪CREATE TABLE HR.TEST2‬‬


‫)‪(FIRST VARCHAR2 (10), LAST NUMBER‬‬
‫‪TABLESPACE EXAMPLE‬‬
‫‪PCTFREE 10 PCTUSED 20‬‬
‫‪MAXTRANS 200 INITRANS 1‬‬
‫‪STORAGE (INITIAL 200K NEXT 200K‬‬
‫‪PCTINCREASE 50‬‬
‫‪MINEXTENTS 1 MAXEXTENTS 5‬‬
‫‪FREELISTS 1 FREELIST GROUPS 1‬‬
‫; )‪BUFFER_POOL DEFAULT‬‬

‫ﻓﻲ ﺟﻤﻠﺔ ال ‪: Storage‬‬

‫‪ :INITIAL‬ﺗﺤﺪد ﺣﺠﻢ أول ‪.Extent‬‬


‫‪ :NEXT‬ﻋﻨﺪ زﯾﺎدة ﺣﺠﻢ اﻟﺒﯿﺎﻧﺎت ﯾﺘﻄﻠﺐ ذﻟﻚ اﺿﺎﻓﺔ ‪ ،Extent‬ﺣﯿﺚ ﺗﺤﺪد ﺟﺤﻢ ال ‪ Extent‬اﻟﺜﺎﻧﯿﺔ‪.‬‬
‫‪ :PCTINCREASE‬ﺗﺤﺪد ﺣﺠﻢ ال ‪ Extents‬اﻟﺘﺎﻟﯿﺔ )ﻟﯿﺴﺖ اﻟﺜﺎﻟﺜﺔ ﻓﻘﻂ ‪ ،‬إﻧﻤﺎ ﻛﻞ ﻣﺎ ﯾﺄﺗﻲ ﺑﻌﺪ اﻟﺜﺎﻧﯿﺔ(‬
‫ﺑﺎﺿﺎﻓﺔ ﻧﺴﺒﺔ ﻣﺌﻮﯾﺔ‪ .‬ﻣﺜﻼً ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﯾﺼﺒﺢ ﺣﺠﻢ ال ‪ Extents‬اﻟﺘﺎﻟﯿﺔ ‪ +200K) 300K‬ﻧﺼﻒ ﺣﺠﻢ‬
‫)‪ (%50‬ال ‪.(Extent‬‬
‫‪ :MINEXTENT‬اﻟﺤﺪ اﻷدﻧﻰ ﻣﻦ ال ‪ Extents‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺨﺼﺺ ﻟﻞ ‪.Table‬‬
‫‪ :MAXEXTENTS‬اﻟﺤﺪ اﻷﻗﺼﻰ ﻣﻦ ال ‪ Extents‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺨﺼﺺ ﻟﻞ ‪.Table‬‬
‫‪ :FREELIST GROUP‬ﻋﺪد ﻣﺠﻤﻮﻋﺎت ال ‪ Freelist‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺨﺼﺺ ﻟﻞ ‪.Table‬‬
‫‪ :FREELISTS‬ﻋﺪد ال ‪ Freelist‬ﺿﻤﻦ اﻟﻤﺠﻤﻮﻋﺔ‪.‬‬
‫‪ :BUFFER_POOL‬ﺗﻄﺮﻗﻨﺎ ﻟﮫ ﺳﺎﺑﻘﺎ ) ‪(Default, Keep, Recycle‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﺸﺘﺮط ﻛﺘﺎﺑﺔ ﻛﻞ ﻋﻮاﻣﻞ ال ‪ ، Storage‬اذ ﯾﻤﻜﻦ أﺧﺪ اﻟﻘﯿﻤﺔ ال ‪ Default‬ﻟﻜﻞ ﻋﺎﻣﻞ‪.‬‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪام ال ‪.Locally Managed Table‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻋﻠﻰ ‪ Table‬ﺛﻢ اﺧﺘﺮ ‪ Create‬ﻣﻦ اﻟﻘﺎﺋﻤﺔ‪ .‬ﺛﻢ ادﺧﻞ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﻄﻠﻮﺑﺔ‬ ‫·‬
‫ﻣﺜﻞ ﺑﯿﺎﻧﺎت ال ‪Initial Size, Next Size, Increase Size by, Freelists, Groups,‬‬
‫‪.Buffer pool‬‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪110‬‬
‫‪:CREATING TEMPORARY TABLES‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Temporary Table‬ﻟﺘﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﻣﺆﻗﺘﮫ ﺗﻠﺰم ﻓﻘﻂ ﺧﻼل اﻟﻘﯿﺎم ﺑﺄﺣﺪ اﻟﻤﮭﻤﺎت‬
‫"‪ "Transaction‬أو ﻃﻮال ﻓﺘﺮة ﻋﻤﻞ ال ‪ ،Session‬أي ﻓﻲ اﻟﺤﺎﻟﺔ اﻷوﻟﻰ ﯾﺘﻢ ﺣﺬف اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ اﻹﻧﺘﮭﺎء ﻣﻦ‬
‫اﻟﻤﮭﻤﺔ )ﻣﺜﻼً ﻛﺘﺎﺑﺔ ‪ ،(Commit‬أﻣﺎ ﻓﻲ اﻟﺤﺎﻟﺔ اﻟﺜﺎﻧﯿﺔ ﯾﺘﻢ ﺣﺬف اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ ﺧﺮوج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال‬
‫‪.Database‬‬
‫ﻟﺘﻜﻮﯾﻦ ‪ Temporary Table‬ﯾﺘﻢ اﺳﺘﺨﺪام ‪،CREATE GLOBAL TEMPORARY TABLE‬‬
‫وﻟﺘﺤﺪﯾﺪ اذا ﻣﺎ ﻛﺎﻧﺖ اﻟﺒﯿﺎﻧﺎت ﺳﻮف ﺗﺤﺬف ﺑﻌﺪ اﻟﻤﮭﻤﺔ أو ﺑﻌﺪ اﻧﺘﮭﺎء ال ‪ Session‬ﯾﺘﻢ إﺿﺎﻓﺔ اﻟﺠﻤﻞ اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫· ‪ :ON COMMIT DELETE ROWS‬ﺗﺤﺬف اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ اﻧﺘﮭﺎء اﻟﻤﮭﻤﺔ‪.‬‬
‫· ‪ :ON COMMIT PRESERVE ROWS‬ﺗﺤﺬف اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ اﻧﺘﮭﺎء ال ‪.Session‬‬

‫ﺗﺬﻛﺮ‪ :‬ال ‪ Session‬ﻣﻦ اﻟﻔﺼﻞ اﻷول‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Views, Indexes‬ﻋﻠﻰ ال ‪ Temporary Table‬ﻛﺄي ‪ Table‬أﺧﺮى‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :2‬ﻣﮭﻤﺎت ال ‪) DML‬ﻣﺜﻞ ‪ (INSERT, DELETE‬اﻟﺘﻲ ﺗﻨﻔﺬ ﻋﻠﻰ ال ‪ Temporary Table‬ﻻ‬


‫ﺗﺆدي اﻟﻰ ﺗﻜﻮﯾﻦ ﺑﯿﺎﻧﺎت ﻓﻲ ‪.Redo Log Files‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.3‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ Temporary Table‬ﯾﺘﻢ ﺣﺬف ﺑﯿﺎﻧﺎﺗﮭﺎ ﺑﻌﺪ اﻧﺘﮭﺎء ال ‪:Session‬‬

‫‪CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE‬‬


‫)‪(TEMP_NAME VARCHAR2 (25), TEMP_DATE DATE‬‬
‫;‪ON COMMIT PRESERVE ROWS‬‬

‫‪:ALTERING TABLES‬‬

‫ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻌﺪة ﻣﮭﻤﺎت ﺑﺎﺳﺘﺨﺪام اﻟﺠﻤﻠﺔ ‪:ALTER TABLE‬‬

‫‪:Changing the Block Storage Parameters‬‬

‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻢ ‪ PCTUSED, PCTFREE, MAXTRANS,‬وﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ال ‪ Tablespace‬اﻟﺘﻲ‬


‫ﺗﻨﺘﻤﻲ ﻟﮭﺎ ال ‪ Table‬و ‪.MINTRANS‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﺑﻌﺾ ﻋﻮاﻣﻞ ﺟﻤﻠﺔ ال ‪ Storage‬ﻣﺜﻞ ال ‪.Freelists‬‬

‫‪111‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.4‬‬

‫‪ALTER TABLE HR.TEST2‬‬


‫‪PCTUSED 40‬‬
‫‪PCTFREE 20‬‬
‫;‪MAXTRANS 250‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Table‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ال ‪ Table‬اﻟﻤﺮاد ﺗﻐﯿﯿﺮ ﺧﻮاﺻﮭﺎ )ﻣﺜﻞ ‪(HR‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ ال ‪ Table‬ﻣﻦ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ و اﺿﻐﻂ ﻋﻠﯿﮭﺎ ﻣﺮﺗﯿﻦ )أو ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ‪ ،‬اﺧﺘﺮ‬ ‫·‬
‫ﻣﻦ اﻟﻘﺎﺋﻤﺔ "‪."View\Edit Details‬‬
‫ادﺧﻞ اﻟﻰ ﻗﺎﺋﻤﺔ ‪ ، Storage‬وﻋﺪل اﻟﺒﯿﺎﻧﺎت ﺛﻢ اﺧﺘﺮ ‪.Apply‬‬ ‫·‬

‫‪:Manual Allocating Extents‬‬

‫ﯾﻤﻜﻦ اﺿﺎﻓﺔ ‪ Extents‬ﺑﺸﻜﻞ ﯾﺪوي اﻟﻰ ال ‪ Table‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ALTER TABLE [schema.]table_name‬‬


‫‪ALLOCATE EXTENT‬‬
‫[‬
‫]‪SIZE number [K|M‬‬
‫’‪DATAFILE ‘filename‬‬
‫]‬

‫اذا ﻟﻢ ﺗﺘﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ]‪ ، SIZE number [K|M‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﺣﺠﻢ ال ‪ Extent‬ﺑﻨﺎءاً ﻋﻠﻰ اﻟﺤﺠﻢ اﻟﻤﺤﺪد ب‬
‫‪ ، NEXT‬أﻣﺎ اذا ﻟﻢ ﺗﺘﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ال ’‪ ، DATAFILE ‘filename‬ﻓﯿﺘﻢ اﺿﺎﻓﺔ ‪ Extent‬اﻟﻰ أي ‪Data‬‬
‫‪ File‬ﺿﻤﻦ ال ‪ Tablespace‬اﻟﺘﻲ ﺗﺤﻮي ال ‪.Table‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.5‬‬

‫ﻹﺿﺎﻓﺔ ‪ Extent‬ﺑﺸﻜﻞ ﯾﺪوي ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ‪:‬‬

‫‪ALTER TABLE HR.TEST2‬‬


‫;‪ALLOCATE EXTENT‬‬

‫‪112‬‬
‫‪:Moving Tables‬‬

‫ﯾﻤﻜﻦ ﻧﻘﻞ ‪) Table‬ﺑﺸﺮط أن ﻻ ﺗﻜﻮن ‪ (Partitioned Table‬ﻣﻦ ‪ Tablespace‬اﻟﻰ ‪ Tablespace‬أﺧﺮى‬


‫ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ MOVE‬ﻣﻊ ‪.ALTER SYSTEM‬‬
‫ﻋﻨﺪ ﻋﻤﻠﯿﺔ ﻧﻘﻞ ال ‪ Table‬ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ال ‪ Storage Parameters‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.7.6‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ ﺗﻨﻔﯿﺬ اﻟﻌﻤﻠﯿﺔ ﻟﺘﻐﯿﯿﺮ ﺧﻮاص ال ‪ Storage Parameters‬دون ﻧﻘﻞ ال ‪ Table‬اﻟﻰ‬
‫‪ Tablespace‬أﺧﺮى )ﺑﻨﻘﻞ ال ‪ Table‬ﻣﻦ ‪ Segment‬اﻟﻰ أﺧﺮى( ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.7.6‬‬

‫ﻣﻼﺣﻈﺔ‪ :2‬ﯾﺤﺐ اﻋﺎدة ﺗﻌﺮﯾﻒ ال ‪ Indexes‬اﻟﺨﺎﺻﺔ ﺑﺎل ‪ Table‬اﻟﺘﻲ ﺗﻢ ﻧﻘﻠﮭﺎ ﻟﺘﺠﻨﺐ اﻷﺧﻄﺎء‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.6‬‬

‫‪ALTER TABLE HR.TEST2 MOVE‬‬


‫‪TABLESPACE APP_DATA‬‬
‫)‪STORAGE (INITIAL 300K‬‬
‫‪PCTUSED 30‬‬
‫;‪INITRANS 2‬‬

‫ﻟﺘﻐﯿﯿﺮ ‪ Storage Parameters‬دون ﻧﻘﻞ ال ‪ Table‬اﻟﻰ ‪ Tablespace‬أﺧﺮى‪:‬‬

‫‪ALTER TABLE HR.TEST2 MOVE‬‬


‫‪TABLESPACE EXAMPLE‬‬
‫)‪STORAGE (INITIAL 300K‬‬
‫;‪PCTUSED 30‬‬

‫ﻣﻊ اﻟﻌﻠﻢ أن ﻣﻮﻗﻊ ال ‪ HR.TEST2‬ھﻮ ال ‪ Example Tablespace‬ﻗﺒﻞ اﻟﻤﮭﻤﺔ‪.‬‬

‫‪:DROPPING TABLES AND COLUMNS‬‬

‫‪:Truncate a Table‬‬

‫ﺑﺎﺳﺘﺨﺪام أﻣﺮ ‪ ، TRUNCATE TABLE‬ﯾﺘﻢ ﺣﺬف ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت ال ‪ Table‬واﺳﺘﻌﺎدة اﻟﻤﺴﺎﺣﺔ اﻟﻤﺸﻐﻮﻟﺔ‬
‫)زﯾﺎدة اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﻟﯿﺔ( اﻟﺘﻲ ﻛﺎﻧﺖ ﺗﺸﻐﻠﮭﺎ اﻟﺒﯿﺎﻧﺎت‪ .‬ﺗﻌﺘﺒﺮ ‪ TRUNCATE TABLE‬ﻣﻦ أواﻣﺮ ال‬
‫)‪ ،DATA DEFINITION LANGUAGE (DDL‬وﺑﺎﻟﺘﺎﻟﻲ ﻓﺈﻧﮭﺎ ﻻ ﺗﺴﺒﺐ ﺗﻜﻮن ‪ Undo Data‬ﻋﻠﻰ‬
‫اﻋﺘﺒﺎر أن أواﻣﺮ ال ‪ DDL‬ﻻ ﯾﻤﻜﻦ أن ﯾﺤﺪث ﻟﮭﺎ ‪) Rollback‬أي أﻧﮫ ﻻ ﯾﻤﻜﻦ اﺳﺘﻌﺎدة اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ ﺣﺬﻓﮭﺎ(‪.‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬اﺳﺘﺨﺪام ‪ TRUNCATE TABLE‬ﯾﺆدي اﻟﻰ ﺣﺬف ال ‪ Indexes‬اﻟﺨﺎﺻﺔ ﺑﮭﺬه ال ‪.Table‬‬


‫‪ -2‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻋﻠﻰ ‪ Table‬ﻟﮭﺎ ﻋﻼﻗﺔ ‪ Foreign Key‬ﻣﻊ ‪ Table‬أﺧﺮى‪.‬‬

‫‪113‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.7‬‬

‫ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم ‪ HR‬ﻛﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ ‪:‬‬

‫;‪TRUNCATE TABLE TEST2‬‬

‫أﻣﺎ ال ‪ DBA‬أو أي ﻣﺴﺘﺨﺪم أﺧﺮ ﯾﻤﻠﻚ اﻟﺼﻼﺣﯿﺎت "‪ "Privileges‬اﻟﻼزﻣﺔ‪ ،‬ﻓﯿﺠﺐ ذﻛﺮ ال ‪:Schema‬‬

‫;‪TRUNCATE TABLE HR.TEST2‬‬

‫‪:Drop a Table‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ‪ Table‬ﺑﺎﻟﻜﺎﻣﻞ ﻣﻊ ﺑﯿﺎﻧﺎﺗﮭﺎ ﺑﺎﺳﺘﺨﺪام أﻣﺮ ‪ .DROP TABLE‬ﯾﺠﺐ إﺿﺎﻓﺔ ﺟﻤﻠﺔ‬
‫‪ CASCADE CONSTRAINTS‬اذا ﻛﺎن ﻟﻞ ‪ Table‬ﻋﻼﻗﺔ ‪ Foreign key‬ﻣﻊ ‪ Table‬أﺧﺮى‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.8‬‬

‫ﻟﺤﺬف ‪ Table‬ﺑﺎﻟﻜﺎﻣﻞ ﻣﻦ ال ‪:Database‬‬

‫;‪DROP TABLE HR.TEST2‬‬

‫‪:Dropping a Column‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ‪ Column‬واﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﺤﻮﯾﮭﺎ ﻣﻦ ال ‪ Table‬ﺑﺎﺳﺘﺨﺪام ‪ . ALTER TABLE‬ﻗﺪ ﺗﺘﻄﻠﺐ‬


‫ﻋﻤﻠﯿﺔ ﺣﺬف ‪ Column‬ﻣﺪة ﻃﻮﻟﯿﺔ ﺟﺪاً و ‪ Undo Space‬ﻛﺒﯿﺮة ﺟﺪاً ﻟﻞ ‪ Tables‬اﻟﺘﻲ ﺗﺤﻮي ﺑﯿﺎﻧﺎت ﺿﺨﻤﺔ‬
‫ﺟﺪاً‪ .‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ‪ ،‬ﯾﻔﻀﻞ وﺿﻊ ال ‪ Column‬ﺿﻤﻦ ﻗﺎﺋﻤﺔ ال ‪ UNUSED‬ﺛﻢ ﺣﺬﻓﮫ ﺑﻌﺪ اﻷﻧﺘﮭﺎء ﻣﻦ وﻗﺖ‬
‫اﻟﺬروة )أي ﻋﻨﺪﻣﺎ ﺗﻜﻮن اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﺗﺠﺮي ﻋﻠﻰ ال ‪ Table‬ﻗﻠﯿﻠﺔ(‪.‬‬
‫وﺿﻊ ال ‪ Column‬ﻓﻲ ﺣﺎﻟﺔ ال ‪ ، UNUSED‬ھﻮ ﻣﺸﺎﺑﮫ ﻟﻌﻤﻠﯿﺔ ﺣﺬﻓﮫ )ﻟﻜﻨﮫ ﻓﻲ اﻟﻮاﻗﻊ ﻣﻮﺟﻮد(‪ ،‬اذ ﻻ ﯾﻤﻜﻦ‬
‫اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻦ أو ﻣﺸﺎھﺪﺗﮫ ﻋﻨﺪ اﺳﺘﺨﺪام أﻣﺮ ‪.DESCRIBE‬‬
‫اﺳﺘﺨﺪام أﻣﺮ ‪ ALTER TABLE‬ﻟﺤﺬف ‪ ، Column‬ﯾﺴﻤﺢ ﻓﻘﻂ ﺑﺤﺬف ‪ Column‬واﺣﺪة ﻛﻞ ﻣﺮة‪ ،‬وﻟﻜﻦ‬
‫ﺑﺎﺳﺘﺨﺪام ‪ ، UNUSED‬ﯾﻤﻜﻦ وﺿﻊ أﻛﺜﺮ ﻣﻦ ‪ Column‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺛﻢ ﺣﺬﻓﮭﺎ ﺟﻤﯿﻌﺎ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪.‬‬
‫ﯾﺠﺐ إﺿﺎﻓﺔ ﺟﻤﻠﺔ ‪ CASCADE CONSTRAINTS‬اذا ﻛﺎن ﻟﻞ ‪ Column‬ﻋﻼﻗﺔ ‪ Foreign key‬ﻣﻊ‬
‫‪ Column‬أﺧﺮ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺤﺐ ﻋﻠﻰ اﻷﻗﻞ أن ﯾﺒﻘﻰ ‪ Column‬واﺣﺪ ﻓﻲ ال ‪ Table‬ﺑﻌﺪ اﻟﺤﺬف وإﻻ ﻟﻦ ﺗﻨﺠﺢ ﻋﻤﻠﯿﺔ اﻟﺤﺬف ‪،‬‬
‫وﻻ ﯾﻤﻜﻦ اﺳﺘﺮﺟﺎع ال ‪ Column‬اﻟﻤﺤﺬوف ﺑﻌﺪ ﺣﺬﻓﮫ‪.‬‬

‫‪114‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.9‬‬

‫ﻟﺤﺬف ‪ Column‬ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ‪:‬‬

‫‪ALTER TABLE HR.TEST‬‬


‫;‪DROP COLUMN LAST CASCADE CONSTRAINTS‬‬

‫ﻓﻲ ﺣﺎﻟﺔ ال ‪ Column‬اﻟﺬي ﯾﺤﻮي ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة ‪ ،‬وﺗﻮﻗﻔﺖ ﻋﻤﻠﯿﺔ اﻟﺤﺬف ﻗﺒﻞ ﺣﺬف ال ‪ Column‬ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ‪:‬‬

‫‪ALTER TABLE HR.TEST‬‬


‫;‪DROP COLUMNS CONTINUE‬‬

‫ﻟﻮﺿﻊ ال ‪ Column‬ﻓﻲ ﺣﺎﻟﺔ ‪:UNUSED‬‬

‫‪ALTER TABLE HR.EMPLOYEES‬‬


‫;‪SET UNUSED COLUMN PHONE_NUMBER CASCADE CONSTRAINTS‬‬

‫ﻟﺤﺬف ال ‪:Unused Columns‬‬

‫‪ALTER TABLE HR.EMPLOYEES‬‬


‫;‪DROP UNUSED COLUMNS‬‬

‫‪:QUERYING TABLE INFORMATION‬‬

‫ﻟﻤﻌﺮﻓﺔ ال ‪ Unused Columns‬ﻓﻲ ال ‪ ،Table‬ﯾﺴﺘﺨﺪم ‪:‬‬

‫‪ :DBA_UNUSED_COL_TABS‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Columns‬اﻟﻤﻮﺿﻮﻋﺔ ﻓﻲ ﺣﺎﻟﺔ‬ ‫·‬


‫‪ ، UNUSED‬و اﺳﻢ ال ‪ Table‬واﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﻤﺎﻟﻚ ﻟﻞ ‪.Table‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Tables‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫· ‪ :DBA_TABLES‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﺪﯾﺪة ﻣﺜﻞ اﺳﻢ ال ‪ Table‬واﺳﻢ ال ‪ Tablespace‬اﻟﺘﻲ ﺗﻨﺘﻤﻲ‬


‫ﻟﮭﺎ ال ‪ Table‬و اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ال ‪ Table‬وﺧﻮاص ال ‪) Storage‬ﻣﺜﻞ ‪(PCTUSED‬‬
‫و ﻏﯿﺮھﺎ‪.‬‬
‫· ‪ :DBA_OBJECTS‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﺟﻤﯿﻊ اﻟﻌﻨﺎﺻﺮ "‪ "Objects‬ﻣﻦ ﺿﻤﻨﮭﺎ ال ‪.Table‬‬
‫ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﺘﻮﻓﺮة اﺳﻢ اﻟﻌﻨﺼﺮ و ﺗﻮﻗﯿﺖ ﺗﻜﻮﯾﻨﮫ و اﻟﺤﺎﻟﺔ اﻟﺘﻲ ھﻮ ﻋﻠﯿﮭﺎ و ﻏﯿﺮھﺎ ﻣﻦ‬
‫اﻟﻤﻌﻠﻮﻣﺎت‪.‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Columns‬ﻓﻲ ال ‪ Table‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_TAB_COLUMNS‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﺪﯾﺪة ﻣﺜﻞ اﺳﻢ ال ‪ Table‬واﺳﻢ ال ‪Column‬‬ ‫·‬


‫وﺧﻮاص ال ‪ Column‬وﻏﯿﺮھﺎ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻛﻤﺎ ﯾﻮﺟﺪ ‪ view‬ﺑﺎﺳﻢ ‪ DBA_TABLES‬ﯾﻮﺟﺪ اﯾﻀﺎً ‪USER_TABLES‬‬


‫و‪ .ALL_TABLES‬ﺗﺬﻛﺮ اﻗﺴﺎم ال ‪ Dictionary Views‬ﻓﻲ اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ‪.‬‬

‫‪115‬‬
‫‪MANAGING INDEXES‬‬

‫ﯾﺴﺎﻋﺪ ال ‪ Index‬ﻓﻲ ﺗﺴﺮﯾﻊ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻦ ال ‪ Tables‬ﻛﻤﺎ ﯾﺨﻔﻒ ﻣﻦ ال ‪Input/Output‬‬


‫اﻟﻨﺎﺗﺞ ﻋﻦ ال ‪) Queries‬ﻷﻧﮫ ﯾﻤﻨﻊ ﺣﺪوث ﺑﺤﺚ ﻛﺎﻣﻞ ﻋﻠﻰ ال ‪ Table‬ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت(‪ .‬ﯾﻮﺟﺪ‬
‫ﺧﻮاص ﻣﺸﺘﺮﻛﺔ ﺑﯿﻦ ال ‪ Table‬و ال ‪ ،Index‬ﺣﯿﺚ ﻛﻤﺎ أﻧﮫ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Partitioned Table‬ﯾﻤﻜﻦ‬
‫أﯾﻀﺎً ﺗﻜﻮﯾﻦ ‪ ،Partitioned Index‬اﯾﻀﺎً ﯾﻮﺟﺪ ‪ Storage Parameters‬ﻟﻞ ‪ Index‬ﻣﺸﺎﺑﮫ ﻟﻞ‬
‫‪ Storage Parameters‬ﻟﻞ ‪.Table‬‬
‫ﯾﻤﻜﻦ أن ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪ Index‬ل ‪ Column‬واﺣﺪ ﻓﻘﻂ وﯾﺴﻤﻰ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ‪ ، Single Index‬ﻛﻤﺎ‬
‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال ‪ Index‬ﻟﯿﺸﻤﻞ أﻛﺜﺮ ﻣﻦ ‪) Column‬اﻟﺤﺪ اﻷﻗﺼﻰ ‪ ( 32 Columns‬وﯾﺴﻤﻰ ﻓﻲ ھﺬه‬
‫اﻟﺤﺎﻟﺔ ‪ .Composite Index‬ﻻ ﯾﻮﺟﺪ ﺣﺪ ﻟﻌﺪد ال ‪ Indexes‬اﻟﺘﻲ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻨﮭﺎ ﻋﻠﻰ ال ‪ ، Table‬وﯾﺘﻢ‬
‫ادارة ال ‪ Index‬ﻣﻦ ﻗﺒﻞ ال ‪.Oracle Server‬‬

‫ﻣﻦ أﻧﻮاع ال ‪:Index‬‬

‫‪ :UNIQUE INDEX‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ھﺬه اﻟﻨﻮع ﻟﻀﻤﺎن ﻋﺪم وﺟﻮد ﺑﯿﺎﻧﺎت ﻣﺘﺸﺎﺑﮫ ﻓﻲ ال ‪Rows‬‬ ‫·‬
‫ﺿﻤﻦ ال ‪ Column‬اﻟﺬي ﺗﻢ ﺗﻜﻮﯾﻦ ‪ Index‬ﻋﻠﯿﮫ‪.‬‬
‫‪ :NON-UNIQUE INDEX‬ﯾﺴﻤﺢ ھﺬه اﻟﻨﻮع ﺑﺘﺸﺎﺑﮫ ﺑﯿﺎﻧﺎت ال ‪ Rows‬ﻓﻲ ال ‪ Column‬اﻟﺬي‬ ‫·‬
‫ﺗﻢ ﺗﻜﻮﯾﻦ ‪ Index‬ﻋﻠﯿﮫ‪.‬‬
‫‪ :FUNCTION-BASED INDEX‬ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ھﺬا اﻟﻨﻮع ﻟﺘﺴﺮﯾﻊ اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻦ ال‬ ‫·‬
‫‪ Columns‬اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﻋﻤﻠﯿﺎت ﻣﺨﺘﻠﻔﺔ"‪ "Functions‬ﻣﺜﻞ اﺳﺘﺨﺪام ال ‪ SUBSTR‬أو‬
‫‪ INSTR‬أو ‪ REPLACE‬أو ﻏﯿﺮھﺎ ﻓﻲ ال ‪.Column‬‬
‫‪ :PARTITIONED INDEX‬ﯾﺘﻢ ﺗﻜﻮﯾﻦ أﻛﺜﺮ ﻣﻦ ‪ INDEX‬ﻓﻲ أﻛﺜﺮ ﻣﻦ ‪ Segment‬ﻓﻲ‬ ‫·‬
‫‪ Tablespaces‬ﻣﺨﺘﻠﻔﺔ‪ .‬ﯾﺴﺘﺨﺪم ﻟﻞ ‪ Tables‬اﻟﺘﻲ ﺗﺤﻮي ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة ﺟﺪاً وﻏﺎﻟﺒﺎً ﻣﺎ ﯾﺴﺘﺨﺪم ﻟﻞ‬
‫‪.Partitioned Tables‬‬

‫ﯾﻤﻜﻦ أن ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪ Index‬اﻋﺘﻤﺎداً ﻋﻠﻰ ﻧﻤﻮذﺟﯿﻦ ھﻤﺎ ‪ B-Tree Index‬أو ‪.Bitmap Index‬‬

‫‪:B-TREE INDEX‬‬

‫اﻟﺘﻜﻮﯾﻦ اﻟﺪاﺧﻠﻰ ﻟﻞ ‪ Index‬ﯾﻜﻮن ﻋﻠﻰ ﺷﻜﻞ ﺷﺠﺮة ﻟﮭﺎ أﺻﻞ وﻓﺮوع ‪ .‬ﺗﺘﻜﻮن اﻟﺸﺠﺮة ﻣﻦ ﺛﻼﺛﺔ أﺟﺰاء ھﻲ ال‬
‫‪ Root‬اﻟﻤﺘﺼﻞ ﺑﺎل ‪ Branches‬اﻟﻤﺘﺼﻠﺔ ﺑﺎل ‪ Leafs‬اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ال ‪ Index Entries‬اﻟﺘﻲ ﺗﺸﯿﺮ أو‬
‫ﺗﺪل ﻋﻠﻰ ال ‪ Rows‬ﻓﻲ ال ‪ Table‬ﺑﺎﺳﺘﺨﺪام ال ‪ . ROWIDs Lists‬ﻓﻲ اﻟﺮﺳﻢ ‪ 7.1‬ﯾﺪل اﻟﺮﻗﻢ ‪ 1‬ﻋﻠﻰ ال‬
‫‪ ، Root‬اﻟﺮﻗﻢ ‪ 2‬ﻋﻠﻰ ال ‪ Branch‬واﻟﺮﻗﻢ ‪ 3‬ﻋﻠﻰ ال ‪.Leaf‬‬

‫ﯾﺘﻜﻮن ﻛﻞ ال ‪ Index Entry‬ﻣﻦ أرﺑﻌﺔ أﺟﺰاء ھﻲ‪:‬‬

‫‪ :HEADER‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻓﯿﮫ ﻋﺪد ال ‪ Columns‬اﻟﺘﻲ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻧﻮع ال ‪Single, ) Index‬‬ ‫·‬
‫‪.(Composite‬‬
‫‪ :COLUMN LENGTH‬اﻟﺬي ﯾﺤﺪد ﺣﺠﻢ ال ‪.Column‬‬ ‫·‬
‫‪ :COLUMN VALUE‬اﻟﺬي ﯾﺤﺪد ﻗﯿﻤﺔ ال ‪.Column‬‬ ‫·‬
‫‪ :ROWID‬أرﻗﺎم ال ‪ ROWIDs‬اﻟﺨﺎﺻﺔ ﺑﺎل ‪ Rows‬ﻓﻲ ال ‪.Table‬‬ ‫·‬

‫‪116‬‬
‫رﺳﻢ ‪7.1‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﻋﻨﺪﻣﺎ ﯾﺤﺪث ﻋﻤﻠﯿﺔ ‪ INSERT‬ﻟﻞ ‪ Table‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺈﺿﺎﻓﺔ ‪ Index Entry‬ﺟﺪﯾﺪ ﻟﯿﻤﺜﻞ ال ‪Rows‬‬
‫اﻟﺠﺪﯾﺪة اﻟﻤﻀﺎﻓﺔ‪.‬‬
‫‪ -2‬ﻻ ﯾﻤﻜﻦ اﻹﺳﺘﻔﺎدة ﻣﻦ ‪ B-Tree Index‬ﻓﻲ ال ‪ Rows‬اﻟﺘﻲ ﺗﺤﻮي ﻋﻠﻰ ‪ .NULL‬أي ﻋﻨﺪ اﻟﺒﺤﺚ ﺑﻮاﺳﻄﺔ‬
‫ﺟﻤﻠﺔ ‪ WHERE‬ﻋﻦ ﻗﯿﻤﺔ ‪ (where last_name = null) NULL‬ﻓﺈن اﻷوراﻛﻞ ﯾﻘﻮم ﺑﺈﺟﺮاء ﺑﺤﺚ ﻛﺎﻣﻞ‬
‫ﻋﻠﻰ ال ‪ Table‬وﻻ ﯾﻘﻮم ﺑﺎﺳﺘﺨﺪام ال ‪.Index‬‬
‫‪ -3‬ﯾﻔﻀﻞ اﺳﺘﺨﺪاﻣﮭﺎ ﻋﻠﻰ ال ‪ Column‬اﻟﺬي ﯾﺤﻮي ﺑﯿﺎﻧﺎت ﻣﺨﺘﻠﻔﺔ )ﻣﻤﯿﺰة( ﻛﺒﯿﺮة ﻣﺜﻞ أرﻗﺎم اﻟﮭﺎﺗﻒ‬
‫وﻋﻨﺎوﯾﻦ اﻟﻤﻮﻇﻔﯿﻦ ‪.‬‬
‫‪ -4‬ﻻ ﯾﻔﻀﻞ اﺳﺘﺨﺪاﻣﮭﺎ ﻋﻠﻰ ال ‪ Columns‬اﻟﺘﻲ ﺗﺘﻌﺮض ﻟﺠﻤﻠﺔ ال ‪ OR‬ﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ‪.‬‬

‫‪:BITMAP INDEX‬‬

‫اﻟﺘﻜﻮﯾﻦ اﻟﺪاﺧﻠﻰ ﻟﻞ ‪ Index‬ﯾﺸﺒﮫ ﺗﻜﻮﯾﻦ ال ‪ B-Tree‬ﻋﺪا ﻋﻦ اﺳﺘﺨﺪام ‪ ROWIDs‬ﯾﺘﻢ اﺳﺘﺨﺪام ﺧﺮﯾﻄﺔ‬


‫ﺑﺎﯾﺘﺎت "‪ "Bitmap‬ﻟﺘﺤﺪﯾﺪ ال ‪ Rows‬ﻓﻲ ال ‪ Table‬ﺑﺤﯿﺚ ﯾﻤﺜﻞ ﻛﻞ ﺑﺎﯾﺖ ‪. ROWID‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﯾﻔﻀﻞ اﺳﺘﺨﺪاﻣﮭﺎ ﻋﻠﻰ ال ‪ Column‬اﻟﺬي ﻻ ﯾﺤﺪث ﻟﺒﯿﺎﻧﺎﺗﮫ ﺗﺠﺪﯾﺪ ﻣﺴﺘﻤﺮ "‪."Low Update‬‬
‫‪ -2‬ﯾﻔﻀﻞ اﺳﺘﺨﺪاﻣﮭﺎ ﻋﻨﺪ اﺳﺘﺨﺪام ‪ WHERE‬أو ‪ OR‬ﺑﺸﻜﻞ ﻣﺘﻜﺮر‪.‬‬
‫‪ -3‬ﯾﻔﻀﻞ اﺳﺘﺨﺪاﻣﮭﺎ ﻋﻠﻰ ال ‪ Table‬اﻟﺘﻲ ﺗﺤﻮي ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة ﺟﺪاً وﻧﺴﺒﺔ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺘﻠﻔﺔ )اﻟﻤﻤﯿﺰة( ﻗﻠﯿﻞ‬
‫ﺟﺪاً ﻣﺜﻞ ﻧﻮع اﻹﻧﺴﺎن )ذﻛﺮ أو اﻧﺜﻰ(‪.‬‬
‫‪ -4‬ﻋﻨﺪﻣﺎ ﯾﺤﺪث ﺗﻐﯿﯿﺮ ﻟﺒﯿﺎﻧﺎت ال ‪ ،Column‬ﯾﺘﻢ ﺗﺠﺪﯾﺪ ال ‪ Bitmap‬ﻟﺘﻨﺎﺳﺐ اﻟﺘﻐﯿﯿﺮ‪.‬‬

‫‪117‬‬
:CREATING B-TREE INDEXES

:‫ ﯾﻨﺼﺢ ﺑﺎﻟﺘﺎﻟﻲ‬Index ‫ﻗﺒﻞ ﺗﻜﻮﯾﻦ ال‬

‫ ﻷن ال‬،‫ ﻛﺜﯿﺮة‬DML ‫ ﺗﺠﺮي ﻋﻠﯿﮭﺎ ﻋﻤﻠﯿﺎت‬Table ‫ ﻋﻠﻰ‬Indexes ‫ﺗﻜﻮﯾﻦ أﻗﻞ ﻋﺪد ﻣﻤﻜﻦ ﻣﻦ ال‬ ·
.‫ ﯾﺒﻄﺊ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﻌﻤﻠﯿﺎت‬Indexes

.‫ ﺧﺎﺻﺔ‬Tablespace ‫ ﻓﻲ‬Indexes ‫وﺿﻊ ال‬ ·

.‫ اﻟﻜﺒﯿﺮة‬Indexes ‫ ﻟﻞ‬NOLOGGING ‫اﺧﺘﯿﺎر‬ ·

.Table ‫ ﯾﺠﺐ أن ﺗﻜﻮن أﻛﺒﺮ ﻣﻦ ﻣﺜﯿﻠﺘﮭﺎ اﻟﺘﻲ ﺣﺪدت ﻋﻠﻰ ال‬INITRANS ‫ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ‬ ·

:‫ ﯾﺠﺐ اﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‬B-Tree Index ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE [UNIQUE] INDEX index_name


ON [schema.]TABLE (Column [ASC | DESC] , Column [ASC|DESC] , …)
[TABLESPACE tablespace_name]
[PCTFREE number]
[MAXTRANS number]
[MINTRANS number]
[LOGGING | NOLOGGING]
[NOSORT]
[STORAGE INITIAL number K|M NEXT number K|M …..]

:‫ﻓﻲ اﻟﻘﺎﻋﺪة‬
‫ ﻟﻜﻲ ﺗﺴﺘﻘﺒﻞ ال‬Index ‫ ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال‬Block ‫ ھﻲ اﻟﻤﺴﺎﺣﺔ اﻟﺘﻲ ﺗﺤﺠﺰ ﻓﻲ ﻛﻞ‬:PCTFREE ·
.‫ اﻟﺠﺪﯾﺪة‬Indexes
Oracle ‫ ﻣﺮﺗﺒﺔ ﺑﺎﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي وﺑﺎﻟﺘﺎﻟﻲ ﻻ ﯾﺠﺐ ﻋﻠﻰ ال‬Rows ‫ ﺗﺤﺪد أن ال‬:NOSORT ·
.Index ‫ ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال‬Rows ‫ ﺗﺮﺗﯿﺐ ال‬Server
‫ ﺑﺸﻜﻞ ﺗﺼﺎﻋﺪي أو‬Index ‫ ﺗﻜﻮﯾﻦ ال‬Oracle Server ‫ ﺗﺤﺪﯾﺪ اذا ﻣﺎ ﻛﺎن ﻋﻠﻰ ال‬:ASC|DESC ·
.‫ﺗﻨﺎزﻟﻲ‬

.Index ‫ ﻟﻞ‬PCTUSED ‫ ﻻ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ال‬:‫ﻣﻼﺣﻈﺔ‬

:7.10 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

:B-Tree Non-Unique Index ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE INDEX ind_HR_test


ON HR.TEST (FIRST)
PCTFREE 30
STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE INDX;

.‫ ﻣﺒﺎﺷﺮة‬CREATE ‫ ﺑﻌﺪ‬UNIQUE ‫ أﺿﻒ ﻛﻠﻤﺔ‬B-Tree Unique Index ‫ﻟﺘﻜﻮﯾﻦ‬

118
‫‪:CREATING BITMAP INDEXES‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ Bitmap Index‬ﯾﺠﺐ إﺿﺎﻓﺔ ﻛﻠﻤﺔ ‪ BITMAP‬اﻟﻰ ﺟﻤﻠﺔ ‪ CREATE INDEX‬اﻟﺘﻲ ﺗﻢ‬
‫اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ اﻟﻤﺜﺎل ‪ .7.10‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ اﻟﺤﺠﻢ اﻟﻤﺨﺼﺺ ﻣﻦ اﻟﺬاﻛﺮة ﻟﺘﺨﺰﯾﻦ ال‪ Bitmap‬ﺑﺘﺤﺪﯾﺪ‬
‫اﻟﻌﺎﻣﻞ ‪ CREATE_BITMAP_AREA_SIZE‬اﻟﺬي ﻗﯿﻤﺘﮫ ﻓﻲ اﻟﺤﺎﻟﺔ ‪ Default‬ھﻮ ‪.8MB‬‬
‫ﺑﺰﯾﺎدة ﺣﺠﻢ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ‪ ،‬ﯾﺘﻢ ﺗﻜﻮﯾﻦ ال ‪ Index‬ﺑﺴﺮﻋﺔ أﻛﺒﺮ‪ ،‬وﻟﻜﻦ ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪام ﻗﯿﻤﺔ ﺻﻐﯿﺮة اذا ﻛﺎﻧﺖ‬
‫اﻟﺒﯿﺎﻧﺎت اﻟﻤﻤﯿﺰة )اﻟﻤﺨﺘﻠﻔﺔ( ﻓﻲ ال ‪ Column‬ﻗﻠﯿﻠﺔ ﺟﺪاً )ﺑﯿﺎﻧﺎت ﻣﺨﺘﻠﻔﺔ ﻛﺒﯿﺮة = ذاﻛﺮة ﻛﺒﯿﺮة(‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.11‬‬

‫‪CREATE BITMAP INDEX ind_HR_jobid‬‬


‫)‪ON HR.JOBS (JOB_ID‬‬
‫‪PCTFREE 30‬‬
‫)‪STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50‬‬
‫;‪TABLESPACE INDX‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.12‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ B-Tree Index‬أو ‪ Bitmap Index‬ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﻣﺠﻠﺪ ‪ Index‬ﺛﻢ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة اﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ‪.Create‬‬ ‫·‬
‫ادﺧﻞ اﺳﻢ ال ‪ Index‬وأﺧﺘﺮ ال ‪ Schema‬و ال ‪ Tablespace‬ﻣﻦ اﻟﻘﻮاﺋﻢ ‪ ،‬ﺛﻢ اﺧﺘﺮ ال ‪Column‬‬ ‫·‬
‫أو ال ‪ Columns‬اﻟﻤﺮاد وﺿﻊ ‪ Index‬ﻟﮭﺎ ﻣﻦ ﻗﺎﺋﻤﺔ ‪.Table Columns‬‬
‫ﻟﺘﻜﻮﯾﻦ ‪ ، Bitmap Index‬ﺿﻊ ﻋﻼﻣﺔ داﺧﻞ اﻟﻤﺮﺑﻊ اﻟﺼﻐﯿﺮ )ﻓﻮق زر ‪ (Create‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ‬ ‫·‬
‫‪.Bitmap‬‬
‫أﺧﺘﺮ ﺑﺎﻗﻲ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻘﻮاﺋﻢ اﻷﺧﺮى )‪(Storage, Partitions, Options‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ زر ‪.Create‬‬ ‫·‬

‫‪119‬‬
‫‪:ALTERING INDEXES‬‬

‫ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻌﺪة ﻣﮭﻤﺎت ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪:ALTER INDEX‬‬

‫‪:Changing the Block Storage Parameters‬‬

‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻢ ﺑﻌﺾ اﻟﻌﻮاﻣﻞ ﻣﺜﻞ ‪ MAXTRANS‬وﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﺑﻌﺾ ﻋﻮاﻣﻞ ﺟﻤﻠﺔ ال ‪ Storage‬ﻣﺜﻞ ال‬
‫‪.MAXEXTENTS‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.13‬‬

‫‪ALTER INDEX ind_HR_jobid‬‬


‫‪MAXTRANS 250‬‬
‫;)‪STORAGE (MAXEXTENTS 200‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Index‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ال ‪ Index‬اﻟﻤﺮاد ﺗﻐﯿﯿﺮ ﺧﻮاﺻﮭﺎ )ﻣﺜﻞ ‪(HR‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ ال ‪ Index‬ﻣﻦ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ و اﺿﻐﻂ ﻋﻠﯿﮭﺎ ﻣﺮﺗﯿﻦ )أو ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ‪ ،‬اﺧﺘﺮ‬ ‫·‬
‫ﻣﻦ اﻟﻘﺎﺋﻤﺔ "‪."View\Edit Details‬‬
‫ادﺧﻞ اﻟﻰ ﻗﺎﺋﻤﺔ ‪ ، Storage‬وﻋﺪل اﻟﺒﯿﺎﻧﺎت ﺛﻢ اﺧﺘﺮ ‪.Apply‬‬ ‫·‬

‫‪:Allocating & Deallocating Extents‬‬

‫ﯾﻤﻜﻦ اﺿﺎﻓﺔ ‪ Extents‬اﻟﻰ ﻣﺴﺎﺣﺔ ال ‪ Index‬ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ إﺿﺎﻓﺔ ‪ Extent‬اﻟﻰ ال ‪Table‬‬
‫ﺑﻨﻔﺲ اﻟﺸﺮوط‪ .‬ﻛﻤﺎ ﯾﻤﻜﻦ ﺣﺬف ‪ Extents‬ﻓﺎرﻏﺔ ﻏﯿﺮ ﻣﺴﺘﺨﺪﻣﺔ ﻣﻦ ﻣﺴﺎﺣﺔ ال ‪ Index‬ﺑﺘﻌﻮﯾﺾ ﺟﻤﻠﺔ ال‬
‫‪ ALLOCATE EXTENT‬ﺑﺎﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫]]‪DEALLOCATE UNUSED [KEEP number [K|M‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :KEEP‬ﻹﺑﻘﺎء ﻣﺴﺎﺣﺔ ﺧﺎﻟﯿﺔ ﻣﻦ ال ‪.Unused Extents‬‬ ‫·‬

‫‪120‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.14‬‬

‫ﻹﺿﺎﻓﺔ ‪: Extent‬‬

‫‪ALTER INDEX ind_HR_jobid‬‬


‫;‪ALLOCATE EXTENT SIZE 200K‬‬

‫ﻟﺤﺬف ﻣﺴﺎﺣﺔ ﺧﺎﻟﯿﺔ )‪:(Extents‬‬

‫‪ALTER INDEX ind_HR_jobid‬‬


‫;‪DEALLOCATE UNUSED‬‬

‫‪:Rebuilding Indexes‬‬

‫ﻟﻨﻘﻞ ال ‪ Index‬اﻟﻰ ‪ Tablespace‬أﺧﺮى أو ﻟﺘﻐﯿﯿﺮ ﺧﻮاص ال ‪ Storage Parameters‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‬


‫‪ ALTER INDEX‬ﻣﻊ ‪ REBUILD‬ﻛﻤﺎ ﺗﻮﺿﺢ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ALTER INDEX [schema.]Index_name REBUILD‬‬


‫]‪[TABLESPACE tablespace_name‬‬
‫]‪[PCTFREE number‬‬
‫]‪[INITRANS number‬‬
‫]‪[MAXTRANS number‬‬
‫]‪[LOGGING | NOLOGGING‬‬
‫]‪[REVERSE | NOREVERSE‬‬
‫]‪[STORAGE (INITIAL SIZE [K|M] NEXT SIZE [K|M] ….‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :REVERSE‬ﯾﻤﻜﻦ ﺗﺤﻮﯾﻞ ال ‪ Index‬اﻟﻰ ﻧﻮع ‪ Reverse Key Index‬ﺑﺎﺿﺎﻓﺔ اﻟﺠﻤﻠﺔ اﻟﻰ‬ ‫·‬
‫اﻟﻘﺎﻋﺪة‪ .‬ھﺬا اﻟﻨﻮع ﯾﻌﺮف ﺑﯿﺎﻧﺎت ال ‪ Column‬ﺑﺸﻜﻞ ﻋﻜﺴﻲ ‪ ،‬ﻣﺜﻼً ﻟﻮ ﻛﺎن ‪ Order_ID‬ﯾﺤﺘﻮي‬
‫ﻋﻠﻰ اﻟﺮﻗﻢ ‪ 12345‬ﻓﺈن اﻷوراﻛﻞ ﯾﻌﻜﺲ اﻟﺮﻗﻢ اﻟﻰ ‪ 54321‬وﯾﻀﯿﻒ ال ‪ Column‬اﻟﻰ ال ‪.Index‬‬
‫ھﺬا اﻟﻨﻮع ﺑﺴﺘﺨﺪم ﺑﺎﻟﻌﺎدة ﻣﻊ ال ‪ Columns‬اﻟﻤﻌﺮﻓﺔ ﺑﯿﺎﻧﺎﺗﮭﺎ ﺑﺸﻜﻞ ﺗﺼﺎﻋﺪي‪ ،‬اذ ﯾﺘﻢ ﺗﻮزﯾﻊ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﺘﻘﺎرﺑﺔ اﻟﻰ ‪ Leafs‬ﻣﺨﺘﻠﻔﺔ ﻟﯿﺘﻢ ﺗﺴﮭﯿﻞ أﺧﺮاج اﻟﺒﯿﺎﻧﺎت ﺑﺴﺮﻋﺔ أﻛﺒﺮ‪.‬‬

‫ﻧﺘﺎﺋﺞ ﻋﻤﻠﯿﺔ ال ‪: Rebuild Index‬‬

‫ﺑﻌﺪ اﻧﺘﮭﺎء اﻟﻌﻠﻤﯿﺔ‪ ،‬ﯾﺘﻢ ﺗﻜﻮﯾﻦ ‪ Index‬ﺟﺪﯾﺪ و ﺣﺬف اﻷﺻﻠﻲ‪ ،‬ﺑﺤﯿﺚ ﺗﺴﺎﻋﺪ ﻋﻠﻰ ﺗﻜﻮﯾﻦ ‪ Index‬ﺟﺪﯾﺪ‬ ‫·‬
‫ﻣﺘﻜﺎﻣﻞ ﻏﯿﺮ ال ‪ Index‬اﻷﺻﻠﻲ اﻟﺬي ﻗﺪ ﯾﻜﻮن ﻗﺪ ﻓﻘﺪ ﺟﺰء ﻣﻦ ﻣﺴﺎﺣﺔ ﻧﺘﯿﺠﺔ ﻟﻠﺘﻐﯿﺮات اﻟﺘﻲ ﺗﻄﺮأ ﻋﻠﻰ‬
‫ال ‪ Rows‬ﻣﺜﻞ ﺣﺬف اﻟﺒﯿﺎﻧﺎت و ﺗﺠﺪﯾﺪھﺎ )‪ ، (Fragmentation‬وﺑﺎﻟﺘﺎﻟﻲ اﺳﺘﺨﺪام وﺗﺨﺼﯿﺺ‬
‫اﻟﻤﺴﺎﺣﺔ ﺑﺸﻜﻞ أﻓﻀﻞ‪.‬‬

‫ﺧﻼل اﻟﻌﻤﻠﯿﺔ ‪ ،‬ﯾﻤﻜﻦ ﻟﻞ ‪ Queries‬اﺳﺘﺨﺪام ال ‪ Index‬اﻷﺻﻠﻲ‪.‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪام ‪ Rebuild‬ﻟﺘﻐﯿﯿﺮ ال ‪ Index‬ﻣﻦ ‪ B-Tree‬اﻟﻰ ‪ Bitmap‬أو ﺑﺎﻟﻌﻜﺲ‪.‬‬

‫‪121‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.15‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﯿﻠﺔ ‪ Rebuild‬ﻋﻠﻰ ال ‪:Index‬‬

‫‪ALTER INDEX ind_HR_Jobid REBUILD‬‬


‫;‪TABLESPACE INDX02‬‬

‫‪:Rebuilding ONLINE‬‬

‫أﺣﯿﺎﻧﺎً ﺗﺴﺘﮭﻠﻚ ﻋﻤﻠﯿﺔ ‪ Rebuild‬وﻗﺖ ﻛﺒﯿﺮ ﺟﺪاً ﻋﻨﺪﻣﺎ ﺗﻜﻮن ال ‪ Table‬ﻛﺒﯿﺮة ﺟﺪاً‪ .‬ﻓﻲ اﻟﺴﺎﺑﻖ ﻟﻢ ﯾﻜﻦ ﺑﺎﻟﻤﻘﺪور‬
‫اﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت ال ‪ DML‬ﻋﻠﻰ ال ‪ Table‬اﻟﺘﻲ ﯾﺠﺮي ﻋﻤﻠﯿﺔ ‪ Rebuild Index‬ﻋﻠﻰ ‪ Index‬ﻣﺨﺼﺼﺔ ﻟﮭﺎ‪.‬‬
‫ﻓﻲ اﻟﻨﺴﺦ اﻟﺤﺪﯾﺜﺔ ﻣﻦ أوراﻛﻞ )‪ Oracle8i‬و ‪ (Oracle9i‬ﯾﻤﻜﻦ أن ﺗﺠﺮي ﻣﮭﻤﺎت ال ‪ DML‬ﺑﯿﻨﻤﺎ ﺗﺘﻢ ﻋﻤﻠﯿﺔ‬
‫‪ Rebuild Index‬ﺑﺈﺿﺎﻓﺔ ‪ ONLINE‬اﻟﻰ ﺟﺎﻧﺐ ‪ ،REBUILD‬وﻟﻜﻦ ﻻ ﯾﻨﺼﺢ ﺑﺎﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت ﻛﺒﯿﺮة‬
‫وﯾﻔﻀﻞ اﻻﻗﺘﺼﺎر ﻋﻠﻰ اﻟﻤﮭﻤﺎت اﻟﺼﻐﯿﺮة‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﺴﻤﺢ ﺑﻜﻞ اﻷﺣﻮال اﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت ال ‪ DDL‬ﻋﻠﻰ ال ‪ Table‬ﺧﻼل ال ‪.Rebuild Index‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.16‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﯿﻠﺔ ‪ Rebuild Online‬ﻋﻠﻰ ال ‪:Index‬‬

‫;‪ALTER INDEX ind_HR_Jobid REBUILD ONLINE‬‬

‫‪:Coalescing Indexes‬‬

‫ﯾﻤﻜﻦ اﻟﺘﺨﻠﺺ ﻣﻦ أﺛﺎر ال ‪ Fragmentation‬ﻓﻲ ال ‪ Index‬ﺑﺎﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Coalesce‬ﻋﻠﻰ ال ‪.Index‬‬


‫ﻛﻤﺎ ﯾﺒﺪو ﻓﻲ اﻟﺮﺳﻢ ‪ ،7.2‬وﺟﻮد ‪ leafs 2‬ﺗﻌﺮﺿﺘﺎ ﻟﻌﻤﻠﯿﺎت أدت اﻟﻰ ﺣﺪوث ‪ Fragmentation‬ﻓﺄﺻﺒﺤﺖ ﻛﻞ‬
‫واﺣﺪ ﻣﻨﮭﻤﺎ ﻧﺼﻒ ﻣﻤﺘﻠﺌﺔ‪ ،‬وﻟﻜﻦ ﺑﻌﺪ ﺣﻮدث ‪ Coalesce‬ﺗﻢ دﻣﺞ اﻟﻨﺼﻔﯿﻦ ﻣﻊ ﺑﻌﻀﮭﻤﺎ ﻣﻤﺎ ﻧﺘﺞ ﻋﻦ وﺟﻮد‬
‫‪ Leaf‬ﻓﺎرﻏﺔ ﺗﻤﺎﻣﺎ‪.‬‬

‫رﺳﻢ ‪7.2‬‬

‫‪122‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.17‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Coalescing‬ﻟﻞ ‪:Index‬‬

‫;‪ALTER INDEX HR.ind_hr_jobid COALESCE‬‬

‫‪:Identify Unused Indexes‬‬

‫ﯾﻤﻜﻦ وﺿﻊ ‪ Index‬ﺗﺤﺖ اﻟﻤﺮاﻗﺒﺔ ﻟﻤﻌﺮﻓﺔ اذا ﻛﺎن ﯾﺴﺘﺨﺪم أم ﻻ‪ ،‬وﺑﺎﻟﺘﺎﻟﻲ ﺣﺬﻓﮫ ﻓﻲ ﺣﺎل ﻋﺪم اﺳﺘﺨﺪاﻣﮫ‪ .‬ﯾﺘﻢ‬
‫ﺟﻤﻊ اﻟﻤﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ index‬اﻟﻤﺮاﻗﺐ ﻓﻲ ‪.V$OBJECT_USAGE‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻛﻞ ﻣﺮة ﯾﺘﻢ ﻓﯿﮭﺎ ﻣﺮاﻗﺒﺔ ال ‪ ، Index‬ﯾﺘﻢ إﻟﻐﺎء اﻟﺒﯿﺎﻧﺎت اﻟﺴﺎﺑﻘﺔ ﻟﻞ ‪ Index‬ﻓﻲ‬
‫ال ‪.V$OBJECT_USAGE‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.18‬‬

‫ﻟﻮﺿﻊ ال ‪ Index‬ﺗﺤﺖ اﻟﻤﺮاﻗﺒﺔ‪:‬‬

‫;‪ALTER INDEX HR.ind_hr_jobid MONITORING USAGE‬‬

‫ﻟﻮﻗﻒ ﻣﺮاﻗﺒﺔ ال ‪:Index‬‬

‫;‪ALTER INDEX HR.ind_hr_jobid NOMONITORING USAGE‬‬

‫‪:ANALYZING INDEXES‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ ANALYZE INDEX‬ﻟﻠﻘﯿﺎم‪:‬‬

‫اﻟﺘﺄﻛﺪ ﻣﻦ أن ال ‪ Blocks‬اﻟﺨﺎﺻﺔ ﺑﺎل ‪ Index‬ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻓﺎﺳﺪة " ‪Block‬‬ ‫·‬
‫‪."Corruption‬‬
‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪.Index‬‬ ‫·‬

‫ﺑﻌﺪ اﻟﻘﯿﺎم ب ‪ ANALYZE INDEX‬ﯾﺘﻢ ﺗﺨﺰﯾﻦ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Index‬ﻓﻲ ‪ View‬اﺳﻤﮫ‬


‫‪ ، INDEX_STATS‬ﯾﻌﺮض ھﺬا ال ‪ View‬ﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻋﺪد ال ‪ Blocks‬وﻋﺪد ال ‪ Blocks‬اﻟﻤﺴﺘﺨﺪم‬
‫وﻟﻜﻦ أھﻢ ﻣﻦ ذﻟﻚ ھﻮ رﻗﻤﻲ ﻛﻞ ﻣﻦ ‪ LF_ROWS‬و ‪ ، DEL_LF_ROWS‬ﺑﺤﯿﺚ اذا زادت اﻟﻨﺴﺒﺔ ﺑﯿﻦ‬
‫اﻟﺮﻗﻤﯿﻦ ﻋﻦ ‪) 30%‬ﻣﺜﻼً اﻟﺮﻗﻢ اﻷول ﯾﺴﺎوي ‪ 50‬واﻟﺜﺎﻧﻲ ﯾﺴﺎوي ‪ ،100‬ﻓﮭﺬا ﯾﻌﻨﻲ اﻟﻨﺴﺒﺔ ‪ (%50‬ﻓﮭﺬا ﯾﻌﻨﻲ‬
‫أن ال ‪ Index‬ﺗﻌﺮض ﻟﺤﺬف ﺑﯿﺎﻧﺎت "‪ "Rows‬ﻛﺜﯿﺮة ﻣﻤﺎ ﻗﺪ ﯾﻨﺘﺠﮫ ﻋﻦ ‪ Fragmentation‬ﻓﻲ ال ‪.Index‬‬

‫‪123‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.19‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Analyze‬ﻟﻞ ‪:Index‬‬

‫;‪ANALYZE INDEX HR.JOB_ID_PK VALIDATE STRUCTURE‬‬

‫ﺑﻌﺪ ذﻟﻚ اﺳﺘﺨﺮج اﻟﻤﻌﻠﻮﻣﺎت ﻣﻦ ‪:INDEX_STATS‬‬

‫‪SELECT BLOCKS , PCT_USED, LF_ROWS , DEL_LF_ROWS‬‬


‫;‪FROM INDEX_STATS‬‬

‫ﯾﻈﮭﺮ ﻓﻲ ﺟﮭﺎزي اﻟﻨﺎﺗﺞ اﻟﺘﺎﻟﻲ‪:‬‬

‫‪BLOCKS PCT_USED LF_ROWS DEL_LF_ROWS‬‬


‫‪----------- ---------- ---------- ----------‬‬
‫‪0‬‬ ‫‪19‬‬ ‫‪9‬‬ ‫‪16‬‬

‫وﻛﻤﺎ ﺗﻼﺣﻆ اﻟﻨﺴﺒﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ ﻻ ﺗﺘﺠﺎوز ال ‪.30%‬‬

‫‪:DROPPING INDEXES‬‬

‫ﻋﻨﺪ ﻋﺪم اﻟﺤﺎﺟﺔ ﻟﻞ ‪ Index‬أو ﻋﻨﺪ ﺣﺪوث ﺧﻠﻞ ﻟﮫ أو ﻋﻨﺪ ﺗﺤﻮل ﺣﺎﻟﺔ ال ‪ Index‬اﻟﻰ ‪ INVALID‬ﺑﺴﺒﺐ‬
‫ﺣﺪوث ﺧﻠﻞ ﻟﻞ ‪ ، Instance‬ﯾﻤﻜﻦ ﺣﺬف ال ‪ Index‬ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪.DROP INDEX‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ ﺣﺬف ال ‪ Index‬اذا ﻛﺎن ‪ Primary Key‬أو ‪ Unique Key‬وﻟﺪﯾﮫ ﻋﻼﻗﺔ ﻣﻊ ‪.FK‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.20‬‬

‫ﻟﺤﺬف ‪:Index‬‬

‫;‪DROP INDEX hr.ind_hr_jobid‬‬

‫أو ﻋﺒﺮ ال ‪ Console‬ﺑﺎﺗﺒﺎع اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Index‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ال ‪ Index‬اﻟﻤﺮاد ﺣﺬﻓﮫ )ﻣﺜﻞ ‪(HR‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ ال ‪ Index‬ﻣﻦ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ و ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ‪ ،‬اﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ‬ ‫·‬
‫"‪ )"Remove‬أو ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻷﺳﺎﺳﯿﺔ‪ Object ،‬ﺛﻢ ‪.(Remove‬‬
‫اﺧﺘﺮ ‪.Yes‬‬ ‫·‬

‫‪124‬‬
‫‪:QUERYING INDEX INFORMATION‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Index‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام‪:‬‬

‫‪ :DBA_INDEXES‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﺪﯾﺪة ﻣﺜﻞ اﺳﻢ ال ‪ Index‬وﻧﻮﻋﮫ واﺳﻢ ال ‪Table‬اﻟﺘﻲ‬ ‫·‬


‫ﯾﻨﺘﻤﻲ ﻟﮭﺎ ال ‪ Index‬واﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ال ‪ Index‬وﺧﻮاص ال ‪ Storage‬وﻏﯿﺮھﺎ‪.‬‬

‫‪ :DBA_IND_COLUMNS‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﺪﯾﺪة ﻣﺜﻞ اﺳﻢ ال ‪ Index‬واﺳﻢ ال ‪Column‬‬ ‫·‬


‫اﻟﺘﻲ وﺿﻊ ﻋﻠﯿﮭﺎ ال ‪ Index‬وﺧﻮاص ال ‪ Column‬وﻏﯿﺮھﺎ‪.‬‬

‫‪ :DBA_IND_EXPRESSIONS‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪.Function-Based Indexes‬‬ ‫·‬

‫‪ :V$OBJECT_USAGE‬ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻧﺎﺗﺠﺔ ﻋﻦ ﻋﻤﻠﯿﺔ ‪ . Monitoring Index‬ﯾﻮﻓﺮ‬ ‫·‬


‫ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﻣﺜﻞ اﺳﻢ ال ‪ Index‬وﻧﻮﻋﮫ واﺳﻢ ال ‪Table‬اﻟﺘﻲ ﯾﻨﺘﻤﻲ ﻟﮭﺎ ال ‪ Index‬واذا ﻣﺎ ﻛﺎن‬
‫ﯾﺤﺮى ﻋﻤﻠﯿﺔ ‪ Monitoring‬ﻋﻠﻰ ال ‪ Index‬أم ﻻ ) ‪ USED‬اﻟﺘﻲ ﺗﺪل ﻋﻠﻰ اذا ﻣﺎ ﻛﺎن ﺗﻢ اﺳﺘﺨﺪام‬
‫ال ‪ Index‬ﺧﻼل اﻟﻤﺮاﻗﺒﺔ (‪ ،‬وﻗﺖ ﺑﺪاﯾﺔ واﻧﺘﮭﺎء اﻟﻤﺮاﻗﺒﺔ "‪."Monitoring‬‬

‫‪125‬‬
‫‪MANAGING CONSTRAINTS‬‬

‫ﯾﻤﻜﻦ وﺿﻊ ﻗﻮاﻧﯿﻦ ﻋﻠﻰ ال ‪) Data‬ﻣﺜﻼً ﻋﺪم اﻟﺴﻤﺎح ﺑﻮﺟﻮد ﺑﯿﺎﻧﺎت ﻣﺘﺸﺎﺑﮫ ﻓﻲ ‪ ،(Column‬ﺑﺎﺳﺘﺨﺪام ﻛﻞ ﻣﻦ‬
‫‪ ، Database Triggers ، Application Code‬و ‪.Integrity Constraints‬‬
‫ال ‪ Application Code‬ﻋﺒﺎرة ﻋﻦ ﺑﺮﻣﺠﺔ ﻛﻮد ﻣﺤﺪد )ﻣﺜﻞ ﺑﺮﻣﺠﺔ اﻟﺠﺎﻓﺎ( ﯾﻌﻤﻞ ﻛﺒﺮﻧﺎﻣﺞ ﻟﻮﺣﺪه ﻓﻲ ال‬
‫‪ Client‬أو ﻣﻦ ﺿﻤﻦ ال ‪ Database‬ﻋﻠﻰ ﺷﻜﻞ ‪ .Procedure‬أﻣﺎ ال ‪ Database Triggers‬ﻓﮭﻲ ﺑﺮاﻣﺞ‬
‫ﻣﻦ ﺗﻜﻮﯾﻦ ‪ ، PL/SQL‬ﯾﺘﻢ ﺗﻨﻔﯿﺬھﺎ ﻋﻨﺪ ﺣﺪوث ﻣﮭﻤﺔ ﻣﺤﺪدة ﻓﻲ ال ‪ Database‬ﻣﺜﻞ اﻟﻘﯿﺎم ب ‪ INSERT‬أو‬
‫‪.UPDATE‬‬

‫‪:INTEGRITY CONSTRAINTS‬‬

‫ﯾﻔﻀﻞ اﺳﺘﺨﺪام ھﺬا اﻟﻨﻮع ﻋﻦ اﻟﻨﻮﻋﯿﯿﻦ اﻷﺧﺮﯾﯿﻦ ﻟﺴﮭﻮﻟﺔ ﺗﻜﻮﯾﻨﮫ وﺗﻌﺪﯾﻠﮫ ‪ ،‬وﻟﺴﮭﻮﻟﺔ ﺗﺸﻐﯿﻠﮫ أو وﻗﻒ ﺗﺸﻐﯿﻠﮫ‪،‬‬
‫وﻹﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺮاج ﻣﻌﻠﻮﻣﺎت ﻋﻨﮫ ﻣﻦ ال ‪ .Data Dictionary‬ﯾﻮﺟﺪ ﻋﺪة أﻧﻮاع ﻣﻦ ال ‪Integrity‬‬
‫‪ Constraint‬ھﻲ‪:‬‬

‫‪ :NOT NULL‬ﯾﺤﺪد أﻧﮫ ﻻ ﯾﻤﻜﻦ ﻟﻞ ‪ Column‬أن ﯾﺤﺘﻮي ﻋﻠﻰ ‪ )NULL‬ﻛﻞ ال ‪ Rows‬ﯾﺠﺐ أن‬ ‫·‬
‫ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ‪ ،‬ﻻ ﯾﻤﻜﻦ أن ﯾﻜﻮن أﺣﺪھﺎ ﻓﺎرﻏﺎً(‬
‫‪ :UNIQUE‬ﺗﺤﺪد أن اﻟﻘﯿﻢ اﻟﻤﻮﺟﻮدة ﻓﻲ ال ‪)Column‬أو أﻛﺜﺮ ﻣﻦ ‪ (Column‬ﻣﻤﯿﺰة وﻻ ﯾﻤﻜﻦ‬ ‫·‬
‫أن ﺗﺘﺸﺎﺑﮫ‪ ،‬ﯾﺴﺘﺨﺪم ھﺬا اﻟﻨﻮع ﻋﺎدة ﻋﻨﺪ ﺗﺨﺼﯿﺺ رﻗﻢ ﻣﻤﯿﺰ ﻟﻜﻞ ﻣﻮﻇﻒ ﻓﻲ اﻟﺸﺮﻛﺔ‪ .‬ﯾﺴﻤﺢ ال‬
‫‪ UNIQUE‬ﺑﺎﺳﺘﺨﺪام ﻗﯿﻢ ‪ NULL‬ﻓﻲ ال ‪.Rows‬‬
‫‪ :PRIMARY KEY‬ﺗﺤﺪد أن ال ‪) Column‬أو أﻛﺜﺮ ﻣﻦ ‪ (Column‬ھﻮ ال ‪Primary Key‬‬ ‫·‬
‫ﻓﻲ ال ‪ .Table‬ﺗﻜﻮن ﻣﮭﻤﺔ ال ‪ PK‬ﺑﻀﻤﺎن ﻋﺪم ﺗﺸﺎﺑﮫ ﺑﯿﺎﻧﺎت ال ‪ Rows‬ﻓﻲ ال ‪ Column‬وﻋﺪم‬
‫إﺣﺘﻮاء ال ‪ Rows‬ﻋﻠﻰ ﻗﯿﻤﺔ ‪.NULL‬‬
‫‪ :FOREIGN KEY‬ﺗﺤﺪد أن ال ‪) Column‬أو أﻛﺜﺮ ﻣﻦ ‪ (Column‬ھﻮ ‪ Foreign Key‬ﻓﻲ ال‬ ‫·‬
‫‪ ، Table‬ﯾﺘﺼﻞ ﻣﻊ ‪ PK‬أو ‪ Unique‬ﻓﻲ ال ‪ Table‬أو ﻓﻲ ‪ Table‬أﺧﺮى‪.‬‬
‫‪ :CHECK‬ﺗﺤﺪد ﻗﺎﻧﻮن ﯾﺠﺐ ﻋﻠﻰ ﻛﻞ ال ‪ Rows‬ﺗﻨﻔﯿﺬه )ﻣﺜﻞ أن ﯾﻜﻮن ﻗﯿﻢ ال ‪ Rows‬اﻟﺨﺎﺻﺔ‬ ‫·‬
‫ﺑﺠﻨﺲ اﻹﻧﺴﺎن‪ ،‬إﻣﺎ ‪ M‬أو ‪ ، F‬وﻻ ﯾﻤﻜﻦ ادﺧﺎل أي ﺑﯿﺎﻧﺎت أﺧﺮى(‪.‬‬

‫ﺣﺎﻻت ال ‪:Integrity Constraints‬‬

‫ﯾﻤﻜﻦ وﺿﻊ ال ‪ Constraints‬ﻓﻲ أرﺑﻊ ﺣﺎﻻت ﺗﺆﺛﺮ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ال ‪ Table‬واﻟﺒﯿﺎﻧﺎت اﻟﺠﺪﯾﺪة‬
‫اﻟﺘﻲ ﺳﻮف ﯾﺘﻢ ادﺧﺎﻟﮭﺎ ﻣﺴﺘﻘﺒﻼً‪:‬‬

‫‪ :DISABLE NOVALIDATE‬ﻓﻲ ﺣﺎل وﺿﻊ ال ‪ Constraint‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ‪ ،‬ﻻ ﯾﺘﻢ ﻓﺤﺺ‬ ‫·‬
‫اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة وﻻ ﯾﺘﻢ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﺘﻘ ﺒﻠﯿﺔ ﻟﻤﻌﺮﻓﺔ اذا ﻛﺎﻧﺖ ﺗﺘﻄﺎﺑﻖ ﻣﻊ اﻟﻘﺎﻧﻮن أو اﻟﺸﺮط‬
‫اﻟﺬي ﯾﺤﺪده ال ‪.Constraint‬‬
‫‪ :DISABLE VALIDATE‬ﯾﺘﻢ اﯾﻘﺎف ﻋﻤﻞ ال ‪ Constraint‬وﺣﺬف ال ‪ Index‬اﻟﻤﺨﺼﺺ ﻟﮭﺎ‬ ‫·‬
‫وﻋﺪم اﻟﺴﻤﺎح ﺑﺎﻟﻘﯿﺎم ﺑﺄي ﺗﻌﺪﯾﻼت ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ )ﻋﺪم اﻟﺴﻤﺎح ﺑﻌﻤﻠﯿﺎت ‪.(DML‬‬
‫‪ :ENABLE NOVALIDATE‬ﻻ ﯾﺘﻢ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻟﻤﻌﺮﻓﺔ اذا ﻣﺎ ﻛﺎﻧﺖ ﺗﺘﻄﺎﺑﻖ ﻣﻊ‬ ‫·‬
‫ﻗﺎﻧﻮن ال ‪ Constraint‬و ﻟﻜﻦ ﻻ ﯾﺴﻤﺢ ﺑﺎدﺧﺎل ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة ﺗﺘﻌﺎرض ﻣﻊ ال ‪.Constraint‬‬
‫‪ :ENABLE VALIDATE‬ﯾﺘﻢ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﺠﺪﯾﺪة واﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﺘﻘﺒﻠﯿﺔ واﻟﺘﺄﻛﺪ أﻧﮭﺎ ﺗﺘﻄﺎﺑﻖ‬ ‫·‬
‫ﻣﻊ ال ‪ .Constraint‬ﻓﻲ ﺣﺎل وﺟﻮد ﺑﯿﺎﻧﺎت ﻻ ﺗﺘﻄﺎﺑﻖ ﻣﻊ ال ‪ Constraint‬ﻓﯿﺠﺐ ﺣﺬﻓﮭﺎ أو ﺗﻐﯿﯿﺮھﺎ‬
‫وإﻻ ﻻ ﯾﻤﻜﻦ اﻟﺪﺧﻮل اﻟﻰ ھﺬه اﻟﺤﺎﻟﺔ‪.‬‬

‫‪126‬‬
‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﻻ ﯾﻨﺼﺢ اﻟﺘﺤﻮﯾﻞ ﻣﻦ اﻟﺤﺎﻟﺔ اﻷوﻟﻰ أو اﻟﺜﺎﻧﯿﺔ ﻣﺒﺎﺷﺮة اﻟﻰ اﻟﺤﺎﻟﺔ اﻟﺮاﺑﻌﺔ ‪ ،‬اذ أن ذﻟﻚ ﯾﺆدي اﻟﻰ ﻋﻤﻞ‬
‫‪ Locks‬ﻋﻠﻰ ﻛﻞ ال ‪ Table‬ﻣﻤﺎ ﻗﺪ ﯾﺆدي اﻟﻰ ﺗﺄﺧﺮ اﻧﺠﺎز ﻣﮭﻤﺎت ال ‪ ،DML‬ﻟﺬﻟﻚ ﯾﻨﺼﺢ ﺑﺎﻟﺘﺤﻮﯾﻞ اﻟﻰ ﺣﺎﻟﺔ‬
‫‪ Enable Novalidate‬أوﻻً ﻗﺒﻞ اﻟﺘﺤﻮﯾﻞ ال ‪.Enable Validate‬‬

‫‪ -2‬ﻋﻨﺪﻣﺎ ﯾﺘﻢ ﺗﺤﻮﯾﻞ ‪ Constraint‬ﺗﺴﺘﺨﺪم ‪ Primary Key‬أو ‪ Unique Key‬ﻣﻦ ﺣﺎﻟﺔ ‪ Enable‬اﻟﻰ‬
‫ﺣﺎﻟﺔ ‪ ، Disable‬ﻓﺈن ال ‪ Index‬اﻟﻤﻮﺟﻮد ﯾﺘﻢ ﺣﺬﻓﮫ واﻟﻌﻜﺲ ﺻﺤﯿﺢ‪.‬‬

‫‪ -3‬اﻟﺘﺤﻮل ﻣﻦ ﺣﺎﻟﺔ ‪ Enable Novalidate‬اﻟﻰ ﺣﺎﻟﺔ ‪ ، Enable Validate‬ﻻ ﯾﻮﻗﻒ ﻋﻤﻠﯿﺎت ال ‪.DDL‬‬

‫‪:CONSTRAINTS CHECKING‬‬

‫ﯾﻤﻜﻦ ﻟﻞ ‪ Constraints‬أن ﯾﻘﻮم ﺑﻔﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺪﺧﻠﺔ اﻟﻰ ال ‪ Table‬إﻣﺎ ﻋﻨﺪ ﻧﮭﺎﯾﺔ ﻛﻞ ﻣﮭﻤﺔ ﻣﻦ ﻣﮭﻤﺎت‬
‫ال ‪ DML‬و ﯾﺴﻤﻰ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ‪ Nondeferred‬أو ‪ ، Immediate‬أو ﯾﻤﻜﻦ ﻟﻞ ‪ Constraints‬أن ﯾﻘﻮم‬
‫ﺑﻔﺤﺺ اﻟﺒﯿﺎﻧﺎت ﻋﻨﺪ ﻛﺘﺎﺑﺔ ‪) Commit‬ﻗﺪ ﯾﺸﻤﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﮭﻤﺎت( وﯾﺴﻤﻰ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ‪،Deferred‬‬
‫ﻓﻲ ﻛﻠﺘﺎ اﻟﺤﺎﻟﺘﯿﻦ ﯾﺘﻢ ﻋﻤﻞ ‪ Rollback‬ﻟﻠﻤﮭﻤﺎت اﻟﺘﻲ اﻧﺠﺰت اذا ﻟﻢ ﺗﺘﻮاﻓﻖ ﻣﻊ ﻗﺎﻧﻮن ال ‪.Constraint‬‬
‫ﯾﻔﻀﻞ اﺳﺘﺨﺪام اﻟﺤﺎﻟﺔ اﻟﺜﺎﻧﯿﺔ اﻟﺘﻲ ﺗﻨﻘﺴﻢ اﻟﻰ ﻗﺴﻤﯿﻦ ﺑﺤﯿﺚ ﺗﺴﺘﻄﯿﻊ أن ﺗﺸﺎﺑﮫ اﻟﺤﺎﻟﺔ ‪ Nondeferred‬واﻟﺤﺎﻟﺔ‬
‫‪ Deferred‬ﻣﻌﺎً‪ ،‬اﻟﻘﺴﻤﯿﻦ ھﻤﺎ‪:‬‬
‫· ‪ :INITIALLY IMMEDIATE‬ﺗﻌﻤﻞ ﻛﻌﻤﻞ ال ‪.Nondeferred‬‬
‫· ‪ :INITIALLY DEFERRED‬ﺗﻌﻤﻞ ﻛﻤﻞ ال ‪.Deferred‬‬

‫ﻟﻮﺿﻊ ال ‪ Constraint‬ﻓﻲ اﺣﺪى اﻟﺤﺎﻟﺘﯿﻦ ﯾﺘﻢ اﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪SET CONSTRAINT | CONSTRAINTS‬‬


‫)‪(constraint_name | ALL‬‬
‫)‪(IMMEDIATE | DEFERRED‬‬

‫ﯾﻤﻜﻦ أﯾﻀﺎً اﺳﺘﺨﺪام ‪ ALTER SESSION‬ﻛﻤﺎ ﻓﻲ اﻟﻘﺎﻋﺪة )ﺗﻌﻤﻞ ﻓﻲ ال ‪ Session‬اﻟﻤﺤﺪد ﻓﻘﻂ(‪:‬‬

‫‪ALTER SESSION‬‬
‫)‪SET CONSTRAINT[S] = (IMMEDIATE | DEFERRED | DEFAULT‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:7.21‬‬

‫ﻟﺘﻐﯿﯿﺮ ﺣﺎﻟﺔ ﻛﻞ ال ‪ Constraints‬اﻟﻰ ‪:Deferred‬‬

‫;‪SET CONSTRAINTS ALL DEFERRED‬‬

‫‪127‬‬
:CREATING CONSTRAINTS

.ALTER TABLE ‫ أو ﺟﻤﻠﺔ‬CREATE TABLE ‫ ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ‬Constraints ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال‬


‫ ﻋﻠﻰ أن اﻷﺧﯿﺮة ﺗﺴﻤﺢ‬Table-Level ‫ أو ﻓﻲ ال‬Column-Level ‫ ﻓﻲ ال‬Constraints ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ال‬
.‫ واﺣﺪ وھﺬا ﻻ ﺗﺴﻤﺢ ﺑﮫ اﻷوﻟﻰ‬Column ‫ ﻷﻛﺜﺮ ﻣﻦ‬Constraint ‫ﺑﺘﻜﻮﯾﻦ ال‬
‫ ﻓﻲ‬Constraints ‫ اﻟﻼزﻣﺔ ﻟﻜﻲ ﯾﺴﺘﻄﯿﻊ ﺗﻜﻮﯾﻦ‬REFERENCES Privilege ‫ﯾﺠﺐ أن ﯾﻜﻮن ﻟﻠﻤﺴﺘﺨﺪم‬
.‫ اﻟﺨﺎص ﺑﮫ‬Schema ‫ أﺧﺮى ﻏﯿﺮ ال‬Schemas

:Column-Level ‫ ﻓﻲ ال‬Constraints ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE TABLE table_name


(column_name TYPE [CONSTRAINT constraint_name] C1 | C2 | C3 | C4| C5)
[NOT DEFERRABLE | DEFERRABLE [INITIALLY (IMMEDIATE |
DEFERRED)] ]
[DISABLE | ENABLE [VALIDATE | NOVALIDATE]

:Constraints ‫ ﻓﮭﻲ أﻧﻮاع ال‬C1, C2, C3, C4 ‫أﻣﺎ ال‬

[NOT] NULL =C1


UNIQUE [USING INDEX ….] =C2
PRIMARY KEY [USING INDEX…] =C3
REFERENCES [schema.] table_name [(column_name)] [ON DELETE =C4
CASCADE]
CHECK (condition) =C5

ً‫ ﻋﻮﺿﺎ‬USING ‫ ﻋﺪا اﺳﺘﺨﺪام‬CREATE INDEX ‫ ﻓﮭﻲ ﺗﺘﻄﺎﺑﻖ ﻣﻊ ﺟﻤﻠﺔ‬USING INDEX ‫اﻣﺎ ﺟﻤﻠﺔ‬
‫ وﻋﺪم‬،ON [schema.]TABLE (Column [ASC | DESC] ‫ وﻋﺪم ﺗﺤﺪﯾﺪ اﻟﺠﺰء‬CREATE ‫ﻋﻦ‬
.Index ‫ذﻛﺮ اﺳﻢ ال‬

:‫ﻓﻲ اﻟﻘﺎﻋﺪة‬

‫ ﻣﻊ‬FK ‫ ﺑﻮاﺳﻄﺔ‬Child ‫ ﺗﻀﻤﻦ ﺣﺬف اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﺗﺒﻄﺔ ﻓﻲ ال‬:ON DELETE CASCADE ·


.(Introduction to SQL ‫ )راﺟﻊ اﻷﻣﺘﺤﺎن اﻷول‬Parent ‫ال‬

:2.22 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

:Column-Level ‫ ﻓﻲ ال‬Constraints ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE TABLE hr.new_emp (


Emp_id NUMBER(8) CONSTRAINT new_emp_id_pk PRIMARY KEY
DEFERRABLE INITIALLY DEFERRED
USING INDEX STORAGE (INITIAL 100K NEXT 100K) TABLESPACE indx,
Emp_Name VARCHAR2(20) CONSTRAINT new_emp_name NOT NULL,
Salary NUMBER(10) CONSTRAINT new_emp_ck CHECK (salary >0)
);

128
:Table-Level ‫ ﻓﻲ ال‬Constraints ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE TABLE table_name


(column_name TYPE , column_name TYPE, …. ,

[CONSTRAINT constraint_name]
PRIMARY KEY (column_name , column_name, …) [USING INDEX ….]
| UNIQUE (column_name , column_name, …) [USING INDEX ….]
| REFERENCES [schema.] table_name [(column_name, column_name, …)]
[ON DELETE CASCADE]
| CHECK (condition)

[NOT DEFERRABLE | DEFERRABLE [INITIALLY (IMMEDIATE |


DEFERRED)] ]
[DISABLE | ENABLE [VALIDATE | NOVALIDATE]
);

.Column-Level ‫ إﻻ ﻓﻲ ال‬NOT NULL Constraint ‫ ﻻ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ‬:‫ﻣﻼﺣﻈﺔ‬

:2.23 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

:Table-Level ‫ ﻓﻲ ال‬Constraints ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE TABLE hr.new_emp


(
Emp_id NUMBER(8)
Dept_id NUMBER (8)
Emp_Name VARCHAR2(20) CONSTRAINT new_emp_name NOT NULL,
Dept_name VARCHAR2(20),
Salary NUMBER(10),
CONSTRAINT new_emp_id_pk PRIMARY KEY (Emp_id , Dept_id)
DEFERRABLE
USING INDEX STORAGE (INITIAL 200K NEXT 200K) TABLESPACE indx
CONSTRAINT new_emp_ck CHECK (salary > 0)
);

‫ ﻣﻊ اﻟﺘﺄﻛﺪ ﻣﻦ ادﺧﺎل‬Table ‫ اﺗﺒﻊ ﺧﻄﻮات ﺗﻜﻮﯾﻦ ال‬Console ‫ ﻋﺒﺮ ال‬Constraint ‫ ﻟﺘﻜﻮﯾﻦ‬:‫ﻣﻼﺣﻈﺔ‬


.Constraints ‫اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻘﺎﺋﻤﺔ‬

.Table ‫ ﻣﺨﺘﻠﻔﺔ ﻋﻦ ال‬Tablespace ‫ اﻟﻰ‬Indexes ‫ ﯾﻔﻀﻞ ﺗﻮزﯾﻊ ال‬:‫ﺗﺬﻛﺮ‬

129
:USING ALTER TABLE

.Constraints ‫ ﻟﺘﻜﻮﯾﻦ أو ﺗﻌﺪﯾﻞ ﺣﺎﻟﺔ ال‬ALTER TABLE ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ‬

:Creating Constraints

‫ أو ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ‬CREATE TABLE ‫ ﺑﺎﺳﺘﺨﺪام‬Constraints ‫ﻛﻤﺎ ذﻛﺮﻧﺎ ﻗﺒﻞ ﻗﻠﯿﻞ أﻧﮫ ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ‬
.2.24 ‫ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل‬ALTER TABLE

:2.24 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

:ALTER TABLE ‫ ﺑﻮاﺳﻄﺔ‬Constraints ‫ﻹﺿﺎﻓﺔ‬

ALTER TABLE hr.new_emp ADD


(
CONSTRAINT new_emp_id_fk FOREIGN KEY (Dept_id)
REFERENCES hr.departments (id)
DEFERRABLE
);

،‫ ﻣﻦ ھﺬا اﻟﻨﻮع‬Constraint ‫ اذ ﯾﺴﺘﺨﺪم اﻟﺘﺎﻟﻲ ﻹﺿﺎﻓﺔ‬، NOT NULL ‫ﻻ ﯾﻤﻜﻦ ﺗﻄﺒﯿﻖ ھﺬا اﻟﻤﺜﺎل ﻋﻠﻰ ال‬
:NULL ‫ و‬NOT NULL ‫أو ﻟﻠﺘﺤﻮﯾﻞ ﺑﯿﻦ‬

ALTER TABLE hr.new_emp MODIFY Dept_name NOT NULL;

:Enabling Constraints

.ALTER TABLE ‫ ﺑﺎﺳﺘﺨﺪام‬Enable ‫ اﻟﻰ‬Disable ‫ ﻣﻦ‬Constraint ‫ﯾﻤﻜﻦ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال‬

:Enable Novalidate

‫ و ال‬Unique Constraints ‫ ﻟﻞ‬Validate ‫ﯾﻔﻀﻞ اﻟﺘﺤﻮﯾﻞ اﻟﻰ ھﺬه اﻟﺤﺎﻟﺔ أوﻻً ﻗﺒﻞ اﻟﺘﺤﻮﯾﻞ اﻟﻰ اﻟﺤﺎﻟﺔ‬
‫ ﻣﻤﺎ ﻗﺪ ﯾﺆدي اﻟﻰ ﺗﺄﺧﺮ اﻧﺠﺎز‬Table ‫ ﻋﻠﻰ ﻛﻞ ال‬Locks ‫ ﻷن ذﻟﻚ ﯾﺆدي اﻟﻰ ﻋﻤﻞ‬PK Constraints
Disable ‫ ﺗﺴﺘﺨﺪم اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ ﻟﻠﺘﺤﻮﯾﻞ ﻣﻦ ﺣﺎﻟﺔ‬.‫ ﻣﻤﺎ ﯾﺆدي اﻟﻰ ﺗﺄﺧﺮ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ‬،DML ‫ﻣﮭﻤﺎت ال‬
.Enable Novalidate ‫اﻟﻰ ﺣﺎﻟﺔ‬

ALTER TABLE [schema.] table_name


ENABLE NOVALIDATE {CONSTRAINT constraint_name | PRIMARY KEY |
UNIQUE (column , column2, ….) }
[USING INDEX…..]

‫ أو‬PK Constraint ‫ ﻓﻲ اﻟﺤﻼت اﻟﺘﻲ ﯾﺘﻢ ﻓﯿﮭﺎ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال‬USING INDEX ‫ﺑﺤﯿﺚ ﯾﺘﻢ اﺿﺎﻓﺔ ﺟﻤﻠﺔ‬
‫ وﯾﺠﺐ أن‬Deferrable ‫ ﻓﻘﻂ وﯾﺤﺐ أن ﺗﻜﻮن اﻟﺤﺎﻟﺔ اﻟﺘﻲ ﺗﻢ ﺗﻜﻮﯾﻨﮭﻢ ﻓﻲ اﻟﺒﺪاﯾﺔ‬Unique Constraint ‫ال‬
.‫ أو ﺗﻢ ﺣﺬﻓﮫ‬Disabled ‫ اﻟﺬي ﺗﻢ ﺗﻜﻮﯾﻨﮫ ﻓﻲ اﻟﺒﺪاﯾﺔ إﻣﺎ‬Index ‫ﯾﻜﻮن ال‬

130
‫‪:Enable Validate‬‬

‫ھﻲ اﻟﺤﺎﻟﺔ اﻹﻓﺘﺮاﺿﯿﺔ "‪ "Default‬اﻟﺘﻲ ﯾﺘﻢ ﻓﯿﮭﺎ اﻟﺘﺤﻮﯾﻞ ﻣﻦ ال ‪ Disable‬اﻟﻰ ال ‪ .Enable‬ﺑﻌﺪ ﻋﻤﻠﯿﺔ‬
‫اﻟﺘﺤﻮﯾﻞ ﯾﺘﻢ ﻓﯿﮭﺎ وﺿﻊ ‪ Locks‬ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت ﺣﺘﻰ ﺗﻨﺘﮭﻲ ﻋﻤﻠﯿﺔ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة‪ ،‬وﻓﻲ ﺣﺎﻟﺔ ﻋﺪم‬
‫وﺟﻮد ‪ Indexes‬ﻟﻞ ‪ ، PK,UNIQUE Constraints‬ﯾﻘﻮم ال ‪ Oracle Server‬ﺑﺘﻜﻮﯾﻦ ‪ Index‬ﻣﻦ ﻧﻮع‬
‫‪ Non-Unique‬اذا ﻛﺎن ﻗﺪ ﺗﻢ ﺗﻜﻮﯾﻦ ال ‪ Constraints‬ﻓﻲ اﻟﺒﺪاﯾﺔ ﺑﺎﻟﺤﺎﻟﺔ ‪ Deferrable‬واﻟﻌﻜﺲ ﺻﺤﯿﺢ اذ‬
‫ﯾﻘﻮم ال ‪ Oracle Server‬ﺑﺘﻜﻮﯾﻦ ‪ Index‬ﻣﻦ ﻧﻮع ‪ Unique‬اذا ﻛﺎن ﻗﺪ ﺗﻢ ﺗﻜﻮﯾﻦ ال ‪ Constraints‬ﻓﻲ‬
‫اﻟﺒﺪاﯾﺔ ﺑﺎﻟﺤﺎﻟﺔ ‪.Nondeferrable‬‬

‫ﺗﺴﺘﺨﺪم ذات اﻟﻘﺎﻋﺪة اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻟﻠﺘﺤﻮﯾﻞ ﻣﻦ ﺣﺎﻟﺔ ‪ Disable‬اﻟﻰ ﺣﺎﻟﺔ ‪ Enable Novalidate‬ﻣﻊ اﺳﺘﺒﺪال‬
‫ﻛﻠﻤﺔ ‪ NOVALIDATE‬ﺑﻜﻠﻤﺔ ‪ Validate) VALIDATE‬ھﻲ ال ‪ (Default‬وإﻣﻜﺎﻧﯿﺔ إﺿﺎﻓﺔ ﺟﻤﻠﺔ‬
‫‪ EXCEPTIONS‬اﻟﺘﻲ ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﺑﻌﺪ ﻗﻠﯿﻞ‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:2.25‬‬

‫ﻟﺘﺤﻮﯾﻞ اﻟﺤﺎﻟﺔ اﻟﻰ ‪:Novalidate‬‬

‫‪ALTER TABLE hr.new_emp‬‬


‫;‪ENABLE NOVALIDATE CONSTRAINT new_emp_id_pk‬‬

‫ﻟﺘﺤﻮﯾﻞ اﻟﺤﺎﻟﺔ اﻟﻰ ‪:Validate‬‬

‫‪ALTER TABLE hr.new_emp‬‬


‫;‪ENABLE VALIDATE CONSTRAINT new_emp_id_pk‬‬

‫ﻟﺘﺤﻮﯾﻞ اﻟﺤﺎﻟﺔ ﺑﺎﺳﺘﺨﺪام ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Schema Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Table‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ال ‪ Table‬اﻟﻤﺮاد ﺗﻐﯿﯿﺮ ﺧﻮاﺻﮭﺎ )ﻣﺜﻞ ‪(HR‬‬ ‫·‬
‫اﺧﺘﺮ اﺳﻢ ال ‪ Table‬ﻣﻦ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ و اﺿﻐﻂ ﻋﻠﯿﮭﺎ ﻣﺮﺗﯿﻦ )أو ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ‪ ،‬اﺧﺘﺮ‬ ‫·‬
‫ﻣﻦ اﻟﻘﺎﺋﻤﺔ "‪."View\Edit Details‬‬
‫ادﺧﻞ اﻟﻰ ﻗﺎﺋﻤﺔ ‪ ، Constraints‬ﺛﻢ ﻋﺪل اﻟﺒﯿﺎﻧﺎت ﺛﻢ اﺧﺘﺮ ‪.Apply‬‬ ‫·‬

‫‪131‬‬
:USING EXCEPTIONS

‫ ﺑﻌﺮض ﻣﻌﻠﻮﻣﺎت ﺣﻮل‬Constraints ‫ ﻟﻤﻌﺮﻓﺔ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺨﺎﻟﻒ ال‬EXCEPTIONS ‫ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ ال‬
.EXCEPTIONS Table ‫ ﺗﺴﻤﻰ‬Table ‫ ﻓﻲ‬Constraint ‫" اﻟﻤﺨﺎﻟﻔﺔ ﻟﻞ‬Rows" ‫ال اﻟﺒﯿﺎﻧﺎت‬

‫ ﯾﻤﻜﻦ اﺗﺒﺎع‬Enable ‫ اﻟﻰ‬Disable ‫ ﻣﻦ ﺣﺎﻟﺔ‬Constraint ‫ﻟﻠﻘﯿﺎم ﺑﻔﺤﺺ اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ اﻟﻘﯿﺎم ﺑﺘﺤﻮﯾﻞ ال‬
:‫اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‬

utlexcpt.sql ‫ ھﻮ‬Script ‫ اذا ﻟﻢ ﯾﺘﻢ ﺗﻜﻮﯾﻨﮭﺎ ﻣﻦ ﻗﺒﻞ ﺑﺘﺸﻐﯿﻞ‬، Exceptions Table ‫ﺗﻜﻮﯾﻦ ال‬ ·
:SQLPLUS ‫ﻣﻦ داﺧﻞ ال‬

@ C:\oracle\ora90\rdbms\admin\utlexcpt.sql

ALTER ‫ ﺑﺈﺿﺎﻓﺔ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ اﻟﻰ‬Enable Validate ‫ اﻟﻰ‬Constraint ‫ﺗﺤﻮﯾﻞ ال‬ ·


:TABLE

EXCEPTIONS INTO system.exceptions

‫ اﺳﺘﺨﺪم‬،Enable Validate ‫ اﻟﻰ‬Constraint ‫ﻓﻲ ﺣﺎل ﻇﮭﻮر اﺧﻄﺎء ﺗﻤﻨﻊ ﻣﻦ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال‬ ·
.Exceptions Table ‫اﻟﻤﻌﻠﻮﻣﺎت اﻟﺘﻲ ﺗﻜﻮﻧﺖ ﻓﻲ ال‬

SELECT * FROM table_name


WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS);

.UPDATE TABLE ‫اﺟﺮاء ﺗﻌﺪﯾﻞ ﻟﻠﺒﯿﺎﻧﺎت اﻟﻤﺨﺎﻟﻔﺔ ﺑﻮاﺳﻄﺔ‬ ·

.ALTER TABLE ‫ ﺑﺈﺳﺘﺨﺪام‬Enable Validate ‫ اﻟﻰ‬Constraint ‫ﺗﺤﻮﯾﻞ ال‬ ·

:QUERYING CONSTRAINTS INFORMATION

:‫ ﯾﻤﻜﻦ اﺳﺘﺨﺪام‬Constraints ‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال‬

‫ وﻧﻮﻋﮫ واﻟﺤﺎﻟﺔ‬Constraint ‫ ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﺪﯾﺪة ﻣﺜﻞ اﺳﻢ ال‬:DBA_CONSTRAINTS ·


.‫اﻟﺘﻲ ﯾﻮﺟﺪ ﻓﯿﮭﺎ وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت‬

‫ اﻟﺘﻲ وﺿﻊ ﻋﻠﯿﮭﺎ ال‬Columns ‫ ﯾﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﺪﯾﺪة ﺣﻮل ال‬:DBA_CONS_COLUMNS ·


.Constraints

132


 


Managing USERS & password


SECURITY& RESOURCES

133
‫‪PASSWORD MANAGEMENT‬‬

‫‪:PROFILES‬‬

‫ﯾﺴﺘﺨﺪم ال ‪ Profile‬ﻟﻠﺘﺤﻜﻢ ﺑﺎل ‪ Password‬وال ‪ Resources‬ﺑﻮاﺳﻄﺔ ال ‪ DBA‬ﻋﺒﺮ ﺗﺤﺪﯾﺪ ﻋﻮاﻣﻞ‬


‫"‪ "Parameters‬ﺧﺎﺻﺔ ﺑﺎل ‪ ،Profile‬ﻣﻦ اﻷﻣﻮر اﻟﺘﻲ ﯾﻤﻜﻦ اﻟﺘﺤﻜﻢ ﺑﮭﺎ ﻣﺜﻼً أن ﯾﻤﻨﻊ ﺑﻌﺾ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻣﻦ‬
‫اﺟﺮاء ﻣﮭﻤﺎت ﻣﺤﺪدة أو إﺧﺮاج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال ‪ Database‬اذا ﻟﻢ ﯾﻨﻔﺬ ﻣﮭﻤﺎت ﻟﻮﻗﺖ ﻣﺤﺪد‪ .‬ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال‬
‫‪ ، Database‬ﯾﻘﻮم ال ‪ Oracle Sever‬ﺑﺘﻜﻮﯾﻦ ال ‪ Default Profile‬اﻟﺬي ﯾﺨﺼﺺ ﻟﺠﻤﯿﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻣﺎ‬
‫ﻟﻢ ﯾﺘﻢ ﺗﻜﻮﯾﻦ ‪ Profile‬ﺟﺪﯾﺪ)ﻛﻞ اﻟﻘﯿﻢ ﻓﻲ ال ‪ Default Profile‬ﺗﺴﺎوي ‪ .(Unlimited‬ﯾﻤﻜﻦ أن ﯾﺨﺼﺺ‬
‫"‪ "Assign‬ال ‪ Profile‬ﻟﻞ ‪ Users‬ﻓﻘﻂ وﻻ ﯾﻤﻜﻦ ﺗﺨﺼﯿﺼﮫ ﻟﻞ ‪ Roles‬أو ‪ Profiles‬أﺧﺮى‪ ،‬وﻻ ﯾﺆﺛﺮ‬
‫ﺗﺨﺼﯿﺺ ال ‪ Profile‬ﻋﻠﻰ ال ‪ Session‬اﻟﺤﺎﻟﯿﺔ‪ ،‬اذ ﯾﺠﺐ ﺧﺮوج اﻟﻤﺴﺘﺨﺪم ﺛﻢ دﺧﻮﻟﮫ ﻣﺮة أﺧﺮى اﻟﻰ ال‬
‫‪ Database‬ﻟﻜﻲ ﺗﻨﻔﺬ ﺣﺪود ال ‪ .Profile‬ﯾﺘﻢ ﺗﺨﺼﯿﺺ ال ‪ Profile‬ﻟﻞ ‪ Users‬ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪CREATE‬‬
‫‪ USER‬أو ‪.ALTER USER‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ اﻏﻼق وﺗﺸﻐﯿﻞ ال ‪.(Enable, Disable) Profile‬‬

‫‪:MANAGING PASSWORD‬‬

‫ﺑﺎﻟﺘﺤﻜﻢ ﺑﺎل ‪ Password‬ﺑﺎﺳﺘﺨﺪام ال ‪ Profile‬ﯾﻤﻜﻦ‪:‬‬

‫ﺗﺤﺪﯾﺪ ﻋﻤﺮ ﻣﺤﺪد ﻟﻜﻠﻤﺔ اﻟﺴﺮ "‪ "Password‬ﯾﺠﺐ ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪم ﺗﻐﯿﯿﺮھﺎ ﺑﻌﺪ اﻧﺘﮭﺎء اﻟﻤﺪة‪.‬‬ ‫·‬
‫إﺟﺒﺎر اﻟﻤﺴﺘﺨﺪم ﻋﻠﻰ اﺧﺘﯿﺎر ﻛﻠﻤﺔ ﺳﺮ ﻣﻌﻘﺪة ﺗﺘﺒﻊ ﻧﻈﺎم ﻣﺤﺪدة )ﻣﺜﻼً أن ﻻ ﺗﺘﺸﺎﺑﮫ ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﺳﻢ‬ ‫·‬
‫اﻟﻤﺴﺘﺨﺪم(‬
‫اﺟﺒﺎر اﻟﻤﺴﺘﺨﺪم ﻋﻨﺪ ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﻋﺪم اﺧﺘﯿﺎر ﻛﻠﻤﺔ ﺳﺮ ﺗﻢ اﺳﺘﺨﺪاﻣﮭﺎ ﺳﺎﺑﻘﺎً‪.‬‬ ‫·‬
‫اﻏﻼق ال ‪ Account‬اﻟﺨﺎص ﺑﺎﻟﻤﺴﺘﺨﺪم ﻋﻨﺪ ﻓﺸﻞ ادﺧﺎل ﻛﻠﻤﺔ اﻟﺴﺮ ﻟﻌﺪد ﻣﺤﺪد )ﻣﺜﻞ ﻓﺸﻞ ادﺧﺎل ﻛﻠﻤﺔ‬ ‫·‬
‫اﻟﺴﺮ ﻟﺜﻼث ﻣﺮات(‪.‬‬

‫‪:Locking Account‬‬

‫ﯾﻤﻜﻦ ﻏﻠﻖ ال ‪ Account‬ﺑﺸﻜﻞ اوﺗﻮﻣﺎﺗﯿﻜﻲ ﻋﻨﺪ ﻓﺸﻞ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Account‬ﻋﻨﺪ ﻛﺘﺎﺑﺔ ﻛﻠﻤﺔ ﺳﺮ ﺧﺎﻃﺌﺔ‬
‫ﻟﻌﺪد ﻣﻦ اﻟﻤﺮات‪ ،‬ﻛﻤﺎ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ اﻟﻤﺪة اﻟﺘﻲ ﯾﻈﻞ ﻓﯿﮭﺎ ال ‪ Account‬ﻣﻐﻠﻖ ﻋﺒﺮ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻠﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ‪:‬‬

‫· ‪ :FAILED_LOGING_ATTEMPTS‬ﻋﺪد اﻟﻤﺮات اﻟﺘﻲ ﯾﺴﻤﺢ ﻓﯿﮭﺎ ادﺧﺎل ﻛﻠﻤﺔ ﺳﺮ ﺧﺎﻇﺌﺔ‬


‫ﻗﺒﻞ أن ﯾﺘﻢ ﻏﻠﻖ ال ‪ ،Account‬ﻣﺜﻞ أن ﺗﺤﺪد اﻟﻘﯿﻤﺔ ﺑﺜﻼث ﻣﺤﺎوﻻت وﺑﻌﺪ اﻟﻤﺤﺎوﻟﺔ اﻟﺜﺎﻟﺜﺔ ﯾﻐﻠﻖ ال‬
‫‪.Account‬‬
‫· ‪ :PASSWORD_LOCK_TIME‬ﺗﺤﺪد ﻗﯿﻤﺘﮫ اﻟﻤﺪة اﻟﺘﻲ ﯾﻈﻞ ﻓﯿﮭﺎ ال ‪ Account‬ﻣﻐﻠﻖ‪ ،‬وﺑﻌﺪ‬
‫اﻧﺘﮭﺎء اﻟﻤﺪة ﯾﻔﺘﺢ ال ‪ Account‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ )ﻣﺜﻼً ﺑﻌﺪ ‪ 3‬أﯾﺎم(‪.‬‬

‫ﻛﻤﺎ ﯾﻤﻜﻦ ﻟﻞ ‪ DBA‬ﻏﻠﻖ ال ‪ Account‬أو ﻓﺘﺤﮫ ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ ،ALTER USER‬ﻓﻲ ﺣﺎﻟﺔ ﻏﻠﻖ ال‬
‫‪ Account‬ﺑﻮاﺳﻄﺔ ال ‪ DBA‬ﻻ ﯾﻤﻜﻦ ﻓﺘﺤﮫ أوﺗﻮﻣﺎﺗﯿﻜﯿﺎً ﺑﻞ ﯾﺠﺐ أن ﯾﺘﻢ ﻓﺘﺤﮫ ﻋﺒﺮ ال ‪ DBA‬ﻓﻘﻂ‪.‬‬

‫‪134‬‬
‫‪:Password Expiration‬‬

‫ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ اﻟﻤﺪة اﻟﺘﻲ ﯾﺠﺐ ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ "‪ "Password‬ﺑﺸﻜﻞ دوري‪ ،‬ﻛﺄن ﯾﺠﺒﺮ‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﻛﻞ ﺷﮭﺮ‪ .‬ﯾﻤﻜﻦ اﯾﻀﺎً اﻋﻄﺎء ﻣﮭﻠﺔ اﺿﺎﻓﯿﺔ ﻋﻨﺪ اﻧﺘﮭﺎء اﻟﻤﺪة اﻟﺘﻲ ﯾﺠﺐ ﺗﻐﯿﯿﺮ‬
‫ﻛﻠﻤﺔ اﻟﺴﺮ ‪ ،‬ﺑﺤﯿﺚ ﺑﻌﺪ دﺧﻮل اﻟﻤﺴﺘﺨﺪم اﻟﻰ ‪ ،Database‬ﯾﻈﮭﺮ رﺳﺎﻟﺔ ﺗﺤﺬﯾﺮﯾﺔ ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﺗﻐﯿﯿﺮ‬
‫ﻛﻠﻤﺔ اﻟﺴﺮ ﺧﻼل ﻓﺘﺮة ﻣﺤﺪدة وإﻻ ﺳﻮف ﯾﺘﻢ ﻏﻠﻖ ال ‪.Account‬‬

‫‪ :PASSWORD_LIFE_TIME‬اﻟﻤﺪة اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻜﻠﻤﺔ اﻟﺴﺮ أن ﺗﻈﻞ دون ﺗﻐﯿﯿﺮ‪ ،‬ﻓﻲ ﺣﺎل ﻋﺪم‬ ‫·‬
‫ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﺧﻼل اﻟﻤﺪة ﯾﻐﻠﻖ ال ‪ Account‬وﺗﺘﺤﻮل ﺣﺎﻟﺔ ال ‪ Account‬اﻟﻰ ‪.Expired‬‬
‫‪ :PASSWORD_GRACE_TIME‬ﺑﻌﺪ ان ﺗﻨﺘﮭﻲ اﻟﻤﺪة اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻜﻠﻤﺔ اﻟﺴﺮ أن ﺗﻈﻞ دون‬ ‫·‬
‫ﺗﻐﯿﯿﺮ‪ ،‬ﯾﻤﻜﻦ اﻋﻄﺎء ﻣﺪة إﺿﺎﻓﯿﺔ ﻟﺘﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﻗﺒﻞ ﻏﻠﻖ ال ‪ Account‬ﻣﻊ ﻇﮭﻮر رﺳﺎﻟﺔ ﺗﺤﺬﯾﺮﯾﺔ‬
‫ﻟﺘﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﻗﺒﻞ اﻟﻤﺪة اﻟﻤﺤﺪدة‪.‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻋﻨﺪ ﺗﺤﺪﯾﺪ ال ‪ PASSWORD_LIFE_TIME‬ﺑﻤﺪة ﺷﮭﺮ و ‪PASSWORD_GRACE_TIME‬‬


‫ﺑﻤﺪة ﺛﻼﺛﺔ أﯾﺎم ﯾﺤﺪث اﻟﺘﺎﻟﻲ‪ :‬ﺑﻌﺪ اﻧﺘﮭﺎء اﻟﺸﮭﺮ دون ﺗﻐﯿﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ وﻛﻠﻤﺎ دﺧﻞ اﻟﻤﺴﺘﺨﺪم اﻟﻰ ال ‪Account‬‬
‫ﺗﻈﮭﺮ رﺳﺎﻟﺔ ﺗﺤﺬﯾﺮﯾﺔ ﺗﻄﺎﻟﺐ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ ﺧﻼل ‪ 3‬أﯾﺎم وإﻻ ﺳﻮف ﯾﺘﻢ ﻏﻠﻖ ال ‪.Account‬‬

‫‪:Password History‬‬

‫ﯾﻤﻜﻦ اﺟﺒﺎر اﻟﻤﺴﺘﺨﺪم ﻋﻠﻰ اﺧﺘﯿﺎر ﻛﻠﻤﺔ ﺳﺮ ﻟﻢ ﺗﺴﺘﺨﺪم ﻣﻦ ﻗﺒﻞ أﺑﺪاً أو ﻣﻨﻌﮫ ﻣﻦ اﺳﺘﺨﺪام ﻛﻠﻤﺔ ﺳﺮ ﻗﺪﯾﻤﺔ ﺧﻼل‬
‫ﻓﺘﺮة ﻣﺤﺪدة‪.‬‬

‫‪ :PASSWORD_REUSE_TIME‬ﺗﺤﺪد ﻋﺪد ﻣﻦ اﻷﯾﺎم ﻗﺒﻞ أن ﯾﺘﻢ اﻋﺎدة اﺳﺘﺨﺪام ﻛﻠﻤﺔ ﺳﺮ‬ ‫·‬
‫ﻗﺪﯾﻤﺔ ﻣﺮة أﺧﺮى‪.‬‬
‫‪ :PASSWORD_REUSE_MAX‬ﺗﺤﺪد ﻋﺪد اﻟﻤﺮات اﻟﺘﻲ ﯾﻤﻜﻦ ان ﯾﺘﻢ اﺳﺘﺨﺪام ﻛﻠﻤﺔ اﻟﺴﺮ‬ ‫·‬
‫اﻟﻘﺪﯾﻤﺔ‪ .‬ﯾﻤﻜﻦ اﺟﺒﺎر اﻟﻤﺴﺘﺨﺪم ﺑﻌﺪم اﺳﺘﺨﺪام ﻛﻠﻤﺔ ﺳﺮ ﻗﺪﯾﻤﺔ أﺑﺪاً ﺑﻮﺿﻊ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ﺻﻔﺮ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ ﻟﻠﻌﺎﻣﻠﯿﯿﻦ ﻣﻌﺎً اﺑﺪاً‪ ،‬اذا ﺗﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ أﺣﺪ اﻟﻌﺎﻣﻠﯿﯿﻦ ﯾﺠﺐ وﺿﻊ ﻗﯿﻤﺔ اﻷﺧﺮ‬
‫‪.Unlimited‬‬

‫‪:Password Verification‬‬

‫ﯾﻤﻜﻦ وﺿﻊ ﻗﻮاﻧﯿﯿﻦ ﻟﺘﺴﻤﯿﺔ ﻛﻠﻤﺔ اﻟﺴﺮ ﺑﺎﺳﺘﺨﺪام ‪ .PL/SQL‬ﻣﻦ اﻟﻘﻮاﻧﯿﯿﻦ اﻟﺘﻲ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪھﺎ أن ﻻ ﺗﻜﻮن‬
‫ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻄﺎﺑﻘﺔ ﻹﺳﻢ اﻟﻤﺴﺘﺨﺪم أو ﯾﺠﺐ أن ﺗﺤﺘﻮي ﻛﻠﻤﺔ اﻟﺴﺮ ﻋﻠﻰ أرﻗﺎم و أﺣﺮف ﻣﻌﺎً وﻛﻞ ﻣﺎ ﯾﺴﺎﻋﺪ ﻋﻠﻰ‬
‫ﺗﻜﻮﯾﻦ ﻛﻠﻤﺔ ﺳﺮ ﻣﻌﻘﺪة ﯾﺼﻌﺐ اﻟﺘﻜﮭﻦ ﺑﮭﺎ‪.‬‬

‫‪ :PASSWORD_VERIFY_FUNCTION‬ﻟﺘﺤﺪﯾﺪ ال ‪ PL/SQL Function‬اﻟﺘﻲ ﺳﻮف‬ ‫·‬


‫ﺗﺴﺘﺨﺪم ﻓﻲ وﺿﻊ ﻗﻮاﻧﯿﯿﻦ ﻋﻠﻰ اﺧﺘﯿﺎر ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺠﺐ ﺗﻜﻮﯾﻦ ال ‪ Function‬ﻓﻲ ال ‪ ، SYS Schema‬وﯾﺠﺐ ان ﺗﻜﻮن ﻣﻦ ﻧﻮع ‪ ،Boolean‬أي أن‬
‫اﻟﻨﺎﺗﺞ أﻣﺎ ﺻﺢ "‪ "True‬أو ﺧﻄﺄ "‪."False‬‬

‫‪135‬‬
‫ اﻟﺘﻲ ﯾﻤﻜﻦ ان‬VERIFY_FUNCTION ، utlpwdmg.sql ‫ ﺿﻤﻦ ال‬Oracle Server ‫ﯾﻮﻓﺮ ال‬
.PASSWORD_VERIFY_FUNCTION ‫ﺗﺴﺘﺨﺪم ﻟﻮﺿﻊ ﻗﻮاﻧﯿﯿﻦ ﻟﻜﻠﻤﺔ اﻟﺴﺮ اذا ﺗﻢ ﺗﺤﺪﯾﺪھﺎ ﻓﻲ‬

:VERIFY_FUNCTION ‫ﻗﻮاﻧﯿﯿﻦ ال‬

‫ وأن ﯾﻜﻮن ﻣﻦ ﺿﻤﻨﮭﺎ ﻋﻠﻰ اﻷﻗﻞ ﺣﺮف واﺣﺪ ورﻗﻢ واﺣﺪ و‬،‫أن ﻻ ﯾﻘﻞ ﺣﺠﻢ ﻛﻠﻤﺔ اﻟﺴﺮ ﻋﻦ ارﺑﻊ ﺧﺎﻧﺎت‬ ·
.$ ‫رﻣﺰ ﺧﺎص واﺣﺪ ﻣﺜﻞ‬
.‫أن ﻻ ﺗﺘﻄﺎﺑﻖ ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﺳﻢ اﻟﻤﺴﺘﺨﺪم‬ ·
‫ ﻣﺜﻼً ﻟﻮ ﻛﺎﻧﺖ ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﻘﺪﯾﻤﺔ‬،‫أن ﺗﺨﺘﻠﻒ ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺠﺪﯾﺪة ﻋﻦ اﻟﺘﻲ ﻗﺒﻠﮭﺎ ﻋﻠﻰ اﻷﻗﻞ ﺑﺜﻼث ﺧﺎﻧﺎت‬ ·
‫ﻋﻠﻰ اﻋﺘﺒﺎر وﺟﻮد اﺧﺘﻼﻓﯿﯿﻦ اﺛﻨﯿﻦ ﻓﻘﻂ‬N1Z$3 ‫ ﻓﻼ ﺗﻘﺒﻞ ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﺠﺪﯾﺪة اذا ﻛﺎﻧﺖ‬، N1E$ ‫ھﻲ‬
.(3,Z) ‫ھﻤﺎ‬

:CREATING PROFILE TO MANAGE PASSWORD

:‫ ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‬Password ‫ ﻹدارة ال‬Profile ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ‬

CREATE PROFILE profile_name LIMIT


[FAILED_LOGING_ATTEMPTS number]
[PASSWORD_LOCK_TIME number_of_days]
[PASSWORD_LIFE_TIME number_of_days]
[PASSWORD_GRACE_TIME number_of_days]
[{PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX}
number_of_days]
[PASSWORD_VERIFY_FUNCTION {function_name | NULL | DEFAULT}]

:‫ﻓﻲ اﻟﻘﺎﻋﺪة‬

‫ ﺟﻤﻊ اﻟﻌﺎﻣﻠﯿﯿﻦ‬:{PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX} ·


.ً‫ﺑﯿﻦ } { ﯾﺪل ﻋﻠﻰ اﻟﺴﻤﺎح ﺑﻮﺿﻊ ﻗﯿﻤﺔ ﻷﺣﺪھﻤﺎ وﻻ ﯾﻤﻜﻦ ﻟﻜﻠﯿﮭﻤﺎ ﻛﻤﺎ ﺗﻢ ذﻛﺮه ﻣﺴﺒﻘﺎ‬
.(number_of_days ،number) ‫ ﻋﻮﺿﺎً ﻋﻦ‬UNLIMITED ‫· ﯾﻤﻜﻦ وﺿﻊ اﻟﻘﯿﻤﺔ‬

.Unlimited ‫ وھﻲ‬Default ‫ ﻛﻞ اﻟﻌﻮاﻣﻞ اﺧﺘﯿﺎرﯾﺔ واذا ﻟﻢ ﯾﺘﻢ ﻛﺘﺎﺑﺘﮭﺎ ﯾﺆﺧﺬ اﻟﻘﯿﻤﺔ ال‬:‫ﻣﻼﺣﻈﺔ‬

:8.1 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

: ‫ ﻟﻠﺘﺤﻜﻢ ﺑﻜﻠﻤﺔ اﻟﺴﺮ‬Profile ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE PROFILE myprofile LIMIT


FAILED_LOGING_ATTEMPTS 3
PASSWORD_LOCK_TIME 5
PASSWORD_LIFE_TIME 15
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME 15
PASSWORD_VERIFY_FUNCTION verify_function;

136
‫ﻣﻼﺣﻈﺔ‪ :‬ﻻﺳﺘﺨﺪام اﻟﺴﺎﻋﺎت أو اﻟﺪﻗﺎﺋﻖ ﻋﻮﺿﺎً ﻋﻦ اﻷﯾﺎم ﺗﺴﺘﺨﺪم اﻟﻘﯿﻤﺔ ‪ 1/24‬ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ ﯾﻮم واﺣﺪ وﯾﺴﺘﺨﺪم‬
‫‪ 1/1400‬ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ دﻗﯿﻘﺔ واﺣﺪة‪.‬‬

‫ﻟﺘﺤﻮﯾﻞ ‪ Profile‬ﺑﺎﺳﺘﺨﺪام ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ ﻣﺠﻠﺪ ال ‪ Profile‬واﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﺘﻲ ﺗﻈﮭﺮ ‪.Create‬‬ ‫·‬
‫ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﺠﺪﯾﺪة‪ ،‬ادﺧﻞ اﺳﻢ ال ‪.Profile‬‬ ‫·‬
‫ادﺧﻞ اﻟﻰ ﻗﺎﺋﻤﺔ ‪ Password‬وادﺧﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺮﯾﺪ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Create‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺳﻮف ﯾﺄﺗﻲ ﻻﺣﻘﺎً ﻛﯿﻔﯿﺔ ﺗﺨﺼﯿﺺ ‪ Profile‬ﻟﻠﻤﺴﺘﺨﺪم "‪."User‬‬

‫‪:ALTERING PROFILE‬‬

‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻢ اﻟﻌﻮاﻣﻞ ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ ، ALTER PROFILE‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.8.2‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:8.2‬‬

‫‪ALTER PROFILE myprofile‬‬


‫‪FAILED_LOGING_ATTEMPTS 2‬‬
‫‪PASSWORD_LOCK_TIME UNLIMITED‬‬
‫‪PASSWORD_LIFE_TIME 10‬‬
‫‪PASSWORD_GRACE_TIME 7/24‬‬
‫‪PASSWORD_REUSE_TIME 10‬‬
‫;‪PASSWORD_VERIFY_FUNCTION verify_function‬‬

‫أو ﺑﺎﺳﺘﺨﺪام ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪ Profile‬واﺧﺘﺮ اﺳﻢ ال ‪ Profile‬اﻟﻤﺮاد ﺗﻌﺪﯾﻠﮫ ‪.‬‬ ‫·‬
‫ﺗﻈﮭﺮ اﻟﺨﻮاص ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ‪ ،‬ﻋﺪل اﻟﺒﯿﺎﻧﺎت اﻟﻘﺎﺋﻤﺔ ‪ Password‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ‪. Apply‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬اﻟﺘﻌﺪﯾﻼت اﻟﺘﻲ ﺗﺤﺪث ﻟﻞ ‪ Profile‬ﺑﻮاﺳﻄﺔ ‪ ALTER PROFILE‬أو ﻋﺒﺮ ال ‪ Console‬ﻻ ﺗﺆﺛﺮ‬
‫ﻋﻠﻰ ال ‪ Session‬اﻟﺤﺎﻟﻲ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﯿﻦ‪ ،‬ﺑﻞ ﻋﻨﺪ دﺧﻮل اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻓﻲ اﻟﻤﺮة اﻟﻘﺎدﻣﺔ )ال ‪ Session‬اﻟﻘﺎدم(‪.‬‬

‫‪137‬‬
‫‪:DROPPING PROFILE‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ال ‪ Profile‬ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ DROP PROFILE‬ﻋﺒﺮ اﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫;]‪DROP PROFILE profile_name [CASCADE‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :CASCADE‬ﻋﻨﺪ ﻛﺘﺎﺑﺘﮭﺎ ﯾﻘﻮم اﻷوراﻛﻞ ﺑﺤﺬف "‪ "Revoke‬ال ‪ Profile‬ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ اﻟﺬﯾﻦ‬ ‫·‬
‫ﺧﺼﺺ ﻟﮭﻢ وﺗﺤﻮﯾﻠﮭﻢ اﻟﻰ ال ‪.Default Profile‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:8.3‬‬

‫ﻟﺤﺬف ‪:Profile‬‬

‫;‪DROP PROFILE myprofile CASCADE‬‬

‫أو ﺑﺎﺳﺘﺨﺪام ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪ Profile‬واﺧﺘﺮ اﺳﻢ ال ‪ Profile‬اﻟﻤﺮاد ﺣﺬﻓﮫ ﺛﻢ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة أﺧﺘﺮ‬ ‫·‬
‫ﻣﻦ اﻟﻘﺎﺋﻤﺔ ”‪) “Remove‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻗﺎﺋﻤﺔ ‪ Object‬ﺛﻢ ‪ Remove‬ﻋﻮﺿﺎً ﻋﻦ اﻟﺰر اﻟﯿﻤﯿﯿﻦ‬
‫ﻟﻠﻔﺄرة(‪.‬‬
‫اﺧﺘﺮ ‪.Yes‬‬ ‫·‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﻻ ﯾﻤﻜﻦ ﺣﺬف ال ‪.Default Profile‬‬


‫‪ -2‬ﻋﻤﻠﯿﺔ اﻟﺤﺬف ﻻ ﺗﻮﺛﺮ ﻋﻠﻰ ال ‪ Session‬اﻟﺤﺎﻟﯿﺔ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﯿﻦ‪.‬‬

‫‪138‬‬
‫‪RESOURCE MANAGEMENT‬‬

‫ﺑﺎﻟﺘﺤﻜﻢ ﺑﺎل ‪ Resources‬ﺑﺎﺳﺘﺨﺪام ال ‪ Profile‬ﯾﻤﻜﻦ ﺗﻨﻔﯿﺬ ﻋﺪد ﻣﻦ اﻟﻘﯿﻮد ﻣﻨﮭﺎ ﺗﺤﺪﯾﺪ أﻗﺼﻰ وﻗﺖ ﯾﻤﻜﻦ‬
‫ﻟﻠﻤﺴﺘﺨﺪم ان ﯾﻈﻞ ﻣﺘﺼﻼًَ ﺑﺎل ‪ ، Database‬وأﻗﺼﻰ وﻗﺖ ﯾﻤﻜﻦ أن ﯾﻈﻞ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ال ‪ Database‬دون‬
‫اﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت "‪ ، "Idle‬وﺗﺤﺪﯾﺪ ﻋﺪد ال ‪ Sessions‬اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم أن ﯾﺤﺼﻞ ﻋﻠﯿﮭﺎ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‪.‬‬
‫ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ "‪ RESOURCE_LIMIT "Parameter‬ﻓﻲ ‪Initiliazation Parameter File‬‬
‫ﺑﺎﻟﻘﯿﻤﺔ ‪ TRUE‬ﻟﻜﻲ ﻧﺘﻤﻜﻦ ﻣﻦ اﻟﺘﺤﻜﻢ ﺑﺎل ‪ ، Resources‬ﻣﻊ اﻹﻋﺘﺒﺎر أن اﻟﻘﯿﻤﺔ ال ‪ Default‬ھﻲ‬
‫‪ ،FALSE‬ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ﺑﻄﺮﯾﻘﺔ داﯾﻨﺎﻣﯿﻜﯿﺔ ﺗﻈﻞ ﺳﺎرﯾﺔ اﻟﻤﻔﻌﻮل اﻟﻰ أن ﯾﺤﺪث إﻏﻼق ﻟﻞ‬
‫‪ Database‬ﺑﺎﺳﺘﺨﺪام ‪ ALTER SYSTEM‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.8.4‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:8.4‬‬

‫ﻟﺘﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ RESOURCE_LIMIT‬ﺑﻄﺮﯾﻘﺔ داﯾﻨﺎﻣﯿﻜﯿﺔ‪:‬‬

‫;‪ALTER SYSTEM SET RESOURCE_LIMIT = TRUE‬‬

‫ﻟﻠﺘﺤﻜﻢ ﺑﺎل ‪ Resources‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ اﻟﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ ﻓﻲ ال ‪:Profile‬‬

‫‪ :CPU_PER_SESSION‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﻛﻢ ﻣﻦ اﻟﻮﻗﺖ ﯾﻤﻜﻦ ﻟﻞ ‪ Session‬اﻹﺳﺘﮭﻼك ﻣﻦ وﻗﺖ ال‬ ‫·‬


‫‪ CPU‬اﻟﺬي ھﻮ اﻟﻤﻌﺎﻟﺞ "‪ "Processor‬ﻓﻲ ﺟﮭﺎز اﻟﻜﻤﺒﯿﻮﺗﺮ اﻟﺬي ﯾﺘﻢ ﻓﯿﮫ ﻛﻞ اﻟﻌﻤﻠﯿﺎت )ﯾﻤﻜﻦ إﻃﻼق‬
‫ﻋﻠﯿﮫ اﺳﻢ "ﻋﻘﻞ اﻟﻜﻤﺒﯿﻮﺗﺮ"(‪ ،‬ﺑﺤﯿﺚ ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ﺑﺄﺟﺰاء ﻣﻦ اﻟﺜﺎﻧﯿﺔ‪.‬‬
‫‪ :CPU_PER_CALL‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﻛﻢ ﻣﻦ اﻟﻮﻗﺖ ﯾﻤﻜﻦ ﻟﺠﻤﻠﺔ واﺣﺪة ﻣﻦ ﺟﻤﻞ ‪ SQL‬اﻹﺳﺘﮭﻼك ﻣﻦ‬ ‫·‬
‫وﻗﺖ ال ‪ ،CPU‬ﺑﺤﯿﺚ ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ﺑﺄﺟﺰاء ﻣﻦ اﻟﺜﺎﻧﯿﺔ‪.‬‬
‫‪ :SESSIONS_PER_USER‬ﺗﺤﺪد ﻛﻢ ‪ Sessions‬ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم أن ﯾﻤﻠﻚ ﻓﻲ ذات اﻟﻮﻗﺖ‪.‬‬ ‫·‬
‫ﺗﺬﻛﺮ ﻣﻦ اﻟﻔﺼﻞ اﻷول أﻧﮫ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم اﻟﻮاﺣﺪ اﯾﻦ ﯾﻜﻮٌن أﻛﺜﺮ ﻣﻦ ‪ Session‬واﺣﺪ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‬
‫اذا اﺳﺘﺨﺪم أﻛﺜﺮ ﻣﻦ ﺑﺮﻧﺎﻣﺞ ﻣﺜﻞ ‪ SQL PLUS‬و ‪ ORACLE FORMS‬ﻋﺪا ﺑﻌﺾ اﻟﺤﺎﻻت‬
‫اﻟﻘﻠﯿﻠﺔ‪.‬‬
‫‪ :CONNECT_TIME‬ﯾﺤﺪد اﻟﻤﺪة ﺑﺎﻟﺪﻗﺎﺋﻖ اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم أو ال ‪ Session‬اﻟﺒﻘﺎء ﻣﺘﺼﻼً‬ ‫·‬
‫ﺑﺎل ‪ ،Database‬ﺑﺤﯿﺚ ﻋﻨﺪ اﻧﺘﮭﺎء اﻟﻤﺪة ﯾﺘﻢ اﺧﺮاج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال ‪ Database‬وإﻧﮭﺎء ﻋﻤﻞ ال‬
‫‪ Session‬وﻋﻤﻞ ‪ Rollback‬ﻟﻠﻤﮭﻤﺎت اﻟﺘﻲ ﺗﻌﻤﻞ أو ﻟﻢ ﯾﺤﺪث ﻟﮭﺎ ‪.Commit‬‬
‫‪ :IDLE_TIME‬ﯾﺤﺪد اﻟﻤﺪة ﺑﺎﻟﺪﻗﺎﺋﻖ اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم أو ال ‪ Session‬اﻟﺒﻘﺎء ﻣﺘﺼﻼً ﺑﺎل‬ ‫·‬
‫‪ Database‬ﺑﺪون اﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت‪ ،‬ﺑﺤﯿﺚ ﻋﻨﺪ اﻧﺘﮭﺎء اﻟﻤﺪة ﯾﺘﻢ اﺧﺮاج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال ‪.Database‬‬
‫‪ :PRIVATE_SGA‬ﻟﺘﺤﺪﯾﺪ اﻟﻤﺴﺎﺣﺔ اﻟﺨﺎﺻﺔ اﻟﻤﺤﺠﻮزة ﻟﻜﻞ ‪ Session‬ﻓﻲ ال ‪) SGA‬ﺧﺎص ﻓﻘﻂ‬ ‫·‬
‫ب ‪.(Shared Server‬‬
‫‪ :LOGICAL_READS_PER_SESSION‬ﺗﺤﺪد ﻋﺪد ال ‪ Data Blocks‬اﻟﺘﻲ ﯾﻤﻜﻦ ﻗﺮاﺋﺘﮭﺎ‬ ‫·‬
‫أو اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻨﮭﺎ ﻓﻲ ال ‪) Session‬ﯾﻤﻜﻦ أن ﺗﻤﻨﻊ اﺳﺘﺨﺮاج أﺣﺠﺎم ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة(‪.‬‬
‫‪ :LOGICAL_READS_PER_CALL‬ﺗﺤﺪد ﻋﺪد ال ‪ Data Blocks‬اﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻨﮭﺎ‬ ‫·‬
‫ﻟﻜﻞ ﺟﻤﻠﺔ ‪ SQL‬واﺣﺪة‪.‬‬
‫‪ :COMPOSITE_LIMIT‬ھﻮ ﺣﺎﺻﻞ ﺟﻤﻊ ﻛﻞ ﻣﻦ ‪ CPU_PER_SESSION‬و‬ ‫·‬
‫‪ CONNECT_TIME‬و‪ LOGICAL_READS_PER_CALL‬و‪PRIVATE_SGA‬‬
‫ﻟﻤﻌﺮﻓﺔ اﻟﻘﯿﻤﺔ اﻟﻜﺎﻣﻠﺔ ﻟﻞ ‪.Resource Cost‬‬

‫‪139‬‬
:CREATING PROFILE TO MANAGE RESOURCES

:‫ ﺑﺎﺗﺒﺎع اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‬Resources ‫ ﻹدارة ال‬Profile ‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ‬

CREATE PROFILE profile_name LIMIT


[SESSIONS_PER_USER n1]
[CPU_PER_SESSION n1]
[CONNECT_TIME n1]
[IDLE_TIME n1]
[CPU_PER_CALL n1]
[LOGICAL_READS_PER_SESSION n1]
[LOGICAL_READS_PER_CALL n1]
[COMPOSITE_LIMIT n1]
[PRIVATE_SGA n2]

:‫ﻓﻲ اﻟﻘﺎﻋﺪة‬

.UNLIMITED, DEFAULT, NUMBER ‫ ھﻲ أﺣﺪى ھﺬه اﻟﻘﯿﻢ‬:n1 ·


.UNLIMITED, DEFAULT, NUMBER K|M ‫ ھﻲ أﺣﺪى ھﺬه اﻟﻘﯿﻢ‬:n2 ·

:8.5 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

: Resources ‫ ﻟﻠﺘﺤﻜﻢ ﺑﺎل‬Profile ‫ﻟﺘﻜﻮﯾﻦ‬

CREATE PROFILE myprofile LIMIT


SESSIONS_PER_USER 3
CPU_PER_SESSION UNLIMITED
IDLE_TIME 15
CONNECT_TIME 90;

:Console ‫ ﺑﺎﺳﺘﺨﺪام ال‬Profile ‫ﻟﺘﺤﻮﯾﻞ‬

.Standalone ‫ ﻋﺒﺮ‬Console ‫ادﺧﻞ اﻟﻰ ال‬ ·


.‫ ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‬Database ‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال‬ ·
.Normal ‫ ﻋﻮﺿﺎً ﻋﻦ‬SYSDBA ‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر‬ ·
.Security Manager ‫ ال‬+ ‫اﺿﻐﻂ ﻋﻠﻰ‬ ·
.Create ‫ واﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﺘﻲ ﺗﻈﮭﺮ‬Profile ‫اﺿﻐﻂ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ ﻣﺠﻠﺪ ال‬ ·
.Profile ‫ ادﺧﻞ اﺳﻢ ال‬،‫ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﺠﺪﯾﺪة‬ ·
.General ‫ادﺧﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺮﯾﺪ ﻓﻲ ﻗﺎﺋﻤﺔ‬ ·
.Create ‫اﺿﻐﻂ ﻋﻠﻰ‬ ·

140
:USING DATABASE RESOURCE MANAGER

‫ ﻋﻠﻰ ال‬Oracle Server ‫ ﻟﺘﻮﻓﯿﺮ ﺗﺤﻜﻢ أﻛﺒﺮ ﻟﻞ‬Database Resource Manager ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ال‬
Database ‫ اﻟﻼزﻣﺔ ﻟﻠﺘﺤﻜﻢ ﺑﺎل‬Privilege ‫ ﯾﺠﺐ أن ﯾﻜﻮن ﻟﻠﻤﺴﺘﺨﺪم ال‬.‫ وﻛﯿﻔﯿﺔ ﺗﺨﺼﯿﺼﮭﺎ‬Resources
.ADMINISTER_RESOURCE_MANAGER privilege ‫ وھﻲ‬Resource Manager

:‫ اﻟﻰ أرﺑﻌﺔ أﺟﺰاء ھﻲ‬Database Resource Manager ‫ﯾﺘﻮزع ال‬

Resources ‫ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﯾﺘﺸﺎرﻛﻮن ﻓﻲ ذات ﻗﯿﻢ ال‬:CONSUMER GROUP ·


‫ واﺣﺪ ﻟﻜﻞ ﻣﺠﻤﻮﻋﺔ ﻷن ﻟﺪﯾﮭﻢ ذات اﻹﺣﺘﯿﺎﺟﺎت ﻣﻦ ال‬Profile ‫اﻟﺘﻲ ﯾﺤﺘﺎ ﺟﻮﻧﮭﺎ )ﻛﺄن ﯾﺨﺼﺺ‬
.(Resources
.Consumer Group ‫ ﻋﻠﻰ ال‬Resources ‫ ﺧﻄﻂ ﻟﺘﻮزﯾﻊ ال‬:PLAN ·
.Consumer Groups ‫ ﻟﻞ‬Resources ‫ ﻃﺮق ﺗﻮزﯾﻊ ال‬:ALLOCATION METHOD ·
‫ ﻋﻠﻰ ال‬PLANS ‫ ﻟﺘﻮزﯾﻊ ال‬DBA ‫ ﯾﺴﺘﺨﺪم ﻣﻦ ﻗﺒﻞ ال‬:PLAN DIRECTIVES ·
.Consumer Groups

‫ وﻛﯿﻔﯿﺔ اﺳﺘﺨﺪاﻣﮫ ﻓﻲ دراﺳﺔ اﻹﻣﺘﺤﺎن‬Database Resource Manager ‫ ﻣﻌﻠﻮﻣﺎت أﻛﺜﺮ ﺣﻮل ال‬:‫ﻣﻼﺣﻈﺔ‬
.Oracle9i DBA ‫اﻟﺮاﺑﻊ ﻣﻦ اﻣﺘﺤﺎﻧﺎت ال‬

.Managing Undo Data ‫ ﻓﻲ درس‬Database Resource Manager ‫ ﺗﻄﺮﻗﻨﺎ ﻟﻞ‬:‫ﺗﺬﻛﺮ‬

:QUERYING INFORMATION

:Profile ‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال‬

‫ ﯾﺴﺘﺨﺪم ال‬، Profile ‫ ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﻗﯿﻢ ﻋﻮاﻣﻞ ال‬:DBA_PROFILES ·
‫ أو‬Password ‫ ﻟﺘﺤﺪﯾﺪ ﻧﻮع اﻟﻌﻮاﻣﻞ اﻟﻤﺮاد اﺳﺘﺨﺮاﺟﮭﺎ )أﻣﺎ‬Resource_Type Column
.(Kernel ‫ وﺗﺴﻤﻰ ھﻨﺎ‬Resources

SELECT * FROM DBA_PROFILES


WHERE PROFILE = ‘myprofile’
AND RESOURCE_TYPE = ‘KERNEL’;

:Account ‫ﻟﻤﻌﺮﻓﺔ ﻛﻠﻤﺔ اﻟﺴﺮ ﻟﻠﻤﺴﺘﺨﺪم )ﺑﺸﻜﻞ ﻣﺸﻔﺮ( وﺣﺎﻟﺔ ال‬

.(‫ ﯾﻌﻤﻞ‬-‫ )ﻣﻐﻠﻖ‬Account ‫ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ وﺣﺎﻟﺔ ال‬:DBA_USERS ·

:(COMPOSITE_LIMIT ‫ )ﻣﻦ اﺳﺘﺨﺪام‬Resource Cost ‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال‬

.Composite_Limit ‫ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻷرﺑﻊ ﻋﻮاﻣﻞ اﻟﺘﻲ ﯾﺤﺪدھﺎ‬:RESOURCE_COST ·

141
‫‪MANAGING USERS‬‬

‫ﻟﻜﻲ ﯾﺘﻤﻜﻦ ال ‪ DBA‬ﻣﻦ ﻣﻨﺢ ﻓﺮﺻﺔ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬ﻟﻠﻤﻮﻇﻔﯿﻦ ‪ ،‬ﯾﺠﺐ ﻣﻨﺢ ﻛﻞ واﺣﺪ ﻣﻨﮭﻢ‬
‫‪ Account‬ﯾﺘﻜﻮن ﻣﻦ اﺳﻢ ﻣﺴﺘﺨﺪم وﻛﻠﻤﺔ ﺳﺮ‪ ،‬ﯾﻌﺮف ھﺬا ال ‪ Account‬ﺑﺎﺳﻢ ‪ .User‬ﯾﻤﻜﻦ ﺗﺨﺼﯿﺺ ﻟﻜﻞ‬
‫ﻣﺴﺘﺨﺪم ﻣﻤﯿﺰات و ‪ Privileges‬و ‪ ، Profile‬و ‪ Tablespace‬ﻟﺘﻜﻮﯾﻦ اﻟﻌﻨﺎﺻﺮ "‪ "Objects‬ﻓﯿﮭﺎ‪،‬‬
‫و‪ Temporary Tablespace‬ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺆﻗﺘﮫ اﻟﺘﻲ ﺗﻨﺘﺞ ﻋﻦ ﻋﻤﻠﯿﺎت اﻟﻤﺴﺘﺨﺪم‪ ،‬ﻛﻤﺎ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ‬
‫ﻣﺴﺎﺣﺔ ﺧﺎﺻﺔ ﻟﻠﻤﺴﺘﺨﺪم ﻣﻦ ﻛﻞ ‪ Tablespace‬ﺗﻌﺮف ﺑﺎﺳﻢ ‪ .Tablespace Quotas‬ﻛﻞ اﻟﻌﻨﺎﺻﺮ‬
‫"‪ "Objects‬اﻟﺘﻲ ﯾﻤﻠﻜﮭﺎ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ال ‪) Database‬ﻣﺜﻞ ‪ (Tables, Views, Indexes‬ﺗﻌﺮف ﺑﺎﺳﻢ‬
‫‪ Schema‬وﻻ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم اﻟﻮاﺣﺪ أن ﯾﻜﻮن ﻟﮫ أﻛﺜﺮ ﻣﻦ ‪ Schema‬واﺣﺪة‪.‬‬

‫‪:CREATING USERS‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ User‬ﺟﺪﯾﺪ ﺗﺴﺘﺨﺪم اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪CREATE USER user_name‬‬


‫]‪IDENTIFIED [BY password | EXTERNALLY‬‬
‫]‪[DEFAULT TABLESPACE Tablespace_name‬‬
‫]‪[TEMPORARY TABLESPACE Tablespace_name‬‬
‫]… ‪[QUOTA {number K|M | UNLIMITED} ON Tablespace_name,‬‬
‫]‪[PASSWORD EXPIRE‬‬
‫]}‪[ACCOUNT {LOCK | UNLOCK‬‬
‫]}‪[PROFILE {profile_name | DEFAULT‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :EXTERNALLY‬ﺳﻮف ﻧﺘﻄﺮق ﻟﮭﺎ ﺑﻌﺪ ﻗﻠﯿﻞ‪.‬‬ ‫·‬


‫‪ :DEFAULT TABLESPACE‬ﺗﺤﺪﯾﺪ ال ‪ Tablespace‬اﻟﺘﻲ ﺳﻮف ﺗﺨﺰن اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ ﻗﺪ‬ ‫·‬
‫ﯾﻜﻮﻧﮭﺎ اﻟﻤﺴﺘﺨﺪم ﻣﺴﺘﻘﺒﻼً‪.‬‬
‫‪ :TEMPORARY TABLESPACE‬ﺗﺤﺪﯾﺪ ال ‪ Temporary Tablespace‬اﻟﺘﻲ ﺳﻮف‬ ‫·‬
‫ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺆﻗﺘﺔ اﻟﻨﺎﺗﺠﺔ ﻋﻦ ﻣﮭﺎم اﻟﻤﺴﺘﺨﺪم‪.‬‬
‫‪ :QUOTA‬ﺗﺤﺪﯾﺪ ﻣﺴﺎﺣﺔ ﻣﺤﺪدة ﻣﻦ أي ‪ Tablespace‬ﺗﺨﺼﺺ ﻟﻠﻤﺴﺘﺨﺪم ﻟﺘﺨﺰﯾﻦ ﻋﻨﺎﺻﺮ‬ ‫·‬
‫"‪ "Objects‬ﻓﯿﮭﺎ‪.‬‬
‫‪ :PASSWORD EXPIRE‬ﻹﺟﺒﺎر اﻟﻤﺴﺘﺨﺪم ﻋﻠﻰ ﺗﻐﯿﯿﺮ ﻛﻠﻤﺔ اﻟﺴﺮ‪ ،‬اﻟﺘﻲ ﻋُﺮﻓﺖ ﺑﻮاﺳﻄﺔ ‪DBA‬‬ ‫·‬
‫ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪ ،Account‬ﻋﻨﺪ دﺧﻮل اﻟﻤﺴﺘﺨﺪم اﻟﻰ ال ‪ Account‬ﻣﺒﺎﺷﺮة‪.‬‬
‫‪ :ACCOUNT‬ﻟﺘﺤﺪﯾﺪ اذا ﻣﺎ ﻛﺎن ﯾﺮﯾﺪ ال ‪ DBA‬ﺗﻜﻮﯾﻦ ال ‪ Account‬ﺟﺎھﺰ ﻟﻠﻌﻤﻞ ﻣﺒﺎﺷﺮة أو أن‬ ‫·‬
‫ﯾﻜﻮن ﻣﻐﻠﻖ ﺛﻢ ﯾﺘﻢ ﻓﺘﺤﮫ ﺑﻌﺪ ﻓﺘﺮة‪.‬‬
‫‪ :PROFILE‬ﺗﺤﺪﯾﺪ ال ‪ Profile‬اﻟﻤﺨﺼﺺ ﻟﻠﻤﺴﺘﺨﺪم‪.‬‬ ‫·‬

‫‪142‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:8.6‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ User‬ﺟﺪﯾﺪ ‪:‬‬

‫‪CREATE USER Ahmad‬‬


‫‪IDENTIFIED BY newemp‬‬
‫‪DEFAULT TABLESPACE data‬‬
‫‪TEMPORARY TABLESPACE temp‬‬
‫‪QUOTA UNLIMITED ON users‬‬
‫‪QUOTA 2M ON indx‬‬
‫‪QUOTA 10M ON data‬‬
‫;‪PASSWORD EXPIRE‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪ User‬ﺑﺎﺳﺘﺨﺪام ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم و ﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ ﻣﺠﻠﺪ ال ‪ Users‬واﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﺘﻲ ﺗﻈﮭﺮ ‪.Create‬‬ ‫·‬
‫ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﺠﺪﯾﺪة‪ ،‬ادﺧﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻗﺎﺋﻤﺔ ‪ General‬وﻗﺎﺋﻤﺔ ‪.QUOTA‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Create‬‬ ‫·‬

‫‪:Operating System Authentication‬‬

‫ﯾﻤﻜﻦ اﻟﺴﻤﺎح ﻟﻠﻤﺴﺘﺨﺪﻣﯿﯿﻦ اﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬دون اﺳﺘﺨﺪام ﻛﻠﻤﺔ ﺳﺮ ‪ ،‬ھﺬا ﯾﻌﻨﻲ ﺑﻤﺠﺮد اﺳﺘﻄﺎﻋﺔ‬
‫اﻟﻤﺴﺘﺨﺪم اﻟﺪﺧﻮل اﻟﻰ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ﻋﺒﺮ ﻧﻈﺎم اﻟﺤﻤﺎﯾﺔ اﻟﻤﻌﻤﻮل ﻓﯿﮫ ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ )ﻗﺪ ﯾﻜﻮن ﻛﻠﻤﺔ ﺳﺮ ﺧﺎﺻﺔ‬
‫ﺑﻨﻈﺎم اﻟﺘﺸﻐﯿﻞ " ‪ (" Operating System‬ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم اﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬دون اﻟﺤﺎﺟﺔ اﻟﻰ‬
‫ﻛﻠﻤﺔ ﺳﺮ ﺧﺎﺻﺔ ﺑﺎﻷوراﻛﻞ‪ .‬ﻟﺘﻄﺒﯿﻖ ھﺬا اﻟﻨﻈﺎم ﯾﺠﺐ اﺳﺘﺨﺪام ﻛﻠﻤﺔ ‪ EXTERNALLY‬ﻓﻲ ﺟﻤﻠﺔ‬
‫‪ .CREATE USER‬ﺑﺘﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ ‪ OS_AUTHENT_PREFIX‬ﯾﻤﻜﻦ ﺗﻤﯿﯿﺰاﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﻧﻈﺎم‬
‫اﻟﺘﺸﻐﯿﻞ واﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ال ‪ ، Database‬ﺣﯿﺚ أن اﻟﻘﯿﻤﺔ ال ‪ Default‬ﻟﮭﺬا اﻟﻌﺎﻣﻞ ھﻲ ‪.OPS$‬‬

‫ﻣﺜﺎل‪:‬‬

‫اذا ﻛﺎن اﻟﻤﺴﺘﺨﺪم ﻣﺆھﻞ ﻟﻠﺪﺧﻮل ﻋﺒﺮ ﺣﻤﺎﯾﺔ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ) اﻟﺘﻲ ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﻛﺘﺎﺑﺔ اﺳﻢ و ﻛﻠﻤﺔ ﺳﺮ(‬
‫اﻟﻰ ال ‪ Database‬وﻛﺎن اﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﻧﻈﺎم ﺣﻤﺎﯾﺔ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ھﻮ ‪ Ahmad‬ﻓﺈن اﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ال‬
‫‪ Database‬ﯾﻜﻮن ‪.OPS$Ahmad‬‬
‫ﻋﻨﺪﻣﺎ ﯾﻄﻠﺐ اﻟﻤﺴﺘﺨﺪم ‪ Ahmad‬اﻟﺪﺧﻮل اﻟﻰ ال ‪ ، Database‬ﻓﻠﯿﺲ ﻣﻄﻠﻮﺑﺎً ﻣﻦ ادﺧﺎل ﻛﻠﻤﺔ ﺳﺮ أو اﺳﻢ‬
‫ﻣﺴﺘﺨﺪم اذ ﯾﻘﻮم اﻷوراﻛﻞ ﺑﻤﻌﺮﻓﺔ اﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ )‪ (Ahmad‬ورﺑﻄﮫ ﻣﻊ ال ‪Account‬‬
‫اﻟﺨﺎص ﺑﮫ )‪.(OPS$Ahmad‬‬

‫‪143‬‬
‫ﻣﻼﺣﻈﺔ‪ :‬ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ ال ‪ OS_AUTHENT_PREFIX‬ﻗﺪ ﯾﺆدي اﻟﻰ ﻣﻨﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ اﻟﺪﺧﻮل اﻟﻰ ال‬
‫‪) Database‬اﻟﺬﯾﻦ ﯾﺴﻤﺢ ﻟﮭﻢ اﻟﺪﺧﻮل اﻟﻰ ‪ Database‬ﺑﺪون ﻛﻠﻤﺔ ﺳﺮ(‪.‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻋﺎﻣﻞ أﺧﺮ ھﻮ ‪ REMOTE_OS_AUTHENT‬ﻟﺘﺸﻐﯿﻞ أوﻏﻠﻖ اﻣﻜﺎﻧﯿﺔ اﻹﺗﺼﺎل ﺑﺎل‬


‫‪ Remote Database‬ﻋﺒﺮ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ )ﻻ ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪاﻣﮫ ﻹﻣﻜﺎﻧﯿﺔ ﺣﺪوث اﺧﺘﺮاق ﻟﻞ ‪.( Database‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻣﺜﺎل ﻋﻠﻰ اﺳﺘﺨﺪام ‪ ، REMOTE_OS_AUTHENT‬دﺧﻮل اﻟﻤﺴﺘﺨﺪم )ﻟﺪﯾﮫ إﻣﻜﺎﻧﯿﺔ اﻟﺪﺧﻮل اﻟﻰ ال‬
‫‪ Database‬ﻋﺒﺮ ﺣﻤﺎﯾﺔ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ( اﻟﻰ ﻧﻈﺎم ﺗﺸﻐﯿﻞ )ﻣﺜﻞ ال ‪ (Unix‬ﻣﺘﺼﻞ ﻣﻊ ‪Oracle Server‬‬
‫اﻟﻤﻮﺟﻮد ﻋﻠﻰ ﺟﮭﺎز أﺧﺮ‪ ،‬ﻓﻲ ﺣﺎﻟﺔ وﺿﻊ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ ،True‬ﻓﺈن اﻟﻤﺴﺘﺨﺪم ﯾﺴﺘﻄﯿﻊ اﻹﺗﺼﺎل ﺑﺎل‬
‫‪ ،Database‬أﻣﺎ ﻓﻲ ﺣﺎﻟﺔ اﻟﻘﯿﻤﺔ ‪) False‬ھﻲ ال ‪ (Default‬ﻓﺈن اﻟﻤﺴﺘﺨﺪم ﻻ ﯾﺴﺘﻄﯿﻊ اﻹﺗﺼﺎل ﺑﺎل‬
‫‪ Database‬وﯾﺴﺘﻄﯿﻊ ﻓﻘﻂ اذا ﻛﺎن ال ‪ Oracle Server‬ﻣﻮﺟﻮد ﻋﻠﻰ ذات اﻟﺠﮭﺎز اﻟﺬي دﺧﻞ إﻟﯿﮫ‪.‬‬

‫رﺳﻢ ‪8.1‬‬

‫‪:ALTERING USERS‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ ALTER USER‬ﻟﻜﻲ ﯾﺘﻢ ﺗﻐﯿﯿﺮ ال ‪ Default Tablespace‬أو ال ‪Temporary‬‬
‫‪ Tablespace‬أو ال ‪.Quota‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:8.7‬‬

‫ﻟﺘﻐﯿﯿﺮ ال ‪ Quota‬ﻟﻠﻤﺴﺘﺨﺪم‪:‬‬

‫‪ALTER USER Ahmad‬‬


‫;‪QUOTA 0 ON users‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻓﻲ ﺣﺎﻟﺔ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ ال ‪ Quota‬اﻟﻰ ﺻﻔﺮ وﻛﺎن ﻟﻠﻤﺴﺘﺨﺪم ‪ Table‬ﻓﻲ ال ‪،Users Tablespace‬‬
‫ﻓﺈن ھﺬه ال ‪ Table‬ﻻ ﯾﻤﻜﻦ أن ﯾﻜﺒﺮ ﺣﺠﻤﮭﺎ أﺑﺪاً )ﻻ ﺗﺴﺘﻄﯿﻊ ﺣﺠﺰ ﻣﺰﯾﺪ ﻣﻦ ال ‪.(Extents‬‬

‫‪144‬‬
‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ،Users‬ﺛﻢ اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم‪.‬‬ ‫·‬
‫ﻏﯿﺮ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪:DROPPING USERS‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ﻣﺴﺘﺨﺪم ﻣﻦ ال ‪ Database‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة‪:‬‬

‫]‪DROP USER user_name [CASCADE‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :CASCADE‬ﺑﺎﺿﺎﻓﺘﮭﺎ اﻟﻰ اﻟﺠﻤﻠﺔ ﯾﺘﻢ ﺣﺬف ﻛﻞ اﻟﻌﻨﺎﺻﺮ "‪ "Objects‬اﻟﺘﻲ ﻛﻮﻧﮭﺎ اﻟﻤﺴﺘﺨﺪم ﻓﻲ‬ ‫·‬
‫ال ‪ Schema‬اﻟﺨﺎﺻﺔ ﺑﮫ‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ ﺣﺬف ﻣﺴﺘﺨﺪم ﻣﺘﺼﻞ ﺑﺎل ‪ .Database‬ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ‪ KILL SESSION‬ﻹﺧﺮاج‬
‫اﻟﻤﺴﺘﺨﺪم ﺛﻢ ﺣﺬﻓﮫ ﻣﻦ ال ‪.Database‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:8.8‬‬

‫ﻟﺤﺬف ﻣﺴﺘﺨﺪم‪:‬‬
‫;‪DROP USER Ahmad‬‬

‫‪:QUERYING INFORMATION‬‬

‫‪ :DBA_USERS‬ﯾﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﺳﻤﺎء اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ و ال ‪Default‬‬ ‫·‬


‫‪ Tablespace‬وال ‪ Temporary Tablespace‬و اﺳﻢ ال ‪ Profile‬وﺗﻮﻗﯿﺖ ﺗﻜﻮﯾﻦ ال ‪Profile‬‬
‫و ﺣﺎﻟﺔ ال ‪ Account‬ﻟﺠﻤﯿﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ وﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت‪.‬‬

‫· ‪ :DBA_TS_QUOTAS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Quotas‬اﻟﻤﺨﺼﺼﺔ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ ال‬


‫‪.Tablespaces‬‬

‫‪145‬‬





Managing PRIVILEGES &


AUDITING & ROLES

146
‫‪PRIVILEGES‬‬

‫ﺑﺎﺳﺘﺨﺪام ال ‪ Privileges‬ﯾﻤﻜﻦ وﺿﻊ ﺣﺪود ﻟﻜﻞ ﻣﺴﺘﺨﺪم ﻓﻲ ال ‪ ،Database‬ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ ﺣﺪود ﻋﻠﻰ‬
‫اﻟﻤﮭﺎم اﻟﺘﻲ ﯾﺴﺘﻄﯿﻊ ﺗﻨﻔﯿﺬھﺎ‪ ،‬وﺣﺪود ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﺴﺘﻄﯿﻊ ﺗﻌﺪﯾﻠﮭﺎ‪ .‬ﯾﻤﻜﻦ إﻋﻄﺎء ‪Privileges‬‬
‫ﻟﻠﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ أو أن ﯾﺘﻢ ﻋﺒﺮ ال ‪ ، Roles‬ﻛﻤﺎ ﯾﻤﻜﻦ إﻋﻄﺎء ‪ Privileges‬ﻋﺎﻣﺔ ﻟﺠﻤﯿﻊ‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ وذﻟﻚ ﻋﺒﺮ إﻋﻄﺎء ال ‪ Privileges‬اﻟﻰ ﻣﺠﻤﻮﻋﺔ ﺗﻌﺮف ﺑﺎﺳﻢ ‪ Public‬وھﻲ ﻣﺠﻤﻮﻋﺔ ﯾﻨﺘﻤﻲ إﻟﯿﮭﺎ‬
‫ﺟﻤﯿﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻓﻲ ال ‪.Database‬‬

‫ﯾﻮﺟﺪ ﻧﻮﻋﯿﯿﻦ ﻣﻦ ال ‪ Privileges‬ھﻤﺎ‪:‬‬

‫‪ :OBJECT Privileges‬وﺿﻊ ﺣﺪود وﻗﯿﻮد ﻋﻠﻰ اﻟﻌﻨﺎﺻﺮ "‪."Objects‬‬ ‫·‬


‫‪ :SYSTEM Privileges‬وﺿﻊ ﺣﺪود ﻋﻠﻰ اﻟﻤﮭﺎم اﻟﺘﻲ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم ﺗﻨﻔﯿﺬھﺎ ﻓﻲ ال‬ ‫·‬
‫‪ Database‬ﺑﺸﻜﻞ ﻋﺎم‪.‬‬

‫‪:SYSTEM PRIVILEGES‬‬

‫ﯾﻮﺟﺪ ﻋﺪد ﻛﺒﯿﺮ ﻣﻦ ال ‪ System Privileges‬ﻓﻲ ال ‪ Database‬ﯾﺘﻢ ﺗﺨﺼﯿﺼﮭﺎ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ‬
‫‪ GRANT‬وﯾﺘﻢ إﻋﺎدﺗﮭﺎ )إﻟﻐﺎﺋﮭﺎ( ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ .REVOKE‬ﯾﻤﻜﻦ ﺗﻮزﯾﻊ ال ‪System‬‬
‫‪ Privileges‬اﻟﻰ ﺛﻼﺛﺔ أﻗﺴﺎم ‪ ،‬ﻗﺴﻢ ﻣﺘﻌﻠﻖ ﺑﺎل ‪ Database‬ﺑﺸﻜﻞ ﻋﺎم ‪ ،‬واﻟﻘﺴﻢ اﻟﺜﺎﻧﻲ ﻣﺘﻌﻠﻖ ﺑﺎل ‪Schema‬‬
‫اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﺴﺘﺨﺪم ‪ ،‬أﻣﺎ اﻟﻘﺴﻢ اﻟﺜﺎﻟﺚ ﻓﻤﺘﻌﻠﻖ ﺑﺎل ‪ Schemas‬اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ اﻷﺧﺮﯾﻦ‪ .‬ﻧﺴﻖ ال‬
‫‪ Privileges‬ﻓﻲ اﻟﻨﻮع اﻟﺜﺎﻟﺚ واﻟﺮاﺑﻊ ﻣﺘﺸﺎﺑﮫ ﻣﻦ ﺣﯿﺚ اﻟﺠﻤﻠﺔ وﻟﻜﻦ ﯾﻀﺎف ﻛﻠﻤﺔ ‪ ANY‬ﻟﻠﻨﻮع اﻟﺜﺎﻟﺚ‪ ،‬ﻣﺜﺎل‬
‫ﻋﻠﻰ ذﻟﻚ ‪) CREATE TABLE‬اﻟﻨﻮع اﻟﺜﺎﻧﻲ( و ‪) CREATE ANY TABLE‬اﻟﻨﻮع اﻟﺜﺎﻟﺚ(‪.‬‬

‫ﻣﻦ ال ‪:System Privileges‬‬

‫‪ALTER SYSTEM‬‬ ‫·‬


‫‪ALTER SESSION‬‬ ‫·‬
‫‪ALTER DATABASE‬‬ ‫·‬
‫‪CREATE TABLESPACE‬‬ ‫·‬
‫‪CREATE TABLE‬‬ ‫·‬
‫‪CREATE PROCEDURE‬‬ ‫·‬
‫‪CREATE CLUSTER‬‬ ‫·‬
‫‪CREATE SESSION‬‬ ‫·‬
‫‪RESTRICTED SESSION‬‬ ‫·‬
‫‪CREATE ANY TABLE‬‬ ‫·‬
‫‪ALTER ANY TABLE‬‬ ‫·‬
‫‪DROP ANY TABLE‬‬ ‫·‬
‫‪SELECT ANY TABLE‬‬ ‫·‬
‫‪CREATE ANY INDEX‬‬ ‫·‬
‫‪ALTER ANY INDEX‬‬ ‫·‬
‫‪DROP ANY INDEX‬‬ ‫·‬
‫‪CREATE ANY SEQUENCE‬‬ ‫·‬
‫‪ALTER TABLESPACE‬‬ ‫·‬
‫‪DROP TABLESPACE‬‬ ‫·‬
‫‪UNLIMITED TABLESPACE‬‬ ‫·‬

‫‪147‬‬
SELECT ANY TABLE ·
UPDATE ANY TABLE ·
DELETE ANY TABLE ·
BACKUP ANY TABLE ·
INSERT ANY TABLE ·
GRANT ANY PRIVILEGE ·
GRANT ANY ROLE ·
SYSOPER ·
SYSDBA ·

:‫ﻣﻼﺣﻈﺎت‬

‫ ﻷﻧﮭﻤﺎ‬، ANALYZE INDEX privilege ‫ أو‬CREATE INDEX privilege ‫ ﻻ ﯾﻮﺟﺪ‬-1


CREATE TABLE ‫ ﺑﺤﯿﺚ اذا ﺗﻢ إﻋﻄﺎء‬، CREATE TABLE privilege ‫ﻣﺸﻤﻮﻟﺘﯿﯿﻦ ﻣﻊ‬
.Indexes ‫ﻟﻠﻤﺴﺘﺨﺪم ﯾﺴﺘﻄﯿﻊ ﺗﻜﻮﯾﻦ‬

.CREATE TABLE privilege ‫ ﻣﻦ ﺿﻤﻦ ال‬DROP TABLE Privilege -2

.CREATE PROCEDURE Privilege ‫ ﻣﻦ ﺿﻤﻦ ال‬DROP PROCEDURE privilege -3

.CREATE CLUSTER privilege ‫ ﻣﻦ ﺿﻤﻦ ال‬DROP CLUSTER privilege -4

‫ ﺗﻮﻓﺮ إﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺪام أي ﻣﺴﺎﺣﺔ ﻓﻲ أي‬UNLIMITED TABLESPACE privilege -5


.Roles ‫ وﻟﻜﻦ ﺗﺨﺼﺺ ﻓﻘﻂ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﯿﻦ وﻻ ﯾﻤﻜﻦ ﺗﺨﺼﯿﺼﮭﺎ ﻟﻞ‬، Tablespace

DROP ‫ ﯾﺠﺐ أن ﯾﺨﺼﺺ ﻟﮫ‬Schema ‫ ﻓﻲ أي‬Table ‫ ﻷي‬Truncate ‫ ﻟﻜﻲ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم ﻋﻤﻞ‬-6
.ANY TABLE

:Protecting the Dictionary

‫ ﯾﺼﺒﺢ‬،SELECT ANY TABLE ‫ أو‬ALTER ANY TABLE ‫ﻋﻨﺪﻣﺎ ﯾﺘﻢ ﻣﻨﺢ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ‬
‫ وھﺬا ﻗﺪ ﯾﺸﻜﻞ ﺧﻄﺮ ﻋﻠﻰ ال‬، Dictionary Objects ‫ﺑﺈﻣﻜﺎن اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ اﻟﺪﺧﻮل أو اﺳﺘﺨﺪام ال‬
‫ ﻣﻦ ﻋﻮاﻣﻞ‬07_DICTIONARY_ACCESSIBILITY ‫ ﯾﻮﻓﺮ اﻷوراﻛﻞ اﻟﻌﺎﻣﻞ‬.Database
،Dictionary Objects ‫ ﻓﻲ اﻟﺘﺤﻜﻢ ﻓﻲ ال‬DBA ‫ اﻟﺬي ﯾﻤﻜﻦ ال‬Initialization Parameter File
SYS ‫ ﯾﺘﻢ ﻣﻨﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ اﻟﺪﺧﻮل اﻟﻰ ﺟﻤﯿﻊ اﻟﻌﻨﺎﺻﺮ ﺿﻤﻦ ال‬، False ‫ﺑﺤﯿﺚ ﻋﻨﺪ وﺿﻊ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ‬
. Dictionary ‫ اﻟﺬي ﯾﻤﻠﻚ ال‬Schema

148
‫‪:Granting System Privilege‬‬

‫ﯾﻤﻜﻦ إﻋﻄﺎء ‪ Privileges‬ﻟﻠﻤﺴﺘﺨﺪم ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫… ‪GRANT system_privilege , system_privilege,‬‬


‫‪TO {user_name | role_name | PUBLIC} , { user_name | role_name | PUBLIC} , ..‬‬
‫]‪[WITH ADMIN OPTION‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :Role_name‬ﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً أﻧﮫ ﯾﻤﻜﻦ ﻣﻨﺢ ال ‪ Privileges‬ﻟﻞ ‪.Roles‬‬ ‫·‬


‫‪ :WITH ADMIN OPTION‬ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﺗﻠﻘﻰ ال ‪ Privileges‬إﻋﻄﺎءھﺎ‬ ‫·‬
‫ﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ أﺧﺮﯾﯿﻦ‪.‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻟﻔﮭﻢ ‪:WITH ADMIN OPTION‬‬

‫ﯾﻮﺟﺪ ﺛﻼث ﻣﺴﺘﺨﺪﻣﯿﯿﻦ اﻷول ھﻮ ال ‪ DBA‬واﻟﺜﺎﻧﻲ ھﻮ ‪ Ahmad‬واﻟﺜﺎﻟﺚ ھﻮ ‪ . Omar‬ﻗﺎم ال ‪ DBA‬ﺑﺈﻋﻄﺎء‬


‫‪ CREATE ANY TABLE‬ﻟﻠﻤﺴﺘﺨﺪم ‪ Ahmad‬ﻣﻊ اﺳﺘﺨﺪام ‪ ،WITH ADMIN OPTION‬ﻓﻲ‬
‫ھﺬه اﻟﺤﺎﻟﺔ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم ‪ Ahmad‬إﻋﻄﺎء ‪ CREATE ANY TABLE‬ﻟﻠﻤﺴﺘﺨﺪم ‪ .Omar‬أﻣﺎ ﻓﻲ ﺣﺎل‬
‫ﻋﺪم ذﻛﺮ ﺟﻤﻠﺔ ‪ ، WITH ADMIN OPTION‬ﻓﻼ ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم ‪ Ahamd‬اﻋﻄﺎء ال ‪Privilege‬‬
‫ﻟﻠﻤﺴﺘﺨﺪم ‪ ، Omar‬وﯾﺠﺐ ﻋﻠﻰ ‪ Omar‬اﻟﺤﺼﻮل ﻋﻠﻰ ال ‪ Privilege‬ﻣﻦ )اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﻟﺪﯾﺔ إﻣﻜﺎﻧﯿﺔ ﻣﻨﺢ‬
‫ال ‪ ( Privileges‬ال ‪.DBA‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.1‬‬

‫;‪GRANT CREATE ANY TABLE TO Ahmad, Omar‬‬

‫‪GRANT ALTER ANY TABLE , ALTER ANY INDEX‬‬


‫;‪TO Ali WITH ADMIN OPTION‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ،Users‬ﺛﻢ اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم‪.‬‬ ‫·‬
‫اﺧﺘﺮ اﻟﻘﺎﺋﻤﺔ ‪.System Privileges‬‬ ‫·‬
‫اﺧﺘﺮ ال ‪ Privilege‬ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻌﻠﯿﺎ ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ اﻟﻤﺜﻠﺚ اﻟﻤﺘﺠﮫ اﻟﻰ أﺳﻔﻞ‪.‬‬ ‫·‬
‫ﺿﻊ ﻋﻼﻣﺔ ﺻﺢ ﻓﻲ ﻗﺴﻢ ‪ Admin Option‬اذا ﻛﻨﺖ ﺗﺮﯾﺪ ذﻟﻚ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪149‬‬
‫‪:Revoking System Privilege‬‬

‫ﯾﻤﻜﻦ ﺳﺤﺐ أو إﻟﻐﺎء ال ‪ Privileges‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫… ‪REVOKE system_privilege , system_privilege,‬‬


‫| ‪FROM {user_name | role_name | PUBLIC} , { user_name | role_name‬‬
‫‪PUBLIC} , ..‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻓﻲ ﺑﻌﺾ اﻟﺤﻼت ﻋﻨﺪ ﺳﺤﺐ ‪ Privilege‬ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﯾﺤﺪث ﺧﻠﻞ ﻓﻲ ﺑﺎﻗﻲ ﻋﻨﺎﺻﺮ اﻟﻤﺴﺘﺨﺪم ‪ .‬ﻣﺜﺎل‬
‫ﻋﻠﻰ ذﻟﻚ اﻟﺨﻠﻞ اﻟﺬي ﻗﺪ ﯾﺤﺪﺛﮫ إﻟﻐﺎء ‪ CREATE TABLE‬ﻣﻦ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﻗﺎم ﺑﺘﻜﻮﯾﻦ ‪Tables‬‬
‫و‪ ،Views‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﯾﺤﺪث ﺧﻠﻞ ﻟﻞ ‪ Views‬ﻷن ال ‪ Views‬ﻣﻌﺘﻤﺪة ﻋﻠﻰ ال ‪.Tables‬‬

‫ﻣﺜﺎل‪:‬‬

‫ﻋﻨﺪ ﻋﻤﻞ ‪ REVOKE‬ل ‪ Privilege‬وﺗﻢ اﺳﺘﺨﺪام ‪ WITH ADMIN OPTION‬ﻣﻊ ال ‪.GRANT‬‬

‫ﻗﺎم ال ‪ DBA‬ﺑﺈﻋﻄﺎء ‪ CREATE ANY TABLE‬ﻟﻠﻤﺴﺘﺨﺪم ‪ Ahmad‬ﻣﻊ اﺳﺘﺨﺪام ‪WITH ADMIN‬‬


‫‪ ،OPTION‬وﻗﺎم اﻟﻤﺴﺘﺨﺪم ‪ Ahmad‬ﺑﺈﻋﻄﺎء ‪ CREATE ANY TABLE‬ﻟﻠﻤﺴﺘﺨﺪم ‪.Omar‬‬
‫ﻋﻨﺪ ﺣﺪوث أﻣﺮ ‪ REVOKE‬ﻣﻦ ﻗﺒﻞ ال ‪ DBA‬ﻟﻞ ‪ CREATE ANY TABLE‬اﻟﻤﻤﻨﻮﺣﺔ ل ‪، Ahmad‬‬
‫ﻻ ﯾﺤﺪث ﻋﻤﻠﯿﺔ ‪ REVOKE‬ﻟﻞ ‪ CREATE ANY TABLE‬ﻣﻦ ﻋﻨﺪ اﻟﻤﺴﺘﺨﺪم ‪ ،Omar‬أي أن ‪Omar‬‬
‫ﻣﺎزال ﯾﻤﻠﻚ ال ‪.CREATE ANY TABLE‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.2‬‬

‫;‪REVOKE CREATE ANY TABLE FROM Ahmad, Omar‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ،Users‬ﺛﻢ اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم‪.‬‬ ‫·‬
‫اﺧﺘﺮ اﻟﻘﺎﺋﻤﺔ ‪.System Privileges‬‬ ‫·‬
‫اﺧﺘﺮ ال ‪ Privilege‬ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﺴﻔﻠﻰ ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ اﻟﻤﺜﻠﺚ اﻟﻤﺘﺠﮫ اﻟﻰ أﻋﻠﻰ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪150‬‬
:OBJECT PRIVILEGES

Table, View, Sequence, ‫ إﻣﻜﺎﻧﯿﺔ اﻟﻘﯿﺎم ﺑﻤﮭﻤﺎت ﻣﺤﺪدة ﻋﻠﻰ ال‬Object Privilege ‫ﺗﻮﻓﺮ ال‬
.Procedure, Function, Package

:Object Privilege ‫ﻣﻦ ال‬

.Table,View, Sequence ‫( ﺑﯿﺎﻧﺎت ﻣﻦ ال‬Query) ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ اﺳﺘﺨﺮاج أو ﻗﺮاءة‬:SELECT

.Table, View ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ال‬:UPDATE

.Table, View ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺣﺬف اﻟﺒﯿﺎﻧﺎت ﻓﻲ ال‬:DELETE

.Table, View ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت اﻟﻰ ال‬:INSERT

.Table, Sequence, Procedure ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺗﻌﺪﯾﻞ ﺗﻜﻮﯾﻦ ال‬:ALTER

.Table, View ‫ ﻓﻲ ال‬Index ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺗﻜﻮﯾﻦ‬:INDEX

.Table ‫ ﻓﻲ ال‬Foreign Key ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺗﻜﻮﯾﻦ‬:REFERENCES

.Procedure, Function ‫ ﻣﺜﻞ ال‬PL/SQL ‫ ﺗﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﺗﺸﻐﯿﻞ ﺑﺮاﻣﺞ ال‬:EXECUTE

:Granting Object Privilege

:‫ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‬Privileges ‫ﯾﻤﻜﻦ إﻋﻄﺎء‬

GRANT object_privilege, object_privilege, … | ALL [PRIVILEGES]


ON [schema.] object_name
TO {user_name | role_name | PUBLIC} , ….
[WITH GRANT OPTION]

:‫ﻓﻲ اﻟﻘﺎﻋﺪة‬

Object Privileges ‫ ﻹﻋﻄﺎء ﻛﻞ ال‬:ALL ·


‫ إﻋﻄﺎءھﺎ‬Privileges ‫ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﺗﻠﻘﻰ ال‬:WITH GRANT OPTION ·
.‫ﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ أﺧﺮﯾﯿﻦ‬

:‫ﻣﻼﺣﻈﺎت‬

‫ ﻓﻲ ال‬Object ‫ ﯾﺠﺐ أن ﯾﻜﻮن ال‬،‫ اﻟﻰ ﻣﺴﺘﺨﺪم أﺧﺮ‬Object Privileges ‫ ﻟﻜﻲ ﯾﺴﺘﻄﯿﻊ ﻣﺴﺘﺨﺪم إﻋﻄﺎء‬-1
.WITH GRANT OPTION ‫ ﻣﻊ اﺳﺘﺨﺪام‬Object Privilege ‫ اﻟﺨﺎﺻﺔ ﺑﮫ أو ﺗﻢ إﻋﻄﺎءه‬Schema

.‫ اﻟﺨﺎﺻﺔ ﺑﮫ‬Schema ‫ اﻟﻤﻮﺟﻮدة ﻓﻲ ال‬Objects ‫ ﻛﺎﻣﻠﺔ ﻋﻠﻰ ال‬Object Privileges ‫ ﻟﻜﻞ ﻣﺴﺘﺨﺪم‬-2

151
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.3‬‬

‫‪GRANT UPDATE ON hr.employees‬‬


‫‪TO Ahmad‬‬
‫‪WITH GRANT OPTION‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ،Users‬ﺛﻢ اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﺗﺮﯾﺪ أن ﺗﻌﻄﯿﮫ ال ‪ Privilege‬ﻣﺜﻞ‬ ‫·‬
‫‪.PM‬‬
‫اﺧﺘﺮ اﻟﻘﺎﺋﻤﺔ ‪.Object Privileges‬‬ ‫·‬
‫اﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻌﻠﯿﺎ اﻟﯿﺴﺮى اﺳﻢ اﻟﻤﺴﺘﺨﺪم )ﻣﺜﻞ ‪ (HR‬اﻟﺬي ﯾﻤﻠﻚ ال ‪ Object‬اﻟﻤﺮاد أﻋﻄﺎء‬ ‫·‬
‫‪ Privilege‬ﻟﻞ ‪ .PM‬ﺛﻢ اﺧﺘﺮ ﻧﻮﻋﯿﺔ ال ‪) Object‬ﻣﺜﻞ ‪ (Tables‬ﺛﻢ اﺳﻢ ال ‪) Objects‬ﻣﺜﻞ‬
‫‪(Employees‬‬
‫اﺧﺘﺮ ﻧﻮﻋﯿﺔ ال ‪ Privilege‬ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﯿﻤﻨﻰ )ﻣﺜﻞ ‪.(Update‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ اﻟﺴﮭﻢ اﻟﻤﺘﺠﮫ اﻟﻰ أﺳﻔﻞ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪:Revoking Object Privilege‬‬

‫ﯾﻤﻜﻦ ﺳﺤﺐ أو إﻟﻐﺎء ال ‪ Privileges‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫]‪REVOKE object_privilege, object_privilege, … | ALL [PRIVILEGES‬‬


‫‪ON [schema.] object_name‬‬
‫‪FROM {user_name | role_name | PUBLIC} , ….‬‬
‫]‪[CASCADE CONSTRAINTS‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻟﻜﻲ ﺗﺘﻢ ﻋﻤﻠﯿﺔ ال ‪ ، Revoke‬ﯾﺠﺐ أن ﯾﻘﻮم ﺑﺎﻟﻌﻤﻠﯿﺔ ذات اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﻗﺎم ﺑﻌﻤﻠﯿﺔ ‪.Grant‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :CASCADE CONSTRAINTS‬ﻟﺤﺬف ال ‪ Foreign Keys‬اﻟﺘﻲ ﺗﻜﻮﻧﺖ ﺑﺎﺳﺘﺨﺪام‬ ‫·‬


‫‪.REFERENCES privilege‬‬

‫‪152‬‬
‫ﻣﺜﺎل‪:‬‬

‫ﻋﻨﺪ ﻋﻤﻞ ‪ REVOKE‬ل ‪ Privilege‬وﺗﻢ اﺳﺘﺨﺪام ‪ WITH GRANT OPTION‬ﻣﻊ ال ‪.GRANT‬‬

‫ﻗﺎم اﻟﻤﺴﺘﺨﺪم ‪ Ali‬ﺑﺈﻋﻄﺎء ‪ SELECT TABLE‬ﻟﻠﻤﺴﺘﺨﺪم ‪ Ahmad‬ﻣﻊ اﺳﺘﺨﺪام ‪WITH GRANT‬‬


‫‪ ،OPTION‬وﻗﺎم اﻟﻤﺴﺘﺨﺪم ‪ Ahmad‬ﺑﺈﻋﻄﺎء ‪ SELECT TABLE‬ﻟﻠﻤﺴﺘﺨﺪم ‪.Omar‬‬
‫ﻋﻨﺪ ﺣﺪوث أﻣﺮ ‪ REVOKE‬ﻣﻦ ﻗﺒﻞ ال ‪ Ali‬ﻟﻞ ‪ SELECT TABLE‬اﻟﻤﻤﻨﻮﺣﺔ ل ‪ ، Ahmad‬ﯾﺤﺪث‬
‫ﻋﻤﻠﯿﺔ ‪ REVOKE‬ﻟﻞ ‪ SELECT TABLE‬ﻣﻦ ﻋﻨﺪ اﻟﻤﺴﺘﺨﺪم ‪ ،Omar‬أي أن ‪ Omar‬ﯾﻔﻘﺪ‬
‫‪ SELECT TABLE‬اﯾﻀﺎً‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪9.4‬‬

‫‪REVOKE SELECT ON hr.employees‬‬


‫;‪FROM Ahmad, Omar‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ،Users‬ﺛﻢ اﺧﺘﺮ اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﺗﺮﯾﺪ اﺳﺘﺮﺟﺎع ال ‪Privileges‬‬ ‫·‬
‫ﻣﻨﮫ‪.‬‬
‫اﺧﺘﺮ اﻟﻘﺎﺋﻤﺔ ‪.Object Privileges‬‬ ‫·‬
‫اﺧﺘﺮ ال ‪ Privilege‬ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﺴﻔﻠﻰ ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ اﻟﻤﺜﻠﺚ اﻟﻤﺘﺠﮫ اﻟﻰ أﻋﻠﻰ‪.‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪:QUERYING INFORMATION‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪:System Privileges‬‬

‫‪ :DBA_SYS_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ System Privileges‬اﻟﻤﻤﻨﻮﺣﺔ اﻟﻰ ‪Users,‬‬ ‫·‬


‫‪.Roles‬‬

‫‪ :DBA_TAB_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Object Privileges‬اﻟﻤﻤﻨﻮﺣﺔ واﻟﻤﺴﺘﺨﺪم‬ ‫·‬


‫اﻟﺬي ﻣﻨﺢ ال ‪ Privileges‬وﻏﯿﺮھﺎ‪.‬‬

‫‪ :SESSION_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ System Privileges‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻠﻤﺴﺘﺨﺪم‬ ‫·‬


‫اﻟﺤﺎﻟﻰ )‪.(Session‬‬

‫‪153‬‬
‫‪AUDITING THE DATABASE‬‬

‫ﻋﻤﻠﯿﺔ ال ‪ Auditing‬ھﻲ ﻋﻤﻠﯿﺔ ﻣﺮاﻗﺒﺔ ﻣﮭﻤﺎت ال ‪ Database‬اﻟﻤﺨﺘﻠﻔﺔ ﺑﺤﯿﺚ ﯾﺘﻢ ﻣﺮاﻗﺒﺔ أي ﻋﻤﻠﯿﺎت ﻣﺸﺘﺒﮫ‬
‫ﻓﻲ أﻧﮭﺎ ﻏﯿﺮ ﻣﺴﻤﻮح ﻓﯿﮭﺎ ﻛﺄن ﯾﻘﻮم ﻣﺴﺘﺨﺪم ﻏﯿﺮ ﻣﺴﻤﻮح ﻟﮫ ﺑﺎﻟﺪﺧﻮل اﻟﻰ ال ‪ Database‬ﺑﺎﻟﺪﺧﻮل وﺣﺬف‬
‫ﺑﯿﺎﻧﺎت ﻣﻦ ال ‪ .Database‬ﯾﺘﻢ ﺟﻤﻊ ﺑﯿﺎﻧﺎت وﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﻤﺮاﻗﺒﺔ ﻓﻲ ‪ AUD$‬اﻟﺘﺎﺑﻌﺔ ل ‪، SYS schema‬‬
‫أو ﯾﻤﻜﻦ ﺟﻤﻊ ھﺬه اﻟﻤﻌﻠﻮﻣﺎت ﻓﻲ ﻣﻠﻒ ﺧﺎرﺟﻲ ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ "‪ ."Operating System‬ﻟﺘﺴﺠﯿﻞ‬
‫اﻟﻤﻌﻠﻮﻣﺎت اﻟﻨﺎﺗﺠﺔ ﻋﻦ ﻋﻤﻠﯿﺔ ال ‪ ، Auditing‬ﯾﺠﺐ وﺿﻊ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ AUDIT_TRAIL‬ﺑﺎﻟﻘﯿﻤﺔ ‪True‬‬
‫أو ‪ ، DB‬أو ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻣﻠﻒ ﺧﺎرﺟﻲ ﺑﻮﺿﻊ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ ،OS‬أﻣﺎ اﻟﻘﯿﻤﺔ ال ‪ Default‬ﻟﻠﻌﺎﻣﻞ ھﻲ‬
‫‪ .NONE‬ﯾﻘﻮم اﻷوراﻛﻞ ﺑﻌﻤﻞ ‪ Auditing‬ﻓﻲ ﺑﻌﺾ اﻟﺤﺎﻻت وإن ﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ ،None‬ﻣﺜﻞ ﻋﻨﺪ ﺗﺸﻐﯿﻞ‬
‫و إﻏﻼق ال ‪ Instance‬أو ﻟﻤﺮاﻗﺒﺔ ال ‪ Privileges‬اﻟﺨﺎﺻﺔ ﻟﻞ ‪) DBA‬أو ﻛﻞ ﻣﺴﺘﺨﺪم ﯾﻤﻠﻚ ‪Privileges‬‬
‫ﻣﺸﺎﺑﮫ ﻟﻞ ‪.(DBA‬‬
‫ﻟﻞ ‪ DBA‬ﺣﺮﯾﺔ ﺗﺤﺪﯾﺪ اذا ﻣﺎ ﻛﺎن ﯾﺮﯾﺪ ان ﺗﺤﺪث ﻋﻤﻠﯿﺔ ال ‪ Auditing‬ﻋﻨﺪ اﻟﻤﮭﻤﺔ اﻟﻤﺮاد ﻣﺮاﻗﺒﺘﮭﺎ ) ‪By‬‬
‫‪ (Access‬أو ﻟﻜﻞ ال ‪ Session‬ﺑﻐﺾ اﻟﻨﻈﺮ ﻋﻦ ﻋﺪد اﻟﻤﮭﻤﺎت اﻟﺘﻲ ﺗﺤﺪث)‪.(By Session‬‬

‫ﺑﺎﺳﺘﺨﺪام ﻋﻤﻠﯿﺔ ال ‪ Audit‬ﯾﻤﻜﻦ ﻣﺮاﻗﺒﺔ‪:‬‬

‫ﺟﻤﻞ ال ‪SQL‬‬ ‫·‬


‫ال ‪.Privileges‬‬ ‫·‬
‫اﻟﻌﻨﺎﺻﺮ "‪."Objects‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻄﻠﻖ ﻋﻠﻰ ‪ AUD$‬اﺳﻢ ‪ Audit Trail‬وھﻲ ﻣﻦ ﻧﻮع ال ‪ Base Tables‬وھﻲ اﻟﻮﺣﯿﺪة اﻟﺘﻲ ﯾﻤﻜﻦ‬
‫ﻟﻞ ‪ DBA‬ﺗﻌﺪﯾﻠﮭﺎ ﻛﻤﺎ ﺟﺎء ذﻛﺮھﺎ ﺳﺎﺑﻘﺎً‪.‬‬

‫اذا اﻣﺘﻠﺊ ﻣﻠﻒ ال ‪ Audit Trail‬ﺑﺤﯿﺚ ﻻ ﯾﻤﻜﻦ إﺿﺎﻓﺔ ﻣﻌﻠﻮﻣﺎت اﻟﻤﺮاﻗﺒﺔ اﻟﻰ اﻟﻤﻠﻒ ‪ ،‬ﺗﺘﺄﺛﺮ ﺟﻤﯿﻊ ﺟﻤﻞ ال‬
‫‪ SQL‬اﻟﻤﺮاﻗﺒﺔ وﻋﻮﺿﺎً أن ﺗﻈﮭﺮ اﻟﻨﺘﺎﺋﺞ اﻟﻄﻠﻮﺑﺔ ‪ ،‬ﺗﻈﮭﺮ أﺧﻄﺎء "‪ ."Error Messages‬وﻟﺬﻟﻚ ﯾﺠﺐ ﺗﻔﺮﻏﺔ‬
‫ﻣﻠﻒ ال ‪ Audit Trail‬ﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ‪ .‬ﻟﻠﺘﺤﻜﻢ ﻓﻲ ﺣﺠﻢ ال ‪ ، Audit Trail‬ﯾﻨﺼﺢ ﺑﺎﺳﺘﺨﺪم ال ‪Auditing‬‬
‫ﻋﻨﺪ اﻟﻀﺮورة ﻓﻘﻂ ‪ ،‬واﺧﺘﯿﺎر ﻧﻮع اﻟﻤﺮاﻗﺒﺔ ﺑﺪﻗﺔ )ال ‪ SQL‬أو اﻟﻌﻨﺎﺻﺮ أو ال ‪ ، (Privileges‬وﻋﺪم إﻋﻄﺎء ال‬
‫‪ AUDIT ANY privileges‬ﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻛﺜﯿﺮﯾﻦ واﺳﺘﺨﺪام ‪ By Session‬ﻋﻮﺿﺎً ﻋﻦ ‪.By Access‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻟﺤﺬف ﻣﺤﺘﻮﯾﺎت ال ‪ ، Audit Trail‬ﺗﺴﺘﺨﺪم ﺟﻤﻞ ال ‪ DELETE‬أو ال ‪.TRUNCATE‬‬

‫ﯾﻤﻜﻦ ﺣﻤﺎﯾﺔ ﻣﻠﻒ ال ‪ Audit Trail‬ﺑﻜﺘﺎﺑﺔ اﻟﺘﺎﻟﻲ‪:‬‬

‫;‪AUDIT DELETE ON SYS.AUD$ BY ACCESS‬‬

‫ﯾﻔﻀﻞ ﻧﻘﻞ ال ‪ AUD$‬ﻣﻦ ال ‪ SYSTEM TABLESPACE‬اﻟﻰ ‪ Tablespace‬أﺧﺮى‪ ،‬ﻣﻊ ﻣﺮاﻋﺎة اﻋﺎدة‬


‫ﺗﻌﺮﯾﻒ ال ‪ Indexes‬ﻋﻠﻰ ﻛﻞ ﻣﻦ ال ‪ Columns‬اﻟﺘﺎﻟﯿﺔ )‪.(sessionid , ses$tid‬‬

‫ﺗﺬﻛﺮ‪ :‬ﯾﺠﺐ اﻋﺎدة ﺗﻌﺮﯾﻒ ال ‪ Indexes‬ﻋﻨﺪ ﻧﻘﻞ ال ‪.Tables‬‬

‫‪154‬‬
‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.5‬‬

‫ﻣﺜﺎل ﻋﻠﻰ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Auditing‬ﻟﺠﻤﻞ ال ‪:SQL‬‬

‫ﻟﻤﺮاﻗﺒﺔ ﺟﻤﻞ ال ‪ DDL‬اﻟﺘﻲ ﺗﻨﻔﺬ ﻋﻠﻰ ال ‪: Tables‬‬

‫;‪AUDIT TABLE‬‬

‫ﻣﺜﺎل ﻋﻠﻰ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Auditing‬ﻟﻞ ‪:Privileges‬‬

‫;‪AUDIT CREATE ANY SEQUENCE‬‬

‫ﻣﺜﺎل ﻋﻠﻰ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪ Auditing‬ﻟﻞ ‪:Objects‬‬

‫;‪AUDIT UPDATE, DELETE ON HR.EMPLOYEES‬‬

‫‪:AUDITING OPTIONS‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮭﺎ ﻟﺘﺤﺪﯾﺪ ﻋﻤﻠﯿﺔ اﻟﻤﺮاﻗﺒﺔ ﺑﺸﻜﻞ أﻛﺒﺮ‪.‬‬

‫‪ :WHENEVER SUCCESSFUL‬ﻓﻲ ﺣﺎﻟﺔ ﻣﺮاﻗﺒﺔ ﺟﻤﻞ ال ‪ ، SQL‬ﯾﺘﻢ ﺟﻤﻊ ﻣﻌﻠﻮﻣﺎت ﺣﻮل‬ ‫·‬
‫اﻟﺠﻤﻞ اﻟﺘﻲ ﺗﻤﺖ ﺑﻨﺠﺎح وﻻ ﯾﺘﻢ ﺗﺴﺠﯿﻞ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﺠﻤﻞ اﻟﺘﻲ ﻟﻢ ﺗﻨﺠﺢ ﻓﻲ اﻟﻘﯿﺎم ﺑﻤﮭﻤﺘﮭﺎ‪.‬‬
‫‪ :WHENEVER NOT SUCCESSFUL‬ﻓﻲ ﺣﺎﻟﺔ ﻣﺮاﻗﺒﺔ ﺟﻤﻞ ال ‪ ، SQL‬ﯾﺘﻢ ﺟﻤﻊ‬ ‫·‬
‫ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﺠﻤﻞ اﻟﺘﻲ ﻟﻢ ﺗﻨﺠﺢ وﻻ ﯾﺘﻢ ﺗﺴﺠﯿﻞ ﻣﻌﻠﻮﻣﺎت ﺣﻮل اﻟﺠﻤﻞ اﻟﺘﻲ ﻧﺠﺤﺖ ﻓﻲ اﻟﻘﯿﺎم‬
‫ﺑﻤﮭﻤﺘﮭﺎ‪.‬‬
‫‪.BY ACCESS‬‬ ‫·‬
‫‪.BY SESSION‬‬ ‫·‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.6‬‬

‫ﻟﻤﺮاﻗﺒﺔ ﻋﻤﻠﯿﺎت ﺗﻜﻮﯾﻦ ‪) Sessions‬دﺧﻮل اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻟﻞ ‪: (Database‬‬

‫;‪AUDIT SESSION‬‬

‫اﻟﻌﻤﻠﯿﺎت اﻟﻨﺎﺟﺤﺔ ﻓﻘﻂ‪:‬‬

‫;‪AUDIT SESSION WHENEVER SUCCESSFUL‬‬

‫اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﻟﻢ ﺗﻨﺠﺢ‪:‬‬

‫;‪AUDIT SESSION WHENEVER NOT SUCCESSFUL‬‬

‫‪155‬‬
‫‪:NOAUDITING‬‬

‫ﻻﯾﻘﺎف ﻋﻤﻠﯿﺔ ال ‪ ، Aduiting‬ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ ‪ NOAUDIT‬ﻣﻊ اﺿﺎﻓﺔ اﻟﺠﺰء اﻟﺬي ﺗﻢ ﻣﺮاﻗﺒﺘﮫ ﻓﻲ ﻋﻤﻠﯿﺔ‬
‫‪.Auditing‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.7‬‬

‫ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ‪:Noauditing‬‬

‫;‪NOAUDIT UPDATE, DELETE ON HR.EMPLOYEES‬‬

‫‪:QUERYING INFORMATION‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪:Auditing‬‬

‫‪ :ALL_DEF_AUDIT_OPTS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪.Deafult Audit Options‬‬ ‫·‬

‫‪ :DBA_STMT_AUDIT_OPTS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﻋﻤﻠﯿﺎت اﻟﻤﺮاﻗﺒﺔ ﻋﻠﻰ ﺟﻤﻞ ال ‪.SQL‬‬ ‫·‬

‫‪ :DBA_PRIV_AUDIT_OPTS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﻋﻤﻠﯿﺎت اﻟﻤﺮاﻗﺒﺔ ﻋﻠﻰ ‪.Privileges‬‬ ‫·‬

‫· ‪ :DBA_OBJ_AUDIT_OPTS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﻋﻤﻠﯿﺎت اﻟﻤﺮاﻗﺒﺔ ﻋﻠﻰ ‪.Objects‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ال ‪:Auditing‬‬

‫‪ :DBA_AUDIT_TRAIL‬ﺟﻤﯿﻊ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ال ‪.Auditing‬‬ ‫·‬

‫‪ :DBA_AUDIT_OBJECT‬اﻟﻤﻌﻠﻮﻣﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ال ‪ Auditing‬ﻋﻠﻰ ‪.Privileges‬‬ ‫·‬

‫‪ :DBA_AUDIT_STATMENT‬اﻟﻤﻌﻠﻮﻣﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ال ‪ Auditing‬ﻋﻠﻰ ﺟﻤﻞ ال‬ ‫·‬


‫‪.SQL‬‬

‫‪ :DBA_AUDIT_SESSION‬اﻟﻤﻌﻠﻮﻣﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ال ‪ Auditing‬ﻋﻠﻰ دﺧﻮل و ﺧﺮوج‬ ‫·‬


‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻦ ال ‪.Database‬‬

‫‪156‬‬
‫‪MANAGING ROLES‬‬

‫ﺗﺴﮭﻞ ال ‪ Roles‬ﻋﻤﻠﯿﺔ إدارة ال ‪ Privileges‬ﻷن ال ‪ Role‬ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪ Privileges‬ﺗﻌﻄﻰ‬


‫أو ﺗﻠﻐﻰ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ دﻓﻌﺔ واﺣﺪة‪ .‬ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ اذا أراد ال ‪ DBA‬إﻋﻄﺎء ﻋﺸﺮة ‪ Privileges‬ﻟﻜﻞ‬
‫ﻣﺴﺘﺨﺪم ﺟﺪﯾﺪ ﻓﻲ ال ‪ ، Database‬ﻓﯿﺠﺐ ﻋﻠﻰ ال ‪ DBA‬ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ‪ GRANT‬ﻋﺸﺮ ﻣﺮات ‪ ،‬وﻛﺬﻟﻚ اﻟﺤﺎل‬
‫ﻣﻊ ﺟﻤﻠﺔ ‪ ، REVOKE‬اﻣﺎ ﻋﻨﺪ اﺳﺘﺨﺪام ال ‪ ، Role‬ﯾﺘﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ‪ GRANT‬أو ‪ REVOKE‬ﻣﺮة واﺣﺪة‬
‫ﻓﻘﻂ‪ .‬ﯾﻤﻜﻦ أن ﯾﺘﻜﻮن ال ‪ Role‬ﻣﻦ ال ‪ System Privileges‬وال ‪ Object Privileges‬ﻣﻌﺎً ‪ ،‬وﻻ ﯾﻨﺘﻤﻰ ال‬
‫‪ Role‬اﻟﻰ أي ‪ ، Schema‬وﯾﺘﻢ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﺣﻮل ﺗﻜﻮﯾﻨﮫ ﻓﻲ ال ‪.Data Dictionary‬‬

‫‪:CREATING ROLES‬‬

‫ﯾﻤﻜﻦ ﺗﻜﻮﯾﻦ ‪ Roles‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪CREATE ROLE role_name [NOT IDENTIFIED‬‬


‫} ‪| IDENTIFIED { BY password | EXTERNALLY‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ :NOT IDENTIFIED‬ﻻ ﯾﻮﺟﺪ ﺣﻤﺎﯾﺔ ﻋﻠﻰ ال ‪.Role‬‬ ‫·‬


‫‪ :IDENTIFIED‬ﯾﻮﺟﺪ ﺣﻤﺎﯾﺔ ﻋﻠﻰ ال ‪ Role‬ﻣﺜﻞ اﺳﺘﺨﺪام ﻛﻠﻤﺔ اﻟﺴﺮ أو ﻏﯿﺮھﺎ‪.‬‬ ‫·‬
‫‪ :EXTERNALLY‬ﯾﺴﺘﺨﺪم ﺣﻤﺎﯾﺔ ﺧﺎرﺟﯿﺔ ﻟﻞ ‪ Role‬ﻣﺜﻞ ﺣﻤﺎﯾﺔ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ‪.‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻮﺟﺪ أﻧﻮاع ﺣﻤﺎﯾﺔ أﺧﺮى ﻟﻞ ‪ Role‬ﻋﺪا ﻛﻠﻤﺔ اﻟﺴﺮ أو ‪ Externally‬ﻻ ﻣﺠﺎل ﻟﻠﺘﻄﺮق ﻟﮭﺎ ﻓﻲ اﻟﻜﺘﺎب‪.‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.8‬‬

‫ﻟﺘﻜﻮﯾﻦ ‪:Role‬‬

‫;‪CREATE ROLE newusers‬‬


‫أو‪:‬‬
‫;‪CREATE ROLE newusers2 IDENTIFIED BY n6iut30o‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ﺑﺎﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة ﻋﻠﻰ اﻟﻤﺠﻠﺪ ‪ ، Roles‬ﺛﻢ اﺧﺘﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ‪.Create‬‬ ‫·‬
‫ادﺧﻞ اﺳﻢ وﻧﻈﺎم ﺣﻤﺎﯾﺔ ال ‪ Role‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪.Create‬‬ ‫·‬

‫‪157‬‬
‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬ﺑﻌﺪ ﺗﻜﻮﯾﻦ ال ‪ Role‬ﻣﺒﺎﺷﺮة ‪ ،‬ﺗﻜﻮن ال ‪ Role‬ﺧﺎﻟﯿﺔ ﺗﻤﺎﻣﺎً ﻣﻦ أي ‪ Privileges‬وﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ‬


‫‪ GRANT‬ﻹﻋﻄﺎء ال ‪ Role‬ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪.Privileges‬‬

‫‪ -2‬ﻟﺘﻜﻮﯾﻦ ‪ ، Role‬ﯾﺠﺐ أن ﯾﻜﻮن ﻟﻠﻤﺴﺘﺨﺪم ‪.CREATE ROLE privilege‬‬

‫‪:PREDEFINED ROLES‬‬

‫ﻋﻨﺪ ﺗﻜﻮﯾﻦ ال ‪ ، Database‬ﯾﺘﻢ ﺗﻜﻮﯾﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪ Roles‬ﺑﺸﻜﻞ أﺗﻮﻣﺎﺗﯿﻜﻲ ﻣﻨﮭﺎ‪:‬‬

‫‪ :CONNECT‬ال ‪ Privileges‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ اﻹﺗﺼﺎل ﺑﺎل ‪Database‬‬ ‫·‬


‫وﺗﻜﻮﯾﻦ ‪ ، Session‬اﻣﻜﺎﻧﯿﺔ ﺗﻜﻮﯾﻦ ﻛﻞ ﻣﻦ ‪Tables, Views, Synonym, Cluster,‬‬
‫‪.Database Link‬‬

‫‪ :RESOURCE‬ال ‪ Privileges‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ ﺗﻜﻮﯾﻦ ﻛﻞ ﻣﻦ ‪Tables‬‬ ‫·‬


‫‪.Cluster, Sequence, Functions, Procedures, Triggers‬‬

‫‪ :SELECT_CATALOG_ROLE‬ال ‪ Privileges‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ‬ ‫·‬


‫اﺳﺘﺨﺮاج ﺑﯿﺎﻧﺎت ال ‪) Data Dictionary‬ﻋﻤﻞ ‪ Query‬ﻋﻠﻰ ال ‪ Tables‬وال ‪.(Views‬‬

‫· ‪ :DELETE_CATALOG_ROLE‬ال ‪ Privilege‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ ﺣﺬف‬


‫ﺑﯿﺎﻧﺎت )اﺳﺘﺨﺪام ‪ (DELETE‬ﻣﻦ ال ‪.Data Dictionary‬‬

‫‪ :EXECUTE_CATALOG_ROLE‬ال ‪ Privilege‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ‬ ‫·‬


‫اﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ EXECUTE‬ﻓﻲ ال ‪.Data Dictionary‬‬

‫‪ :EXP_FULL_DATABASE‬ال ‪ Privilege‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ ﻋﻤﻞ ﻋﻤﻠﯿﺔ‬ ‫·‬


‫‪ Export‬ﻟﻞ ‪.Database‬‬

‫‪ :EXP_FULL_DATABASE‬ال ‪ Privilege‬ﺿﻤﻦ ھﺬا ال ‪ Role‬ﺗﺘﻀﻤﻦ اﻣﻜﺎﻧﯿﺔ ﻋﻤﻞ ﻋﻤﻠﯿﺔ‬ ‫·‬


‫‪ Import‬ﻟﻞ ‪.Database‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺳﻮف ﯾﺘﻢ اﻟﺘﻄﺮق ﻋﻠﻰ ﻋﻤﻠﯿﺎت ال ‪ Export‬و ال ‪ Import‬ﻓﻲ دراﺳﺔ اﻹﻣﺘﺤﺎن اﻟﺜﺎﻟﺚ ﻣﻦ اﻣﺘﺤﺎﻧﺎت‬
‫ال ‪.Oracle9i‬‬

‫ﺗﺬﻛﺮ‪ :‬ﻣﻦ أﻧﻮاع ال ‪ Data Dictionary Views‬ﻧﻮع _‪ DBA‬اﻟﺬي ﯾﻤﻜﻦ أن ﻟﻠﻤﺴﺘﺨﺪم اﻟﺪﺧﻮل اﻟﻰ ﺑﯿﺎﻧﺎﺗﮫ‬
‫اذا ﻛﺎن ﯾﻤﻠﻚ ال ‪.SELECT_CATALOG_ROLE‬‬

‫‪158‬‬
‫‪:MODIFYING ROLES‬‬

‫ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ﻧﻈﺎم ﺣﻤﺎﯾﺔ ال ‪ Role‬أو ﺣﺬف ﻧﻈﺎم اﻟﺤﻤﺎﯾﺔ ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ ALTER ROLE‬ﻛﻤﺎ ﻓﻲ‬
‫اﻟﻤﺜﺎل ‪.9.9‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻟﺘﻌﺪﯾﻞ ﻧﻈﺎم ﺣﻤﺎﯾﺔ ال ‪ ، Role‬ﯾﺠﺐ أن ﯾﻜﻮن ﻟﻠﻤﺴﺘﺨﺪم ‪.ALTER ANY ROLE privilege‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.9‬‬

‫ﻟﺘﻌﺪﯾﻞ ﻧﻈﺎم ﺣﻤﺎﯾﺔ ال ‪:Role‬‬

‫;‪ALTER ROLE newusers2 IDENTIFIED EXTERNALLY‬‬

‫أو اﺣﺬف ﻧﻈﺎم اﻟﺤﻤﺎﯾﺔ‪:‬‬

‫;‪ALTER ROLE newusers NOTIDENTIFIED‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ، Roles‬ﺛﻢ اﺧﺘﺮ اﺳﻢ ال ‪ Role‬اﻟﻤﺮاد ﺗﻌﺪﯾﻠﮫ‪.‬‬ ‫·‬
‫ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ ‪ ،‬اﺧﺘﺮ ﻧﻈﺎم اﻟﺤﻤﺎﯾﺔ ﻣﻦ ﻗﺎﺋﻤﺔ ‪.Authentication‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪:ASSIGNING PRIVILEGES TO ROLES‬‬

‫ﺑﻌﺪ ﺗﻜﻮﯾﻦ ال ‪ Role‬ﻣﺒﺎﺷﺮة ‪ ،‬ﺗﻜﻮن ال ‪ Role‬ﺧﺎﻟﯿﺔ ﺗﻤﺎﻣﺎً ﻣﻦ أي ‪ Privileges‬وﯾﻤﻜﻦ اﺳﺘﺨﺪام ﺟﻤﻠﺔ‬


‫‪ GRANT‬اﻟﺘﻲ اﺳﺘﺨﺪﻣﺖ ﻹﻋﻄﺎء ‪ Privileges‬اﻟﻰ اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻊ ذﻛﺮ اﺳﻢ ال ‪ Role‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪TO‬‬
‫ﻋﻮﺿﺎً ﻋﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم أو ال ‪ Public‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل ‪.9.10‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.10‬‬

‫ﻹﻋﻄﺎء ‪ Privileges‬اﻟﻰ ال ‪:Roles‬‬

‫;‪GRANT CREATE ROLE TO adminusers‬‬

‫;‪GRANT SELECT ON HR.EMPLOYEES TO newusers2‬‬

‫‪159‬‬
‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ، Roles‬ﺛﻢ اﺧﺘﺮ اﺳﻢ ال ‪ Role‬اﻟﻤﺮاد إﺿﺎﻓﺔ ‪ Privileges‬ﻟﮫ‪.‬‬ ‫·‬
‫أﺧﺘﺮ إﻣﺎ ﻗﺎﺋﻤﺔ ‪ System Privileges‬أو ﻗﺎﺋﻤﺔ ‪ ، Object Privileges‬ﺛﻢ اﺗﺒﻊ ذات اﻟﺨﻄﻮات اﻟﺘﻲ‬ ‫·‬
‫ﺗﻢ ﻓﯿﮭﺎ أﻋﻄﺎء اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ال ‪.Privileges‬‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪:ASSIGNING ROLES TO USERS‬‬

‫ﯾﻤﻜﻦ إﻋﻄﺎء اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ال ‪ Roles‬ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪ GRANT‬اﻟﺘﻲ اﺳﺘﺨﺪﻣﺖ ﻹﻋﻄﺎء ‪ Privileges‬اﻟﻰ‬


‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ ﻣﻊ ذﻛﺮ اﺳﻢ ال ‪ Role‬ﺑﺠﺎﻧﺐ ﻛﻠﻤﺔ ‪ GRANT‬ﻋﻮﺿﺎً ﻋﻦ اﺳﻢ ال ‪ Privilege‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل‬
‫‪.9.11‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.11‬‬

‫ﻹﻋﻄﺎء ‪ Privileges‬اﻟﻰ ال ‪:Roles‬‬

‫;‪GRANT adminusers TO Omar WITH ADMIN OPTION‬‬

‫;‪GRANT newusers TO Khaled‬‬

‫ﻛﻤﺎ ﯾﻤﻜﻦ دﻣﺞ ‪ Roles‬ﺑﺒﻌﻀﮭﺎ‪.‬‬

‫;‪GRANT newusers TO newusers2‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬

‫‪ -1‬اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻘﻮم ﺑﺘﻜﻮﯾﻦ ال ‪ Role‬ﻟﺪﯾﮫ اﻟﺤﻖ ﻓﻲ ‪ WITH ADMIN OPTION‬ﻋﻠﻰ ذﻟﻚ ال‬
‫‪.Role‬‬

‫‪ -2‬اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﯾﻤﻠﻚ ‪ GRANT ANY ROLE privilege‬ﯾﺴﺘﻄﯿﻊ إﻋﻄﺎء أو إﻟﻐﺎء ال ‪ Roles‬ﻣﻦ‬
‫اﻟﻤﺴﺘﺨﺪﻣﯿﯿﻦ‪.‬‬

‫‪ -3‬ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻋﺪد ال ‪ Roles‬اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﻜﻮن ﻓﻲ اﻟﺤﺎﻟﺔ ‪ Enable‬ﺑﺎﺳﺘﺨﺪام ﻋﺎﻣﻞ ﻣﻦ ﻋﻮاﻣﻞ ال‬
‫‪ Intialazation Parameter File‬ھﻮ ‪ MAX_ENABLED_ROLES‬اﻟﺬي ﻗﯿﻤﺘﮫ ال ‪ Default‬ھﻲ‬
‫‪.20‬‬

‫‪160‬‬
‫‪:ASSIGNING DEFAULT ROLES‬‬

‫ﯾﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪم اﻟﻮاﺣﺪ أن ﯾﻤﻠﻚ أﻛﺜﺮ ﻣﻦ ‪ ، Role‬وﻟﻜﻦ ﻟﯿﺲ ﺑﺎﻟﻀﺮورة أن ﺗﻜﻮن ﻛﻠﮭﺎ ﻓﻲ ﺣﺎﻟﺔ ‪،Enable‬‬
‫وﻟﻜﻦ ﯾﻤﻜﻦ ﺟﻤﻊ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ال ‪ Roles‬ﻟﺘﻤﺜﻞ ال ‪ Default Role‬واﻟﺬي ﯾﺘﻢ وﺿﻌﮫ ﻓﻲ ﺣﺎﻟﺔ ‪Enable‬‬
‫ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ ﻋﻨﺪ دﺧﻮل اﻟﻤﺴﺘﺨﺪم اﻟﻰ ال ‪ .Database‬ﻟﺘﻌﯿﯿﻦ ال ‪ ، Deafult Role‬ﺗﺴﺘﺨﺪم اﻟﻘﺎﻋﺪة‪:‬‬

‫‪ALTER USER user_name DEFAULT ROLE‬‬


‫} ‪{ role_name , role_name | ALL [EXCEPT role_name , [role_name] ] | NONE‬‬

‫ﻓﻲ اﻟﻘﺎﻋﺪة‪:‬‬

‫]…‪ :ALL [EXCEPT‬ﯾﻤﻜﻦ ﺗﻌﯿﯿﻦ ﻛﻞ ال ‪ Roles‬ﻋﺪا اﻟﻤﺸﻤﻮﻟﯿﯿﯿﻦ ﻓﻲ ﺟﻤﻠﺔ ‪.EXCEPT‬‬ ‫·‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ھﺬه اﻟﻘﺎﻋﺪة ﻓﻘﻂ ﻣﻊ ال ‪ Roles‬اﻟﻤﻤﻨﻮﺣﺔ ﻣﺒﺎﺷﺮة ﻟﻠﻤﺴﺘﺨﺪم ﻋﺒﺮ اﺳﺘﺨﺪام ‪GRANT‬‬
‫وﻻ ﺗﻨﻄﺒﻖ ﻋﻠﻰ ال ‪ Roles‬اﻟﻤﺪﻣﺠﺔ ﺿﻤﻦ ‪.Roles‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.12‬‬

‫ﻟﺘﻌﯿﯿﻦ ‪ Default Role‬ﻟﻠﻤﺴﺘﺨﺪم‪:‬‬

‫;‪ALTER USER Ahmad DEFAULT ROLE newusers, newusers2‬‬

‫;‪ALTER USER Khalid DEFAULT ROLE ALL‬‬

‫;‪ALTER USER Omar DEFAULT ROLE ALL EXCEPT adminusers‬‬

‫;‪ALTER USER Ali DEFAULT ROLE NONE‬‬

‫أو ﻋﺒﺮ ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ﺑﺠﺎﻧﺐ اﻟﻤﺠﻠﺪ ‪ ، Users‬ﺛﻢ اﺧﺘﺮ اﺳﻢ ال ‪ User‬اﻟﻤﺮاد ﺗﻌﺪﯾﻠﮫ‪.‬‬ ‫·‬
‫ﻓﻲ اﻟﻨﺎﻓﺬة اﻟﯿﻤﻨﻰ ‪ ،‬اﺧﺘﺮ ﻗﺎﺋﻤﺔ ‪ ،Role‬ﺛﻢ ﺿﻊ ﻋﻼﻣﺔ ﺻﺢ اﺳﻔﻞ ال ‪ Deafult‬ﻟﻞ ‪ Role‬اﻟﺬي ﺗﺮﯾﺪه‬ ‫·‬
‫أن ﯾﻜﻮن ‪.Default‬‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪.Apply‬‬ ‫·‬

‫‪161‬‬
‫‪:ENABLING AND DISABLING ROLES‬‬

‫ﯾﻤﻜﻦ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال ‪ Role‬ﺑﯿﻦ ‪ Enable‬و ‪ Disable‬ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ .SET ROLE‬ﻻ ﯾﺴﺘﻄﯿﻊ اﻟﻤﺴﺘﺨﺪم‬
‫اﺳﺘﺨﺪام ال ‪ Role‬ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻓﻲ ﺣﺎﻟﺔ ‪ ، Disable‬وﯾﺠﺐ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺘﮭﺎ اﻟﻰ ‪ Enable‬ﻷﺳﺘﺨﺪام ال‬
‫‪ Privileges‬داﺧﻠﮭﺎ‪ .‬ﺗﺆﺛﺮ ال ‪ SET ROLE‬ﻓﻘﻂ ﻋﻠﻰ ال ‪ Session‬وﻻ ﺗﻜﻮن اﻟﺘﻐﯿﯿﺮات داﺋﻤﺔ ‪ ،‬إﻧﻤﺎ ﺗﻌﻮد ال‬
‫‪ Role‬ﻟﻮﺿﻌﮭﺎ اﻟﻄﺒﯿﻌﻲ ﺑﻌﺪ ﺧﺮوج اﻟﻤﺴﺘﺨﺪم ﻣﻦ ال ‪ .Database‬ﻋﻨﺪﻣﺎ ﯾﺘﻄﻠﺐ ال ‪ Role‬ﻛﻠﻤﺔ ﺳﺮ ﻟﺘﺤﻮﯾﻞ‬
‫ﺣﺎﻟﺘﮫ ‪ ،‬ﯾﺤﺐ ﻛﺘﺎﺑﺔ ﻛﻠﻤﺔ اﻟﺴﺮ ﻓﻲ ﺟﻤﻠﺔ ‪ ، SET ROLE‬وﻻ ﯾﻨﻄﺒﻖ اﻟﺤﺎل ﻋﻠﻰ ال ‪ Defualt Role‬وإن ﻛﺎن‬
‫ﻣﻦ ﺿﻤﻨﮫ ‪ Roles‬ﺗﺘﻄﻠﺐ ﻛﻠﺔ ﺳﺮ ﻷن ال ‪ Deafult Role‬ﯾﺘﻢ ﺗﺤﻮﯾﻠﮭﺎ اﻟﻰ ﺣﺎﻟﺔ ‪ Enable‬ﺑﺸﻜﻞ أوﺗﻮﻣﺎﺗﯿﻜﻲ‪.‬‬
‫ﯾﻤﻜﻦ ﺗﺤﻮﯾﻞ ﺣﺎﻟﺔ ال ‪ Role‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪SET ROLE‬‬
‫]‪{ role_name [IDENTIFIED BY PASSWORD] [, role_name ….‬‬
‫]…‪| ALL [EXCEPT [role_name, role_name,‬‬
‫} ‪|NONE‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.13‬‬

‫ﻟﺘﺤﻮﯾﻞ ﺣﺎﻟﺔ ال ‪ Role‬اﻟﻰ ‪:Enable‬‬

‫;‪SET ROLE newusers, departA_users‬‬


‫أو‬
‫;‪SET ROLE newusers2 IDENRIFIED BY n6iut30o‬‬

‫ﻟﺘﺤﻮﯾﻞ ﺣﺎﻟﺔ ﺟﻤﯿﻊ ال ‪ Roles‬اﻟﻰ ‪ Enable‬ﻋﺪا ال ‪:adminusers‬‬

‫;‪SET ROLE ALL EXCEPT adminusers‬‬

‫ﻟﺘﺤﻮﯾﻞ ﺣﺎﻟﺔ ﺟﻤﯿﻊ ال ‪ Roles‬اﻟﻰ ‪:Disable‬‬

‫;‪SET ROLE NONE‬‬

‫‪:REMOVING ROLES FROM USERS‬‬

‫ﯾﻤﻜﻦ إﻟﻐﺎء ال ‪ Roles‬ﻣﻦ ال ‪ Users‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫… ‪REVOKE role_name , role_name,‬‬


‫;‪FROM { role_name | PUBLIC} , {role_name | PUBLIC} , ..‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.14‬‬

‫ﻹﻟﻐﺎء ال ‪ Role‬ﻣﻦ ال ‪:Users‬‬

‫;‪REVOKE newusers FROM Khaled‬‬

‫أو ﻋﺒﺮ ال ‪ :Console‬ذات اﻟﻄﺮﯾﻘﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ إﻟﻐﺎء ‪ Privileges‬ﻣﻦ ال ‪.Users‬‬

‫‪162‬‬
‫‪:DROPPING ROLES‬‬

‫ﯾﻤﻜﻦ ﺣﺬف ال ‪ Roles‬ﻣﻦ ال ‪ Database‬وﺑﺎﻟﺘﺎﻟﻲ ﻣﻦ ال ‪ Users‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫; ‪DROP ROLE role_name‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﯾﺤﺘﺎج اﻟﻤﺴﺘﺨﺪم اﻟﻰ ‪ DROP ANY ROLE privilege‬ﻟﺤﺬف أي ‪ Role‬ﻓﻲ ال ‪.Database‬‬

‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ ‪:9.15‬‬

‫ﻟﺤﺬف ال ‪ Role‬ﻣﻦ ال ‪:Database‬‬

‫;‪DROP ROLE newusers2‬‬

‫أو ﺑﺎﺳﺘﺨﺪام ال ‪:Console‬‬

‫ادﺧﻞ اﻟﻰ ال ‪ Console‬ﻋﺒﺮ ‪.Standalone‬‬ ‫·‬


‫اﺿﻐﻂ ﻋﻠﻰ اﺳﻢ ال ‪ Database‬ﻟﻜﻲ ﺗﻈﮭﺮ ﻧﺎﻓﺬة ﺗﻄﻠﺐ ﻣﻦ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ‪.‬‬ ‫·‬
‫أدﺧﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ اﻟﺘﺎﻛﺪ ﻣﻦ اﺧﺘﯿﺎر ‪ SYSDBA‬ﻋﻮﺿﺎً ﻋﻦ ‪.Normal‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪.Security Manager‬‬ ‫·‬
‫اﺿﻐﻂ ﻋﻠﻰ ‪ +‬ال ‪ Roles‬واﺧﺘﺮ اﺳﻢ ال ‪ Role‬اﻟﻤﺮاد ﺣﺬﻓﮫ ﺛﻢ ﺑﻮاﺳﻄﺔ اﻟﺰر اﻟﯿﻤﯿﻦ ﻟﻠﻔﺄرة أﺧﺘﺮ ﻣﻦ‬ ‫·‬
‫اﻟﻘﺎﺋﻤﺔ ”‪) “Remove‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻗﺎﺋﻤﺔ ‪ Object‬ﺛﻢ ‪ Remove‬ﻋﻮﺿﺎً ﻋﻦ اﻟﺰر اﻟﯿﻤﯿﯿﻦ‬
‫ﻟﻠﻔﺄرة(‪.‬‬
‫اﺧﺘﺮ ‪.Yes‬‬ ‫·‬

‫‪:QUERYING INFORMATION‬‬

‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪:Roles‬‬

‫‪ :DBA_ROLES‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﺟﻤﯿﻊ ال ‪ Roles‬اﻟﻤﻮﺟﻮدة ﻓﻲ ال ‪.Database‬‬ ‫·‬

‫‪ :DBA_ROLE_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Roles‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ أو اﻟﻤﺪﻣﺠﺔ ﻣﻊ‬ ‫·‬


‫‪ Roles‬أﺧﺮى‪.‬‬

‫‪ :ROLE_ROLE_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Roles‬اﻟﻤﺪﻣﺠﺔ ﻣﻊ ‪ Roles‬أﺧﺮى‪.‬‬ ‫·‬

‫‪ :DBA_SYS_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ System Privileges‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ أو‬ ‫·‬


‫ﻟﻞ ‪.Roles‬‬

‫‪ :ROLE_SYS_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ System Privileges‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻞ ‪.Roles‬‬ ‫·‬

‫‪ :ROLE_TAB_PRIVS‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Object Privileges‬اﻟﻤﻤﻨﻮﺣﺔ ﻟﻞ ‪.Roles‬‬ ‫·‬

‫‪ :SESSION_ROLES‬ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال ‪ Enabled Roles‬ﻟﻠﻤﺴﺘﺨﺪم اﻟﺤﺎﻟﻲ‪.‬‬ ‫·‬

‫‪163‬‬




GLOBALIZATION SUPPORT

164
‫‪GLOBALIZATION SUPPORT‬‬

‫اﻟﻤﻘﺼﻮد ﺑﺎل ‪ ، Globalization Support‬إﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺪام ﻟﻐﺎت ﻋﺎﻟﻤﯿﺔ وﺗﻘﻮﯾﻤﺎت ﻋﺎﻟﻤﯿﺔ ﻓﻲ اﻷوراﻛﻞ‪.‬‬

‫ﻣﻦ اﻟﻤﻤﯿﺰات اﻟﺘﻲ ﯾﻮﻓﺮھﺎ ال ‪:Globalization Support‬‬

‫إﻣﻜﺎﻧﯿﺔ ﺣﻔﻆ واﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﻠﻐﺔ اﻟﻤﺤﻠﯿﺔ‪.‬‬ ‫·‬


‫إﻣﻜﺎﻧﯿﺔ ﺗﺸﻐﯿﻞ ال ‪ Database Utilities‬ﺑﺎﻟﻠﻐﺔ اﻟﻤﺤﻠﯿﺔ‪.‬‬ ‫·‬
‫إﻣﻜﺎﻧﯿﺔ ﻋﺮض ال ‪ Error Messages‬ﺑﺎﻟﻠﻐﺔ اﻟﻤﺤﻠﯿﺔ‪.‬‬ ‫·‬
‫أﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺪام ﺑﻌﺾ اﻟﺘﻘﻮﯾﻤﺎت اﻟﻤﺤﻠﯿﺔ ﻣﺜﻞ اﻟﺘﻘﻮﯾﻢ اﻟﯿﺎﺑﺎﻧﻲ‪.‬‬ ‫·‬
‫إﻣﻜﺎﻧﯿﺔ ﻋﺮض اﻷرﻗﺎم ﺑﺎﻟﻠﻐﺔ اﻟﻤﺤﻠﯿﺔ‪.‬‬ ‫·‬
‫إﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺪام رﻣﻮز اﻟﻌﻤﻼت اﻟﻌﺎﻟﻤﯿﺔ‪.‬‬ ‫·‬
‫إﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺪام ﻓﺎرق اﻟﺘﻘﻮﯾﻢ اﻟﺰﻣﻨﻲ ﺑﯿﻦ اﻟﺪول‪.‬‬ ‫·‬
‫إﻣﻜﺎﻧﯿﺔ اﺳﺘﺨﺪام ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻨﻈﻢ ﻟﺘﻌﺮﯾﻒ اﻟﻠﻐﺎت"‪ "Encoding Schemes‬ﻣﺜﻞ ‪.Unicode‬‬ ‫·‬
‫اﻟﺘﺤﻮﯾﻞ اﻷوﺗﻮﻣﺎﺗﯿﻜﻲ ﺑﯿﻦ اﻟﻠﻐﺎت‪ ،‬أي اﺳﺘﺨﺪام اﻟﻤﺴﺘﺨﺪم ‪ Client‬ﻟﻐﺔ ﻣﺨﺘﻠﻔﺔ ﻋﻦ ﻟﻐﺔ اﻟﺴﯿﺮﻓﺮ‪.‬‬ ‫·‬

‫‪:ENCODING SCHEMES‬‬

‫ﯾﻮﻓﺮ اﻷوراﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻨﻈﻢ ﻟﺘﻌﺮﯾﻒ اﻟﻠﻐﺎت ﻣﻨﮭﺎ‪:‬‬

‫‪ :SINGLE-BYTE‬ﯾﺘﻢ اﺳﺘﺨﺪام ﺑﺎﯾﺖ واﺣﺪ ﻟﺘﺨﺰﯾﻦ ﺣﺮف واﺣﺪ‪ .‬ﯾﻮﺟﺪ ﻧﻮﻋﺎن ھﻤﺎ ‪) 7-bit‬ﻣﺜﺎل‬ ‫·‬
‫‪ (US7ASCII‬و ‪) 8-bit‬ﻣﺜﺎل ‪.(WE8DEC‬‬

‫‪ :VARYING-WIDTH‬ﯾﻤﻜﻦ ﺗﺨﺰﯾﻦ اﻟﺤﺮف اﻟﻮاﺣﺪ ﻓﻲ أﻛﺜﺮ ﻣﻦ ﺑﺎﯾﺖ وﺗﺴﺘﺨﺪم ھﺬه اﻟﻄﺮﯾﻘﺔ‬ ‫·‬
‫ﻏﺎﻟﺒﺎً ﻓﻲ اﻟﻠﻐﺎت اﻷﺳﯿﻮﯾﺔ ﻣﺜﻞ اﻟﺼﯿﻨﯿﺔ واﻟﯿﺎﺑﺎﻧﯿﺔ )ﻣﺜﺎل ‪ JEUC‬و ‪.(AL32UTF8‬‬

‫‪ :FIXED-WIDTH‬ﯾﺘﻢ ﺗﺤﺪﯾﺪ ﻋﺪد ﻣﺤﺪد ﻣﻦ اﻟﺒﺎﯾﺘﺎت ﻟﻜﻞ ﺣﺮف )ﻣﺜﺎل ‪.(AL16UTF16‬‬ ‫·‬

‫· ‪ :UNICODE‬ﻧﻈﺎم ﻣﻌﺘﻤﺪ ﻓﻲ ﺟﻤﯿﻊ أﻧﺤﺎء اﻟﻌﺎﻟﻢ ﻟﻘﺪرﺗﮫ ﻋﻠﻰ ﺗﻌﺮﯾﻒ ﺟﻤﯿﻊ اﻟﻠﻐﺎت واﻟﺮﻣﻮز اﻟﺨﺎﺻﺔ‬
‫واﻟﺮﻣﻮز اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻨﺸﺮ )ﻣﺜﻞ © ®(‪ .‬ﯾﻤﻜﻦ أن ﺗﺘﻜﻮن ال ‪ Unicode‬ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻨﻈﻢ‬
‫اﻟﻤﺨﺘﻠﻔﺔ ﻣﺜﻞ ‪) Varying-Width‬ﻣﺜﺎل ‪ (UTF-8‬و‪) Fixed-Width‬ﻣﺜﺎل ‪.(UTF-16‬‬

‫‪:CHOOSING CHARACTER SET‬‬

‫ﺧﻼل دراﺳﺘﻨﺎ ﻟﻘﺎﻋﺪة ‪ ، CREATE DATABASE‬ﺗﻌﺮﻓﻨﺎ اﻟﻰ ﺟﻤﻠﺔ ‪ CHARACTER SET‬اﻟﺘﻲ ﺗﺤﺪد‬
‫ﻧﻮﻋﯿﺔ اﻟﻨﻈﺎم اﻟﺨﺎص ﺑﺎﻟﻠﻐﺔ" ‪ "Character Set‬اﻟﺬي ﺳﻮف ﯾﺴﺘﺨﺪم ﻓﻲ ال ‪) Database‬ﻣﺜﻞ‬
‫‪ .(AL32UTF8‬ﯾﺴﺘﺨﺪم ﻧﻈﺎم ال ‪ Character set‬ﻟﺘﺨﺰﯾﻦ اﺳﻤﺎء ال ‪ Tables‬وال ‪ Columns‬و ‪Data‬‬
‫ﻓﻲ ھﯿﺌﺔ ‪ .CHAR, VARCHAR2, LONG, CLOB‬اﻟﻘﯿﻤﺔ ال ‪ Default‬ﻟﻞ ‪ Character Set‬ھﻲ‬
‫اﺳﺘﺨﺪام ‪ .US7ASCII‬ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ال ‪ Character Set‬ﺑﻌﺪ ﺗﻜﻮﯾﻦ ال ‪ Database‬ﻋﺪا ﻓﻲ ﺑﻌﺾ‬
‫اﻷﺳﺘﺜﻨﺎﺋﺎت اﻟﻘﻠﯿﻠﺔ )ﻣﺜﻼً ﻋﻨﺪﻣﺎ ﯾﻜﻮن ال ‪ Character Set‬اﻟﺠﺪﯾﺪ ﻣﻄﺎﺑﻖ ﺑﺸﻜﻞ ﻛﺒﯿﺮ ﻟﻠﻨﻮع اﻟﻘﺪﯾﻢ(‪.‬‬
‫ﻋﻤﻠﯿﺔ اﻧﺘﻘﺎء ال ‪ Character set‬اﻟﻤﻨﺎﺳﺐ ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻷﺣﺘﯿﺎﺟﺎت اﻟﺤﺎﻟﯿﺔ واﻟﻤﺴﺘﻘﺒﻠﯿﺔ ﻣﻌﺎً‪ ،‬أي ﻓﻲ ﺣﺎﻟﺔ‬
‫وﺟﻮد إﺣﺘﻤﺎل اﺳﺘﺨﺪام ﻟﻐﺎت ﻋﺪﯾﺪة ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ‪ ،‬ﯾﻔﻀﻞ اﺳﺘﺨﺪام ‪ Character Set‬ﻗﺎدر ﻋﻠﻰ اﺳﺘﯿﻌﺎب ﻟﻐﺎت‬
‫ﻋﺪة‪.‬‬

‫‪165‬‬
‫أﯾﻀﺎً ﯾﺠﺐ اﻷﺧﺬ ﺑﺎﻹﻋﺘﺒﺎر ﻧﻮﻋﯿﺔ ال ‪ Character Set‬اﻟﻤﺘﻮﻓﺮة ﻓﻲ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ " ‪Operating‬‬
‫‪ "System‬اذ أن اﻹﺧﺘﻼف ﺑﯿﻦ اﻟﻨﻈﺎﻣﯿﯿﻦ ﯾﺆدي اﻟﻰ ﻋﻤﻠﯿﺔ ﺗﺤﻮﯾﻞ ﯾﻘﻮم ﺑﮭﻞ اﻷوراﻛﻞ ﻣﻤﺎ ﻗﻲ ﯾﺆدي اﻟﻰ ﺣﺪوث‬
‫ﻋﺒﺊ وﺿﻐﻂ ﻣﻦ ﺟﺮاء ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ ‪ ،‬ﻣﻤﺎ ﻗﺪ ﯾﺆدي اﻟﻰ ﺿﯿﺎع ﺑﯿﺎﻧﺎت‪.‬‬
‫ﯾﻌﺘﺒﺮ اﺳﺘﺨﺪام ‪ Single-Byte‬أﻓﻀﻞ ﻣﻦ اﻟﻨﺎﺣﯿﺔ اﻟﻔﻨﯿﺔ واﻷداء ﻋﻦ اﺳﺘﺨﺪام ‪ Varying-Width‬وﻟﻜﻦ‬
‫إﻣﻜﺎﻧﯿﺎت ال ‪ Single-Byte‬ﻓﻲ ﺗﻌﺪد اﻟﻠﻐﺎت ﻣﺤﺪودة ﺟﺪاً‪.‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻻ ﯾﻤﻜﻦ اﺳﺘﺨﺪم ‪ Fixed-Width‬ﻛﻨﻈﺎم ﻟﻞ ‪.Character Set‬‬

‫‪:CHOOSING NATIONAL CHARACTER SET‬‬

‫ﯾﻮﺟﺪ ﻧﻮع إﺿﺎﻓﻲ ﻓﻲ ﻗﺎﻋﺪة ‪ CREATE DATABASE‬ھﻮ ‪NATIONAL CHARACTER SET‬‬


‫اﻟﺬي ﯾﺴﺘﺨﺪم ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ھﯿﺌﺔ ‪ .NCHAR, NVARCHAR2, NCLOB‬اﻟﻘﯿﻤﺔ ال ‪Default‬‬
‫ﻟﻞ ‪ National Character Set‬ھﻲ ‪ .AF16UTF16‬ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻗﯿﻤﺘﺎن ﻟﻞ ‪National Character‬‬
‫ﻓﻘﻂ ھﻤﺎ ﻗﯿﻤﺘﺎ ال ‪ UTF-16 Unicode‬و ‪ .UTF-8‬ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮ ال ‪ National Character Set‬ﺑﻌﺪ‬
‫ﺗﻜﻮﯾﻦ ال ‪ Database‬ﻋﺪا ﻓﻲ ﺑﻌﺾ اﻷﺳﺘﺜﻨﺎﺋﺎت اﻟﻘﻠﯿﻠﺔ‪.‬‬
‫ﻋﻤﻠﯿﺔ اﻧﺘﻘﺎء ال ‪ National Character Set‬ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻠﻐﺔ اﻟﻤﺮاد اﺳﺘﺨﺪاﻣﮭﺎ ‪ ،‬ﻓﻔﻲ ﺣﺎﻟﺔ اﻟﻠﻐﺎت‬
‫اﻷوروﺑﯿﺔ ﯾﺘﻢ ﺣﺠﺰ ﺑﯿﻦ ‪ 1 Byte‬اﻟﻰ ‪ 2 Byte‬ﻟﻜﻞ ﺣﺮف )أي أن اﻷﺣﺮف ﻻ ﺗﺤﺠﺰ ﻣﺴﺎﺣﺔ ﺛﺎﺑﺘﺔ ﺑﻞ ﻣﺘﻐﯿﺮة( ‪،‬‬
‫وﻟﺬﻟﻚ ﯾﻔﻀﻞ اﺳﺘﺨﺪام ‪ UTF-8‬ﻷﻧﮭﺎ ﻣﻦ ﻧﻮع ﻣﺘﻐﯿﺮ ‪) Varying-Width‬ﻣﻦ ‪ 1‬ﺑﺎﯾﺖ اﻟﻰ ﺑﺎﯾﺖ ‪ ،(3‬وﻟﻜﻦ‬
‫ﺗﻌﺘﺒﺮ ال ‪ UTF-16‬أﺳﺮع وأﻗﻞ ﻋﺒﺊ ﻓﻲ ال ‪ Database‬ﻷﻧﮭﺎ ﻣﻦ اﻟﻨﻮع اﻟﺜﺎﺑﺖ ‪.Fixed-Width‬‬

‫‪:USING NLS PARAMETERS‬‬

‫ﯾﻮﻓﺮ اﻷوراﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻌﻮاﻣﻞ ﯾﻄﻠﻖ ﻋﻠﯿﮭﺎ اﺳﻢ )‪ National Language Support (NLS‬ﺗﺴﺎﻋﺪ‬
‫ﻋﻠﻰ ﺗﺤﺪﯾﺪ أﻣﻮر ﻣﺨﺘﻠﻔﺔ ﻋﺎﻟﻤﯿﺎً ﻣﺜﻞ ﻃﺮﯾﻘﺔ ﺣﻔﻆ وﻋﺮض اﻟﺘﺎرﯾﺦ واﻟﺘﻮﻗﯿﺖ‪ ،‬اﻟﺮﻣﺰ اﻟﻤﺴﺘﺨﺪم ﻟﻠﻌﻤﻠﺔ اﻟﻤﺤﻠﯿﺔ‪،‬‬
‫اﻟﯿﻮم اﻷول ﻓﻲ اﻷﺳﺒﻮع )اﻟﺴﺒﺖ ﻋﻨﺪ اﻟﻤﺴﻠﻤﯿﻦ واﻻﺛﻨﯿﻦ ﻋﻨﺪ اﻟﻐﺮب( وﻏﯿﺮھﺎ ﻣﻦ اﻷﻣﻮر‪.‬‬

‫ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻋﻮاﻣﻞ ال ‪ NLS‬ﺑﺜﻼث ﻃﺮق ھﻲ‪:‬‬

‫ﻋﺒﺮ ﺗﻌﺪﯾﻞ ال ‪.Initialization Parameter File‬‬ ‫·‬


‫ﺑﺎﺳﺘﺨﺪام ال ‪ ) Environment Variables‬ﯾﺴﺘﺨﺪم ﻓﻲ ﻧﻈﺎم اﻟﻮﯾﻨﺪوز ال ‪(Registry‬‬ ‫·‬
‫ﺑﺎﺳﺘﺨﺪام ﺟﻤﻠﺔ ال ‪.ALTER SESSION‬‬ ‫·‬

‫اﻟﺘﻌﺪﯾﻞ ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪ ALTER SESSION‬ھﻮ اﻷﻗﻮى ﺛﻢ ﯾﻠﯿﮫ اﺳﺘﺨﺪام ال ‪Environment‬‬


‫‪ . Variables‬ھﺬا ﯾﻌﻨﻲ اذا ﺗﻢ ﺗﻌﺪﯾﻞ أﺣﺪ اﻟﻌﻮاﻣﻞ ﺑﻮاﺳﻄﺔ ال ‪ Initialization Parameter File‬وﺑﻮاﺳﻄﺔ‬
‫ﺟﻤﻠﺔ ال ‪ ، ALTER SESSION‬ﻓﺈن ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ﺗﻜﻮن ھﻲ اﻟﻤﺤﺪدة ﺑﺠﻤﻠﺔ ال ‪ALTER SESSION‬‬
‫وﻟﯿﺲ اﻟﻘﯿﻤﺔ اﻟﻤﺤﺪدة ﺑﺎل ‪ Initialization Parameter File‬أو اﻟﻘﯿﻤﺔ اﻟﻤﺤﺪدة ﺑﺎل ‪Environment‬‬
‫‪.Variables‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﺑﻌﺾ اﻟﻌﻮاﻣﻞ ﻻ ﺗﺘﻐﯿﺮ ﺑﻮاﺳﻄﺔ ‪ ALTER SESSION‬أو ﺑﺎﺳﺘﺨﺪام ال ‪Environment‬‬


‫‪.Variables‬‬

‫ﺗﺬﻛﺮ‪ :‬ﺟﺎء ذﻛﺮ ال ‪ Environment Variables‬ﻓﻲ اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ‪.‬‬

‫‪166‬‬
‫‪:NLS Parameters‬‬

‫ﯾﻮﻓﺮ اﻷوراﻛﻞ ﻋﺪد ﻣﻦ اﻟﻌﻮاﻣﻞ ﻣﻨﮭﺎ‪:‬‬

‫‪ :NLS_LANGUAGE‬ﯾﺴﺘﺨﺪم ﻓﻲ ﻋﺮض اﺳﻤﺎء اﻷﯾﺎم واﻟﺸﮭﻮر‪ ،‬وﯾﺴﺘﺨﺪم ﻟﻌﺮض اﻟﺮﻣﻮز‬ ‫·‬


‫اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻮﻗﯿﺖ واﻟﺘﺎرﯾﺦ ﻣﺜﻞ ﻗﺒﻞ أو ﺑﻌﺪ اﻟﻤﯿﻼد )‪ (AD, BC‬أو اﻟﺘﻮﻗﯿﺖ )‪ ، (PM, AM‬وﯾﺴﺘﺨﺪم‬
‫ﻛﻠﻐﺔ اﻟﺮﺳﺎﺋﻞ اﻟﻤﻌﺮوﺿﺔ ﻓﻲ اﻷوراﻛﻞ ﻣﺜﻞ رﺳﺎﺋﻞ اﻷﺧﻄﺎء "‪ ، "Error Messages‬وﯾﺴﺘﺨﺪم اﯾﻀﺎً‬
‫ﻓﻲ ﺗﺤﺪﯾﺪ ﻧﻮﻋﯿﺔ ﻋﻤﻠﯿﺔ ال ‪.Sorting‬‬

‫‪ :NLS_TERRITORY‬ﯾﺴﺘﺨﺪم ﻓﻲ ﺗﺤﺪﯾﺪ ﻃﺮﯾﻘﺔ ﻋﺮض اﻟﺘﺎرﯾﺦ ‪ ،‬واﺧﺘﯿﺎر رﻣﺰ ﻟﻠﻌﻤﻠﺔ اﻟﻤﺤﻠﯿﺔ ‪،‬‬ ‫·‬
‫ﺗﺤﺪﯾﺪ أول ﯾﻮم ﻓﻲ اﻷﺳﺒﻮع وﺗﺤﺪﯾﺪ ﻗﯿﻢ ﺗﻌﺮف ﺑﺎﺳﻢ ﻗﯿﻢ ال ‪.ISO‬‬

‫‪.NLS_LANG‬‬ ‫·‬

‫ﺗﺸﻤﻞ ال ‪ NLS_LANGUAGE‬ﻗﯿﻢ ال ‪ Default‬ﻟﻠﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ :NLS_DATE_LANGUAGE‬ﻟﺘﺤﺪﯾﺪ اﺳﻤﺎء اﻟﺸﮭﻮر واﻷﯾﺎم واﻹﺧﺘﺼﺎرات اﻟﻤﻌﻤﻮل ﺑﮭﺎ )ﻣﺜﻞ‬ ‫·‬


‫اﺧﺘﺼﺎر ﯾﻮم اﻹﺛﻨﯿﻦ ﺑﺎﻟﻐﺔ اﻹﻧﺠﻠﯿﺰﯾﺔ ‪.(MON‬‬
‫‪ :NLS_SORT‬ﻟﺘﻐﯿﯿﺮ ﻃﺮﯾﻘﺔ ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت "‪ "Sorting‬ﻓﻲ اﻷوراﻛﻞ ‪ ،‬ﻣﺜﻼً اذا ﺗﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺘﮭﺎ‬ ‫·‬
‫ﺑﺎﻟﺘﺎﻟﻲ ‪ NLS_SORT =German‬ﻓﺈن ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت ﺳﻮف ﯾﻜﻮن ﻃﺒﻘﺎً ﻟﻸﺑﺠﺪﯾﺔ اﻷﻟﻤﺎﻧﯿﺔ‪.‬‬

‫أﻣﺎ ال ‪ NLS_TERRITORY‬ﻓﺘﺸﻤﻞ ﻗﯿﻢ ال ‪ Default‬ﻟﻠﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ :NLS_CURRENCY‬ﻹﺧﺘﯿﺎر رﻣﺰ ﻟﻠﻌﻤﻠﺔ اﻟﻤﺤﻠﯿﺔ‪.‬‬ ‫·‬


‫‪ :NLS_ISO_CURRENCY‬ﻹﺧﺘﯿﺎر رﻣﺰ ﻣﺨﺘﺼﺮ ﻟﻌﻤﻠﯿﺔ اﻟﺒﻠﺪ ﻣﺜﻞ ‪ USD‬ﻟﻠﺪوﻻر اﻷﻣﺮﯾﻜﻲ‪.‬‬ ‫·‬
‫‪ :NLS_DATE_FORMAT‬ﻟﺘﺤﺪﯾﺪ ﻃﺮﯾﻘﺔ ﻋﺮض اﻟﺘﺎرﯾﺦ‪ ،‬ﻣﺜﻼً اﻷﯾﺎم ﺛﻢ اﻟﺸﮭﻮر ﺛﻢ اﻟﺴﻨﯿﻦ‪.‬‬ ‫·‬
‫‪ :NLS_NUMERIC_CHARACTERS‬ﻟﺘﺤﺪﯾﺪ ﻃﺮﯾﻘﺔ ﻋﺮض اﻷرﻗﺎم اﻟﺘﻲ ﺗﺤﻮي ﻋﻠﻰ‬ ‫·‬
‫ﻓﻮاﺻﻞ ﻣﺜﻞ اﻷرﻗﺎم اﻟﻐﯿﺮ ﺻﺤﯿﺤﺔ )ﻣﺜﻞ ‪.(222.44.5‬‬

‫اﻟﻤﻘﺼﻮد ﺑﺄن اﻟﻌﺎﻣﻞ ‪ NLS_TERRITORY‬ﯾﺸﻤﻞ اﻟﻘﯿﻢ ال ‪ Default‬ﻟﻠﻌﻮاﻣﻞ اﻷﺧﺮى ‪ ،‬ﺑﺬﻟﻚ ھﻮ ﻋﻨﺪ‬


‫ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ ال ‪ ، NLS_TERRITORY‬ﻓﻠﯿﺲ ﻣﻦ اﻟﻀﺮوري ﺗﺤﺪﯾﺪ ﻗﯿﻢ اﻟﻌﻮاﻣﻞ اﻟﺘﻲ ﯾﺸﻤﻠﮭﺎ‪.‬‬
‫أﯾﻀﺎً ﻓﻲ ﺣﺎﻟﺔ ﺗﺤﺪﯾﺪ اﻟﻌﺎﻣﻞ ‪ NLS_TERRITORY‬واﻟﻌﻮاﻣﻞ اﻟﺘﻲ ﯾﺸﻤﻠﮭﺎ ‪ ،‬ﯾﺘﻢ ﺗﻐﯿﯿﺮ ﻗﯿﻢ اﻟﻌﻮاﻣﻞ اﻟﺘﻲ‬
‫ﯾﺸﻤﻠﮭﺎ‪ ،‬ﺣﯿﺚ أن ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ NLS_TERRITORY‬ﯾﺘﻢ ﻓﻘﻂ ﻓﻲ ال ‪Environment Variables‬‬
‫أو ﻋﺒﺮ ﺟﻤﻠﺔ ال ‪ ALTER SESSION‬ﻣﻤﺎ ﯾﺠﻌﻠﮫ اﻟﻨﻮع اﻷﻗﻮى ﻣﻦ اﻟﻌﻮاﻣﻞ اﻟﺘﻲ ﯾﺸﻤﻠﮭﺎ اﻟﺘﻲ ﺗﺘﻐﯿﺮ ﻋﺒﺮ‬
‫ﺟﻤﯿﻊ اﻟﻄﺮق‪ .‬ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ اذا ﺗﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ اﻟﻌﺎﻣﻞ ‪ NLS_CURRENCY‬ﺑﺎﻟﻘﯿﻤﺔ ‪) £‬اﻟﺒﺎوﻧﺪ( ﻓﻲ ال‬
‫‪ Initialization Parameter File‬وﻟﻜﻦ اﯾﻀﺎً ﺗﻢ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ اﻟﻌﻤﻠﺔ اﻟﻤﺤﻠﯿﺔ ﻓﻲ‬
‫‪ NLS_TERRITORY‬ﺑﺎﻟﻘﯿﻤﺔ ‪) ¥‬اﻟﯿﻦ اﻟﯿﺎﺑﺎﻧﻲ( ﻓﺈن رﻣﺰ اﻟﻌﻤﻠﯿﺔ اﻟﻤﺤﻠﯿﺔ ﻓﻲ اﻷوراﻛﻞ ﯾﻜﻮن اﻟﯿﻦ اﻟﯿﺎﺑﺎﻧﻲ‪.‬‬

‫‪:NLS_LANG Parameter‬‬

‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام ﻗﯿﻢ ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻣﺴﺘﺨﺪم ﺑﺎﺳﺘﺨﺪام ال ‪ NLS_LANG‬وﯾﺘﻢ ﺗﺤﺪﯾﺪھﺎ ﻓﻘﻂ ﻋﺒﺮ اﺳﺘﺨﺪام ال‬
‫‪ .Environment Variables‬ﺗﺘﻜﻮن ﻣﻦ ﺛﻼﺛﺔ اﻗﺴﺎم ھﻲ ‪ Language‬و ‪ Territory‬و ‪Character‬‬
‫‪ ،Set‬ﻣﻌﺮﻓﺔ ﺑﺎﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪NLS_LANG = Langugae_Territory.Charset‬‬

‫‪167‬‬
:‫ﻓﻲ اﻟﻘﺎﻋﺪة‬

‫ وﯾﺘﻢ ﺗﻌﺮﯾﻒ ﻗﯿﻤﺘﮭﺎ ﻓﻲ اﻷوراﻛﻞ ﻋﻨﺪ‬NLS_LANGUAGE ‫ ھﻲ ﻣﻮازﯾﺔ ﻟﻠﻌﺎﻣﻞ‬:Language ·


‫ ھﻮ اﻷﻗﻮى‬NLS_LANG ‫ اذ ﯾﻌﺘﺒﺮ اﻟﻌﺎﻣﻞ‬، NLS_LANGUAGE ‫ﺗﺤﺪﯾﺪھﺎ وﻻ ﯾﺘﻢ اﻷﺧﺬ ﺑﻘﯿﻤﺔ‬
.‫ﻓﻲ اﻷوراﻛﻞ‬
‫ وﯾﺘﻢ ﺗﻌﺮﯾﻒ ﻗﯿﻤﺘﮭﺎ ﻓﻲ اﻷوراﻛﻞ ﻋﻨﺪ‬NLS_TERRITORY ‫ ھﻲ ﻣﻮازﯾﺔ ﻟﻠﻌﺎﻣﻞ‬:Territory ·
‫ ھﻮ‬NLS_LANG ‫ اذ ﯾﻌﺘﺒﺮ اﻟﻌﺎﻣﻞ‬، NLS_TERRITORY ‫ﺗﺤﺪﯾﺪھﺎ وﻻ ﯾﺘﻢ اﻷﺧﺬ ﺑﻘﯿﻤﺔ‬
.‫اﻷﻗﻮى ﻓﻲ اﻷوراﻛﻞ‬
.‫ ﻟﻠﻤﺴﺘﺨﺪم ﻓﻘﻂ‬Character Set ‫ ﯾﺤﺪد ﻧﻮﻋﯿﺔ ال‬:Charset ·

:NLS and Functions

‫ داﺧﻞ‬NLS Parameters ‫" اﺳﺘﺨﺪﻣﺖ ال‬Introduction to SQL" ‫ﺧﻼل دراﺳﺘﻚ ﻟﻺﻣﺘﺤﺎن اﻷول‬
.10.1 ‫ وﻟﻠﺘﺬﻛﯿﺮ راﺟﻊ اﻟﻤﺜﺎل‬، TO_CHAR ‫ﻋﻤﻠﯿﺎت ﻣﺘﻌﺪدة ﻣﺜﻞ ﺟﻤﻠﺔ‬

:10.1 ‫ﻣﺜﺎل ﺗﻄﺒﯿﻘﻲ‬

SELECT TO_CHAR (hire_date, ‘DD.Mon.YYYY’,


‘NLS_DATE_LANGUAGE = GERMAN’)
FROM HR.EMPLOYEES

:TO_CHAR ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ ﻣﻊ‬

NLS_DATE_LANGUAGE ·
NLS_NUMERIC_CHARACTERS ·
NLS_CURRENCY ·
NLS_ISO_CURRENCY ·
NLS_CALENDAR ·

:TO_DATE ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ ﻣﻊ‬

NLS_DATE_LANGUAGE ·
NLS_CALENDAR ·

:TO_NUMBER ‫ﯾﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ ﻣﻊ‬

NLS_NUMERIC_CHARACTERS ·
NLS_CURRENCY ·
NLS_ISO_CURRENCY ·

168
:QUERYING INFORMATION

:NLS ‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ال‬

‫ وال‬Character Set ‫ ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﻦ ال‬:NLS_DATABASE_PARAMETER ·


.Database ‫ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ال‬National Character Set

SELECT PARAMETER, VALUE


FROM NLS_DATABASE_PARAMETER
WHERE PARAMETER LIKE ‘%CHARACTERSET%’;

‫ اﻟﻤﺤﺪدة ﻓﻲ‬NLS ‫ ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻗﯿﻢ ﻋﻮاﻣﻞ ال‬:NLS_INSTANCE_PARAMETER ·


.Initialization Parameter File ‫ال‬

‫ اﻟﻤﺤﺪدة ﻟﻞ‬NLS ‫ ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻗﯿﻢ ﻋﻮاﻣﻞ ال‬:NLS_SESSION_PARAMETER ·


.‫ ﻓﻘﻂ‬Session

‫ ﺗﻮﻓﺮ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﺟﻤﯿﻊ اﻟﻘﯿﻢ اﻟﻤﺘﻮﻓﺮة اﻟﻤﺴﻤﻮح اﺳﺘﺨﺪاﻣﮭﺎ‬:V$NLS_VALID_VALUES ·


.Language, Territory, Character Set ‫ﻟﺘﺤﺪﯾﺪ ﻛﻞ ﻣﻦ ال‬

169

You might also like