نکاتی در مورد حذف ستون از جدول

زمانی  که دستور drop column را اجرا می کنیم، اوراکل باید تمامی بلاکهای جدول را به حافظه منتقل کرده و اطلاعات مربوط به ستون را از همه رکوردهای حاضر در بلاک حذف کند.

در کنار عملیات I/O و پردازش رکورد، جدول هم به صورت exclusive قفل خواهد شد و مضاف بر آن، حدف ستون منجر به ایجاد redo و undo هم می شود. در نتیجه حذف ستون از یک جدول حجیم می تواند کار بسیار پرهزینه و زمانبری باشد.مثال زیر را ببینید:

(بیشتر…)

اوراکل؛پستگرس – نمایش حجم جداول و دیتابیس بصورت Human-Readable

در سیستم عامل لینوکس به همراه دستوراتی که فضای مصرفی فایلها، دایرکتوریها و پارتیشنها را نمایش می دهند (نظیر df و du) می توان از سوییچ h برای نمایش خواناتر خروجی استفاده کرد که کلمه h مخفف عبارت Human-Readable می باشد.

مثال:

[oracle@host ~]$ df

Filesystem            1K-blocks       Used  Available Use% Mounted on

/dev/sda3             543928992  169894132  346381740  33% /

tmpfs                 178257920     351512  177906408   1% /dev/shm

/dev/sda1                499656     144960     318000  32% /boot

 

[oracle@host ~]$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3             519G  163G  331G  33% /

tmpfs                 170G  344M  170G   1% /dev/shm

/dev/sda1             488M  142M  311M  32% /boot

در محیط دیتابیس هم توابعی وجود دارند که بتوان از طریق آنها حجم مصرفی segmentها و دیتابیس را به صورت خوانا نمایش داد.

(بیشتر…)

برقراری ارتباط بین دو دیتابیس بدون استفاده از DBlink

در محیط SQLcl می توان با کمک دستور bridge بین دو دیتابیس ارتباط برقرار کرد.

ابتدا فرمت کلی دستور bridge را مرور می کنیم:

BRIDGE <targetTableName> as “<jdbcURL>”(<sqlQuery>);

به عنوان مثال، با دستور زیر، جدولی را از دیتابیس db19c، در دیتابیس جاری ایجاد می کنیم:

SQL> tables
no rows selected

SQL> bridge tbl2 as “jdbc:oracle:thin:usef/a@192.168.1.20:1521/orcl”(select * from TBL1);

Created table tbl2 and inserted 9 row(s)

SQL> tables
TABLES                                                                         
———–
TBL2

علاوه بر دستور bridge دستور copy هم به عنوان یک دستور قدیمی برای برقراری ارتباط بین چند دیتابیس قابل استفاده است. البته این دستور علاوه بر محیط SQLcl، در محیط sqlplus قابل اجرا است:

SQL> copy from usef/a@192.168.1.20:1521/db1  to usef/a@192.168.1.22:1521/db2 create tbl7 using select * from tbl1; 

Array fetch/bind size is 15. (arraysize is 15)

Will commit when done. (copycommit is 0)

Maximum long size is 80. (long is 80)

Table TBL7 created.

   9 rows selected from usef@192.168.1.22:1521/db2.

   9 rows inserted into TBL7.

   9 rows committed into TBL7 at usef@192.168.1.20:1521/db1.

آشنایی با محیط SQLcl

ابزار SQLcl در سال 2014 توسط تیم Oracle SQLDeveloper ارائه شد، این ابزار مشابه sqlplus محیطی command lineی را برای DBA فراهم  می سازد با این تفاوت که قابلیت و راحتی های فراوانی را نسبت به sqlplus  به همراه دارد.

نمونه هایی از مزیتهای این ابزار را نسبت به sqlplus مشاهده می کنید:

1.برای استفاده از SQLcl نیازی به نصب اوراکل کلاینت نخواهیم داشت همچنین این ابزار نصب بسیار راحتی دارد.

2.دستورات کاربردی فراوانی توسط این ابزار ارائه شده اند نظیر HISTORY، DDL، CTAS، Spool To CSV و ….

3.کار کردن با خط فرمان در این محیط نسبت به sqlplus راحت تر است(به دلیل ویژگی هایی چون TAB COMPELETION ). همچنین خروجی پرس و جوها به شکل خواناتری نمایش داده می شوند.

4.SQLcl امکان اتصال بین دو دیتابیس را بدون استفاده از database link فراهم می کند.

و …

(بیشتر…)

روشی برای تغییر ایندکس primary key – اوراکل 12c

