تجربیات کاری چند دوست

در این وبلاگ تجربیاتی که در حین کار بدست آورده ایم را به اشتراک خواهیم گذاشت

تجربیات کاری چند دوست

در این وبلاگ تجربیاتی که در حین کار بدست آورده ایم را به اشتراک خواهیم گذاشت

تجربیات کاری چند دوست
آخرین نظرات
  • ۱۶ مرداد ۹۸، ۰۱:۰۰ - علی جهان نما
    عالی بود

۶ مطلب توسط «صادق جوانمرد» ثبت شده است

در اوراکل 12c امکان ثبت رویدادنگاری از دستورات DDL وجود دارد ، البته این امکان در 11g نیز وجود داشت ولی در نسخه جدید رویدادنگاری ها جدای از alert log دخیره میشوند . با این امکان میتوان متوجه شد که چه تغییراتی توسط چه کسی و در چه زمانی بر روی پایگاه داده اعمال شده است . بزای فعالسازی این امکان باید پارامتر ENABLE_DDL_LOGGING را فعال کنیم ، این پارامتر میتواند در سطح دیتابیس یا سشن فعال شود . پس از فعال شدن این پارامتر تمام دستورات DDL در قالب یک فایل XML و یک لاگ فایل در مسیر  ORACLE_BASE/diag/rdbms/DBNAME/log|ddl$  ذخیره خواهند شد. یک فایل XML شامل اطلاعاتی نظیر دستور DDL ، آدرس IP ، زمان اجرا و ... میباشد .

دستور فعال سازی DDL logging : 

ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;

در صورت فعال سازی دستورات زیر رویدادنگاری خواهند شد :

CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENC

بیشتر بخوانید :

enable_ddl_logging Tips in Oracle 11g


  • صادق جوانمرد

در نسخه های پیشین شما تحت هیچ شرایطی امکان تعریف چند ایندکس روی یک ستون یا یک مجموعه از ستونهای مشترک را نداشتید . اوراکل 12c R1 این امکان را به شرط متفاوت بودن نوع ایندکس ها فراهم کرده است . البته همچنان اوراکل فقط از یک ایندکس که اصطلاها به آن فعال یا آشکار -active/visible- گفته میشود استفاده خواهد کرد . در صورتی که بخواهید ایندکس های پنهان نیز به کار گرفته شوند باید مقدار پارامتر OPTIMIZER_USE_INVISIBLE_INDEXES را برابر true قرار دهید .

مثالی از ساخت ایندکس ها :

create index idx_person_1 on person(national_code,gender);
create bitmap index idx_peson_2 on person(national_code,gender) invisible;

بیشتر بخوانید :

Multiple Indexes on the Same Set of Columns in Oracle Database 12c Release 1


  • صادق جوانمرد
اکنون در اوراکل 12c R1 امکان تعریف ستون های نامرئی -invisible columns- برای جداول  وجود دارد ، وفتی فیلد به عنوان یک ستون نامرئی تعریف میشود دیگر در نتایح جستجوهای عادی نمایش داده نخواهد شد و برای استفاده از این ستون ها باید بطور مستقیم به آن ها اشاره کرد.
 تعریف این ستون ها بسیار ساده است :
CREATE TABLE emp (eno number(6), ename name varchar2(40), sal number(9) INVISIBLE);
همینطور میتوان آن  را غیر فعال کرد :
ALTER TABLE emp MODIFY (sal visible);
 - در عبارت insert نیز باید صریحا به نام این ستون ها اشاره کرد.
 -  virtual column ها و  partition column ها نیز میتوانند به عنوان یک ستون
نامرئی تعریف شوند.
 - امکان استفاده از ستون ها
نامرئی در جداول موقت - temporary table - ، جداول خارجی - external tables - و جداول کلاستر - cluster table -  وجود ندارد .
 
بیشتر بخوانید :

Invisible Columns in Oracle Database 12c Release 1 (12.1)

  • صادق جوانمرد

