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

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

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

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

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

۱۷ مطلب توسط «حامد اسماعیلی» ثبت شده است

یکی از بهترین روشها برای مشاهده مقادیر 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

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

شما می خواهید مطمئن شوید که پشتیبان 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;

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