اوراکل از نسخه 12cR2 قابلیت expression tracking را ارائه کرد که بر اساس آن، توابع(اعم از سیستمی و pl/sqlای)، عملگرهای محاسباتی و بصورت کلی عبارتهای استفاده شده در متن پرس و جو ها در دیتابیس ذخیره می شوند مسئولیت این کار بر عهده optimizer است و optimizer در زمان انجام عملیات hard pars، این عبارات را در مخزنی بنام (Expression Statistics Store(ESS قرار می دهد که از طریق ویوی دیتا دیکشنری DBA_EXPRESSION_STATISTICS می توان لیستی از این عبارتها را مشاهده کرد.
دستورات DDL و CONSTRAINT ها
در این فصل دستورات از نوع DDL(DATA DEFINITION LANGUAGE) معرفی می شوند. مفهوم OBJECT و برخی از نوع داده هایی که در دیتابیس اوراکل استفاده می شوند را توضیح می دهیم. همچنین انواع CONSTRAINTها توضیح داده می شوند و خطاهایی که با رعایت نکردن آنها رخ می دهند را معرفی می کنیم.
ویژگی In-Memory FastStart در اوراکل 12cR2
یکی از چالشهای قابلیت in-memory در نسخه 12cR1 به هزینه بر بودن load اولیه اطلاعات(در in-memory) بعد از restart شدن دیتابیس برمی گردد چرا که اطلاعات در دیسک به صورت row format ذخیره شده و در زمان بارگذاری باید به فرمت ستونی و (عمدتا) به شکل فشرده در حافظه(in-memory) قرار بگیرند که این کار می تواند مصرف بالای منابع(مخصوصا cpu) را به همراه داشته باشد.
اوراکل در نسخه 12cR2، برای حل این مسئله، قابلیت جدیدی به نام In-Memory FastStart را ارائه کرد که بر اساس آن، اطلاعات موجود در in-memory با همان فرمتی که در حافظه قرار دارند، در دیسک و در یک tablespace مجزا ذخیره می شوند.
دستورات DML و کنترل تراکنش ها
در این فصل انواع دستورات DML(Data Manipulation Language) توضیح داده می شوند. دستورهای INSERT، DELETE، UPDATE از نوع DML هستند که باعث می شوند اطلاعات جدول های دیتابیس تغییر یابند. همچنین در ادامه، روش کنترل تراکنش ها بر اساس مفهوم READ CONSISTENCY و عملیات COMMIT، ROLLBACK و SAVEPOINT توضیح داده می شوند.
زمانی که یک دستور از نوع DML اجرا می شود یکی از حالت های زیر رخ می دهد:
1.اطلاعات جدید به یک جدول اضافه می شوند(توسط دستور INSERT).
2.اطلاعات قبلی تغییر می کند(توسط دستور UPDATE).
3.اطلاعات قبلی حذف می شوند(توسط دستور DELETE).
نگاهی به استثنائاتی در مورد پارامترهای PGA
در مطلب “بررسی پارامترهای PGA” با پارامترهایی آشنا شدیم که قرار است محدودیتی را برای مصرف PGA در سطح پروسس و یا instance ایجاد کنند. در این مطلب خواهیم دید که در بعضی از شرایط مقدار در نظر گرفته شده برای پارامترهای pga_max_size، pga_aggrigate_target_ و حتی پارامتر PGA_AGGREGATE_LIMIT، نمی تواند PGA مصرف شده توسط پروسسها را محدود کند و پروسسها تا جایی که سرور و محدودیتهای سیستم عاملی اجازه می دهد، از RAM و SWAP استفاده می کنند.
به عنوان نمونه، مطابق با داکیومنتهای اوراکل، حداکثر PGA مورد استفاده یک پروسس توسط پارامتر مخفی pga_max_size_ کنترل می شود و علاوه بر این پارامتر، مقدار PGA استفاده شده برای یک پروسس به تنهایی نمی تواند بزرگتر از مقدار تنظیم شده برای پارامتر pga_aggrigate_target باشد.
بررسی پارامترهای رسمی و مخفی مربوط به PGA
همانطور که می دانید PGA متشکل از قسمتهای مختلفی می باشد که میزان استفاده هر پروسس از هر کدام از این قسمتها را می توان با کمک پارامترهای نظیر sort_area_size، hash_area_size، bitmap_merge_area_size و… کنترل کرد.
با این حال از اوراکل 9i، پارامتر دیگری به نام PGA_AGGREGATE_TARGET اضافه شد که با مقداردهی آن، اندازه هر یک از قسمتهای PGA توسط خود اوراکل مدیریت می شود.
اوراکل تلاش می کند مجموع فضای PGA تخصیص داده شده(pga1+pga2+pga3+…) به پروسسها را به مقدار در نظر گرفته شده برای پارامتر PGA_AGGREGATE_TARGET محدود کند اما در مواقعی، به خصوص در زمان بالا رفتن بارکاری سیستم و یا پایین بودن مقدار پارامتر PGA_AGGREGATE_TARGET، ممکن است مجموع فضای PGA تخصیص داده شده، از مقدار تنظیم شده برای این پارامتر بیشتر شود.
از این رو، مقدار تعیین شده برای پارامتر PGA_AGGREGATE_TARGET صرفا به عنوان یک soft limit در نظر گرفته خواهد شد و حتی در شرایطی ممکن است فضای PGA تخصیص داده شده به یک پروسس، از مقدار تنظیم شده برای این پارامتر تجاوز کند!(مطلب “نگاهی به استثنائاتی در مورد پارامترهای PGA” را مطالعه کنید)
توضیحی در مورد خطای bash- Argument list too long
خطای Argument list too long یکی از خطاهای رایج در محیط لینوکس می باشد که معمولا در زمان کار با تعداد زیادی از فایل در یک دایرکتوری رخ می دهد:
[root@LinuxHost mydir]# rm –rf *.html
-bash: /bin/rm: Argument list too long
[root@LinuxHost mydir]# cp * /dir1
-bash: /usr/bin/cp: Argument list too long
[root@LinuxHost mydir]# ls -l *
-bash: /usr/bin/ls: Argument list too long
همانطور که از متن خطا مشخص است، تعداد آرگومانهای دستور(که به جای علامت ستاره قرار می گیرند)، از حد مشخصی بیشتر است.
ls -l file1 file2 file3 … fileN
توضیح آنکه، به صورت پیش فرض، حداکثر طول آرگومانهای یک دستور در محیط لینوکس، برابر با مقدار ARG_MAX می باشد:
[root@LinuxHost ~]# getconf ARG_MAX
2097152
عملگرهای SET در SQL
در دستورات SQL عملگرهای SET سطرهای چندین دستور SELECT را ترکیب کرده و ترتیب نمایش آنها را مشخص می کند. در این متن انواع روش های استفاده از عملگرهای SET توضیح داده می شود.
دستوراتی که در آنها از عملگر SET استفاده می شوند COMPOUND QUERY نام دارند. اولویت اجرای تمام روش های عملگر SET یکسان است. اگر در یک دستور SQL از چند عملگر SET استفاده شود ترتیب اجرای آنها از سمت چپ به راست خواهد بود مگر اینکه از علامت پرانتز استفاده شده باشد.
پیدا کردن مقادیر متناظر bind variableها برای یک sql_id مشخص
قبلا در مقاله ای در مورد cursor sharing و bind variable مطالبی را ارائه کردیم و فواید و مخاطرات استفاده از bind variable را توضیح دادیم.
همانطور که در آن مطلب اشاره شد، زمانی که پارامتر cursor_sharing به مقدار exact تنظیم شده و در کنار آن از bind variable هم استفاده نشده باشد، با کمترین تغییر در متن دستور(به طور مثال تغییر مقدار id از 10 به 11)، برای اجرای بعدی آن، نیاز به پارس مجدد خواهیم داشت. این مسئله می تواند کندی اجرای دستور و یا حتی در مواردی کندی کلی دیتابیس را به همراه داشته باشد.
برای مثال، در شرایط گفته شده، با اجرای متوالی دو دستور زیر، دو بار عملیات پارس انجام خواهد شد:
delete mytbl where file#=1 and ts#=0;
delete mytbl where file#=1 and ts#=2;
در صورتی که با تبدیل آن به فرم زیر، دستورات با یک بار پارس شدن اجرا می شوند:
delete mytbl where file#=:B1 and ts#=:B2;
SUBQUERY در SQL
گاهی اوقات لازم است یک دستور SQL طوری نوشته شود که در داخل آن دستورات SQLای دیگری قرار بگیرند و با اجرای دستورات درونی، نتیجه لازم به دستور اصلی برگردد. در این حالت دستور اول Main Query نام دارد و دستورات داخلی را SUBQUERY می نامند.هر SUBQUERY نتیجه لازم را برای Main Query ارسال می کند.
در این متن روش های مختلف استفاده از SUBQUERY در دستورات SQL توضیح داده می شود.