استفاده از قابلیت 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ها را توضیح می دهیم.

(بیشتر…)

اجرای دستورات DDLای از طریق DBLINK

برای اجرای دستورات DDLای از طریق Database Link می توان از پروسیجر dbms_utility.exec_ddl_statement استفاده کرد. مثالهای زیر را ببینید:

مثال 1:

SQL> exec dbms_utility.exec_ddl_statement@dblink(‘drop table EXCHTBL2’);

PL/SQL procedure successfully completed

 

SQL> exec dbms_utility.exec_ddl_statement@dblink(‘drop table EXCHTBL2’);

ORA-00942: table or view does not exist

مثال 2:

SQL> declare

  2  stmt varchar2(4000);

  3  begin

  4  stmt:=’create user ali identified by a’;

  5  execute immediate ‘begin dbms_utility.exec_ddl_statement@dblink(:stmt);end;’ using stmt;

  6  end;

  7  /

PL/SQL procedure successfully completed

 

SQL> /

ORA-01920: user name ‘ALI’ conflicts with another user or role name

مستثنی کردن اطلاعات ستونهای از نوع LOB در دیتاپامپ

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

راهکار چیست؟

مستثنی کردن اطلاعات ستونهای از نوع LOB در زمان انجام عملیات export از اوراکل نسخه 12c به راحتی قابل کنترل است این کار با ایجاد ویو و استفاده از پارامتر views_as_tables قابل انجام است اما برای برگرداندن دامپ حاوی اطلاعات LOB، نمی توان از این راهکار استفاده کرد و در این صورت استفاده از پارامتر REMAP_DATA راهگشا خواهد بود.

(بیشتر…)

آموزش اوراکل PL/SQL قسمت سوم – عملگرهای PL/SQL

کامپایلر زبان PL/SQL با توجه به نوع عملگر استفاده شده در برنامه، عملیات خاصی را بر روی داده ها انجام می دهد. عملگرها به 5 دسته تقسیم می شوند که در ادامه هر کدام را با مثال توضیح می دهیم.

1.عملگرهای ریاضی

2.عملگرهای رابطه ای

3.عملگرهای مقایسه ای

4.عملگرهای منطقی

5.عملگرهای رشته ای

(بیشتر…)

پارامتر MAX_IDLE_BLOCKER_TIME در اوراکل 19c

با تنظیم پارامتر MAX_IDLE_BLOCKER_TIME می توان sessionای که رکورد(به صورت کلی منبعی را) در اختیار گرفته و در پی آن منجر به block شدن session دیگری شده است را بعد از مدتی زمان مشخصی، kill کرد البته با این شرط که این session(ه blocker) در این مدت زمان، idle باشد.

برای مثال، با اجرای دستور زیر، blocker بعد از آنکه به مدت یک دقیقه در وضعیت idle قرار بگیرد، kill خواهد شد.

(بیشتر…)

Update بخشی از اطلاعات JSON با کمک تابع JSON_MERGEPATCH – اوراکل 19c

قصد داریم در جدول MYTBL، بخشی از اطلاعات ستون ettelaat که از نوع JSON می باشد را update کنیم به این صورت که مقدار داده first_name، برای id شماره 1، از Vahid به RamTollah تغییر کند:

SQL> select id,ettelaat from mytbl d where id=1;

        ID ETTELAAT

———- ——————————

   1          {

               “first_name“:”Vahid“,

               “last_name“:”Usefzadeh“,

               “Salary“:”500000“,

               “phone“:”09128110000

               }

با انجام بروزرسانی به شیوه رایج در اوراکل، با خطا مواجه خواهیم شد:

SQL> update MYTBL  d set d.ettelaat.first_name =’RamTollah’ where  d.ettelaat.first_name=’Vahid’ and id=1;

ORA-40557: cannot update a JSON value

(بیشتر…)

آموزش اوراکل PL/SQL قسمت دوم – متغیر ، CONSTANT و LITERAL در PL/SQL

در زبان PL/SQL متغیر (VARIABLE) نامی است که به یک محل ذخیره سازی اختصاص می یابد و برنامه ها می توانند اطلاعات خود را در این محل ذخیره کنند. هر متغیر بر اساس یک نوع داده تعریف می شود. انواع نوع داده ها را در متن قبل توضیح دادیم. در واقع نوع داده برای یک متغیر موارد زیر را مشخص می کند.

1.سایز متغیر

2.قالب کلی متغیر

3.محدوده مقدارهایی که می توانیم در متغیر ذخیره کنیم.

4.عملیاتی که می توانیم روی آن متغیر انجام دهیم.

بنابراین به هر متغیر یک قسمت از فضای حافظه اختصاص می یابد و با استفاده از نام متغیر می توانیم به این فضا دسترسی داشته باشیم.

(بیشتر…)

مقایسه دو مقدار JSON به کمک تابع JSON_EQUAL – اوراکل 18c

اگر دو ستون حاوی اطلاعات JSON را با عملگرهای = و != با هم مقایسه کنیم، این مقایسه صرف نظر از محتوا و بر اساس فرمت اطلاعات انجام خواهد شد برای مثال اطلاعات JSON زیر، محتوای یکسانی دارند اما به دلیل خطوط فاصله بعد از فیلد last_name، فرمت یکسانی ندارند:

SQL>  select count(*)

  from dual

 where ‘{“first_name“:”vahid”,”last_name“:“usefzadeh”}’ =

            ‘{“first_name“:”vahid”,”last_name“:       “usefzadeh”}’;

  COUNT(*)

——–

     0

(بیشتر…)

JSON و دیتابیس اوراکل

از نسخه 12cR1، دیتابیس اوراکل از JSON پشتیبانی می کند به این معنی که با ارائه چندین تابع، امکان انجام عملیاتی چون اجرای query، ایجاد index و ایجاد view بر روی JSON Document را فراهم می سازد به طور مثال می توان با کمک این قابلیت، برای هر یک از فیلدهای موجود در JSON Document ایندکس گذاری کرد.

البته در این نسخه Data Type جدیدی برای JSON معرفی نشده و JSON Documentها باید در نوع داده VARCHAR2، CLOB و یا BLOB ذخیره شوند(نوع داده NCLOB و NVARCHAR2 را هم باید به این مجموعه اضافه کرد) که معمولا نوع داده BLOB برای این کار توصیه می شود.

توجه 1: برای کار با JSON در نسخه های قبلی اوراکل(مثل 11g) هم راهکارهای وجود دارد که یکی از این راهکارها نصب کامپوننت APEX و استفاده از APEX_JSON می باشد.

توجه 2: اوراکل در نسخه 20c نوع داده JSON را برای ذخیره JSON Documentها ارائه کرده است.

(بیشتر…)