دسته بندی : پایگاه داده - database

نوشته شده در 1396/01/14

مقدمه

امروزه بیشتر شرکت‌ها از یک پایگاه داده برای اتوماسیون‌کردن سیستم‌های اطلاعاتیشان استفاده می‌کنند. یک پایگاه داده یک مجموعه سازماندهی‌شده از اطلاعات است که به صورت یک واحد رفتار می‌کند. هدف یک پایگاه داده، جمع‌آوری، ذخیره و بازیابی اطلاعات مرتبط برای استفاده‌شدن توسط اپلیکیشن‌های پایگاه داده است.

نوع پایگاه داده Oracle

پایگاه داده Oracle یک سیستم مدیریت پایگاه داده رابطه‌ای (RDBMS) است. این پایگاه داده، ویژگی‌های شی‌گرایی را پیاده‌سازی می‌کند؛ مانند انواع داده تعریف‌شده توسط کاربر، وراثت و چندریختی، بنابراین یک سیستم مدیریت پایگاه داده شی-رابطه‌ای (ORDBMS) نامیده می‌شود. پایگاه داده Oracle مدل رابطه‌ای را به یک مدل شی-رابطه‌ای توسعه داده است که ذخیره مدل‌های تجاری پیچیده را در یک پایگاه داده رابطه‌ای ممکن می‌سازد.

ویژگی‌های پایگاه داده شی-رابطه‌ای در مقایسه با دیگر پایگاه داده‌ها

  • تکنولوژی شی‌گرا در بالای تکنولوژی رابطه‌ای قرار دارد.

  • شی‌ها در جداولی از اشیا ذخیره می‌شوند به جای اینکه در جداولی از سطرها ذخیره شوند.

  • پشتیبانی از ویژگی‌های اصلی شی‌گرایی: انواع پیچیده، وراثت، تجمیع، متدها

  • گسترش یک فناوری شناخته‌شده

  • ترکیب هر دو تکنولوژی ممکن است باعث سخت‌شدن درک مفاهیم (schemaها) شود.

  • مشکل کارایی (performance) دارد.

  • سیستم‌های شی-رابطه‌ای شامل ویژگی‌هایی مانند توسعه‌پذیری پیچیده شی، پنهان‌سازی اطلاعات (encapsulation)، وراثت و واسط بهتر برای زبان‌های شی‌گرا است.

  • وقتی یک اپلیکیشن با یک ORDBMS رابطه برقرار می‌کند، طوری عمل می‌کند که گویی داده‌ها به صورت اشیا ذخیره شده‌اند. سپس ORDBMS اطلاعات شی‌گرایی را به جداول داده با سطرها و ستون‌ها تبدیل کرده و داده‌ها را طوری که در یک RDBMS ذخیره می‌شوند اداره می‌کند. همچنین وقتی داده‌ها بازیابی می‌شوند، یک شی پیچیده که به وسیله کنار هم قرار دادن داده‌های ساده ایجاد شده است برمی‌گرداند. بزرگ‌ترین مزیت ORDBMSها این است که متدهایی را برای تبدیل داده‌ها بین قالب RDBMS و قالب OODBMS فراهم می‌کند، بنابراین برنامه‌نویس نیاز به نوشتن کد برای تبدیل بین دو نوع را نداشته و دسترسی به پایگاه داده از طریق یک زبان برنامه‌نویسی شی‌گرا آسان است.

  • اگر چه RDBMS و ORDBMS هر دو DBMS هستند، اما آن‌ها در چگونگی تعامل با اپلیکیشن‌ها تفاوت دارند. اپلیکیشن‌هایی که از RDBMS استفاده می‌کنند وقتی می‌خواهند داده‌های پیچیده را ذخیره کنند، باید کارهای بیشتری انجام دهند، در حالی که ORDBMS ذاتا برای این کار پشتیبانی فراهم می‌کند. اما با توجه به تبدیل داخلی بین قالب‌های داده، کارایی ORDBMS می‌تواند کم شود. بنابراین انتخاب یکی از این‌ها بستگی به داده‌هایی دارد که نیاز به ذخیره‌سازی و مدیریت آن‌ها است.

موتور ذخیره‌سازی پایگاه داده Oracle

پایگاه داده Oracle در مورد موتور مانند پایگاه داده MySQL نیست، مانند بیشتر RDBMSها موتور ذخیره‌سازی مخصوص خود را دارد.

چند مولفه از پایگاه داده شی-رابطه‌ای

شی طرح (schema): یک ساختار منطقی از داده‌های ذخیره‌شده در یک schema است. جداول، شاخص‌ها، دنباله‌ها و لینک‌های پایگاه داده مثال‌هایی از اشیای طرح (schema) هستند.

نوع شی: مولفه‌ای که یک موجودیت جهان واقعی مانند سفارش خرید را به صورت انتزاعی پیاده‌سازی می‌کند. صفات، ساختار موجودیت را شکل می‌دهند، در حالی که متدها عملیاتی را پیاده‌سازی می‌کنند که یک اپلیکیشن می‌تواند روی یک موجودیت انجام دهد.

جدول شی: یک نوع خاص از جدول که در آن هر سطر یک شی را ارائه می‌کند.