در نسخه 12c R1 تغییر نام و جابجا کردن دیتافایل ها بسیار ساده تر شده است ، از این نسخه به بعد میتوان بدون ایجاد اختلال در عملکرد پایگاه داده و به صورت بر خط دیتافایل ها را تغییر نام داد یا جابجا کرد ، در طول مدتی که دیتافایل در حال انتقال است کاربر میتواند  query  و دستورات DML و DDL را اجرا کند . همینطور از این طریق میتوان دیتافایل ها را بین فصای ذخیره سازی ASM و غیر  ASM و بلعکس جا به جا کرد.

در این نسخه میتوان از دستور ALTER DATABASE MOVE DATAFILE برای انتقال دیتافایل استفاده کرد ، در ادامه چند مثال برای استفاده از آن ذکر شده است :

تغییر نام دیتافایل :

ALTER DATABASE MOVE DATAFILE '/u00/data/OLD_File.dbf'  TO '/u00/data/NEW_File.dbf';

انتقال دیتافایل به ASM :

ALTER DATABASE MOVE DATAFILE '/u00/data/FileToMove.dbf' TO '+DG_DATA';

انتقال دیتافایل بین دیسک گروپ های ASM :

 ALTER DATABASE MOVE DATAFILE '+DG_DATA/DBNAME/DATAFILE/File.dbf ' TO '+DG_DATA_02';

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

ALTER DATABASE MOVE DATAFILE '/u00/data/File.dbf' TO '/u00/data_new/File.dbf' REUSE;

کپی کردن دیتافایل به مسیر جدید بدون حذف دیتا فایل در مسیر قبلی :

ALTER DATABASE MOVE DATAFILE '/u00/data/File.dbf' TO '/u00/data_new/File.dbf' KEEP;


بیشتر بخوانید :

Online Move Datafile in Oracle Database 12c Release 1 (12.1)


  • صادق جوانمرد

سوال ) تفاوت In/Not In و Exists/Not Exists در چیست ؟ کدامیک سریع تر هستند ؟ 

 

    الف) تفاوت در نتیجه

 همیشه Not In و  Not Exists شبیه هم نیستند و ممکن است پاسخ های متفاوتی داشته باشند .

 (مثال ۱ ) به طور مثال :

select count(*) from emp 
where empno not in ( select mgr from emp ); 

COUNT(*) 
---------- 
0 

این پاسخ به ما میگوید که همه مدیر هستند . 


حال به پرس و جوی زیر دقت کنید :

select count(*) from emp T1 
where not exists ( select null from emp T2 where t2.mgr = t1.empno ); 

COUNT(*) 
---------- 

ولی این پاسخ نشان میدهد ۹ نفر مدیر نیستند! 

  • صادق جوانمرد

مقاله پیوست شده ترجمه مقاله ای با همین عنوان به آدرس زیر میباشد :

http://www.orafaq.com/node/55


در این مقاله نویستده تلاش دارد تا مفهوم توابع تحلیلی  را به وضوح و با بهره گیری از مثال های ساده  بیان کند . باید اشاره کرد که مخاطب این مقاله آن دسته از برنامه نویسان SQL  میباشند که به دلیل ناآشنایی با نحو  رمزگونه توابع تحلیلی و یا عدم آشنایی با کاربردهای آن  از این قابلیت استفاده نمیکنند . اغلب مشاهده میشود ، افراد سعی در اختراع دوباره عملکردهای توابع تحلیلی با استفاده از پیوندهای طبیعی و پرس و جوهای  تو در تو  دارند !  تاکید این مقاله بر ارائه مثال جهت بیان مطالب و آموزش میباشد ، همچنین پیش نیاز این مقاله آشنایی با جست و جوی تو در تو ، پیوند ها و توابع گروهبندی  میباشد .  

هدف از این مقاله متقاعد کردن خواننده برای استفاده از توابع تحلیلی در تمام پرس و جو های خود نبوده است. برای برنامه نویسانی که تا کنون توابع تحلیلی را نادیده میگرفتند و حتی در پرس و جو های پیچیده آماری هم از پیوند های پیچیده و سخت استفاده میکردند ؛ ما وقتی به هدفمان رسیده ایم که افراد استفاده از توابع تحلیلی را ساده ، قابل فهم و کاربردی بیابند و از آن ها استفاده کنند . 

  

دریافت مقاله :
کلمه عبور : oradba.blog.ir

لینک دانلود

  • صادق جوانمرد