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

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

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

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

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

سلام خدمت دوستان

شاید برای خودتون یا همکارانتون پیش اومده باشه که به اشتباه یک پارتیشن را حذف کرده باشید . اگر آن پارتیشن محتوی دیتای مهمی باشه حتماً دچار استرس شدید خواهید شد !!

یکی از بهترین و سریعترین ابزارها که باهاش میتونید در کسری از دقیقه پارتیشن های لینوکسی و ویندوزی رو بطور کامل بازیابی کنید GParted نسخه Live هست که میتونید از این اینجا دانلود کنید . بهترین آموزشش هم اینجا ببینید.

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

در قسمت تنظیمات VM به دیسک شماره 2 مقدار 200 گیگ فضا اضافه میکنیم (فضای قبلی 35 گیگ بوده). اگر Editor مربوط به فضای دیسک در حالت غیرفعال باشد معمولاً بدلیل وجود snapshot میباشد . پس از حذف snapshot ها Editor های مربوطه فعال میشوند.


# lsblk


NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

fd0             2:0    1     4K  0 disk

sda             8:0    0   110G  0 disk

sda1          8:1    0   953M  0 part /boot

sda2          8:2    0  47.3G  0 part

rhel-root 253:0    0 178.6G  0 lvm  /

rhel-swap 253:1    0   9.3G  0 lvm  [SWAP]

rhel-home 253:2    0 316.5G  0 lvm  /home

│ └─rhel-var  253:3    0 319.7G  0 lvm  /var

└─sda3          8:3    0  61.8G  0 part

  └─rhel-home 253:2    0 316.5G  0 lvm  /home

sdb             8:16   0   280G  0 disk

sdb1          8:17   0    80G  0 part

│ └─rhel-var  253:3    0 319.7G  0 lvm  /var

└─sdb2          8:18   0   200G  0 part

  └─rhel-var  253:3    0 319.7G  0 lvm  /var

sdc             8:32   0    35G  0 disk

└─sdc1          8:33   0    35G  0 part

  └─rhel-var  253:3    0 319.7G  0 lvm  /var

sdd             8:48   0   200G  0 disk

sdd1          8:49   0    50G  0 part

│ └─rhel-home 253:2    0 316.5G  0 lvm  /home

└─sdd2          8:50   0   150G  0 part

  └─rhel-root 253:0    0 178.6G  0 lvm  /

sde             8:64   0   200G  0 disk

└─sde1          8:65   0   200G  0 part

  └─rhel-home 253:2    0 316.5G  0 lvm  /home

sr0            11:0    1  1024M  0 rom

 

همانطور که مشاهده میکنید دیسک sdc هنوز فضای قبلی خود را نشان میدهد .

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

select id,
       sum(decode(x, 1, cnt, 0)) c1,
       sum(decode(x, 2, cnt, 0)) c2,
       sum(decode(x, 3, cnt, 0)) c3,
       sum(decode(x, 4, cnt, 0)) c4
  from (select 1 id, 10 cnt, 1 x
          from dual
        union all
        select 2 id, 20 cnt, 2 x
          from dual
        union all
        select 3 id, 30 cnt, 3 x
          from dual
        union all
        select 4 id, 40 cnt, 4 x
          from dual
     )
 group by id order by id

ID   C1   C2   C3   C4

1    10    0    0    0
2    0    20    0    0
3    0    0    30    0
4    0    0    0    40


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

netstat -na | grep ":443\|:80" | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

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

در موارد نادری مشاهده میشود که رابط گرافیکی لینوکس غیر فعال شده و با تغییر inittab و run level نیز مشکل رفع نمیشود . در این مواقع پس از Reboot سیستم با محیط زیر روبرو میشوید :

بعضی اوقات نیز بدلیل آپدیت ناقص این خطا بروز میکند. جهت رفع آن از دستور زیر استفاده کنید :

> yum groupinstall graphical-server-environment

> reboot


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

Kernel panic – not syncing: VFS: Unale to mount root fs on unknown-block(0.0)

kernel

دلیل بروز مشکل :

بروزرسانی ناقص Kernel و بقیه پکیج ها در هنگام استفاده از دستور yum update

شرح : در زمان Update  ، سرور دچار هنگی شده و پس از Reboot با پیغام بالا مواجه شدیم و امکان Boot با Kernel های قبلی نیز مقدور نبود .

راه حل :

در صفحه Boot بر روی Kernel قبلی کلیک کرده و Ctrl + E را بزنید . سپس طبق شکل زیر عمل نمایید :


سپس Ctrl + x را فشار دهید.

سیستم در حالت Rescue بالا می آید . سپس دستورات زیر را میزنیم :

# rpm –qa |grep kernel

# Yum remove newkernelname*

# Reboot

 

 

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

برای متوقف کردن یک job در حال اجرا در export data pump به دو روش زیر می توان عمل کرد:

1-ابتدا از view زیر وضعیت jobها به همراه نامشان را مشاهده کنید:

select * from dba_datapump_jobs

سپس job مورد نظر که در وضعیت executing می باشد را جستجو کنید.

SYS SYS_EXPORT_FULL_01 EXPORT FULL EXECUTING

پس از مشاهده job_name باید با دستور زیر وارد محیط export data pump شوید:

oracle@dbserver ~]$ expdp system/manager attach=SYS_EXPORT_FULL_01]

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

Export> KILL_JOB
Are you sure you wish to stop this job ([yes]/no): yes
[oracle@dbserver ~]$
روش دیگر استفاده از دستور زیر در محیط sql است:

SQL> DECLARE
h1 NUMBER;
BEGIN
h1:=DBMS_DATAPUMP.ATTACH(‘SYS_EXPORT_FULL_01‘,’SYSTEM‘);
DBMS_DATAPUMP.STOP_JOB (h1,1,0);
END;
/

  • حسین مومنی

ALTER TABLE...SPLIT PARTITION

۱۵
ارديبهشت

 

ALTER TABLE...SPLIT PARTITION

از دستور فوق برای تقسیم یک پارتیشن به دو پارتیشن استفاده می شود و محتویات پارتیشن اول را در دو پارتیشن جدید منتقل  می کند.این دستور فقط  در جداول حاوی range partition و list partition قابل استفاده است (و نمی توان برای hash partiotion استفاده کرد).فرم نوشتاری دستور به دو صورت است:

فرم اول جدول دارای range partition   را به دو پارتیشن تقسیم می کند:

 

ALTER TABLE table_name SPLIT PARTITION partition_name

  AT (range_part_value)

  INTO 

  (

    PARTITION new_part1

      [TABLESPACE tablespace_name],

    PARTITION new_part2 

      [TABLESPACE tablespace_name]

  );

 

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

 

 

ALTER TABLE table_name SPLIT PARTITION partition_name

  VALUES (value[, value]...) 

  INTO 

  (

    PARTITION new_part1

      [TABLESPACE tablespace_name],

    PARTITION new_part2 

      [TABLESPACE tablespace_name]

  );

 

مثال یک:

جدول sales را با سه پارتیشن ذیل در نظر بگیرید:

 

CREATE TABLE sales

  PARTITION europe VALUES('FRANCE', 'ITALY'),

  PARTITION asia VALUES('INDIA', 'PAKISTAN'),

(

  dept_no     number,  

  part_no     varchar2,

  country     varchar2(20),

  date        date,

  amount      number

)

PARTITION BY LIST(country)

(

  PARTITION americas VALUES('US', 'CANADA')

);

دستور زیر پارتیشن Americas را به دو پارتیشن us و Canada تقسیم می کند:

 

ALTER TABLE sales SPLIT PARTITION americas 

 VALUES ('US')

 INTO (PARTITION us, PARTITION canada);

 

 

مثال دو:

CREATE TABLE sales

(

  dept_no     number,

  part_no     varchar2,

  country     varchar2(20),

  date        date,

  amount      number

)

PARTITION BY RANGE(date)

(

  PARTITION q1_2012 

    VALUES LESS THAN('2012-Apr-01'),

  PARTITION q2_2012 

    VALUES LESS THAN('2012-Jul-01'),

  PARTITION q3_2012 

    VALUES LESS THAN('2012-Oct-01'),

  PARTITION q4_2012 

    VALUES LESS THAN('2013-Jan-01')

);

 

جدول از چهار پارتیشن زیر تشکیل شده است:

q1_2012, q2_2012, q3_2012, and q4_2012

 

دستور زیر q4_2012  را به دو پارتیشن  q4_2012_p1  و  q4_2012_p2 تقسیم می کند:

 

ALTER TABLE sales SPLIT PARTITION q4_2012

  AT ('15-Nov-2012')

  INTO 

  (

    PARTITION q4_2012_p1,

    PARTITION q4_2012_p2

  );

 

توجه : اگر tablespace جدیدی برای پارتیشنها تعریف نشود از tablespace پیش فرض استفاده می گردد.

 

 

 

 


  • حسین مومنی
کاربرد پارامتر version در data pump زمانیست که می خواهیم بطور مثال از اطلاعات دیتابیس اوراکل با نسخه 12، export بگیریم و در یک دیتابیس با نسخه 11، import کنیم.

  expdp user1/password dumpfile=dir1:dumpfile1.dmp logfile=dir1:logfile1.log  version=11.2


  • حسین مومنی

قبل از هر چیز به تعریف دو اصطلاح می پردازیم:

Distributed Transaction:تراکنشی که در سطح شبکه بین دو دیتابیس انجام می شود.

In-Doubt Transaction: تراکنش نیمه تمامی از نوع Distributed که وضعیت commit یا rollback آن مشخص نیست.

اگر چنین تراکنشی در دیتابیس انجام شود و به دلایلی نیمه تمام باقی بماند پس از اجرای مجدد آن هنگام COMMIT با سه خطای پی در پی به شرح زیر مواجه می شویم:

ora-02050: transaction  21.534654 rolled back,some remote DBs may be in-doubt

ora-02056: bad two phase command number rdonly from coord

ora-02063: preceding line from BANK

برای رفع مشکل می توانیم از دستورات ALTER SESSION ADVISE COMMIT یا ALTER SESSION ADVISE ROLLBACK قبل از کوئری خود استفاده کنیم.

مثال :

insert into SUPERIORCUSTS

 SELECT B.BRANCH_CODE BR,trunc(INSERT_SYSDATE) as INSERT_DATE,COUNT(*) as cnt

 FROM VC.ORGANIZATION A  JOIN RP.VW_CLIENT_INFO_BANK@REMOTE B  ON A.CIF = B.EXTERNAL_REF

 WHERE B.CLIENT_TYPE = 1 and trunc(INSERT_SYSDATE) = trunc(sysdate - 1) 

 GROUP BY B.BRANCH_CODE, trunc(INSERT_SYSDATE);   

commit; 

insert انجام می شود ولی بعد از commit خطاهای مذکور را دریافت می کنیم.کافیست قبل از اجرای مجدد کوئری فوق، یک یا دو بار دستور ALTER SESSION ADVISE COMMIT را اجرا کنیم.(یا چنانچه بخواهیم تغییرات حاصل از کوئری قبل را cancel کنیم بجای commit از rollback استفاده می کنیم)


  • حسین مومنی