دید شی: یک جدول شی مجازی که هر سطر آن یک شی (یک نمونه از یک نوع داده‌ای تعریف‌شده توسط کاربر) است.

Tablespace چیست؟

tablespace تخصیص منطقی (مجازی) فضا به فایل‌های داده یا به عبارت دیگر تعیین بخش‌های منطقی (مجازی) برای پایگاه داده است. ما می‌توانیم تعیین کنیم که یک جدول مربوط به کدام tablespace باشد؛ این به ما اجازه می‌دهد تا اپلیکیشن‌های مختلف را روی یک سیستم پایگاه داده مشترک، تفکیک کنیم.

استفاده از چند Tablespace:

استفاده از چند tablespace به شما اجازه انعطاف‌پذیری بیشتر در انجام عملیات پایگاه داده را می‌دهد. وقتی یک پایگاه داده دارای چند tablespace است، شما می‌توانید:

  • داده‌های کاربر را از داده‌های دیکشنری جدا کنید تا درگیری I/O را کاهش دهید.

  • داده‌های یک اپلیکیشن را از داده‌های اپلیکیشن دیگر جدا کنید تا اگر یک tablespace باید offline شود از تحت تاثیر قرار گرفتن چند اپلیکیشن جلوگیری کنید.

  • فایل‌های داده‌ای مختلف از tablespaceهای مختلف را روی درایوهای دیسک مختلف ذخیره کنید تا درگیری I/O را کاهش دهید.

  • offline نگه داشتن tablespaceهای تکی زمانی که بقیه online باقی می‌مانند، دسترس‌پذیری بهتر را فراهم می‌کند.

  • استفاده از tablespace را با رزرو کردن یک tablespace برای یک استفاده خاص از پایگاه داده بهینه کنید؛ مانند فعالیت زیاد بروزرسانی، فعالیت فقط خواندنی (read-only) یا ذخیره‌سازی بخش موقتی.

  • از tablespaceهای تکی بکاپ بگیرید.

پارتیشن‌بندی جداول در پایگاه داده Oracle

پارتیشن‌بندی یک عملکرد قدرتمند است که اجازه می‌دهد تا جداول، شاخص‌ها و جدول سازماندهی‌شده توسط شاخص، به قطعات کوچک‌تر تقسیم شوند که این، اشیای پایگاه داده را قادر می‌سازد تا در یک سطح خوبی از قطعه قطعه بودن مدیریت شوند و دسترسی پیدا کنند.

مزایای کلیدی:

  • افزایش کارایی به وسیله کار کردن تنها روی داده‌هایی که مربوط است.

  • افزایش دسترس‌پذیری از طریق قابلیت مدیریت قسمت منفرد

  • کاهش هزینه‌ها توسط ذخیره داده‌ها در مناسب‌ترین روش

  • آسان در پیاده‌سازی چون نیازی به تغییرات در اپلیکیشن‌ها و کوئری‌ها ندارد.

  • یک ویژگی به‌خوبی اثبات‌شده و کامل است که توسط هزاران مشتری Oracle استفاده می‌شود.

چه زمانی یک Table را پارتیشن‌بندی کنیم:

  • جداولی که بزرگ‌تر از 2GB هستند. این جداول همیشه باید به عنوان کاندید برای تقسیم‌بندی در نظر گرفته شوند.

  • جداولی که شامل داده‌های تاریخی هستند که در آن داده‌های جدید در جدیدترین پارتیشن اضافه می‌شوند. یک مثال معمولی یک جدول تاریخی است که تنها داده‌های ماه فعلی قابل بروزرسانی است و دیگر 11 ماه فقط خواندنی (read only) هستند.

  • جداولی که محتوای آن‌ها باید در سراسر انواع مختلف دستگاه‌های ذخیره‌سازی توزیع شود.

نحوه پارتیشن‌بندی (تقسیم‌بندی) جداول:

یک جدول فروش (SALES) با ساختار زیر را در نظر بگیرید:

این جدول شامل میلیون‌ها رکورد است، اما تمام رکوردها تنها به چهار سال تعلق دارد، به عنوان مثال 1991، 1992، 1993 و 1994. بیشتر اوقات شما تنها به یک سال نیاز دارید، مثلا شما کوئری‌های شبیه زیر را می‌گیرید:

select sum(amt) from sales where year=1991;
select product,sum(amt) from sales where year=1992

Group by product;

اکنون هرجا که شما کوئری‌هایی شبیه این را بگیرید، Oracle تمام جدول را جستجو خواهد کرد. اگر شما این جدول را مطابق سال، پارتیشن‌بندی (تقسیم‌بندی) کنید، از آنجایی که Oracle تنها یک پارتیشن تنها را به جای کل جدول بررسی خواهد کرد، کارایی افزایش خواهد یافت.

برای ایجاد یک جدول پارتیشن از عبارت زیر استفاده می‌کنیم:

create table sales (year number(4),

product varchar2(10),

amt number(10,2))

partition by range (year)
partition p1 values less than (1992) tablespace u1,
partition p2 values less than (1993) tablespace u2,
partition p3 values less than (1994) tablespace u3,
partition p4 values less than (MAXVALUE) tablespace u4;

