اول از همه بیاید ببینیم این اوراکل اصلا چی هست. اوراکل یک سیستم مدیریت پایگاه داده چند مدلی و اختصاصی هست که توسط شرکتی به همین نام یعنی «شرکت اوراکل» ساخته شده و به فروش میرسه. «چند مدلی» یعنی میتونه انواع مختلف داده رو مدیریت کنه. معمولا ازش برای کارهای سنگینی مثل پردازش تراکنشهای آنلاین (OLTP)، انبار داده (DW) و کارهای ترکیبی استفاده میشه. حالا اینا یعنی چی؟
- پردازش تراکنش آنلاین (OLTP): فکر کنید به خرید و فروشهای لحظهای توی یه فروشگاه آنلاین یا تراکنشهای بانکی. اینها کارهایی هستن که باید سریع و دقیق انجام بشن.
- انبار داده (DW): تصور کنید یه شرکت میخواد تمام دادههای فروش چند سال گذشتهاش رو تحلیل کنه تا ببینه چه محصولاتی بیشتر فروش رفتن. این حجم عظیم از دادهها توی انبار داده نگهداری و تحلیل میشه.
اوراکل رو میشه روی سرورهای خودتون، روی فضای ابری (Cloud) یا به صورت ترکیبی (Hybrid Cloud) نصب و استفاده کرد. زبونی هم که برای کار با این پایگاه داده استفاده میشه، زبون معروف SQL هست که باهاش میشه دادهها رو بهروزرسانی یا بازیابی کرد.
یه نگاه کوتاه به تاریخچه
داستان اوراکل از سال ۱۹۷۷ شروع شد. لری الیسون به همراه دو تا از دوستها و همکارای سابقش، باب ماینر و اد اوتس، یه شرکت مشاوره به اسم «آزمایشگاههای توسعه نرمافزار» یا همون SDL رو راه انداختن. این شرکت بعدا به شرکت اوراکل تبدیل شد. SDL اولین نسخه نرمافزار اوراکل رو توسعه داد. جالبه بدونید که اسم «اوراکل» از اسم رمز یه پروژه میاد که CIA بودجهاش رو تامین میکرد و الیسون قبلا توی شرکت Ampex روی اون کار کرده بود. حتی اولین مشتری اوراکل هم خود CIA بود و بهشون اجازه داد از این اسم رمز برای محصول جدیدشون استفاده کنن.
یه نکته جالب اینه که الیسون میخواست پایگاه دادهاش با System R شرکت IBM سازگار باشه، اما IBM کدهای خطای نرمافزارش رو منتشر نکرد. با این حال، تا سال ۱۹۸۵ اوراکل تبلیغ میکرد که برنامههایی که برای SQL/DS یا DB2 نوشته شدن، بدون هیچ تغییری روی اوراکل هم اجرا میشن.
هیچوقت نسخهای به اسم Oracle v1 وجود نداشت. دلیلش هم این بود که الیسون معتقد بود «هیچکس دلش نمیخواد نسخه ۱ یه محصول رو بخره».
بخش دوم: معماری اوراکل؛ چطور کار میکنه؟
خب، حالا که فهمیدیم اوراکل چیه، بیاید بریم سراغ بخش جذاب ماجرا: معماری و ساختارش. یه سرور پایگاه داده مثل اوراکل، کلید حل مشکلات مدیریت اطلاعاته. یه سرور خوب باید بتونه حجم زیادی از داده رو توی یه محیط چندکاربره مدیریت کنه؛ یعنی چندین نفر بتونن همزمان به یک داده دسترسی داشته باشن، اون هم با عملکرد بالا. تازه باید جلوی دسترسیهای غیرمجاز رو بگیره و راهحلهای خوبی هم برای بازیابی اطلاعات بعد از خرابی داشته باشه.
اوراکل برای این کارها یه سری ویژگیها داره. مثلا میتونه پایگاه دادههای خیلی بزرگ (حتی در حد ترابایت) رو مدیریت کنه و کنترل کاملی روی مصرف فضا به ما بده. میتونه تعداد زیادی کاربر همزمان رو پشتیبانی کنه و عملکرد بالایی در پردازش تراکنشها داشته باشه. حتی توی بعضی جاها، اوراکل ۲۴ ساعته و بدون وقفه کار میکنه.
دو بخش اصلی: پایگاه داده و نمونه (Instance)
- پایگاه داده: مجموعهای از دادههاست که به عنوان یک واحد در نظر گرفته میشن. هدفش هم ذخیره و بازیابی اطلاعات مرتبطه. پایگاه داده یه ساختار فیزیکی و یه ساختار منطقی داره.
- نمونه (Instance): هر بار که یه پایگاه داده استارت میخوره، یه قسمتی از حافظه به اسم System Global Area (SGA) بهش اختصاص داده میشه و یه سری فرایندهای پسزمینه (Background Processes) هم شروع به کار میکنن. به ترکیب این فرایندها و حافظه میگیم یه «نمونه اوراکل».
این دو تا از هم جدا هستن. این جدایی به ما اجازه میده که نحوه ذخیرهسازی فیزیکی دادهها رو بدون اینکه روی دسترسی به ساختارهای منطقی تاثیری بذاره، مدیریت کنیم.
بخش سوم: ساختار فیزیکی؛ فایلهای واقعی روی دیسک
ساختار فیزیکی یه پایگاه داده اوراکل از فایلهایی تشکیل شده که روی سیستمعامل شما قرار دارن. این فایلها محل ذخیرهسازی واقعی اطلاعات پایگاه داده هستن. سه نوع فایل اصلی داریم:
- فایلهای داده (Datafiles): هر پایگاه داده اوراکل حداقل یه فایل داده داره. تمام دادههای پایگاه داده، مثل دادههای جدولها و ایندکسها، به صورت فیزیکی توی این فایلها ذخیره میشن. ویژگیهای این فایلها اینه که میتونن به یه پایگاه داده تعلق داشته باشن، اندازهشون میتونه به صورت خودکار زیاد بشه و میشه اونها رو به صورت آنلاین (در دسترس) یا آفلاین (غیرقابل دسترس) قرار داد. وقتی یه کاربر اطلاعاتی رو میخواد، اگه اون اطلاعات توی حافظه موقت (Cache) نباشه، از روی این فایلها خونده و در حافظه ذخیره میشه. برای بالا بردن عملکرد، دادههای جدید یا تغییر کرده فورا روی دیسک نوشته نمیشن، بلکه توی حافظه جمع میشن و بعدا به صورت یکجا توسط یه فرایند پسزمینه به اسم DBWn روی فایلها نوشته میشن.
- فایلهای لاگ دوبارهکاری (Redo Log Files): هر پایگاه داده اوراکل حداقل دو تا از این فایلها داره. به مجموعه این فایلها میگیم Redo Log. کار اصلی Redo Log اینه که تمام تغییراتی که روی دادهها اعمال میشه رو ثبت کنه. اگه یه مشکلی پیش بیاد (مثلا برق بره) و دادههای تغییر کرده روی فایلهای داده نوشته نشن، میشه از روی این فایلها تغییرات رو بازیابی کرد تا هیچ کاری از دست نره. این فایلها برای محافظت از پایگاه داده در برابر خرابی خیلی حیاتی هستن. اوراکل حتی اجازه میده چند نسخه از این فایلها رو روی دیسکهای مختلف داشته باشید تا اگه یکی خراب شد، بقیه سالم بمونن. به فرایند اعمال اطلاعات این فایلها در زمان بازیابی میگن Rolling Forward.
- فایلهای کنترل (Control Files): هر پایگاه داده اوراکل یه فایل کنترل داره. این فایل اطلاعات مربوط به ساختار فیزیکی پایگاه داده رو نگه میداره. مثلا:
هر بار که یه نمونه از پایگاه داده استارت میخوره، از این فایل برای شناسایی فایلهای داده و Redo Log استفاده میشه. اگه ساختار فیزیکی پایگاه داده تغییر کنه (مثلا یه فایل داده جدید اضافه بشه)، این فایل به صورت خودکار توسط اوراکل آپدیت میشه. این فایل در زمان بازیابی پایگاه داده هم خیلی مهمه.
- اسم پایگاه داده
- اسم و مکان فایلهای داده و فایلهای Redo Log
- اطلاعات مربوط به زمان ایجاد پایگاه داده
بخش چهارم: ساختار منطقی؛ سازماندهی دادهها به شکل مجازی
حالا بریم سراغ ساختار منطقی. این ساختار به ما میگه که فضای فیزیکی پایگاه داده چطور استفاده میشه.
- فضای جدولی (Tablespaces): یه پایگاه داده به واحدهای ذخیرهسازی منطقی به اسم Tablespace تقسیم میشه. این فضاها ساختارهای منطقی مرتبط رو با هم گروهبندی میکنن. مثلا میشه تمام آبجکتهای یه اپلیکیشن رو توی یه Tablespace جدا گذاشت تا مدیریتشون راحتتر بشه. هر پایگاه داده حداقل یه Tablespace به اسم
SYSTEM
داره. یه Tablespace میتونه آنلاین (در دسترس) یا آفلاین (غیرقابل دسترس) باشه. - اسکیما (Schema): اسکیما مجموعهای از آبجکتهای پایگاه داده هست. آبجکتهای اسکیما مستقیما به دادههای پایگاه داده اشاره دارن. این آبجکتها شامل چیزهایی مثل جدولها، ویوها، سکانسها، رویههای ذخیره شده، مترادفها، ایندکسها، کلاسترها و لینکهای پایگاه داده هستن. هیچ رابطهای بین Tablespace و Schema وجود نداره؛ یعنی آبجکتهای یه اسکیما میتونن توی Tablespaceهای مختلف باشن و یه Tablespace هم میتونه آبجکتهایی از اسکیماهای مختلف رو نگه داره.
- بلوکهای داده، اکستنتها و سگمنتها (Data Blocks, Extents, and Segments): اوراکل برای کنترل دقیق مصرف فضای دیسک از این سه ساختار منطقی استفاده میکنه.
وقتی اکستنتهای یه سگمنت پر میشن، اوراکل به صورت پویا فضای جدیدی رو تخصیص میده. برای همین ممکنه اکستنتهای یه سگمنت روی دیسک پشت سر هم نباشن.
- بلوک داده (Data Block): کوچکترین واحد ذخیرهسازی داده در اوراکل هست. هر بلوک داده معادل تعداد مشخصی بایت از فضای فیزیکی دیسک هست. اندازه این بلوکها موقع ساختن پایگاه داده مشخص میشه.
- اکستنت (Extent): سطح بعدی، اکستنت هست. اکستنت تعداد مشخصی بلوک داده پشت سر هم هست که در یک تخصیص واحد برای ذخیره نوع خاصی از اطلاعات به دست میاد.
- سگمنت (Segment): سطح بالاتر از اکستنت، سگمنت هست. سگمنت مجموعهای از اکستنتهاست که برای یه ساختار منطقی خاص تخصیص داده شده. انواع مختلف سگمنت داریم:
- سگمنت داده (Data Segment): هر جدول غیرکلاستری یه سگمنت داده داره که تمام دادههاش اونجا ذخیره میشه.
- سگمنت ایندکس (Index Segment): هر ایندکس یه سگمنت ایندکس داره که دادههاش رو ذخیره میکنه.
- سگمنت بازگشتی (Rollback Segment): برای ذخیره موقت اطلاعات «undo» یا بازگشتی استفاده میشه. این اطلاعات برای بازیابی تراکنشهای ناتمام یا ایجاد نماهای سازگار با خواندن (Read-Consistent Views) به کار میره.
- سگمنت موقت (Temporary Segment): وقتی یه دستور SQL برای اجرا به یه فضای کاری موقت نیاز داره، اوراکل این سگمنتها رو ایجاد میکنه. بعد از اتمام دستور، این فضا آزاد میشه.
بخش پنجم: آبجکتهای اسکیما؛ ابزارهای ما برای کار با داده
حالا بیاید با ابزارهایی که توی یه اسکیما داریم بیشتر آشنا بشیم. اینها همون چیزهایی هستن که یه برنامهنویس یا مدیر پایگاه داده مستقیما باهاشون سر و کار داره.
- جدول (Table): واحد اصلی ذخیرهسازی داده توی پایگاه داده اوراکل هست. دادهها توی سطرها و ستونها ذخیره میشن. هر جدول یه اسم و مجموعهای از ستونها داره. هر ستون هم اسم، نوع داده (مثلا CHAR, DATE, NUMBER) و عرض مشخصی داره.
- ویو (View): یه ویو مثل یه نمایش سفارشی از دادههای یک یا چند جدول هست. میشه بهش به عنوان یه «کوئری ذخیره شده» هم نگاه کرد. ویوها خودشون دادهای رو ذخیره نمیکنن، بلکه دادهها رو از جدولهای پایهای که روی اونها ساخته شدن، میگیرن. از ویوها معمولا برای سادهسازی دسترسی به داده، ایجاد امنیت (مثلا فقط ستونهای خاصی رو نشون بدیم) یا نمایش داده از چند جدول به صورت یکجا استفاده میشه.
- ویوی محقق شده (Materialized View): این نوع ویو، برخلاف ویوهای عادی، نتایج یه کوئری رو توی یه آبجکت جدا ذخیره میکنه. یعنی واقعا فضا اشغال میکنه و داده داره. این کار باعث میشه عملکرد کوئریها، مخصوصا توی محیطهای انبار داده، خیلی بهتر بشه. اسم دیگهاش «اسنپشات» (Snapshot) هست.
- سکانس (Sequence): یه لیست سریالی از اعداد منحصر به فرد تولید میکنه. معمولا برای ستونهایی مثل شماره کارمندی یا کد محصول استفاده میشه تا مطمئن باشیم هیچ دو سطری شماره یکسان ندارن. کار برنامهنویسی رو خیلی راحت میکنه چون دیگه لازم نیست خودمون نگران تولید اعداد منحصر به فرد باشیم.
- ایندکس (Index): یه ساختار اختیاریه که برای بالا بردن سرعت بازیابی دادهها ساخته میشه. دقیقا مثل فهرست آخر یه کتاب که به شما کمک میکنه یه مطلب رو سریعتر پیدا کنید، ایندکس هم به اوراکل کمک میکنه سطر مورد نظر رو سریعتر پیدا کنه. ایندکسها روی یک یا چند ستون از یه جدول ساخته میشن و بعد از ساخته شدن، به صورت خودکار توسط اوراکل نگهداری و استفاده میشن.
- کلاستر و هش کلاستر (Cluster and Hash Cluster): اینها هم ساختارهای اختیاری برای ذخیرهسازی دادههای جدول هستن. کلاسترها گروهی از جدولها هستن که چون ستونهای مشترکی دارن و معمولا با هم استفاده میشن، به صورت فیزیکی کنار هم ذخیره میشن. این کار زمان دسترسی به دیسک رو کم میکنه.
- مترادف (Synonym): یه اسم مستعار برای یه جدول، ویو، سکانس یا واحد برنامه هست. از مترادفها برای ساده کردن دسترسی به آبجکتها یا مخفی کردن اسم و مالک واقعی اونها استفاده میشه.
- لینک پایگاه داده (Database Link): یه آبجکت نامگذاری شده هست که یه «مسیر» از یه پایگاه داده به پایگاه داده دیگه رو توصیف میکنه. این لینکها توی پایگاه دادههای توزیع شده برای دسترسی به دادههای روی سرورهای دیگه استفاده میشن.
- واحدهای برنامه (Program Units): اینها شامل رویهها (Procedures)، توابع (Functions) و پکیجها (Packages) میشن. این واحدها مجموعهای از دستورات SQL و PL/SQL هستن که به عنوان یه واحد قابل اجرا برای انجام یه کار خاص گروهبندی میشن.
- PL/SQL: این زبان رویهای اوراکل، یه افزونه برای SQL هست. به شما اجازه میده منطق برنامهنویسی مثل
IF...THEN
یا حلقهها رو به دستورات SQL اضافه کنید. استفاده از PL/SQL ذخیره شده توی پایگاه داده باعث میشه ترافیک شبکه کم بشه و امنیت و عملکرد برنامه بالا بره.
- PL/SQL: این زبان رویهای اوراکل، یه افزونه برای SQL هست. به شما اجازه میده منطق برنامهنویسی مثل
بخش ششم: مغز متفکر اوراکل؛ حافظه و فرایندها
اوراکل برای مدیریت و دسترسی به پایگاه داده از ساختارهای حافظه و فرایندها استفاده میکنه. همه این ساختارها توی حافظه اصلی (RAM) کامپیوترهایی که سیستم پایگاه داده رو تشکیل میدن، وجود دارن.
ساختارهای حافظه
- System Global Area (SGA): این یه ناحیه حافظه مشترکه که دادهها و اطلاعات کنترلی یه نمونه اوراکل رو نگه میداره. وقتی یه نمونه استارت میخوره، SGA تخصیص داده میشه و وقتی خاموش میشه، آزاد میشه. کاربرانی که به سرور وصل هستن، دادههای توی SGA رو به اشتراک میذارن. برای عملکرد بهتر، SGA باید تا جای ممکن بزرگ باشه (البته به شرطی که توی حافظه واقعی جا بشه). SGA خودش چند تا بخش داره:
- Database Buffer Cache: جدیدترین بلوکهای دادهای که استفاده شدن اینجا ذخیره میشن. چون دادههای پراستفاده توی حافظه نگه داشته میشن، نیاز به خوندن و نوشتن از روی دیسک (I/O) کم میشه و عملکرد بالا میره.
- Redo Log Buffer: ورودیهای Redo Log (لیست تغییرات) قبل از اینکه روی فایلهای Redo Log نوشته بشن، اینجا ذخیره میشن.
- Shared Pool: این بخش شامل ساختارهای حافظه مشترک مثل نواحی SQL مشترک هست. هر دستور SQL منحصر به فردی که به پایگاه داده فرستاده میشه، باید پردازش بشه. اطلاعات پردازش اون، مثل درخت تجزیه و نقشه اجرا، توی یه ناحیه SQL مشترک ذخیره میشه. اگه چند اپلیکیشن همون دستور رو اجرا کنن، از همین ناحیه مشترک استفاده میکنن و اینطوری در مصرف حافظه صرفهجویی میشه.
- Large Pool: یه ناحیه اختیاری در SGA هست که برای کارهای سنگینی مثل بکاپ و بازیابی، فرایندهای I/O سرور و حافظه نشستها در پیکربندی سرور چند رشتهای استفاده میشه.
- Program Global Area (PGA): این یه بافر حافظه هست که دادهها و اطلاعات کنترلی یه فرایند سرور رو نگه میداره. هر فرایند سرور PGA مخصوص به خودش رو داره و این حافظه مشترک نیست.
فرایندها (Processes)
یه فرایند مثل یه «رشته کنترلی» توی سیستمعامل هست که میتونه یه سری مراحل رو اجرا کنه. اوراکل دو نوع کلی فرایند داره:
- فرایندهای کاربر (User Processes): این فرایندها کد یه برنامه کاربردی (مثلا یه برنامه نوشته شده با Pro*C/C++) یا یه ابزار اوراکل (مثل Oracle Enterprise Manager) رو اجرا میکنن. فرایند کاربر با فرایندهای سرور ارتباط برقرار میکنه.
- فرایندهای اوراکل (Oracle Processes): اینها خودشون دو دستهان:
- فرایندهای سرور (Server Processes): اوراکل این فرایندها رو برای رسیدگی به درخواستهای فرایندهای کاربر متصل ایجاد میکنه. فرایند سرور با فرایند کاربر ارتباط برقرار میکنه و با اوراکل تعامل میکنه تا درخواستها رو انجام بده. مثلا اگه یه کاربر دادهای رو بخواد که توی بافرهای پایگاه داده نیست، فرایند سرور مرتبط، بلوکهای داده مناسب رو از فایلهای داده میخونه و توی SGA میذاره.
- فرایندهای پسزمینه (Background Processes): اوراکل برای هر نمونه یه سری فرایند پسزمینه ایجاد میکنه. این فرایندها به صورت ناهمزمان I/O انجام میدن و بر سایر فرایندهای اوراکل نظارت میکنن تا موازیسازی رو افزایش بدن و عملکرد و قابلیت اطمینان رو بهتر کنن. بعضی از این فرایندهای مهم اینها هستن:
- DBWn (Database Writer): بلوکهای تغییر کرده رو از Database Buffer Cache روی فایلهای داده مینویسه. این کار رو معمولا زمانی انجام میده که حافظه بافر آزاد کم باشه.
- LGWR (Log Writer): ورودیهای Redo Log رو روی دیسک مینویسه.
- CKPT (Checkpoint): در زمانهای مشخص، به DBWn سیگنال میده که تمام بافرهای تغییر کرده رو روی دیسک بنویسه. به این رویداد میگن «چکپوینت».
- SMON (System Monitor): وقتی یه نمونه که خراب شده دوباره استارت میخوره، بازیابی رو انجام میده. همچنین سگمنتهای موقت بیاستفاده رو پاک میکنه.
- PMON (Process Monitor): وقتی یه فرایند کاربر با شکست مواجه میشه، بازیابی فرایند رو انجام میده. یعنی حافظه کش رو پاک میکنه و منابعی که اون فرایند استفاده میکرده رو آزاد میکنه.
- ARCn (Archiver): فایلهای Redo Log آنلاین رو وقتی پر میشن، در محل ذخیرهسازی آرشیو کپی میکنه. این فرایند فقط وقتی فعاله که پایگاه داده در حالت
ARCHIVELOG
باشه. - RECO (Recoverer): تراکنشهای توزیع شدهای که به خاطر مشکلات شبکه یا سیستم بلاتکلیف موندن رو حل میکنه.
بخش هفتم: تراکنشها و یکپارچگی داده؛ چطور اوراکل نظم رو حفظ میکنه؟
یکی از دغدغههای اصلی یه سیستم مدیریت پایگاه داده چندکاربره، کنترل همزمانی (Concurrency) هست؛ یعنی دسترسی همزمان چند کاربر به یک داده. اگه کنترل درستی وجود نداشته باشه، ممکنه دادهها به اشتباه آپدیت بشن و یکپارچگی دادهها به خطر بیفته.
اوراکل این مشکلات رو با استفاده از قفلها (Locks) و یه مدل سازگاری چند نسخهای (Multiversion Consistency Model) حل میکنه. اساس این ویژگیها مفهوم تراکنش (Transaction) هست.
تراکنش (Transaction) چیه؟
یه تراکنش یه واحد منطقی از کاره که شامل یک یا چند دستور SQL میشه که توسط یه کاربر اجرا میشن. یه تراکنش با اولین دستور SQL قابل اجرای کاربر شروع میشه و وقتی به صراحت Commit (ثبت نهایی) یا Rollback (لغو و بازگشت به حالت قبل) بشه، تموم میشه.
مثال بانکی:
فرض کنید یه مشتری میخواد از حساب پساندازش به حساب جاریش پول منتقل کنه. این تراکنش میتونه شامل سه تا عملیات جدا باشه:
- کاهش موجودی حساب پسانداز.
- افزایش موجودی حساب جاری.
- ثبت این تراکنش در دفتر روزنامه تراکنشها.
اوراکل باید تضمین کنه که هر سه تا دستور انجام میشن تا حسابها در تعادل باقی بمونن. اگه یه مشکلی (مثلا خرابی سختافزاری) جلوی اجرای یکی از این دستورها رو بگیره، بقیه دستورهای این تراکنش هم باید لغو بشن. به این کار میگن Rollback.
- Commit: تغییرات ناشی از تمام دستورات SQL توی یه تراکنش رو دائمی میکنه.
- Rollback: هر تغییری که در نتیجه دستورات SQL در تراکنش ایجاد شده رو لغو میکنه.
- Savepoint: برای تراکنشهای طولانی، میشه نشانگرهای میانی به اسم Savepoint تعریف کرد. اینطوری میشه یه تراکنش رو به بخشهای کوچیکتر تقسیم کرد و در صورت نیاز، فقط تا یه Savepoint مشخص کار رو به عقب برگردوند.
سازگاری خواندن (Read Consistency)
اوراکل تضمین میکنه که دادهای که یه کاربر میبینه، با یه نقطه زمانی خاص سازگاره و توسط کاربرای دیگهای که همزمان دارن دادهها رو تغییر میدن، تحت تاثیر قرار نمیگیره. سادهترین راه برای درک این موضوع اینه که تصور کنید هر کاربر داره روی یه کپی شخصی از پایگاه داده کار میکنه.
وقتی یه آپدیت اتفاق میفته، مقادیر اصلی داده که تغییر کردن، توی سگمنتهای بازگشتی (Rollback Segments) پایگاه داده ثبت میشن. تا وقتی این آپدیت به عنوان بخشی از یه تراکنش Commit نشده باقی بمونه، هر کاربری که بعدا اون دادههای تغییر کرده رو کوئری بگیره، مقادیر اصلی رو میبینه. اوراکل از اطلاعات توی SGA و سگمنتهای بازگشتی استفاده میکنه تا یه نمای سازگار با خواندن از دادههای یه جدول برای یه کوئری بسازه.
قفلها (Locks)
اوراکل از قفلها هم برای کنترل دسترسی همزمان به دادهها استفاده میکنه. قفلها مکانیزمهایی هستن که برای جلوگیری از تعاملات مخرب بین کاربرانی که به دادههای اوراکل دسترسی دارن، طراحی شدن. قفلگذاری به صورت خودکار انجام میشه و نیازی به دخالت کاربر نداره. اوراکل دادههای جدول رو در سطح سطر (Row Level) قفل میکنه. این کار رقابت برای دسترسی به یک داده رو به حداقل میرسونه.
دو نوع اصلی قفل وجود داره: قفل انحصاری (Exclusive Lock) و قفل اشتراکی (Share Lock). روی یه منبع (مثل یه سطر یا جدول) فقط یه قفل انحصاری میشه گذاشت، اما میشه چندین قفل اشتراکی روی همون منبع داشت.
بخش هشتم: امنیت در اوراکل
سیستمهای پایگاه داده چندکاربره مثل اوراکل، ویژگیهای امنیتی دارن که نحوه دسترسی و استفاده از پایگاه داده رو کنترل میکنن. امنیت پایگاه داده رو میشه به دو دسته تقسیم کرد:
- امنیت سیستم (System Security): مکانیزمهایی که دسترسی و استفاده از پایگاه داده رو در سطح سیستم کنترل میکنن. مثل:
- نام کاربری و رمز عبور معتبر برای اتصال به پایگاه داده.
- تخصیص فضای دیسک برای کاربران.
- محدودیت منابع سیستم برای کاربران.
- ممیزی (Auditing) اقدامات کاربران.
- امنیت داده (Data Security): مکانیزمهایی که دسترسی و استفاده از پایگاه داده رو در سطح آبجکتهای اسکیما کنترل میکنن. مثل:
- اینکه چه کاربرانی به چه آبجکتهایی دسترسی دارن.
- چه عملیاتی روی اون آبجکتها میتونن انجام بدن.
اوراکل امنیت رو با استفاده از چند ابزار مختلف مدیریت میکنه:
- کاربران (Users): هر پایگاه داده اوراکل یه لیست از نامهای کاربری داره. برای دسترسی به پایگاه داده، کاربر باید با یه نام کاربری و رمز عبور معتبر وصل بشه.
- امتیازات (Privileges): امتیاز یعنی حق اجرای یه نوع خاص از دستور SQL. دو نوع امتیاز داریم:
- امتیازات سیستم (System Privileges): به کاربر اجازه میده یه کار خاص در سطح کل سیستم انجام بده. مثلا امتیاز ساختن یه Tablespace.
- امتیازات آبجکت (Schema Object Privileges): به کاربر اجازه میده یه کار خاص روی یه آبجکت مشخص انجام بده. مثلا امتیاز حذف کردن سطرها از یه جدول خاص.
- نقشها (Roles): نقشها گروههای نامگذاری شده از امتیازات مرتبط هستن که به کاربران یا نقشهای دیگه داده میشن. مدیریت امتیازات از طریق نقشها خیلی راحتتره. مثلا میشه یه نقش برای یه اپلیکیشن ساخت و تمام امتیازات لازم برای اجرای اون اپلیکیشن رو به اون نقش داد. بعد اون نقش رو به کاربرانی که باید از اپلیکیشن استفاده کنن، تخصیص داد.
بخش نهم: نسخههای مختلف اوراکل
اوراکل در طول سالها نسخههای مختلفی رو منتشر کرده. نامگذاری نسخهها هم یه قرارداد خاصی داره. مثلا پسوندهای «c»، «g» و «i» به ترتیب به معنی «Cloud»، «Grid» و «Internet» بودن. در نسخه فعلی یعنی Oracle Database 23ai، پسوند «ai» به معنی «هوش مصنوعی» (Artificial Intelligence) هست. در ادامه یه جدول از نسخههای مهم اوراکل و ویژگیهای کلیدیشون رو میبینید:
نسخه پایگاه داده اوراکل | تاریخ انتشار اولیه | ویژگیهای برجسته |
---|---|---|
Oracle v2 | 1979 | اولین پایگاه داده رابطهای SQL تجاری موجود. |
Oracle v6 | 1988 | قفلگذاری در سطح سطر، بکاپ و بازیابی آنلاین. |
Oracle7 | ژوئن 1992 | رویههای ذخیره شده PL/SQL، تریگرها. |
Oracle8i Database | 1998 | پروتکلهای اینترنتی بومی و جاوا. |
Oracle9i Database | 2001 | Oracle Real Application Clusters (RAC)، Oracle XML DB. |
Oracle Database 10g | 2003 | مدیریت خودکار پایگاه داده، زیرساخت Grid، Oracle ASM. |
Oracle Database 11g | سپتامبر 2007 | Active Data Guard، Secure Files، Exadata. |
Oracle Database 12c | ژوئیه 2013 | معماری چندمستاجری (Multitenant)، In-Memory Column Store، JSON بومی. |
Oracle Database 18c | فوریه 2018 | یکپارچهسازی با Active Directory، توابع جدول چندریختی. |
Oracle Database 19c (LTR) | فوریه 2019 | ایجاد خودکار ایندکس، نگهداری آمار به صورت Real-Time. |
Oracle Database 21c (IR) | دسامبر 2020 | جداول بلاکچین، اجرای جاوا اسکریپت در پایگاه داده. |
Oracle Database 23ai (LTR) | ۲ می ۲۰۲۴ | جستجوی برداری هوش مصنوعی (AI Vector Search)، دوگانگی رابطهای JSON، پشتیبانی از میکروسرویسهای تراکنشی. |
(LTR مخفف Long Term Release و IR مخفف Innovation Release هست)
بخش دهم: پرسش و پاسخ از دنیای واقعی
حالا که با کلیات اوراکل آشنا شدیم، بیاید چند تا سوال واقعی که برای کاربرها پیش اومده رو با هم ببینیم. این سوالها از فرومها و کامیونیتیهای مختلف جمعآوری شدن.
سوال ۱: من یه مدیر پایگاه داده SQL Server هستم. یاد گرفتن اوراکل چقدر سخته؟
این سوالی هست که خیلیها میپرسن. بر اساس تجربه کاربری که در این زمینه سوال پرسیده، اونها با دو سال سابقه کار با SQL Server، از اوراکل به خاطر نیازمندیهای بالای مدیرانش و حقوق بهترشون کمی واهمه داشتن. اما واقعیت اینه که گذار از یه پایگاه داده به پایگاه داده دیگه شدنیه، مخصوصا اگه پسزمینه لینوکسی قویتری داشته باشید، چون اوراکل خیلی جاها روی لینوکس اجرا میشه. خیلی از شرکتهای بزرگ مثل شرکتهای دفاعی، دولتی، پزشکی و بانکی از اوراکل استفاده میکنن. ممکنه دلیلش این باشه که اپلیکیشنهای قدیمیشون روی اوراکل بوده و به یه استاندارد تبدیل شده. اگه به یادگیری علاقه دارید، شجاع باشید و شاخه کاریتون رو گسترش بدید.
سوال ۲: چطور میتونم اسم سروری که پایگاه داده اوراکل روش میزبانی میشه رو پیدا کنم؟
این یه سوال فنی رایجه. چند تا راه برای این کار وجود داره. یه راه ساده استفاده از این کوئری هست:
select sys_context('USERENV','SERVER_HOST') from dual
این دستور نیاز به هیچ امتیاز خاصی نداره و برای همین استفاده ازش توی رویههای ذخیره شده راحته. البته این پارامتر یعنی SERVER_HOST
فقط از نسخه 10G به بعد در دسترسه. با استفاده از sys_context
میشه اطلاعات مفید دیگهای هم به دست آورد:
select
sys_context ( 'USERENV', 'DB_NAME' ) db_name,
sys_context ( 'USERENV', 'SESSION_USER' ) user_name,
sys_context ( 'USERENV', 'SERVER_HOST' ) db_host,
sys_context ( 'USERENV', 'HOST' ) user_host
from dual
این کوئری اسم پایگاه داده، اسم کاربر نشست، هاست پایگاه داده و هاست کاربر رو برمیگردونه.
سوال ۳: نمیتونم سرور رو متوقف کنم و پیام «Cannot stop/start server – Oracle database server is in existing mode» رو میگیرم. مشکل چیه؟
یه کاربری با نسخه 9.0.00 با این مشکل مواجه شده بود. وقتی از دستورات stop_all
و start_all
استفاده میکرد، این پیام رو دریافت میکرد. به نظر میرسید که با وجود این پیام، تمام فرایندهای EM واقعا متوقف میشدن. برای start_all
هم این پیام اول نشون داده میشد ولی بعد از چند ثانیه رمز DBO رو میپرسید و فرایندها رو شروع میکرد. این کاربر اشاره کرده بود که پایگاه دادهاش روی یه سرور اختصاصی نیست و با پایگاه دادههای دیگه به اشتراک گذاشته شده. این پیام از اسکریپتهای CM میاد و مدیران پایگاه داده (DBA) نتونسته بودن توضیحش بدن. اینجور مشکلات معمولا به پیکربندی خاص اون محیط برمیگرده.
سوال ۴: آیا جاوا حتما باید روی سرورهای پایگاه داده اوراکل نصب باشه؟
یه کاربری که سرورهاش فقط میزبان پایگاه داده اوراکل (نسخه 11g) بودن، این سوال رو پرسیده بود. نصب اوراکل به همراه جاوا انجام شده بود (مثلا در مسیر \OraHome_1\product\11.2.0\dbhome_1\jdk
). تیم عملیات شبکه بهش گفته بود که باید تمام نسخههای جاوا رو نگهداری و آپدیت کنه. اون کاربر ترجیح میداد اگه جاوا ضروری نیست، اون رو حذف کنه تا از زحمت نگهداریش خلاص بشه. واقعیت اینه که خیلی از ویژگیهای داخلی اوراکل به جاوا وابسته هستن. بنابراین، جاوا به عنوان بخشی از نصب پایگاه داده اوراکل مورد نیازه و حذف کردنش میتونه مشکلات جدی ایجاد کنه.
سوال ۵: بکاپ پایگاه داده روی سرور فیزیکی اوراکل در لینوکس چطور کار میکنه؟
یه کاربر که با نرمافزار Veeam کار میکرد، میخواست بدونه بکاپگیری از اوراکل روی سرورهای فیزیکی لینوکس چطوریه، چون Veeam بیشتر برای ماشینهای مجازی بهینه شده. نرمافزارهایی مثل Veeam Agent for Linux (VAL) میتونن از سرورهای فیزیکی لینوکس بکاپ بگیرن. این بکاپها کل ماشین رو شامل میشن و به صورت فایلسیستمی سازگار هستن. در نسخههای جدیدتر این ابزارها، ویژگیهایی برای اطمینان از سازگاری تراکنشی (Transaction Consistency) پایگاه داده اوراکل هم اضافه شده. این یعنی قبل از بکاپ، پایگاه داده در حالتی قرار میگیره که بکاپ گرفته شده سالم و قابل بازیابی باشه.
دیدگاهتان را بنویسید