در این فصل انواع LOOP یا حلقه در PL/SQL را بررسی می کنیم. ممکن است در یک برنامه نیاز باشد یک بلاک از کد چندین مرتبه اجرا شود در این مواقع از حلقه استفاده می شود.
نگاهی به تغییرات و بهبودهای تابع LISTAGG در اوراکل 18c ، 12cR2و 19c
در این متن به تغییرات و بهبودهای تابع LISTAGG در اوراکل 12cR2، 18c و 19c می پردازیم این تابع در نسخه 11gR2 ارائه شد.
آموزش اوراکل PL/SQL قسمت چهارم -دستورات شرطی
گاهی اوقات نیاز است یک یا چند شرط بررسی شوند تا عملیات برنامه بر اساس آن شرط ها انجام گیرند. در شکل زیر ساختار کلی دستورات شرطی را مشاهده می کنید این دستورات برای تغییر روند کنترلی اجرای دستورات برنامه استفاده می شود.
ارتقا نسخه Grid Infrastructure به 19.8 با اعمال Patch و بدون Downtime در سطح دیتابیس(در محیط کلاستر)
از اوراکل 19.6RU، می توان بدون Downtime در سطح دیتابیس، عملیات Patching را بر روی Grid Infrastructure انجام داد. از اینرو قصد داریم patch شماره 31305339 که مربوط به GI Release Update 19.8 می باشد را بر روی Grid Infrastructure نسخه 19.6 اعمال کنیم(در محیط کلاستر).
به صورت کلی می توان این عملیات را در دو مرحله زیر خلاصه کرد:
1.نصب گرید 19cR3 به صورت Software only و اعمال پچ 19.8RU بر روی آن
2.سوییچ بین grid 19.6 و grid 19.8 با اجرای دستور gridSetup.sh به همراه پارامتر SwitchGridhome
در ادامه متن، نحوه انجام این عملیات را تشریح خواهیم کرد.
مراحل Relink کردن Grid Infrastructure در محیط Cluster
انجام عملیات Relink برای نرم افزار oracle نیاز به پیش نیاز خاصی ندارد و صرفا توصیه می شود که قبل از انجام relink، دیتابیس و سرویس listener را استاپ کنیم اما relink کردن برای Grid Infrastructure کمی متفاوت است که در این متن مراحل آن را برای محیط Cluster مشاهده می کنید.
توجه: این متن برای اوراکل نسخه 12cR2 به بعد قابل استفاده می باشد.
اضافه کردن نود به RAC 18c
کلاستری با سه نود در حال سرویس دهی می باشد که به دلایل پرفورمنسی قصد داریم نود دیگری را به این کلاستر اضافه کنیم:
[grid@RAC2 ~]$ olsnodes -s -t
RAC2 Active Unpinned
RAC1 Active Unpinned
RAC4 Active Unpinned
[oracle@RAC2 ~]$ srvctl status database -d db18c
Instance db18c1 is running on node RAC2
Instance db18c3 is running on node RAC1
Instance db18c4 is running on node RAC4
همانطور که در خروجی دستور مشاهده می کنید، سه نود با نامهای RAC1,RAC2,RAC4 در کلاستر موجود هستند و قصد داریم نود RAC3 را به این مجموعه اضافه کنیم.
حذف نود در محیط کلاستر(اوراکل 18c,19c)
در این متن قصد داریم نودی(RAC3) را از یک کلاستر چهار نوده حذف کنیم. خصوصیات کلاستر را در قسمت زیر مشاهده می کنید:
[grid@RAC3 ~]$ srvctl config database -d db18c
Type: RAC
Database instances: db18c1,db18c2,db18c3,db18c4
Configured nodes: RAC2,RAC3,RAC1,RAC4
[oracle@RAC3 ~]$ srvctl status database -d db18c
Instance db18c1 is running on node RAC2
Instance db18c2 is running on node RAC3
Instance db18c3 is running on node RAC1
Instance db18c4 is running on node RAC4
قبل از وارد شدن به مراحل حذف RAC3، مهمترین قدمهای حذف یک نود در محیط کلاستر را مرور می کنیم:
1.متوقف کردن سرویس(database و asm) و حذف آنها در نود مورد نظر
2.حذف نرم افزار اوراکل
3.حذف نرم افزار grid
4.بروزرسانی oraInventory
در ادامه با جزییات بیشتری و در طی پنج مرحله عملیات حذف نود را شرح خواهیم داد.
انجام query rewrite با استفاده از DBMS_ADVANCED_REWRITE
فرض کنید پرس و جوی زیر یکی از پرس و جوهای پراستفاده برنامه می باشد که به دلیل عدم دسترسی به سورس کد برنامه امکان تغییر متن آن وجود ندارد:
SQL> select /*+INDEX(tbl1,IND_CODE)*/ count(*) from tbl1 where code=2 ;
COUNT(*)
———-
51199980
Elapsed: 00:00:05.23
همانطور که می بینید، این پرس و جو حدودا در زمان 4 ثانیه اجرا شده است با برداشتن HINTای که در این پرس و جو موجود است، آن را مجددا اجرا می کنیم:
SQL> select count(*) from tbl1 where code=2 ;
COUNT(*)
———-
51199980
Elapsed: 00:00:01.60
مشاهده می کنید که زمان اجرای پرس و جو با برداشتن HINT از 5 ثانیه به 1 ثانیه کاهش پیدا کرده است قصد داریم با هر بار اجرای پرس و جوی اول، دیتابیس به صورت خودکار پرس و جوی دوم(که فاقد HINT است) را اجرا کند به عبارتی دیگر، دیتابیس در پس زمینه query rewrite را انجام دهد.
استفاده از قابلیت flashback query برای برگرداندن تغییرات متن پکیج، پروسیجر و فانکشن
همانطور که می دانید، با شروع یک تراکنش، undo segmentای هم به آن اختصاص داده می شود تا اطلاعاتی که تراکنش در حال کار با ان است را در خود جای دهد به طور مثال، قبل از حذف یک رکورد در یک تراکنش، اطلاعات آن رکورد در undo segment نوشته خواهد شد.
هدف از این مسئله به پشتیبانی اوراکل از قابلیتهایی چون read consistency، rollback operation و انواع مختلف flashbackها در دیتابیس بر می گردد که البته در مورد هر کدام از این قابلیتها، قبلا مطالبی را ارائه کردیم و در این مطلب صرفا به بررسی نکته ای در مورد flashback query خواهیم پرداخت.
ویووهای Dynamic Performance و Data Dictionary در دیتابیس اوراکل
view یکی از OBJECT های دیتابیس اوراکل است که روش ساخت و استفاده از آن را در متن “VIEW در دیتابیس اوراکل” توضیح دادیم. دو دسته ویوو در دیتابیس اوراکل وجود دارد که بعد از ایجاد دیتابیس به صورت اتوماتیک ساخته می شوند و با استفاده از PUBLIC SYNONYM در اختیار کاربران دیتابیس قرار می گیرند.
این ویووها که به صورت دائمی توسط دیتابیس اوراکل بروزرسانی می شوند شامل اطلاعات کلی OBJECTها و اجزای دیتابیس هستند.
یک دسته از این ویووها Dynamic Performance است که نام آنها معمولا با $V یا $GV شروع می شود. دسته دیگر ویووهای دیتادیکشنری (Data Dictionary) هستند.
در ادامه تفاوت این دو دسته از viewها را توضیح می دهیم.