در مثال بالا جدول فروش (SALES) توسط 5 پارتیشن ساخته شد. پارتیشن p1 شامل سطرهای سال 1991 خواهد بود و در tablespace (فضای جدول) u1 ذخیره خواهد شد. پارتیشن p2 شامل سطرهای سال 1992 خواهد بود و در فضای جدول u2 ذخیره خواهد شد و ...

در مثال بالا اگر شما پارتیشن p4 را با مقادیر کمتر از MAXVALUE مشخص نکنید، شما قادر نخواهید بود تا سطری با سال بالاتر از 1994 را insert کنید.

اگرچه ضروری نیست اما می‌توانید پارتیشن‌ها را در tablespaceهای مختلف قرار دهید. اگر شما پارتیشن‌ها را در tablespaceهای مختلف قرار دهید، شما می‌توانید خرابی‌هایی را که باعث ایجاد مشکلات می‌شوند جداسازی کنید به این صورت که مثلا فقط یک پارتیشن خاص در دسترس نخواهد بود و باقی پارتیشن‌ها هنوز در دسترس خواهند بود.

انواع جدول

  • Normal (معمولی):

این‌ها جداول معمولی و استاندارد پایگاه داده هستند. داده‌ها به روش شبیه Heap مدیریت می‌شوند. وقتی داده اضافه می‌شود، اولین فضای آزاد پیدا شده در سگمنت که می‌تواند داده در آن جا شود استفاده می‌شود. وقتی داده از جدول حذف می‌شود، آن به فضا اجازه می‌دهد تا برای استفاده مجدد توسط INSERTها و UPDATEهای بعدی در دسترس شود. یک heap یک دسته یا گروه از فضا است و به صورت یک سبکِ تا حدودی تصادفی استفاده می‌شود.

  • External (خارجی):

این نوع جدول ما را قادر می‌سازد تا به داده‌ها در منابع خارجی دسترسی پیدا کنیم همانطور که به یک جدول در پایگاه داده دسترسی پیدا می‌کنیم. لودکردن داده‌ها به عمل خواندن داده‌ها از یک جدول خارجی و لود کردن آن در یک جدول در پایگاه داده اشاره دارد و آنلودکردن عکس این عمل است.

داده‌ها در این جداول در پایگاه داده خودشان ذخیره نمی‌شوند؛ بلکه آن‌ها در خارج از پایگاه داده در فایل‌های معمولی سیستم‌عامل قرار دارند (با ستون‌هایی از داده در فایل که معمولا توسط یک جداکننده (delimiter) یا موقعیت، تعیین حدود (مشخص) می‌شوند.). جداول خارجی در Oracle 9i و بالاتر به ما این قابلیت را می‌دهد تا از یک فایل که خارج از پایگاه داده قرار دارد کوئری بگیریم همانطور که از یک جدول معمولی (heap organized) در پایگاه داده کوئری می‌گیریم. این‌ها یک ابزار لود داده بسیار قدرتمند هستند. علاوه بر این، از Oracle 10g، یک قابلیت آنلود کردن جدول خارجی معرفی شد که یک روش ساده برای انتقال داده‌ها بین پایگاه داده‌های Oracle بدون استفاده از لینک‌های پایگاه داده فراهم می‌کند.

  • Index Organized (سازمان‌یافته توسط شاخص):

این جداول در یک ساختار شاخص ذخیره می‌شوند که ترتیب فیزیکی را روی خود سطرها تحمیل (اعمال) می‌کند، در حالی که در یک Heap (جدول معمولی) داده‌ها هر جای ممکن که مناسب باشد پر می‌شوند. در جداول Index Organized داده‌ها مطابق Primary key به صورت مرتب ذخیره می‌شوند.

مزایا:

  1. افزایش کارایی: نیازی به دسترسی به یک سطر در پایگاه داده از طریق یک ساختار شاخص نیست، بنابراین ما می‌توانیم تعداد کلی عملیات I/O که برای بازیابی داده نیاز است را کاهش دهیم.

  2. کاهش فضای جدول: به دلیل اینکه نیازی به ایجاد لینک به یک سطر در جدول نیست، نیازی به ذخیره ROWID (شناسه سطر) در شاخص (index) نیست، در نتیجه فضای کلی مورد نیاز برای جدول کاهش می‌یابد.

  3. داده‌های از پیش مرتب‌شده: داده‌ها در گره‌های برگ از قبل با مقدار کلید اصلی (primary key) مرتب شده‌اند.

معایب:

  1. ما باید یک primary key با یک مقدار یکتا روی جدول داشته باشیم.

  2. ما نمی‌توانیم هیچ شاخص دیگری روی داده‌ها داشته باشیم.

  3. ما نمی‌توانیم یک جدول سازمان‌دهی‌شده توسط شاخص را تقسیم (تکه) کنیم.

  4. این نوع جدول نمی‌تواند یک بخش از یک کلاستر باشد.

  5. داده‌های داخل سطر باید نسبتا کوچک باشد. مقدار زیاد داده‌ها در گره‌های برگ، I/O بیشتری برای بازیابی نیاز خواهد داشت که برخی مزایای این نوع جدول را به خطر می‌اندازد.

