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

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

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

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

تجربیات کاری چند دوست
آخرین نظرات
  • ۱۶ مرداد ۹۸، ۰۱:۰۰ - علی جهان نما
    عالی بود
یکی از بهترین روشها برای مشاهده مقادیر Bind Variable ها استفاده از ابزار TOAD میباشد.
بدین منظور مراحل زیر را طی نمایید :

DATABASE --> MONITOR --> SGA Trace/Optimization

پس از ورود به این ابزار و مشاهده لیست کوئری های اجرا شده در SGA میتوان با انتخاب گزینه Substitute values for bind variables if possible مقادیر مذکور را مشاهده نمود. این گزینه از نسخه 10 به Toad اضافه شده است. لازم به توضیح است این روش برای کوئری های ORM جواب نمیدهد و برای آنها باید از روش زیر استفاده کنید.

چنانچه نرم افزار Toad در دسترس نباشد و یا کوئری ها از نوع ORM باشند میتوانید از کوئری زیر استفاده کنید:
SET PAUSE ON
SET PAUSE 'Press Return to Continue'
SET PAGESIZE 60
SET LINESIZE 300
 
COLUMN sql_text FORMAT A120
COLUMN sql_id FORMAT A13
COLUMN bind_name FORMAT A10
COLUMN bind_value FORMAT A26
 
SELECT 
  sql_id,
  t.sql_text sql_text,  
  b.name bind_name,
  b.value_string bind_value 
FROM
  v$sql t 
JOIN
  v$sql_bind_capture b  using (sql_id)
WHERE
  b.value_string is not null  
AND
  sql_id='&sqlid'
/
  • حامد اسماعیلی


مثال 1 : فرض کنید 1000000 کارمند وجود دارند و از بین آنها میخواهیم فردی را انتخاب کنیم که دارای حقوق 20 میلیون تومان میباشد . در صورتی که تنها یک نفر این حقوق را دریافت کند ،

Selectivity ما برابر با 1  تقسیم بر 1000000 میباشد که بسیار نزدیک به صفر است .

Cardinality برابر است با تعداد کل رکورد ها ضربدر Selectivity .

در این مثال Cardinality=1 میباشد.

;Select * from Employee where salary=20000000

  • حامد اسماعیلی

1- اگر در محیط عملیاتی اقدام به ساخت ایندکس میکنید حتما از حالت Online استفاده کنید تا کاربران دچار Lock Conflict نشوند . همچنین جهت تسریع در ساخت ایندکس میتوان درجه Parallel را تنظیم نمود(معمولاً بیش از 8 توصیه نمیشود).دقت شود که پس از ساخت ایندکس حتما Degree آن برداشته شود .

2- سعی کنید TBS محل ذخیره ایندکس ها جدا از TBS دیتاها باشد.
3- در صورت امکان دیتافایلهای محل ذخیره ایندکس ها را بر روی هارد های
SSD قرار دهید . تا کمترین Latency را در I/O داشته باشید.

  • حامد اسماعیلی

گاهی اوقات نیاز است به دلایل امنیتی ارتباط بین دیتابیس و نرم افزار را رمز نگاری کرد . یکی از بهترین روشها استفاده از SSL در ارتباطات TNS و LISTENER است . در این مقاله به پیاده سازی این راهکار خواهیم پرداخت.


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

در این مستند فرض را بر این گرفته که server با نام ol7-121.localdomain بوده و client یک سیستم ویندوزی با نام "my-computer" میباشد و oracle client بر روی آن نصب میباشد.

 

ایجاد wallet بر روی سرور:

1-    ساخت wallet بصورت auto_login بر روی سرور

 

$ mkdir -p /u01/app/oracle/wallet

 

$ orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local

 

2-    ساخت certificate بصورت self-signed  و load به wallet

$  orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650

  • حامد اسماعیلی

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

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


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

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

  

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

لینک دانلود

  • صادق جوانمرد
برای exclude  نمودن جداول در صورتی که تعداد جداول کم است ونیازی به ایجاد parfile  نیست میتوانید برای سیستم عامل ویندوز از الگوی زیر استفاده نمایید.

