مقدمه:
یکی از امکانات جدید که در اوراکل نسخه 21C معرفی شده ، امکان استفاده از عبارت های محاسباتی در پارامتر های مقدار دهی اولیه (initialization parameter) می باشد. این عبارت های محاسباتی می توانند بر مبنا دیگر پارامتر ها باشد.
در این مستند به این موضوع می پردازیم، استفاده از عبارت های محاسباتی در پارامتر های اولیه در پایگاه داده اوراکل 21C
ارجاع پارامترها:
به عنوان نمونه ما دو پارامتر JOB_QUEUE_PROCESSES و PROCESSES در زیر مشاهده می کنیم.یکی مقدار 80 و دیگر مقدار 400 را دارد.
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 80
log_archive_max_processes integer 4
processes integer 400
SQL>
می خواهیم مقدار پارامتر 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_processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 40
SQL>
در ادامه یک 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 bytes
Fixed Size 9702824 bytes
Variable Size 2147483648 bytes
Database Buffers 1.2314E+10 bytes
Redo Buffers 23851008 bytes
Database mounted.
Database opened.
SQL> show parameter job_queue_processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 60
SQL>
ارجاع به متغیرهای محیطی:
مقدار متغیر ORACLE_BASE را مشاهده می کنید.
SQL> host echo $ORACLE_BASE
/u01/app/oracle
SQL>
حال مقدار پارامتر AUDIT_FILE_DEST را در نظر بگیرید.
SQL> show parameter audit_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/cdb1_lhr
12p/adump
SQL>
حال مقدار آن را با متغیر محیطی ORACLE_BASE ترکیب می کنیم.
SQL> show parameter audit_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/cdb1_lhr
12p/adump
SQL>
مجدد 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/oracle
SQL> startup;
ORACLE instance started.
Total System Global Area 1.4496E+10 bytes
Fixed Size 9702624 bytes
Variable Size 2147483648 bytes
Database Buffers 1.2314E+10 bytes
Redo Buffers 23851008 bytes
Database mounted.
Database opened.
SQL>
مواردی که باید در نظر گرفت :
· موقعی که از دستورات ALTER SYSTEM و یا ALTER SESSION استفاده می کنیم مقدار عبارت محاسبات را باید در Single Quotes (‘) قرار دهیم.
· در مواقعی که از توابع MIN و یا MAX استفاده میکنیم دو مقدار اعلام می گردد. در تابع MIN از بین دومقدار، سقف مشخص می شود. مثال حداکثر مقدار 10 باشد و یا اگر کمتر باشد. در تابع MAX مقدار کف در نظر گرفته می شود. مثال از 10 کمتر نشود یا بیشتر شود.
· مقدار متغیر های محیطی حتما قبل از راه اندازی Instance باید مقدار دهی شده باشند ( مانند مثالی که بررسی شد )
· عبارت محاسباتی در pfile و spfile قابل استفاده می باشند.