چه موقع از IOT (Index Organized Table) استفاده کنیم:

  1. بازیابی اطلاعات: یک اپلیکیشن بازیابی اطلاعات اساسا یک شاخص برای آیتم‌هایی در نوع دیگری از داده‌ها ایجاد می‌کند، مانند یک اپلیکیشن که برای رشته‌های متنی در یک سند جستجو می‌کند.

  2. داده‌های فضایی: مانند داده‌هایی که برای بازیابی اطلاعات استفاده می‌شود، داده‌های فضایی (spatial data) معمولا یک شاخص موقعیت‌یابی (تعیین مکان) و یک نشانه (token) دارند که به نوع دیگری از داد‌ها اشاره می‌کند.

  3. OLAP (Online Analytical Processing Applications): اغلب جداول حقایقی دارند که شامل یک مقدار نسبتا کمی داده است، مانند مجموع‌های عددی.

  • Temporary (موقتی):

این جداول داده‌های اولیه (موقتی) را برای عمر (طول عمر) یک تراکنش (Transaction) یا عمر یک جلسه (Session) ذخیره می‌کنند. این جداول فضاهای موقتی را در صورت نیاز از فضای جدول (Tablespace) کاربر فعلی تخصیص می‌دهند. هر session تنها فضایی (Extents) را می‌بیند که به آن session اختصاص داده شده است؛ هیچوقت داده‌هایی را که در session دیگری ایجاد شده است نمی‌بیند. جداول موقت به ما اجازه می‌دهد تا به طور موقت داده‌ها ادامه پیدا کنند همراه با مزیت تولید انجام دوباره (redo) کمتر (و undo کمتر، از نسخه Oracle 12c) نسبت به جدول معمولی سازمان‌دهی‌شده به صورت heap.

داده‌ها در جداول موقت به طور خودکار در پایان session پایگاه داده حذف می‌شوند، حتی اگر به طور غیر عادی پایان یابد.

تمام عبارات SQL در sessionها اجرا می‌شوند. وقتی یک ارتباط به پایگاه داده برقرار می‌شود، یک session شروع می‌شود. اجازه یا اختیار session به نام کاربری است که session را شروع کرده است. یک session چندین مشخصه دارد. این مشخصه‌ها به صورت پیشفرض در شروع، مطابق تنظیمات پایگاه داده تنظیم می‌شوند.

عبارات SQL به طور عمومی عبارات تراکنشی (Transactional) هستند. وقتی یک عبارت تراکنشی اجرا می‌شود، اگر تراکنشی در حال پردازش نباشد، یک تراکنش را شروع می‌کند. اگر داده‌های SQL (داده‌هایی که در جداول ذخیره شده‌اند) در طی یک تراکنش تغییر داده شوند، تغییر می‌تواند با یک دستور ROLLBACK انجام نشود. وقتی یک دستور COMMIT یا ROLLBACK اجرا شود، تراکنش خاتمه می‌یابد. هر عبارت SQL به صورت Atomic کار می‌کند.

تفاوت جدول Temporary (Transaction) و Temporary (Session):

در تراکنش، در صورت خاتمه یافتن (COMMIT) سطرها حذف می‌شوند.

در جلسه، در صورت خاتمه یافتن (COMMIT) سطرها حفظ (نگه داشته) می‌شوند.

شی‌گرایی در پایگاه داده Oracle

اشیای Oracle:

انواع اشیای Oracle، انواع تعریف‌شده توسط کاربر هستند که مدل‌کردن موجودیت‌های دنیای واقعی مانند مشتریان و سفارش‌های خرید را به عنوان اشیا در پایگاه داده ممکن می‌سازد.

انواع جدید اشیا می‌تواند از هر نوع داخلی پایگاه داده و هر نوع شی از قبل ساخته‌شده ایجاد شود.

به طور کلی، مدل شی (object-type) شبیه مکانیزم کلاس در C++ و Java است. مانند کلاس‌ها، استفاده مجدد از اشیا، توسعه سریع‌تر و موثرتر اپلیکیشن‌های پایگاه داده را ممکن می‌سازد. با پشتیبانی بومی اشیا در پایگاه داده، پایگاه داده Oracle توسعه‌دهندگان اپلیکیشن را قادر می‌سازد تا مستقیما به ساختارهای داده‌ای که توسط اپلیکیشن‌هایشان استفاده می‌شود، دسترسی داشته باشند.

اشیا به ما اجازه می‌دهند تا رابطه‌های جزء-کل را ارائه کنیم. برای مثال در یک جدول رابطه‌ای برای انبار اقلام موجود، یک پیستون و یک موتور ممکن است وضعیت یکسان داشته باشند. استفاده از اشیا می‌تواند نیاز ما را به ارائه پیستون‌ها به صورت جزئی از موتورها با شمای پیچیده از چندین جدول با رابطه‌های کلید خارجی و اصلی، کم کند.