EXCLUDE=TABLE:\"IN (\'NEWATTACHMENT\'',\'NEWLOG\')\"

 برای سیستم عامل لینوکس از الگوی زیر استفاده نمایید.

EXCLUDE=TABLE:\""IN \(\'BC_CONTENT\',\'INF_CONTENT\'\)\""

نام جداول حتماً باید با حروف بزرگ نوشته شوند
  • علی جهان نما

 ASMبه عنوان جایگزین مستقیم برای RAID در نظر گرفته نمیشود، اگرچه با ASM Mirroring عملکرد مشابهی به وجود خواهد آمد. این موضوع به شدت به نیازهای شما، بودجه شما، پیکربندی فعلی دیسکهای شما و راحتی در مدیریت هرکدام وابسته است.

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

(ASM (External Redundancy) and Disk (non-RAID

در صورتی که تعهد حداکثر پایداری برای سیستمی داده اید، بهتر است از این پیکره بندی استفاده نکنید. در صورتی که ASM بر رویExternal تنظیم شود و هیچ Redundancy نرم افزاری نیز وجود نداشته باشد و دیسکها نیز عضو RAID نباشند، از بین رفتن هر دیسکی منجر به از دست رفتن دیتا از ASM Diskgroup میشود. (نگارنده اشاره کرده است که این حالت را حتی در محیط تستی نیز پیاده نمیکند اما به هر حال این حالت ممکن است)

(ASM (Normal/High Redundancy) and Disk (non-RAID

به DBA اجازه میدهد تا Failure Groupها و File Protection‌ را به کمک ASM مدیریت کند که این موضوع میتواند در شرایطی که سازمان مدیریت SAN‌ ندارد دارایی با ارزشی باشد، اما به هر حال DBA مسئول پیکره بندی صحیح برای جلوگیری از قطعی سیستم در حین failureها و از آن مهمتر مسئول پایش failure groupها برای اطمینان از وجود فضای کافی برای failureهاست.

 بار mirorring دست نرم افزار و به تبع آن پردازشگر سرورهاست.

 از دست رفت دیسک به ASM (و همچنین پیکره بندی Diskgroup/File Protection مناسبوابسته است و امکان پردازش متوالی/بدون قطعی وجود دارد. (با این فرض که Failure Group‌ روی همان دستگاه فیزیکی وجود ندارد.)

 میتوان از ظرفیت ماکزیمم استفاده نمود و لزوما I/O زیاد نمیشود.

  • علی جهان نما

شما می خواهید مطمئن شوید که پشتیبان RMAN پایگاه داده شما بیش از 10 ساعت طول نمی کشد.

backup database plus archivelog duration 10:00

  • حامد اسماعیلی

صورت مسئله :

بدلیل حساس بودن دیتای موجود در یک ستون خاص ، میخواهیم کاری کنیم که در صورتی که تنها کاربران دارای مجوز مشاهده آن ستون به دیتابیس لاگین نمودند توانایی دیدن محتوای ستون مورد نظر را داشته باشند .

مراحل کار :

1- ایجاد یک تابع جهت تعریف کاربران مجاز

create or replace function VPD( p_owner in varchar2, p_name in varchar2 ) return varchar2
    as
    begin
            if sys_context( 'userenv', 'session_user' ) in( 'user1','user2') --and SYS_CONTEXT('USERENV','HOST')in('DOMAIN\TESTPC','hamed')
            and sys_context('userenv','ip_address') in ('192.168.1.10','192.168.1.20')
            then
                    return NULL;
            else
                   return '1=0';
            end if;
   end;
   /
  • حامد اسماعیلی

گاهی اوقات نیاز است که کاربر نتواند اقدام به ALTER نمودن جداول نماید . در مثال زیر تمامی دسترسیهای کاربر به جز دستور TRUNCATE گرفته میشود.

CREATE OR REPLACE TRIGGER TEST.DDLTrigger
  BEFORE DDL ON schema
BEGIN
  if (ora_sysevent = 'TRUNCATE') then
    null; -- I do not care about truncate
  else
    raise_application_error(-20000, 'YOU CAN NOT DO DDL!');
  end if;
END;

  • حامد اسماعیلی