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

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

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

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

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

 

1- ابتدا Plan  های مربوط به کوئری مورد نظر را از طریق زیر می یابیم :

) select * from dba_sql_plan_baselines b where b.signature in

select s.exact_matching_signature from v$sql s where sql_id = '0p09g7ftbkmk0

(

2- سپس sql_handle و plan_name ای که از مرحله قبل بدست آمده، در دستور زیر قرار داده و آن را اجرا می کنیم :


set serveroutput on

declare

l_plans_dropped pls_integer;

begin

l_plans_dropped:=dbms_spm.drop_sql_plan_baseline(sql_handle => 'SQL_cfffc84dd93b2190',plan_name => 'SQL_PLAN_czzy89rcmq8ch9865aff3');

dbms_output.put_line(l_plans_dropped);

end;

/

 

  • محمد جعفری

هنگام اجرای export data pump در RAC database چنانچه از پارامتر cluster استفاده نکنیم مقدار پیش فرض آن که YES می باشد در هنگام اجرا لحاظ می گردد و به این معنی است که process مربوطه از تمامی instance های موجود در RAC جهت اجرای export  استفاده می کند.اگر این پارامتر را در دستور expdp خود بصورت cluster=no استفاده کنیم به این معنی است که فقط instance ی که دستور در آن اجرا شده است مورد استفاده قرار می گیرد و در برخی موارد مزیت آن جلوگیری از cluster wait می باشد.

  • حسین مومنی
اکنون در اوراکل 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)


  • صادق جوانمرد
گاهی ( مثلا در نبود Oracle Enterprise Manager ) نیاز به اجرای Sql tuning به صورت دستی می باشد؛ مراحل زیر عملیات Sql tuning را در خط فرمان نشان می دهد :

 1- ابتدا باید  sql_id کوئری مورد نظر را بیابید.

select sq.sql_id,sq.sql_text from v$sql sq where sq.sql_text like '%Your Query%';

یا

select sql_id from v$session where sid = x

 


2- در گام بعدی برای کوئری یک tuning task ایجاد می کنیم :

SET SERVEROUTPUT ON

declare

stmt_task VARCHAR2(40);

begin

tune_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => ' 5fktw7d0p8mut');

DBMS_OUTPUT.put_line('task_id: ' || tune_task);

end;

/

task_id: TASK_1042

  • محمد جعفری

گاهی نیاز است برای بهبود سرعت پرس و جو ، بجای  select تو در تو از join استفاده کنیم.مثال زیر نمونه ای از این تبدیل می باشد:

 select *
FROM emp A
WHERE A.sal between 800 and 2000
AND A.deptno NOT IN
(SELECT B.deptno
FROM dept B
WHERE B.deptno = A.deptno
AND B.dname = 'sales');
//-----------------------------------
SELECT *
FROM emp A
left join dept B on B.deptno = A.deptno AND B.dname='sales'
WHERE A.sal between 800 and 2000
and B.dname is null

  • حسین مومنی

معرفی DRBD

Distributed Replicated Block Device یکی از ابزارهای مورد استفاده در سیستم عامل های بر پایه لینوکس است که از آن برای Sync کردن دائمی یا موقتی یک یا چند دیسک بین چند سیستم استفاده می شود.. DRBD مشابه RAID1 عمل می‌کند با این تفاوت که از بستر شبکه بهره گرفته شده است یعنی در هر زمان داده ها بر روی دو (یا چند) دیسک واقعی نوشته می‌شود و در صورت از دست دادن یکی از دیسک‌ها می‌توان از دیسک دیگر استفاده و به اطلاعات دسترسی پیدا نمود.کاربر اصلی DRBD  در سیستم‌های کلاسترینگ می باشد. همچنین میتوان برای سایت های DISASTER به عنوان روشی مطمئن در یکسان سازی دیتای دو سرور استفاده نمود. ( پیشنهاد می شود از این روش برای یکسان سازی Application ها و وب سرورهااستفاده شود و برای دیتابیس ها از روشهای مختص همان دیتابیس نظیر Active Data Guard در اوراکل  ، استفاده شود )

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


با سلام

این تصویر یکی از متداول ترین خطاهای محیط کنسول نسخه 11g میباشد . جهت رفع این خطا مراحل زیر را طی کنید:

1- در ایتدا از درست تنظیم شدن environmental setting از جمله ORACLE_HOME, $ORACLE_SID , $ORACLE_BASE$  اطمینان حاصل کنید . در محیط ویدوز این تنظیمات در قسمت  Environment Variables و در لینوکس داخل Bash_Profile قرار میگیرند.

2- دسترسی کاربر اوراکل به مسیر کامل App را چک نمایید . در محیط ویندوز کاربر عضو Ora_Dba به کل مسیر پوشه App دسترسی داشته و همچنین Owner آن تعریف شود.

3- اطمینان حاصل کنید که کاربرهای DBSNMP و SYSMAN در وضعیت Lock قرار نداشته باشند.

4- تنظیمات Regional and timezone settings را چک کنید . یک نمونه از تنظیمات صحیح به شکل زیر میباشد.


پس از کنترل و تنظیم نمودن موارد ذکر شده سیستم را یکبار Reboot کنید.

در بیشتر مواقع با انجام تنظیمات بالا مشکل رفع میگردد . در صورت عدم رفع میبایست OEM Reposiroty را با دستورات زیر یکبار حذف و دوباره نصب کنید.


emca -deconfig dbcontrol db -repos drop

emca -config dbcontrol db -repos create

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

در صورتی که یکی از دستورات insert,delete,update را در محیط sqlplus بزنید و بدون commit از محیط exit کنید ، بطور اتوماتیک commit انجام میشود . جهت غیرفعالسازی این امکان مراحل زیر را انجام دهید.

در صورت بستن پنجره Sqlplus پروسه به PMON سپرده شده و تراکنش Rollback میگردد.



SQL> show exitcommit
exitcommit ON
SQL> delete from dept where deptno=30;
1 row deleted.
SQL> exit;
$sqlplus scott/tiger
SQL> select * from dept where deptno=30;
0 row.
**********
SQL> set exitcommit off
SQL> show exitcommit
exitcommit OFF
SQL> delete from dept where deptno=30;
1 row deleted.
SQL> exit;
$sqlplus scott/tiger
SQL> select * from dept where deptno=30;;
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO

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

سوال ) تفاوت 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(*) 
---------- 

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

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