مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۳ دقیقه·۲ سال پیش

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



مقدمه:

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

خدمات اوراکلپایگاه داده اوراکلآموزش اوراکلoracle database 21coracle database
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید