pin کردن object در shared pool

می دانیم که shared pool فرم پارس شده دستورات sql و pl/sql را در صورت دارا بودن فضای کافی در خود نگهداری می کند و نسخه قابل اجرای دستورات، در این قسمت از حافظه باقی خواهند ماند تا در صورت اجرای مکرر یک دستور، از کامپایل مجدد آن و یا به بیانی دقیق تر، از انجام عملیات hard pars جلوگیری شود.

فرض کنید به دلایلی چون عدم استفاده از bind variable در قسمتی از برنامه، فضای خالی ای در shared pool باقی نمانده است در این صورت، اوراکل فرمهای پارس شده را بر اساس الگوریتم LRU از حافظه خارج خواهد کرد این مسئله ممکن است سبب age out شدن objectهای سیستمی و یا applicationای شود که به کررات مورد دستیابی قرار می گیرند.

با در نظر داشتن این مسئله، قصد داریم به این سوال پاسخ دهیم که چگونه می توان این objectها را در shared pool سنجاق کرد تا الگوریتم LRU نتواند آنها را برای خروج از shared pool انتخاب کند.

(بیشتر…)

اوراکل 12c – جابجایی ترتیب قرارگیری ستونهای یک جدول

فرض کنید جدول mytbl را با دستور زیر ایجاد کرده ایم:

SQL> create table mytbl(id number,name varchar2(9),age number);

Table created

بعد از مدتی تصمیم گرفته ایم تا به این جدول، ستونی را با عنوان last_name اضافه کنیم:

SQL> ALTER TABLE mytbl ADD (last_name varchar2(9));

Table altered

ستون last_name  به لحاظ ترتیب قرار گیری بصورت پیش فرض، به عنوان آخرین ستون این جدول در انتهای لیست ستونها قرار می گیرد:

SQL> desc mytbl;

Name      Type        Nullable

——— ———– ——–

ID        NUMBER      Y                        

NAME      VARCHAR2(9) Y                        

AGE       NUMBER      Y                        

LAST_NAME VARCHAR2(9) Y 

قصد داریم ستونهای AGE و LAST_NAME را به لحاظ ترتیب منطقی قرارگیری در جدول با هم جابجا کنیم، برای این کار می توانیم از دستور ALTER TABLE .. MODIFY(COLUMN_NAME INVISIBLE) که در اوراکل 12c ارائه شد، استفاده کنیم. در قسمت زیر، نحوه انجام این کار را مشاهده می کنید:

SQL> ALTER TABLE mytbl MODIFY (LAST_NAME INVISIBLE,AGE INVISIBLE);

Table altered

SQL> ALTER TABLE mytbl MODIFY (LAST_NAME VISIBLE,AGE VISIBLE);

Table altered

SQL> desc mytbl;

Name      Type        Nullable Default Comments

——— ———– ——– ——- ——–

ID        NUMBER      Y                        

NAME      VARCHAR2(9) Y                        

LAST_NAME VARCHAR2(9) Y                        

AGE       NUMBER      Y    

(بیشتر…)

بهبودهای EZconnect در اوراکل 19c

زمانی که از پروتکل tcp/ip برای برقراری ارتباط با یک دیتابیس اوراکل استفاده می کنیم، اتصال به روش Easy Connect در مواردی می تواند جایگزین مناسبی برای فایل tnsnames.ora باشد. ساختار کلی Easy Connect تا قبل از اوراکل نسخه 19c، به صورت زیر می باشد:

host[:port][/service_name]

(بیشتر…)

اهدای مجوز insert و update در سطح ستون

مجوزهای insert و update را می توان در سطح ستونهای یک جدول به کاربران اهدا نمود.

دستور grant در مثال زیر، مجوز اجرای دستور update بر روی ستونهای name و last_name از جدول sys.mytbl را به کاربر usef اهدا می کند:

SQL> create table sys.mytbl(id number,name varchar2(9),last_name varchar2(9));

Table created

SQL> insert into sys.mytbl values(1,’vahid’,’usefzadeh’);

1 row inserted

SQL> commit;

Commit complete

SQL> grant update(name,last_name) on mytbl to usef;

Grant succeeded

(بیشتر…)

مثالی در مورد مفهوم read consistency

در زمان اجرای یک پرس و جوی زمانبر، ممکن است تغییراتی در جداول مرجع این پرس وجو اعمال شود در این صورت، سوالی مطرح می شود که آیا این پرس و جوی در حال اجرا، تغییرات جدید را هم در محاسباتش اعمال می کند یا خیر؟

پاسخ این سوال به نوع جداول و ویوهای مرجع پرس و جو بستگی دارد برای مثال، در زمان رجوع به dynamic performance viewها ممکن است تغییرات ایجاد شده در زمان اجرای پرس و جو لحاظ شود و نهایتا خروجی آن پرس و جو را تغییر دهد.

اما در زمان رجوع به جداولی که اطلاعات کاربران در آن ذخیره می شود، اوراکل با لحاظ کردن scn زمان اجرای پرس و جو(زمانی که پرس و جو شروع به اجرا می کند)، تغییرات جدید را در آن اعمال نخواهد کرد.

در صورتی که تغییرات جدید در محاسبات اعمال نشوند و اوراکل صرفا با کمک تصویر ثابتی که از اطلاعات جدول دارد، پرس و جو را اجرا کند، اصطلاحا مفهوم read consistency توسط اوراکل رعایت شده است.

(بیشتر…)

استفاده از DataBaseLink در ابزارهای expdp/impdp

گاهی بدلایل مختلف، مانند عدم فضای کافی یا عدم دسترسی مستقیم به سیستم عامل، امکان تهیه دامپ بر روی ماشین/سرور مبدا مهیا نمی باشد. در این مواقع datapump این امکان را فراهم نموده تا فایل دامپ را بر روی یک ماشین/سرور دیگر ایجاد کنیم یا اطلاعات را بدون ایجاد فایل دامپ، مستقیما بر روی بانک مقصد بارگذاری نماییم. برای این منظور از ارتباط database link بین دو بانک اطلاعاتی استفاده می شود.

(بیشتر…)

آشنایی با مفاهیم داده های بازگشتی و undo tablespace

زمانی که یک دستور dml ای اجرا می شود ، بانک اطلاعاتی داده ها را، قبل از آن که تغییری بر روی آنها اعمال شود، درundo segment ها که در فضای undo tablespace قرار دارند ذخیره می کند تا در صورت لزوم از آنها برای عملیات هایی مثل rollback کردن یک دستور dml ای و flashback در سطح جداول استفاده کند. به این داده ها ، داده های بازگشتی می گویند .

(بیشتر…)

مدیریت Tablespace Temporary

از این tablespace برای نگهداری موقت داده های بانک اطلاعاتی جهت انجام یک سری عملیات استفاده می شود . برای مثال  اوراکل در زمان مرتب سازی داده ها، ابتدا از فضای PGA که در ساختار RAM تشکیل شده است، استفاده می کند و در صورت نبود فضای کافی، به سراغ temporary tablespace خواهد رفت و از این قسمت به عنوان یک فضای کمکی برای PGA استفاده می کند.

(بیشتر…)

نمایش خروجی به فرمت csv در اوراکل 12c

در اوراکل 12cR2، قابلیت جدیدی برای نمایش خروجی پرس و جوها به فرمت csv ارائه شد. برای استفاده از این قابلیت، باید دستور SET MARKUP CSV ON را قبل از اجرای پروس وجو، اجرا نمود:

SQL> SET MARKUP CSV ON

SQL> select * from mytbl;

“ID”,”FNAME”,”LAST_NAM”

1,”ali”,”dai”

2,”mosen”,”bengar”

3,”parviz”,”mazloumi”

4,”payan”,”rafat”

همانطور که می بینید، جداکننده پیش فرض، کاما می باشد. برای تغییر جداکننده، باید از عبارت DELIMITER کمک گرفت:

SQL> SET MARKUP CSV ON DELIMITER #

SQL> select * from mytbl;

“ID”#”FNAME”#”LAST_NAM”

1#”ali”#”dai”

2#”mosen”#”bengar”

3#”parviz”#”mazloumi”

4#”payan”#”rafat”

برای عدم نمایش ” برای فیلدهای از نوع string، می توان دستور را به صورت زیر اجرا کرد:

SQL> SET MARKUP CSV ON QUOTE OFF

SQL> select * from mytbl;

ID#FNAME#LAST_NAM

1#ali#dai

2#mosen#bengar

3#parviz#mazloumi

4#payan#rafat

 

پاسخ به سوالات مقدماتی اوراکل – 1(مدیریت instance)

1.برای مدیریت instance از طریق ابزار sqlplus، تنظیم چه متغیرهایی ضروری می باشد؟

صرفا با تنظیم دو متغیر ORACLE_SID و ORACLE_HOME می توان وارد محیط sqlplus شد.

2.instance از چه زمانی استارت شده و در چه وضعیتی قرار دارد؟

SQL> select startup_time,status from v$instance;

3.با اجرای دستور startup، اوراکل در چه مسیری و با چه ترتیبی فایلهای راه انداز را جستجو می کند؟

مسیر پیش فرض فایلهای راه انداز:

$ORACLE_HOME/dbs

فایلها به ترتیب زیر جستجو خواهند شد(البته اگر فایلی یافت شود، فایل بعدی جستجو نخواهد شد):

spfile$ORACLE_SID.ora

spfile.ora

Init$ORACLE_SID.ora

4.برای استارت شدن instance، تنظیم چه پارامترهایی الزامیست؟

صرفا با تعیین پارامتر db_nameه، instance استارت خواهد شد:

[oracle@ol7 ~]$ vi pfile.ora

*.db_name=testdb

[oracle@ol7 ~]$ export ORACLE_SID=db1

[oracle@ol7 ~]$ export ORACLE_HOME=/19c/home

[oracle@ol7 ~]$ sqlplus “/as sysdba”

SQL*Plus: Release 19.0.0.0.0 – Production on Wed Jul 31 12:15:42 2019

Version 19.3.1.0.0

Connected to an idle instance.

SQL> startup pfile=’/home/oracle/pfile.ora’ nomount;

ORACLE instance started.

Total System Global Area  381680512 bytes

Fixed Size                  8657792 bytes

Variable Size             314572800 bytes

Database Buffers           50331648 bytes

Redo Buffers                8118272 bytes

5.حداقل میزان فضای sga و pga برای استارت شدن instance در اوراکل 19c چقدر است؟

SGA=360M

ORA-00821: Specified value of sga_target 100M is too small, needs to be at least 360M

PGA=10M

ORA-00093: pga_aggregate_target must be between 10M and 4096G-1

6.انداختن instance با دستور shutdown abort کار خطرناکیست؟

instanceای که بصورت shut abort دان شده است، نیاز به instance recovery دارد و انجام instance recovery از وظایف بک گراند پروسس smon است! این بک گراند پروسس، برای انجام عملیات instance recovery، ابتدا به سراغ redo log fileها می رود و در صورت صحت redo log memberها، اصطلاحا Roll forward انجام شده و  دیتابیس در وضعیت open قرار می گیرد و پس از آن، با کمک اطلاعات موجود در undo tablespace، عملیات Roll backward انجام خواهد شد.

در نتیجه اگر هر گروه redo log بیش از یک عضو داشته باشد، احتمال خرابی همه اعضا به صورت همزمان بسیار ضعیف بوده و عملا استفاده از این دستور، ریسک بسیار ناچیزی را در پی خواهد داشت.

از دیگر دغدغه های احتمالی پس از استفاده از دستور shut abort، طولانی شدن مدت زمان instance recovery می باشد که این مسئله هم با کمک پارامتر fast_start_mttr_target قابل مدیریت است.