یک نوع شی، صفاتی دارد که ساختار موجودیت را منعکس می‌کند، و متدهایی دارد که عملیات روی موجودیت را پیاده‌سازی می‌کند. صفات با استفاده از انواع اولیه (از قبل ساخته‌شده) یا دیگر انواع شی تعریف می‌شود. متدها توابع یا رویه (procedure) هایی هستند که با PL/SQL یا یک زبان خارجی مانند C نوشته شده‌اند و در پایگاه داده ذخیره می‌شوند. PL/SQL مخفف Procedural Language/Structured Query Language یک زبان رویه‌ای است که به طور ویژه برای پذیرفتن عبارات SQL از طریق syntax آن طراحی شده است. واحدهای برنامه PL/SQL توسط سرور پایگاه داده Oracle کامپایل شده و در داخل پایگاه داده ذخیره می‌شوند.

برای تعریف یک شی (که می‌تواند شامل ویژگی‌های شی‌گرایی مانند صفات، متدها و ارث‌بری باشد) از CREATE TYPE استفاده می‌کنیم و مانند یک کلاس در برنامه‌نویسی شی‌گرایی، صفات و متدها و بدنه متدها (که از چشم استفاده‌کننده از شی پوشیده است.) را تعریف می‌کنیم.

در صورتی که بخواهیم یک نوع (نوع شی) را از یک شی دیگر مشتق کنیم از کلمه کلیدی UNDER استفاده می‌کنیم.

یک شی می‌تواند به عنوان یک ستون از یک جدول رابطه‌ای استفاده شود.

از یک شی می‌توانیم یک جدول بسازیم و به دو روش می‌توان این جدول را ببینیم:

    1. یک جدول تک ستونی که در آن هر سطر یک شی است (مثلا شی person) و به ما اجازه انجام عملیات شی‌گرایی را می‌دهد.

    2. به عنوان یک جدول چند ستونی که در آن هر صفت از نوع شی ما مانند idno در person یک ستون از جدول خواهد بود و به ما اجازه انجام عملیات رابطه‌ای را می‌دهد.

مثال ایجاد یک نوع شی:

CREATE TYPE address_typ AS OBJECT (

street VARCHAR2(30),

city VARCHAR2(20),

state CHAR(2),

postal_code VARCHAR2(6) );

CREATE TYPE employee_typ AS OBJECT (

employee_id NUMBER(6),

first_name VARCHAR2(20),

last_name VARCHAR2(25),

email VARCHAR2(25),

phone_number VARCHAR2(20),

hire_date DATE,

job_id VARCHAR2(10),

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

manager_id NUMBER(6),

department_id NUMBER(4),

address address_typ,

MAP MEMBER FUNCTION get_idno RETURN NUMBER,

MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) );

مثال ایجاد یک بدنه نوع شی:

CREATE TYPE BODY employee_typ AS

MAP MEMBER FUNCTION get_idno RETURN NUMBER IS

BEGIN

RETURN employee_id;

END;

MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) IS

BEGIN

DBMS_OUTPUT.PUT_LINE(first_name || ' ' || last_name);

DBMS_OUTPUT.PUT_LINE(address.street);

DBMS_OUTPUT.PUT_LINE(address.city || ', ' || address.state || ' ' ||

address.postal_code);

END;

END;

عبارت CREATE TYPE، نام، صفات، متدها و دیگر مشخصه‌های شی را مشخص می‌کند. عبارت CREATE TYPE BODY شامل کد برای متدها است که نوع را پیاده‌سازی می‌کند.

مثال ایجاد جدولی از یک نوع شی:

CREATE TABLE employee_tab OF employee_typ;

اشیاء هم ساختار و هم رفتار را تعریف می‌کنند. نوع اشیاء، اشیای schema پایگاه داده هستند. کد اپلیکیشن این اشیاء را می‌تواند بازیابی یا دستکاری کند.

یک نوع شی و نمونه‌های آن

وراثت نوع:

وراثت نوع ما را قادر می‌سازد تا سلسله‌مراتب‌های نوع را ایجاد کنیم. یک سلسله‌مراتب نوع یک مجموعه از سطوح پی‌درپی از زیرنوع‌های به طور افزایشی تخصصی‌شده است که از یک شی جد مشترک مشتق شده‌اند، که ابرنوع (supertype) نامیده می‌شود.

برای مشتق‌کردن یک زیرنوع از یک ابرنوع، یک نوع خاص از ابرنوع را تعریف می‌کنیم که یا صفات و متدهای جدید را اضافه یا متدهای ارث برده شده را دوباره تعریف یا override می‌کنیم.

برای استفاده از وراثت ابتدا باید شی والد ایجاد شده و سپس شی فرزند از والد مشتق شود، سپس جدولی برای نگهداری نمونه‌های والد ایجاد شود. از آنجایی که فرزند یک زیرنوع از والد است، امکان ذخیره نمونه‌های فرزند در جدول والد وجود دارد. مثال:

CREATE TYPE student_typ UNDER person_typ (

dept_id NUMBER,

major VARCHAR2(30),

OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2)

NOT FINAL;

CREATE TABLE person_tab OF person_typ;

چندریختی:

چندریختی اجازه می‌دهد تا انواع داده‌ها و متدها را به طور کلی با استفاده از واسط یکسان اداره کنیم. در override، زیرنوع‌ها، متدی که ارث برده‌اند را دوباره تعریف می‌کنند. در overload، ممکن است چند نسخه از یک متد با پارامترهای مختلف وجود داشته باشد.