شرایط زیر را در نظر بگیرید:

SQL> create table jadval1 (id number,name varchar2(14),last_name varchar2(14));

Table created

SQL> insert into jadval1 select level,’VAHID’,’USEFZADEH’ from dual connect by level <=10000;

10000 rows inserted

SQL> commit;

Commit complete

SQL> create index ind_id on jadval1(id);

Index created

در چنین شرایطی قصد داریم ستون id را به عنوان primary key تعریف کنیم:

SQL> alter table JADVAL1 add constraint pk primary key (ID);

Table altered

(بیشتر…)

Rotate خودکار فایل Listener.log در اوراکل 19c

تا قبل از اوراکل 19c، عملیات rotate برای logهای xmlی سرویس listener(فایل log.xml) به صورت خودکار انجام می شد و معمولا حجم هر کدام از این logfileها می توانست حدودا به ده مگابایت برسد البته این عملیات برای فایل listener.log اتفاق نمی افتاد و rotate آن به صورت سیستم عاملی و توسط DBA کنترل می شد.

در اوراکل 19c دو پارامتر(پارامترهای listener.ora) برای Rotate خودکار لاگهای listener اضافه شده است که در این متن با این دو پارامتر اشنا خواهیم شد.

(بیشتر…)

آموزش PL/SQL قسمت چهارم -دستورات شرطی

گاهی اوقات نیاز است یک یا چند شرط بررسی شوند تا عملیات برنامه بر اساس آن شرط ها انجام گیرند. در شکل زیر ساختار کلی دستورات شرطی را مشاهده می کنید این دستورات برای تغییر روند کنترلی اجرای دستورات برنامه استفاده می شود.

(بیشتر…)

انجام query rewrite با استفاده از DBMS_ADVANCED_REWRITE

فرض کنید پرس و جوی زیر یکی از پرس و جوهای پراستفاده برنامه می باشد که به دلیل عدم دسترسی به سورس کد برنامه امکان تغییر متن آن وجود ندارد:

SQL>  select /*+INDEX(tbl1,IND_CODE)*/ count(*) from tbl1 where code=2 ;

  COUNT(*)

———-

  51199980

Elapsed: 00:00:05.23

همانطور که می بینید، این پرس و جو حدودا در زمان 4 ثانیه اجرا شده است با برداشتن HINTای که در این پرس  و جو موجود است، آن را مجددا اجرا می کنیم:

SQL> select count(*) from tbl1 where code=2 ;

  COUNT(*)

———-

  51199980

Elapsed: 00:00:01.60

مشاهده می کنید که زمان اجرای پرس و جو با برداشتن HINT از 5 ثانیه به 1 ثانیه کاهش پیدا کرده است قصد داریم با هر بار اجرای پرس و جوی اول، دیتابیس به صورت خودکار پرس و جوی دوم(که فاقد HINT است) را اجرا کند به عبارتی دیگر، دیتابیس در پس زمینه query rewrite را انجام دهد.

(بیشتر…)

استفاده از قابلیت flashback query برای برگرداندن تغییرات متن پکیج، پروسیجر و فانکشن

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

هدف از این مسئله به پشتیبانی اوراکل از قابلیتهایی چون read consistency،  rollback operation و انواع مختلف flashbackها در دیتابیس بر می گردد که البته در مورد هر کدام از این قابلیتها، قبلا مطالبی را ارائه کردیم و در این مطلب صرفا به بررسی نکته ای در مورد flashback query خواهیم پرداخت.

(بیشتر…)

ویووهای Dynamic Performance و Data Dictionary در دیتابیس اوراکل

view یکی از OBJECT های دیتابیس اوراکل است که روش ساخت و استفاده از آن را در متن “VIEW در دیتابیس اوراکل” توضیح دادیم. دو دسته ویوو در دیتابیس اوراکل وجود دارد که بعد از ایجاد دیتابیس به صورت اتوماتیک ساخته می شوند و با  استفاده از PUBLIC SYNONYM در اختیار کاربران دیتابیس قرار می گیرند.

این ویووها که به صورت دائمی توسط دیتابیس اوراکل بروزرسانی می شوند شامل اطلاعات کلی OBJECTها و اجزای دیتابیس هستند.

یک دسته از این ویووها Dynamic Performance است که نام آنها معمولا با $V یا $GV شروع می شود. دسته دیگر ویووهای دیتادیکشنری (Data Dictionary) هستند.

در ادامه تفاوت این دو دسته از viewها را توضیح می دهیم.

(بیشتر…)