مقدمه:

یکی از امکانات جدید که در اوراکل نسخه 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 قابل استفاده می باشند.