مثال ذخیره نمونه‌های فرزند در جدول والد:

INSERT INTO person_tab VALUES (person_typ(12, 'Bob Jones', '650-555-0130'));

 

INSERT INTO person_tab VALUES (student_typ(51, 'Joe Lane', '1-650-555-0140', 12, 'HISTORY'));

 

INSERT INTO person_tab VALUES (employee_typ(55, 'Jane Smith', '1-650-555-0144',

100, 'Jennifer Nelson'));

 

INSERT INTO person_tab VALUES (part_time_student_typ(52, 'Kim Patel', '1-650-555-0135', 14,

'PHYSICS', 20));

شاید مهم‌ترین استفاده از تابع TREAT دسترسی به صفات و متدهای یک زیرنوع از یک سطر یا ستون نوع تعریف‌شده باشد. کوئری زیر صفت معدل را از تمام personها، studentها و teacherهایی که این صفت را دارند بازیابی می‌کند. NULL برای personهایی که student نیستند، برگردانده می‌شود:

SELECT name, TREAT(VALUE(p) AS student_typ).avg avg

FROM person_tab p;

کوئری نمایش studentها:

SELECT *

FROM person_tab p

WHERE VALUE(p) IS OF (ONLY student_typ)

تفاوت VARCHAR و VARCHAR2

VARCHAR توسط Oracle رزرو شده است تا تفاوت بین NULL و رشته تهی را پشتیبانی کند، همانطور که استاندارد ANSI مقرر کرده است. VARCHAR2 تفاوتی بین رشته تهی و NULL قائل نمی‌شود. اگر بر یکی بودن رشته خالی و NULL تاکید دارید، باید از VARCHAR2 استفاده کنید.

توزیع‌های لینوکسی که پایگاه داده Oracle پشتیبانی می‌کند

  • Oracle Enterprise Linux 5 update 2, kernel 2.6.18-92 or higher

  • Oracle Enterprise Linux 4 update 7

  • Red Hat Enterprise Linux AS/ES 5 update 2 or later

  • Red Hat Enterprise Linux AS/ES 4 update 7 or later

  • SUSE Linux Enterprise Server 11.0, kernel 2.6.27.19-5 or higher

  • SUSE Linux Enterprise Server 10.0 with SP2 or later, kernel 2.6.16.21-0.8 or higher

  • Asianux 3.0

  • Asianux 2.0 (update 7 required for x86)

چه زمانی از پایگاه داده Oracle استفاده کنیم؟

اپلیکیشن‌هایی که نیاز به تراکنش‌های (Transactionهای) چند سطری و پیچیده دارند (مثلا سیستم‌های حسابداری دوطرفه؛ سیستم‌هایی هستند که در آن هر تراکنش به عنوان یک بدهی در یک حساب و به عنوان اعتبار در حساب دیگر ثبت می‌شود.).

یک مثال واقعی یک موتور رزور پشت یک سیستم رزرو سفر است. که معمولا شامل تراکنش‌های پیچیده است.

برخی از ویژگی‌های پایگاه داده Oracle

فناوری بازگشت به عقب (Flashback):

پایگاه داده Oracle دارای فناوری بازگشت به عقب است که یک مزیت مهم است. در صورت خاتمه ناگهانی اجرای یک اپلیکیشن بنا به هر دلیلی، این مهم است که داده‌های ذخیره‌شده روی یک سیستم پایگاه داده را از دست ندهیم. تکنولوژی فلش‌بک Oracle اجازه بازیابی موثر داده‌هایی که به اشتباه پاک شده‌اند یا از دست رفته‌اند را می‌دهد. بنابراین این تکنولوژی به طور اساسی خطاهای انسانی را حذف می‌کند و زمان بازیابی پایگاه داده را افزایش می‌دهد. در آخر این ویژگی اجازه یک مدیریت و روند اجرایی ساده را می‌دهد.

پشتیبانی از مکان‌نماها (Cursor):

Oracle یک ناحیه حافظه به نام ناحیه محتوا (context area) برای پردازش یک عبارت SQL ایجاد می‌کند که شامل تمام اطلاعات برای پردازش آن عبارت است. یک مکان‌نما (cursor) یک اشاره‌گر به این ناحیه محتوا است. PL/SQL ناحیه محتوا را از طریق یک مکان‌نما کنترل می‌کند. یک مکان‌نما سطرهای (یک یا بیشتر) برگردانده‌شده توسط یک عبارت SQL را نگه می‌دارد. مجموعه سطرهایی که مکان‌نما نگه می‌دارد به عنوان مجموعه فعال (active set) ارجاع داده می‌شود. شما می‌توانید یک نام برای مکان‌نما انتخاب کنید، بنابراین می‌تواند در یک برنامه ارجاع داده شود تا سطرهای برگردانده‌شده توسط عبارت SQL را یکی یکی بردارد و پردازش کند که کمک می‌کند تا برنامه‌نویسی ساده‌تر شود.

Oracle از cursorها پشتیبانی می‌کند که وقتی کارایی مورد نیاز است، برنامه‌نویسی را آسان می‌کند. یک مکان‌نما اساسا به شما اجازه پردازش سطر به سطر می‌دهد. Oracle از چند مکان‌نما در هر کانکشن Oracle در خط با استانداردهای ANSI پشتیبانی می‌کند.

