استفاده از عبارت های محاسباتی در پارامتر های اولیه در پایگاه داده اوراکل 21C

مقدمه:یکی از امکانات جدید که در اوراکل نسخه 21C معرفی شده ، امکان استفاده از عبارت های محاسباتی در پارامتر های مقدار دهی اولیه (initialization parameter) می باشد. این عبارت های محاسباتی می توانند بر مبنا دیگر پارامتر ها باشد.در این مستند به این موضوع می پردازیم، استفاده از عبارت های محاسباتی در پارامتر های اولیه در پایگاه داده اوراکل 21Cارجاع پارامترها:به عنوان نمونه ما دو پارامتر JOB_QUEUE_PROCESSES و PROCESSES در زیر مشاهده می کنیم.یکی مقدار 80 و دیگر مقدار 400 را دارد.SQL> show parameter processesNAME TYPE VALUE------------------------------------ ----------- ------------------------------aq_tm_processes integer 1db_writer_processes integer 1gcs_server_processes integer 0global_txn_processes integer 1job_queue_processes integer 80log_archive_max_processes integer 4processes integer 400SQL>می خواهیم مقدار پارامتر JOB_QUEUE_PROCESSES را 1/10پارامتر PROCESSES. در این مورد ما از تابع MAX استفاده می کنیم برای اطمینان ازاینکه در هر شرایط مقدار پارامتر JOB_QUEUE_PROCESSES از 10 کمتر نشود.SQL> alter system set job_queue_processes='max(processes/10,10)';System altered.SQL>بار دیگر پارامتر را بررسی می کنیم تا مقدار جدید را مشاهده کنیم.SQL> show parameter job_queue_processesNAME TYPE VALUE------------------------------------ ----------- ------------------------------job_queue_processes integer 40SQL>در ادامه یک PFILE از روی SPFILE جاری می سازیمSQL> create pfile='/tmp/pfile.txt' from spfile;File created.SQL>مقدار پارامتر را در PFILE نیز بررسی می کنیم.SQL> host fgrep job_queue_processes /tmp/pfile.txt*.job_queue_processes=max(processes/10,10)SQL>همانطور که مشاهده می کنید مقدار جاری را که معادل 40 بود را نمایش نمی دهد و عبارت محاسباتی را که اعمال کرده بودیم نمایش داده می شود.درادامه برای بررسی بیشتر، مقدار پارامتر PROCESSES را تغییر می دهیم تا نتیجه را مشاهده کنیم.SQL> alter system set processes=600 scope=spfile;System altered.SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup;ORACLE instance started.Total System Global Area 1.4496E+10 bytesFixed Size 9702824 bytesVariable Size 2147483648 bytesDatabase Buffers 1.2314E+10 bytesRedo Buffers 23851008 bytesDatabase mounted.Database opened.SQL> show parameter job_queue_processesNAME TYPE VALUE------------------------------------ ----------- ------------------------------job_queue_processes integer 60SQL>ارجاع به متغیرهای محیطی:مقدار متغیر ORACLE_BASE را مشاهده می کنید.SQL> host echo $ORACLE_BASE/u01/app/oracleSQL>حال مقدار پارامتر AUDIT_FILE_DEST را در نظر بگیرید.SQL> show parameter audit_file_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------audit_file_dest string /u01/app/oracle/admin/cdb1_lhr12p/adumpSQL>حال مقدار آن را با متغیر محیطی ORACLE_BASE ترکیب می کنیم.SQL> show parameter audit_file_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------audit_file_dest string /u01/app/oracle/admin/cdb1_lhr12p/adumpSQL>مجدد PFILE را از SPFILE جاری می سازیمSQL> create pfile='/tmp/pfile.txt' from spfile;File created.SQL>در ادامه مقدار پارامتر AUDIT_FILE_DEST را بررسی می کنیم.SQL> host fgrep audit_file_dest /tmp/pfile.txt*.audit_file_dest='$ORACLE_BASE/admin/cdb1_lhr12p/adump'SQL>همانطور که مشاهده میکنید مقدار آن با متغییر محیطی که آن را تنظیم کرده بودیم نمایش داده می شود.حال برای بررسی بیشتر متغییر محیطی که قبلا تنظیم کرده بودیم را خالی میکنیم. در ادامه Instance را خاموش و مجدد راه اندازی میکنیم تا تغییرات را مشاهده کنیم.SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup;ORA-07217: sltln: environment variable cannot be evaluated.SQL>همانطور که مشاهده کردید چون متغییر محیطی دارای مقدار نبود، پارامتر هم نتوانست مقدار بگیرد و در مرحله راه اندازی دچار خطا شدیم.یکبار دیگه متغییر محیطی را مقدار دهی کرده و مجددا راه اندازی میکنیم. این بار خطا نخواهیم داشت.$ export ORACLE_BASE=/u01/app/oracleSQL> startup;ORACLE instance started.Total System Global Area 1.4496E+10 bytesFixed Size 9702624 bytesVariable Size 2147483648 bytesDatabase Buffers 1.2314E+10 bytesRedo Buffers 23851008 bytesDatabase mounted.Database opened.SQL>مواردی که باید در نظر گرفت :· موقعی که از دستورات ALTER SYSTEM و یا ALTER SESSION استفاده می کنیم مقدار عبارت محاسبات را باید در Single Quotes (‘) قرار دهیم.· در مواقعی که از توابع MIN و یا MAX استفاده میکنیم دو مقدار اعلام می گردد. در تابع MIN از بین دومقدار، سقف مشخص می شود. مثال حداکثر مقدار 10 باشد و یا اگر کمتر باشد. در تابع MAX مقدار کف در نظر گرفته می شود. مثال از 10 کمتر نشود یا بیشتر شود.· مقدار متغیر های محیطی حتما قبل از راه اندازی Instance باید مقدار دهی شده باشند ( مانند مثالی که بررسی شد )· عبارت محاسباتی در pfile و spfile قابل استفاده می باشند.