اسامی کتابهایی که در ادامه خواهند امد، در کانال تلگرامی ORACLEDB@ موجود و قابل دانلود هستند.
ممانعت از ثبت پیام در alert log
در صورتی که به هر دلیلی به این نتیجه رسیده باشید که از ثبت پیامهای اوراکل در فایل alert log جلوگیری کنید(در محیط لینوکس)، می توانید این کار را به سادگی و با ایجاد یک soft link بر روی این فایل انجام دهید. برای انجام این کار، ابتدا فایل alert log را حذف می کنیم:
[root@hkm4 ~]# cd /u01/oracle/diag/rdbms/db11g/db11g/trace/
[root@hkm4 trace]# rm -rf alert_db11g.log
بلافاصله و قبل از ایجاد مجدد این فایل توسط بانک، soft linkای را از این فایل به /dev/null/ ایجاد می کنیم:
[root@hkm4 trace]# ln -s /dev/null alert_db11g.log
[root@hkm4 trace]# ls -l
lrwxrwxrwx 1 root root 9 Mar 14 11:58 alert_db11g.log -> /dev/null
با این کار، از ثبت هرگونه پیام در فایل alert log جلوگیری خواهیم کرد. همچنین برای حذف این soft link، باید از دستور زیر استفاده کرد:
[root@hkm4 trace]# unlink alert_db11g.log
اختصاص فضا به جدول از یک دیتافایل مشخص
معمولا در هنگام ایجاد یک جدول، حداکثر به تعیین tablespaceای که قرار است جدول در ان قرار بگیرد بسنده می شود ولی در موارد نادری ممکن است نیاز باشد تا تعیین شود که جدول در کدام دیتافایل یا دیتافایلها ذخیره شود و در هر کدام به چه اندازه امکان تخصیص فضا را دارد.
این کار در زمان ساخت جدول و یا بعد از ایجاد آن هم ممکن است. برای مثال با اجرای دستور زیر، جدول tbl1 حداکثر می تواند به اندازه 5 مگابایت از دیتافایل test2.dbf را مصرف کند:
alter table tbl1 ALLOCATE EXTENT(DATAFILE ‘/acfs/test2.dbf’ size 5m);
تنظیم پارامترها در سطح پرس و جو از طریق هینت OPT_PARAM
همانطور که می دانید بعضی از پارامترها قابلیت تغییر در سطح session را دارند و برای تغییر این پارامترها می توان از دستور alter session استفاده کرد:
alter session set parameter_name=value;
حال ممکن است نیاز باشد بعضی از این پارامترها را صرفا در سطح یک دستور خاص تغییر داد نه در سطح کل session.
برای این کار می توان از هینتی به نام OPT_PARAM استفاده کرد که ساختار ان به صورت زیر می باشد:
opt_param(<parameter_name> [,] <parameter_value>)
برای مثال، در پرس و جوی زیر، پارامتر optimizer_features_enable را به مقدار 11.2.0.4 تغییر می دهیم:
select /*+ opt_param(‘optimizer_features_enable’,’11.2.0.4′)*/ * from tbl1;
نکته: البته این هینت همه پارامترها را پشتیبانی نمی کند. نمونه هایی که از پارامترهایی که توسط این هینت پشتیبانی می شوند:
optimizer_index_caching
optimizer_index_cost_adj
hash_join_enabled
optimizer_dynamic_sampling
optimixer_features_enable
optimizer_mode
optimizer_secure_view_merging
star_transformation_enabled
بسته DBMS_TNS
این بسته که از اوراکل 12cR2 ارائه شد، تابعی به نام RESOLVE_TNSNAME را در خود دارد که از طریق ان می توان به متن هر کدام از net service nameهای موجود در فایل tnsnames.ora دسترسی پیدا کرد.
گزینه ALTERNATE در پارامتر log_archive_dest_n
همانطور که می دانید در صورت پر شدن فضای مربوط به ارشیولاگها، بانک اطلاعاتی در حالت انتظار قرار خواهد گرفت و تا زمان برطرف شدن این مشکل، دیتابیس امکان ایجاد redo را نخواهد داشت.
حال زمانی را فرض کنید که دو دیسک بلاستفاده با فضای تقریبا محدود در سرور موجود هستند و شما قصد دارید هر دو این فضاها را برای ذخیره سازی ارشیولاگها استفاده کنید به این صورت که در ابتدا ارشیو در یکی از این مسیرها قرار بگیرد و در صورت پر شدن، به مسیر دوم سوییچ کند.
برای این کار می توان از گزینهALTERNATE در پارامتر log_archive_dest استفاده کرد.
نمایش username و instance_name در sqlplus
برای نمایش username و instance_name در محیط sqlplus باید دستور زیر را در این محیط اجرا کرد:
SET SQLPROMPT “_USER @ _CONNECT_IDENTIFIER> “
SYS @ stb1>
این تنظیم با خروج از محیط sqlplus از بین خواهد رفت برای اعمال پایدار این قبیل تنظیمات، باید دستور را به فایل glogin.sql اضافه کرد:
vi /oracle/11g/sqlplus/admin/glogin.sql
SET SQLPROMPT “_USER @ _CONNECT_IDENTIFIER> “
کاراکتر Sqlprefix در sqlplus
فرض کنید در حال نوشتن پرس و جویی طولانی در محیط sqlplus هستیم، در همین حال اسامی فیلدهای جداول را به صورت دقیق بخاطر نداریم، در این صورت ممکن از ادامه نوشتن این پرس و جو منصرف شویم تا اسامی ستونهای جدول را مورد بازبینی قرار دهیم(describe)!!!
روش بهتری هم برای یافتن اسامی ستونهای جدول در حین اجرای این پرس و جو وجود دارد که ان هم استفاده از sqlprefix می باشد. منظور از Sqlprefix کاراکتری است که اجازه اجرای دستوری را در حین نوشتن پرس و جو ممکن می سازد.
افزودن کامنت در زمان تغییر مقدار یک پارامتر
در زمان تغییر مقدار یک پارامتر، می توان در انتهای دستور(alter system)، توضیحی را اضافه نمود. برای مثال، در دستور زیر، مقدار پارامتر open_cursors را به عدد 800 تغییر داده و توضیح می دهیم که مقدار قبلی ان چه عددی بوده است:
SQL> alter system set open_cursors=800 comment=’old value is 300′;
System altered.
برای مشاهده این توضیحات، می توان به ویوی v$parameter رجوع کرد:
select name,value, update_comment from v$parameter where name =’open_cursors’;
NAME VALUE UPDATE_COMMENT
——————— ———— ———————
open_cursors 800 old value is 300
متغیر TWO_TASK
برای اتصال از راه دور به یک بانک اطلاعاتی در محیط sqlplus، معمولا از فرمت زیر استفاده می شود:
[oracle@ol7 ~]$ sqlplus usef/abc@pdb1
با این توضیح که منظور از pdb1 همان net service nameای است که در فایل tnsnames.ora تعریف شده است:
pdb1=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ol7)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)))
در این زمینه متغیری به نام TWO_TASK هم وجود دارد که طریق دیگری را برای اتصال از راه دور ممکن می سازد به این صورت که با تنظیم این متغیر به نام یک net service name دلخواه، دیگر از متغیر ORACLE_SID که سبب اتصال به instance محلی(local) می شد، استفاده نخواهد شد و به عبارتی دیگر، این متغیر در صورت استفاده، بر متغیر ORACLE_SID ارجحیت دارد.
مثال زیر را ببینید:
[oracle@ol7 ~]$ export TWO_TASK=pdb1
[oracle@ol7 ~]$ echo $ORACLE_SID
db
در چنین شرایطی، استفاده از دستور sqlplus سبب اتصال به محیط pdb1 خواهد شد البته به شرط وارد کردن نام کاربری و رمز صحیح:
[oracle@ol7 ~]$ sqlplus usef/abc
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production
SQL>
همچنین دستور زیر نشان می دهد که این اتصال به صورت LOCAL برقرار نشده است:
[root@ol7 ~]# ps -eaf |grep LOCAL
oracle 14499 1 0 12:23 ? 00:00:00 oracledb (LOCAL=NO)
یکی از موارد کاربرد این متغیر به هنگام استفاده از pluggable database و اتصال به یک pdb مشخص برمی گردد. همچنین در صورت استفاده از سیستم عامل ویندوز، باید به جای تنظیم متغیر TWO_TASK از متغیر LOCAL استفاده شود.