افزایش امنیت داده‌ها:

Oracle هر تراکنش (transaction) را جدا اجرا می‌کند و نتیجه هر تراکنش تا زمان تکمیل آن برای دیگر تراکنش‌ها پنهان است که این باعث افزایش امنیت داده‌ها می‌شود.

قابلیت حمل:

Oracle روی بیش از 100 پلتفورم سخت‌افزاری و 20 پروتکل شبکه اجرا می‌شود. این باعث می‌شود نوشتن یک اپلیکیشن Oracle از تغییرات سخت‌افزار و سیستم عامل نسبتا در امان باشد.

پشتیبان‌گیری و بازیابی (Backup and Recovery):

Oracle برای بکاپ و بازیابی آنلاین پشتیبانی قوی صنعتی فراهم می‌کند و تحمل خطای نرم‌افزار خوب در خطای دیسک دارد.

کارایی:

سرعت یک اپلیکیشن و پایگاه داده Oracle تنظیم‌شده حتی در پایگاه داده‌های بزرگ کاملا خوب است. Oracle اشاره به پایگاه داده‌های بزرگ‌تر از 100 GB دارد. کارایی همچنین شامل در نظر گرفتن کارایی با قفل‌کردن (locking) و کنترل تراکنش است.

پشتیبانی از چند پایگاه داده:

Oracle یک توانایی برتر برای مدیریت چند پایگاه داده در یک تراکنش (transaction) با استفاده از یک پروتکل خاتمه (commit) دو مرحله‌ای (دو فازی) دارد. نسبتا آسان می‌توانید داده‌ها را جایی که واقعا ذخیره شده‌اند از گره‌ای به گره دیگر در یک شبکه انتقال دهید و کپی از داده‌ها (data mirroring) – که برای اطمینان از ادامه دسترس‌پذیری داده‌ها و پرهیز یا کاهش downtime استفاده می‌شود – داشته باشید، که بهینه‌سازی مکان داده‌ها را آسان می‌کند. این به راحتی با نرم‌افزارهای دیگر یا نسخه‌های قدیمی Oracle قابل انجام نیست، اینکه شما قادر نیستید تا بیش از یک پایگاه داده را در یک تراکنش (transaction) با هر قابلیت اطمینانی بروزرسانی کنید. یعنی شما نمی‌توانید بدون کدنویسی دوباره برنامه خود، داده‌ها را در اطراف منتقل کنید.

مدیریت خودکار ذخیره‌سازی Automatic Storage Management (ASM) در پایگاه داده Oracle

ASM یک مدیر دیسک و سیستم فایل پایگاه داده یکپارچه و با کارایی بالا است. ASM بر این اصل است که پایگاه داده باید ذخیره‌سازی را مدیریت کند به جای اینکه نیاز باشد تا یک مدیر این کار را انجام دهد. ASM نیاز به اینکه شما مستقیما هزاران فایل پایگاه داده بالقوه Oracle را مدیریت کنید حذف می‌کند.

ASM دیسک‌های موجود در سیستم ذخیره‌سازی شما را به یک یا چند گروه دیسک، گروه‌بندی می‌کند. شما یک مجموعه کوچک از گروه‌های دیسک را مدیریت می‌کنید و ASM قرار دادن فایل‌های پایگاه داده را در داخل آن گروه‌های دیسک خودکار می‌کند.

ASM مزایای زیر را فراهم می‌کند:

خط‌کشی‌کردن (Striping): ASM داده‌ها را به طور مساوی در سراسر تمام دیسک‌ها در یک گروه دیسک پخش می‌کند تا کارایی و بهره‌برداری را بهینه کند. این توزیع مساوی فایل‌های پایگاه داده، نیاز برای نظارت مداوم و تنظیم کارایی I/O را حذف می‌کند.

برای مثال، اگر 6 دیسک در یک گروه دیسک وجود داشته باشد، قطعات هر فایل ASM روی تمام 6 دیسک نوشته می‌شود. این قطعات در تکه‌های 1 MB ـی به نام extents (حوزه) شناخته می‌شوند. وقتی یک فایل پایگاه داده ساخته می‌شود، در سراسر 6 دیسک، خط‌کشی می‌شود (به extentها تقسیم شده و توزیع می‌شود) و فضای دیسک تخصیص‌داده‌شده روی تمام 6 دیسک به طور مساوی افزایش می‌یابد. وقتی یک فایل خوانده‌می‌شود، extentهای فایل از روی تمام 6 دیسک به طور موازی خوانده می‌شود که تا حد زیادی کارایی را افزایش می‌دهد.

بازتاب‌سازی (Mirroring): ASM می‌تواند دسترس‌پذیری را به وسیله mirrorسازی اختیاری هر فایل، افزایش دهد. ASM در سطح فایل mirror می‌کند، بر خلاف mirrorسازی سیستم عامل که در سطح دیسک mirror می‌کند. Mirrorسازی یعنی نگهداری کپی‌های اضافی، یا کپی‌های بازتاب‌شده (mirrored copies) از هر extent از فایل، تا به اجتناب از از دست دادن داده‌ها به دلیل خرابی دیسک کمک کند. کپی بازتاب‌شده از هر extent فایل همیشه روی یک دیسک متفاوت از دیسک کپی اصلی نگهداری می‌شود. اگر یک دیسک خراب شود، ASM می‌تواند به دسترسی به فایل‌های آسیب‌دیده به وسیله دسترسی به کپی‌های mirrorشده روی دیسک‌های باقی‌مانده (زنده) در گروه دیسک ادامه دهد.

ASM از mirrorسازی 2 طرفه که در آن از هر extent فایل یک کپی mirrorشده گرفته می‌شود و mirrorسازی 3 طرفه که در آن از هر extent فایل دو کپی mirrorشده گرفته می‌شود پشتیبانی می‌کند.

تعادل‌سازی دوباره پویا و پیکربندی دوباره ذخیره‌سازی آنلاین

(Online storage reconfiguration and dynamic rebalancing):

ASM به شما اجازه می‌دهد تا دیسک‌ها را از سیستم ذخیره‌سازی دیسک خود، در حالی که پایگاه داده در حال انجام عملیات است، اضافه یا حذف کنید. وقتی شما یک دیسک اضافه می‌کنید، ASM به طور خودکار داده‌ها را دوباره توزیع می‌کند طوری که به طور مساوی در سراسر تمام دیسک‌ها در گروه‌های دیسک پخش می‌کند، همچنین شامل دیسک جدید. این توزیع دوباره به عنوان تعادل‌سازی دوباره (Rebalancing) شناخته می‌شود. این در پس‌زمینه و با کم‌ترین تاثیر روی کارایی پایگاه داده انجام می‌شود. وقتی شما درخواست حذف یک دیسک را می‌کنید، ASM ابتدا به وسیله جابه‌جایی مساوی تمام file extent ها از دیسکی که حذف شده است به دیگر دیسک‌ها در گروه دیسک، بالانس مجدد انجام می‌دهد.

حذف و ایجاد فایل مدیریت‌شده: ASM همچنین وظایف مدیریت را کاهش می‌دهد به این صورت که فایل‌های ذخیره‌شده در گروه‌های دیسک ASM را قادر می‌سازد تا فایل‌های مدیریت‌شده توسط Oracle باشند. ASM وقتی فایل‌ها ایجاد می‌شوند به طور خودکار به آن‌ها نام اختصاص می‌دهد و به طور خودکار وقتی دیگر نیاز به آن‌ها نباشد، فایل‌ها را پاک می‌کند.

Oracle پیشنهاد می‌کند که به جای استفاده از دستگاه‌های خام یا فایل سیستم سیستم عامل، از ASM برای ذخیره‌سازی فایل پایگاه داده خود استفاده کنید. اگر چه پایگاه داده‌ها می‌تواند ترکیبی از فایل‌های ASM و غیر ASM داشته باشند. Oracle Enterprise Manager شامل یک Wizard است که شما را قادر می‌سازد تا از فایل‌های پایگاه داده غیر ASM به ASM مهاجرت کنید.

نمونه ASM (ASM Instance):

ASM به عنوان یک نوع خاص از نمونه Oracle پیاده‌سازی شده است، با ناحیه سراسری سیستم خودش (System Global Area) و پردازش‌های پس‌زمینه. نمونه ASM شدیدا با نمونه پایگاه داده یک‌پارچه شده است. هر سروری که یک یا بیشتر نمونه پایگاه داده اجرا می‌کند که از ASM برای ذخیره‌سازی استفاده می‌کند، یک نمونه ASM دارد. در یک محیط کلاستر (گروه‌ها) اپلیکیشن واقعی، یک نمونه ASM برای هر گره وجود دارد و نمونه‌های ASM با یک‌دیگر به صورت نظیر به نظیر (peer-to-peer) ارتباط برقرار می‌کنند. تنها یک نمونه ASM برای هر گره نیاز است صرف نظر از تعداد نمونه‌های پایگاه داده روی گره.

مدیریت ASM:

شما با کنترل شبکه (Grid Control) یا کنترل پایگاه داده Oracle Enterprise Manager (Oracle Enterprise Manager Database Control)، ASM را مدیریت می‌کنید.

محدودیت‌های ذخیره‌سازی پایگاه داده Oracle:

ASM Oracle گنجایش تقریبا نامحدود برای رشد آینده فراهم می‌‌کند، اما دارای برخی محدودیت‌های ذخیره‌سازی است. Oracle ASM روی تعداد گروه‌های دیسک، دیسک‌ها و فایل‌ها محدودیت‌های زیر را دارد:

  • 511 گروه دیسک در یک سیستم ذخیره‌سازی برای Oracle Database نسخه 12 یا بالاتر

  • 10000 دیسک Oracle ASM در یک سیستم ذخیره‌سازی

  • 1 میلیون فایل برای هر گروه دیسک


 

دانلود پایگاه داده Oracle برای ویندوز

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

دانلود Oracle SQL Developer برای مدیریت پایگاه داده به صورت GUI یا DDL

http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index-097090.html

نظرات 0

ارسال نظر