وبلاگ وحید نوروزی

تجربه و ترجمه و تحقیق درباره اوراکل را در این وبلاگ خواهید یافت.

وبلاگ وحید نوروزی

تجربه و ترجمه و تحقیق درباره اوراکل را در این وبلاگ خواهید یافت.

  • ۰
  • ۰

سلام. اگر پارامتر STANDBY_FILE_MANAGEMENT در استندبای برابر manual باشد، زمانی که بخواهیم در دیتابیس اصلی دیتافایلی را اضافه کنیم، این کار بصورت اتوماتیک در استندبای رخ نمی دهد و باعث از کار افتادن استندبای تا حل این موضوع خواهد شد.

File #7 added to control file as 'UNNAMED00007' because
the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL
The file should be manually created to continue.
Errors with log +FRA/testdg/archivelog/2018_09_04/thread_2_seq_155.574.985946453
MRP0: Background Media Recovery terminated with error 1274
Errors in file /u01/app/oracle/diag/rdbms/testdg/testdg2/trace/testdg2_mrp0_13384.trc:
ORA-01274: cannot add datafile '+DATA/testdb/datafile/audit_tbs.275.985944109' - file could not be created
برای حل این مشکل دستور زیر را می زنیم:

alter database create datafile 7 as '+data';
Database altered.
و برای اینکه این مشکل دیگر پیش نیاید ، STANDBY_FILE_MANAGEMENT را درحالت auto  قرار می دهیم.


----------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.



  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

sqlldr با مخلفات

سلام. Sql loader یکی از ابزارهایی هست که سرعت بسیار بالایی در ورود اطلاعات به دیتابیس داره. بعضی اوقات فکر می کنم که بخشی از اطلاعات را از حفظ می زنه :| .

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

DATE,NUMBER_TEST,PHONE,TEXT_TEST
2018/08/23-11:10:17,121,78903456789,1_row
2018/08/24-11:11:17,131,78903256789,2_row
2018/08/22-11:12:17,141,78903456789,3_row
2018/08/27-11:13:17,151,78903456789,4_row
2018/08/24-11:14:17,161,78903456789,5_row
2018/08/29-11:15:17,171,78903456789,6_row
2018/08/21-11:20:17,181,78903456789,7_row
2018/08/24-11:30:17,191,78903356789,8_row
2018/08/20-11:40:17,101,78903436789,9_row
2018/08/24-11:50:17,111,78903456789,10_row
2018/08/22-12:10:17,121,78903456789,11_row
2018/08/21-13:10:17,131,78903456789,12_row
2018/08/13-14:10:17,141,78903453339,13_row
2018/08/14-15:10:17,161,78903456739,14_row
2018/08/25-15:11:17,171,78903456389,15_row
2018/08/29-12:10:17,181,78903453789,16_row
2018/08/21-11:10:27,191,78903456789,17_row
در sqlldr به یک فایل کنترل احتیاج داریم که اطلاعات جدول توش باشه و نحوه تبدیل داده رو بهش بگه:
[oracle@db11g-node2 ~]$ cat sqlldr.ctl
OPTIONS (
  SKIP=1,
  PARALLEL=true,
  DIRECT=true,
  SKIP_INDEX_MAINTENANCE=true
)
LOAD DATA
APPEND
INTO TABLE VAHID_TEST_SQLLDR
        FIELDS TERMINATED BY ","
        TRAILING NULLCOLS
  (
ID sequence,
DATE date  'yyyy/mm/dd,hh24:mi:ss',
NUMBER_TEST,
PHONE,
TEXT_TEST,
TEXT_CONSTANT constant 'vahidnowrouzi.blog.ir'
)
در فایل بالا چند نکته مهم هست. یک وجود خطی که sequence رو برامون میسازه. اول که خواستم شروع کنم، sequence ساختم و بصورت sequence1.nextval جلوی id قرار دادم . هر کاری که کردم نشد. (اگر کسی این روش رو تست کرده و جواب گرفته، لطفاٌ بگه که روش صحیح اون رو هم اضافه کنم) تا اینکه به لینک زیر برخوردم :
توی این مطلب توضیح جامعی اومده و گفته که با ذکر کلمه sequence این امر بصورت خودکار ساخته میشه. 
مطلب دوم در فایل بالا خواندن تاریخ با فرمت مربوطه هست که می تونه به فیلدی که از نوع Date ساخته شده ، وارد بشه.
مطلب سوم مربوط میشه به اضافه کردن عبارات ثابت که در قسمت text_constant اومده.
دقت کنید که اگر csv که میخواید وارد کنید، در قسمت های که به عنوان متن هستند دارای علامت " باشند، عیناً وارد میشه.
جدولی که برای ورود این اطلاعات ساخته شده به شکل زیر هست:
CREATE  TABLE VAHID_TEST_SQLLDR
   ( "ID" NUMBER(20,0), 
"DATE" DATE, 
"NUMBER_TEST" NUMBER(3,0), 
"PHONE" VARCHAR2(20 BYTE), 
"TEXT_TEST" VARCHAR2(50),
    "TEXT_CONSTANT" VARCHAR2(50)
   );
و دستور رو بصورت زیر اجرا می کنیم:
 sqlldr vahid/vahid data=/home/oracle/sqlldr.data control=/home/oracle/sqlldr.ctl log=/home/oracle/sqlldr.log bad=/home/oracle/sqlldr.bad
قسمت log و bad فایلهایی رو ایجاد می کنند که در صورتی که مشکلی وجود داشته باشه، بر اساس اونها قابل پیگیری و حل مشکل میشن.

امیدوارم مفید واقع بشه.


--------------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.





  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

سلام. برای همه ما پیش اومده که مثلاً بخواهیم backup ی که گرفتیم رو با دستور scp به سرور دیگه ای انتقال بدیم. در این حین به علت قطع شدن session ممکنه تو حجم بالا، عملیات انتقال با مشکل مواجه بشه. برای این کار می توان از ارسال این دستور به background به روش زیر استفاده کرد:

nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1

پس از این مرحله پسورد رو وارد می کنیم و بعد ctrl+z را می زنیم. حالا دستور را با دستور bg به background می فرستیم. برای اینکه اون رو به foreground برگردونیم، می تونیم با زدن دستور jobs لیست کارهای background را ببنیم و با زدن شماره اون job روبروی دستور fg اون رو ببنیم.


منبع: http://charmyin.github.io/scp/2014/10/07/run-scp-in-background/



-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

deadlock با طعم ITL

سلام. چند روز پیش توی لاگهای دیتابیس یکی از مشتری ها، DEADLOCK دیدم و بهشون گفتم که مشکل رو حل کنید. بعد که  بیشتر دقت کردم، دیدم که enq: TX - allocate ITL entry داره که زیر مجموعه CONFIGURATION حساب میشه. برای پیدا کردن ربط اون به deadlock باید چند تا مطلب رو مرور کنیم. 

مطلب اول. ITL:

در اوراکل زمانی که برای یک سطر lock توسط یک transaction رخ می دهد، اطلاعات مربوط به آن در header آن block ی قرار می گیرد که داده در آن است. حال زمانی که transaction دیگری می خواهد با همان row کار کند، باید باز هم به سراغ همان  block header برود و با اطلاعاتی که در حال حاضر در این قسمت موجود است ، متوجه lock بودن آن سطر می شود. بنابراین به پروسسی که در تئوری به عنوان lock manager ممکن است درست کار کند، دیگر نیازی نیست. به این ساختار داده ای ،  Interested Transaction List یا به اختصار ITL گفته می شود که در آن اطلاعات transaction و rowid نگه داری می شود. هر ITL چندین slot برای transactionها دارد. زمانی که transactionِ ی برای اولین بار به سراغ block می آید، شماره rowid در یکی از slotها قرار می گیرد. همینطور زمانی که همین transaction و یا transaction دیگری بخواهد با سطرهای این block کار کند، در slot بعدی قرار می گیرد.


مطلب دوم، initrans:

در زمان ساخت جدول، این پارامتر مشخص می کند که در ابتدا چند slot در   ITL وجود داشته باشد.


مطلب سوم، maxtrans:

زمانی که transaction جدیدی برای lock کردن سطری در همین block می آید، slot جدیدی در ITL تشکیل می شود و این تعداد تا MAXTRANS می تواند ادامه یابد.


مطلب چهارم، pctfree:

میزان درصدی که اوراکل برای هر بلاک برای update های بعدی در یک بلاک خالی می گذارد، یعنی اگر pctfree برابر 10 باشد، داده ها تا 90 درصد بلاک را پر خواهند کرد و تنها 10 درصد را برای update های بعد خالی می گذارند.


حالا ببنیم که ITL WAIT چطور پیش میاد. زمانی که در یک block نمی توان slot جدید ایجاد شود، transaction تازه ورود باید منتظر خالی شدن slot های قبلی بشود و بنابراین wait پیش می آید. یک بلاک بلافاصله بعد از بوجود آمدن به شکل زیر است:

چون initrans در ابتدا بصورت پیشفرض یک است ، بنابراین تنها یک slot در ITL وجود دارد. حالا فرض کنیم تعداد INSERT در این بلاک انجام می شود.

حالا transaction اول row1 را update می کند ولی commit نمی کند و بنابراین slot مربوط به آن باقی می ماند،

trnsaction بعدی row2 را update می کند و باز هنوز commit نکرده است. نتیجه می شود:

نتیجه این می شود که با اینکه در مثال ما maxtrans را برابر 11 در نظر گرفته ایم، جایی برای itl slot جدید نخواهد بود.


حالا به سراغ deadlock می رویم که بر اساس داکیومنت شماره 2266279.1 دلیل آن این است که transaction 1 یک ITL بر روی بلاک A دارد و یک تقاضا برای گرفتن ITL بر روی بلاک B و در همین زمان transaction 2 یک ITL بر روی بلاک B دارد و نقاضا برای گرفتن بلاک A که نتیجه deadlock می شود.


راه حل:

افزایش initrans و pctfree در جداول و ایندکسهایی که در این deadlock در گیر هستند. پیشنهاد اوراکل initrans=30 و pctfree=30% است. پس از این تغییرات باید جدول و ایندکسها را move و rebuild کرد.

نکته: دقت داشته باشید که در صورتی که بخواهید این جدول را move کنید، جدول lock خواهد شد و همچنین در زمان rebuild تعدادی متناسب با حجم ایندکس، archive log تولید می گردد. بنابراین زمان و حجم مناسب برای اینکار را انتخاب کنید.


منابع:

http://www.proligence.com/itl_waits_demystified.html

ORA-60 Deadlock 'ENQ: TX - ALLOCATE ITL ENTRY' Error - Doc ID 2266279.1

http://www.orafaq.com/wiki/PCTFREE


----------------------------------------------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.


  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

switchover database 11g

سلام

یکی از کارهایی که باید چندین بار در محیط تست انجام داد و براش آماده بود، Switchover هست. هر دیتابیس می تواند یکی از دو role شامل primary و یا standby را داشته باشد. عملیات switchover به ما اجازه می دهد بدون از دست دادن داده و یا reset log نقش این دو دیتابیس را عوض کنیم.

عملیات switchover کاربردهای زیادی دارد که از آن جمله می توان به downtime از پیش تعیین شده برای نگه داری، تعمیر سخت افزار، جابجایی فیزیکی سرورها و .. اشاره کرد.

در این مطلب ما دو rac با نسخه 11.2.0.4 داریم. ابتدا بر روی هر کدام از دیتابیس ها، دستور زیر را برای به دست آوردن اطلاعات و نقش فعلی آنها می زنیم:

select name,open_mode,db_unique_name,switchover_status,database_role from v$database;

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

NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    READ WRITE           testdb                         TO STANDBY 
         PRIMARY
و نتیجه دیتابیس استندبای به ترتیب زیر:
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    MOUNTED              TESTDG                         NOT ALLOWED          PHYSICAL STANDBY

همانطور که در خروجی های بالا دیده می شود، نام دیتابیس ها یکی است و unique_name آنها متفاوت است. ضمناً در قسمت switchover_status تنها دیتابیس اصلی است که قابلیت تبدیل شدن به استندبای را دارد که با توجه به محتوای database_role می توان به این موضوع پی برد.
چند توصیه ایمنی قبل از شروع عملیات switchover : بهتر است قبل از شروع عملیات، برنامه های متصل به دیتابیس را قطع کرده و Session ای روی دیتابیس از این طریق نباشد. پس از این کار چندین بار Switch logfile می کنیم و از sync بودن دیتابیس اصلی و گارد با روش زیر اطمینان حاصل می کنیم:
on primary:
archive log list

on standby:
select process ,sequence# , status , thread# from gv$managed_standby;
 select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#;
با مقایسه مقادیر بدست آمده از جستجوهای بالا از SYNC بودن دیتابیس های اصلی و استندبای اطمینان حاصل می کنیم.
حالا شروع می کنیم:
بر روی دیتبایس اصلی دستور زیر را می زنیم:
 alter database commit to switchover to physical standby;
در صورتی که با خطای وجود active session مواجه شدیم، دستور بالا را بصورت زیر می زنیم:
alter database commit to switchover to physical standby with session shutdown ;

دیتابیس استندبای را یکبار خاموش و تا مرحله mount بالا می آوریم:

shut immediate;
startup mount;

حالا اگر جستجوی اول کار را بر روی دیتابیس اصلی جدید (استندبای قدیمی) اجرا کنیم، می بینیم که وضعیت switchover_status تغییر پیدا کرده است:

 select name,open_mode,db_unique_name,switchover_status,database_role from v$database;
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    MOUNTED              TESTDG                         TO PRIMARY           PHYSICAL STANDBY

دستور زیر را بر روی دیتابیس اصلی جدید (استندبای قدیمی) اجرا می کنیم:
 alter database commit to switchover to primary ;
و سپس آنرا یکبار دیگر خاموش و سپس startup می کنیم:
shut immediate;
startup;
یکبار دیگر جستجوی زیر را بر روی دیتابیس اصلی جدید (استندبای قدیمی) تکرار می کنیم:
 select name,open_mode,db_unique_name,switchover_status,database_role from v$database;
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    READ WRITE           TESTDG                         RESOLVABLE GAP       PRIMARY

نگران نباشید. با روشن کردن دیتابیس استندبای جدید (اصلی قدیمی) و انجام دستور log switch بر روی دیتابیس اصلی جدید (استندبای قدیمی) مشکل resolvable gap هم حل خواهد شد.
پس از روشن کردن استندبای جدید (اصلی قدیمی) برای انجام وظایف اسندبای دستور زیر را بر روی آن اجرا می کنیم:
recover managed standby database using current logfile disconnect;
کارهای که برای تست sync بودن انجام داده بودیم را دوباره انجام می دهیم.


باز هم توصیه می کنم چندین و چند بار این عملیات رو در محیط تست انجام بدهید تا ملکه ذهن بشود.

-----------------------------------------------------------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

سلام مجدد.

در قسمت قبل نصب grid به اتمام رسید. در این قسمت کار رو به اتمام می رسونیم.

اول باید فایلهای مربوطه به دیتابیس رو در مسیر دلخواهمون extract کنیم. من معمولاً یک date رو در انتهای دو دستور unzip می گذارم که از صحت عملکرد دو unzip قبل با این روش مطمئن بشم.



گزینه i wish  را uncheck  می کنیم.:

گزینه skip software update را انتخاب می کنیم.


در اینجا فقط نرم افزار دیتابیس را نصب می کنیم:


بر روی تمامی node ها نصب را انجام خواهیم داد پس node دوم را هم انتخاب می کنیم:


تنظیمات مربوط به ssh را وارد می کنیم و بر روی setup کلیک می کنیم.


زبان مورد نظر را وارد می کنیم 


گزینه enterprise را انتخاب می کنیم:


مسیرهای مورد نظر را قبول می کنیم.


گروه های پیشنهاد شده را قبول می کنیم:


مشکل ntp را ignore می کنیم. بهتر این است که وقت بگذارید و این مشکل را مرتفع کنید.


دستور install را می زنیم:


اسکریپتهای مربوط  به root را با کاربر root اجرا می کنیم:


پس از اتمام نصب برای ساخت دیسکهای دیگر Asm با کاربر grid وارد می شویم و تنظیمات مربوطه را در bash_profile. در مسیر home/grid/ وارد می کنیم:


با زدن دستور Asmca به محیط آن وارد می شویم. دیسک ocr را از قبل ساخته ایم:


بر روی Create  کلیک کرده و با انتخاب redundancy از نوع external و انتخاب دیسک Data01 ، گروه data را می سازیم.


سپس گروه fra را نیز با همین روش می سازیم. نتیجه بصورت ذیل خواهد شد:


تحت کاربر اوراکل در مسیر home/oracle/ فایل bash_profile. را بصورت زیر ویرایش می کنیم:


دستور dbca را اجرا می کنیم. 

نکته: برای اینکه تغییرات جدید در shell حاضر اعمال شود، باید دستور home/oracle/.bahs_profile/ . را اجرا کنیم.


گزینه create را انتخاب می کنیم.


گزینه general را انتخاب می کنیم:


تمامی node ها را انتخاب می کنیم و دیتابیس را نامگذاری می کنیم:


گزینه ها را بصورت پیش فرض قبول می کنیم:


پسورد مدنظر خود را انتخاب و وارد می کنیم:


در قسمت Storage type ما ASM را انتخاب می کنیم و دیسک گروه data را برای این کار قرار می دهیم.


برای recovery area دیسک گروه fra را انتخاب می کنیم. همچنین archive را enable  می کنیم.


برای تستهای بعدی sample schema را فعال می کنیم:


character set را al32utf8 در تست ما قرار می دهیم. در محیط های واقعی درصورتی که بخواهیم دامپ از جایی بیاوریم، حتماً با صادر کننده دامپ در این زمینه هماهنگ باشیم.


بر روی next کلیک می کنیم


بر روی finish کلیک می کنیم:


نصب به اتمام رسید. در صورتی که بخواهیم پسوردی را تغییر دهیم، می توانیم در این مرحله هم انجام دهیم.


امیدوارم این مجموعه آموزش مفید واقع بشه.


----------------------------------------------------------------------------------------------------------------------

خواهشمند است در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

سلام. قسمت قبل preinstallation به اتمام رسید و حالا به سراغ نصب Grid می رویم.




دستور Date پس از دستور unzip برای اطمینان از صحت عملکرد unzip است . اگر نخواهید اینکار را انجام دهید می توانید از ?$ echo استفاده کنید. حالا گزینه skip را انتخاب می کنیم.



گزینه اول که مربوط به نصب کلاستر هست را انتخاب می کنیم.



گزینه advanced را انتخاب می کنیم.



زبان انگلیسی را انتخاب می نمائیم.



نام کلاستر را انتخاب می نمائیم و نام scan را بر اساس نامی که در dns وارد نموده ایم وارد می نمائیم.



اطلاعات دومین node را با زدن کلید add اضافه می نمائیم .



پس از  زدن کلید ssh connectivity و وارد نمودن اطلاعات مورد نیاز، setup را می زنیم.



در صورتی که همه چیز درست باشد با پیغام زیر مواجه می شویم.



در صفحه بعد کارتهای شبکه متناسب را انتخاب می کنیم.




گزینه Asm  را انتخاب می کنیم



با توجه به اینکه تنها یک دیسک را در نظر گرفته ایم برای هر گروه ، گزینه external را انتخاب کرده و نام دیسک را ocr می گذاریم و دیسک 2 گیگابایتی را به آن اختصاص می دهیم.



رمز عبور مدنظر خود را وارد کنید.



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



با توجه به اینکه مراحل preinstallation را صحیح انجام داده ایم، گروه ها در جای درست خود قرار گرفته اند:



مسیرهای مناسب را می دهیم.



مسیر انتخاب شده را تایید می کنیم:



مراحل check انجام می شود و در صورتی که مشکلی وجود داشته باشد اطلاع داده می شود:



آنهایی که قابل رفع شدن توسط خود اوراکل هستند ، با زدن گزینه fix and check again و با اجرای اسکریپت توسط root بر طرف خواهند شد.



خطایی که درباره ntp به من داده بود رو با توجه به sync بودن crony ، نادیده گرفتم. اگر دوستان نظری دارند که می تونه این رو هم برطرف کنم، بگن که تصحیح کنم. اما به نظرم مشکلی برام ایجاد نخواهد کرد. 



خلاصه ای از اطلاعات ارائه می شه در این مرحله:



اسکریپتهای نشان داده شده رو به ترتیب گفته شده بر روی node های یک و دو اجرا می کنیم.



با توجه به اینکه ntp را ignore کرده بودیم ، با خطا در انتهای نصب مواجه می شویم که اگر لاگ رو بخونید ، می بینید که فقط در همین مورد هست و مشکل خاصی نداره.



نصب به اتمام رسید. در قسمت بعد به سراغ ساخت دیسک گروه های دیگر و نصب اوراکل می رویم.




-------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

سلام.

در قسمت قبل clone به اتمام رسید. حالا به سراغ ادامه کار می رویم.

ماشینهایی که برای اینکار در نظر گرفته ایم را روشن می کنیم. به سراغ فایل etc/sysconfig/network/ رفته و آنرا متناسب با فایل etc/hosts/ ویرایش می کنیم:



کارت شبکه ها رو باز هم بر طبق etc/hosts/ بصورت زیر بر روی هر یک از ماشینها کانفیگ می کنیم:



کارت شبکه Eth1 برای private در نظر گرفته ایم بصورت زیر کانفیگ می کنیم. در تصویر netmask=255.255.255.0 نیامده است که آنرا هم اضافه کنید.



از روی اطلاعات موجود در etc/hosts/ باید کارتهای شبکه public  و  private را بتوان با نام ping کرد. این تست را انجام می دهیم.



ماشنیها را خاموش می کنیم. به قسمت Setting ماشین اول رفته و از قسمت storage و قسمت sata بر روی دکمه روبرویش برای اضافه کردن دیسک کلیک می کنیم و گزینه Create new disk را بر می گزینیم.



در قسمت زیر روی vdi  کلیک می کنیم:



من در تستهایم گزینه fixed size را انتخاب کرده ام . 



میزان حجم مورد نظر و همجنین نام و محل ساختن را انتخاب می کنیم. بهتر است برای خوانایی بیشتر پوشه مجزایی برای shared diskها در نظر گرفته شود. ocr را می سازیم با حجم 2 گیگابایت.



دیسکهای data و fra را نیز با حجم 10 گیگابایت به همین روش می سازیم. در انتهای ساخت دیسکها بصورت زیر خواهد شد:



از منوی اصلی vbox و از منوی فایل گزینه virutal media manager را اجرا می کنیم. در اینجا دیسکهایی که به منظور shared disk ساخته ایم را انتخاب کرده و type آنها را به shareable تغییر می دهیم:



حالا به Setting دومین node رفته و از قسمت storage بر روی گزینه روبروی کنترلر sata ، گزینه اضافه کردن دیسک را می زنیم و اینبار بجای انتخاب create disk گزینه choose existing disk را انتخاب و تک تک shared disk های ساخته شده را به آن می دهیم. نتیجه کار به شکل زیر خواهد بود.



حالا هر دو node را روشن می کنیم. اگر بر روی هر یک از دو node دستور lsblk را اجرا کنیم با تصویر زیر مواجه می شویم که نشان می دهد ، دیسکها به هر دوی آنها اضافه شده است:




دیسکها را مطابق شکل زیر با دستور fdisk پارتیشن بندی می کنیم:



اینکار را برای تمامی دیسکهای جدید که شامل sdb , sdc , sdd می شود انجام می دهیم. بر روی node  دیگر دستور partproble را می زنیم که تغییراتی که در node اول داده ایم دیده شود:



بر روی node  اول ابتدا ownership دیسکها را درست کرده و دستور createdisk را مطابق شکل می زنیم. سپس بر روی node دوم تنها با زدن دستور oracleasm scandisks باید دیسکهای ساخته شده دیده شوند.



در قسمت بعد به سراغ نصب grid خواهیم رفت.




------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • قدیر نوروزی میرصادقی
  • ۰
  • ۰

در قسمت قبل سیستم عامل رو نصب کردیم. حالا به سراغ preinstallation می ریم.

ابتدا بر روی قسمت other کلیک می کنیم و کاربر root و پسوردی که برای آن در نظر گرفته ایم را وارد می کنیم:


 

پس از ورود به ما گفته می شود که با کاربر root وارد شده ایم. گزینه مربوط به عدم نمایش را چک می کنیم تا دوباره نمایش داده نشود:




در virtual box از منوی فایل گزینه host network manager را باز می کنیم تا ببینیم که host only در چه محدوده ای آدرس می دهد. در سیستم من 192.168.56 است. (برای اینکه این آدرس در آینده هم تغییر نکند، می توان آنرا بصورت دستی هم داد.)



در سیستم عامل از منوی application سپس system tools  و سپس Terminal را انتخاب می کنیم. با توجه به پر کاربرد بودن terminal می توان آنرا به بالای صفحه انتقال داد.



بعد از باز کردن terminal با دستور vi فایل etc/hosts/ را بصورت زیر ویرایش می کنیم و با زدن wq: آنرا ذخیره می کنیم:



iptables را با دستورات زیر غیر فعال می کنیم. توجه داشته باشید که در محیط عملیاتی باید پورت های مورد استفاده را به iptables اضافه  و از غیر فعال کردن آن اجتناب کنید.


selinux را با ویرایش فایل etc/selinux/config/ و disabled را Selinux قرار می دهیم.



در محیط virtualbox یک dns سرور راه انداختم و فایلهای مربوط به reoslve کردن host ها رو بصورت زیر تغییر دادم. (راه اندازی dns کار سختی نیست و من از روی یک ویدئو در youtube اون رو ساختم)



البته بخشی از فایلهای موجود مربوط به دیتابیس 12 هست و به بحث الان ما مربوط نمیشه. ما همونهایی که در فایل etc/hosts/ بود رو نیاز داریم که اینجا وارد کنیم. می دونیم که تنظیمات مربوط به کارت شبکه private هم نیاز نیست که اینجا باشه.


فایلهای کارت شبکه اول و etc/resolv.conf/  را مطابق شکل زیر تنظیم می کنیم:



بعد از تنظیمات بالا یکبار سرویس شبکه را با دستور etc/init.d/network restart/ دوباره راه اندازی می کنیم. حالا می توانیم با putty هم به این ماشین وصل شویم.

rpm  مربوط به chrony را نصب می کنیم . برای این کار باید از منوی مربوط به optical drive یکبار دیگر iso مربوط به oracle linux 6.8 را به ماشین می شناسانیم. 



بعد از نصب chronyd را با دستور etc/init.d/chronyd start/ راه می اندازیم و با chkconfig chronyd on به سیستم عامل می گوییم که بعد از هر بار بالا آمدن ، این سرویس را نیز بالا بیاورد. سپس فایل etc/chrony.conf/ را بصورت قسمت highlight شده در تصویر ویرایش می کنیم. آدرس آمده ، آدرس موجود در سرور 192.168.56.103 هست که همان dns است. روی این سرور سرویس ntp را نیز فعال کرده ام.



با توجه به اینکه کاربر oracle با زدن preinstall ساخته شده است، ابتدا آنرا پاک می کنیم و طبق نظر خودمان کاربر و گروه های مدنظر خود را می سازیم. در این نصب ما کاربر grid و oracle را با توجه به وظایفشان جدا می سازیم :




مسیرهای موردنیاز را به شکل زیر می سازیم:



فایل etc/security/limits.conf/ را باز کرده و هر آنچه برای اوراکل نوشته شده است را برای grid هم می نویسیم و آنرا ذخیره می کنیم.:



rpm مربوط به oracleasmlib را دانلود کرده و به ماشین انتقال داده و نصب می کنیم:



با زدن کانفیگ usr/sbin/oracleasm configure -i/ تنظیمات را مطابق شکل زیر انجام می دهیم:



ماشین را خاموش می کنیم و با راست کلیک بر روی نام آن در vbox گزینه clone را انتخاب می کنیم. سپس نام جدید ماشینی که ساخته خواهد شد را وارد کرده و حتماً گزینه reinitialize را چک می کنیم و next را کلیک می کنیم:



گزینه full clone را انتخاب می کنیم:



ماشین جدید ساخته شده را روشن کرده و کانفیگ فایلهای etc/sysconfig/network-scripts/ifcfg-eth0/ و etc/sysconfig/network-scripts/ifcfg-eth1/ را پاک کرده و سپس فایل etc/udev/rules.d/70-persistent-net.rules را نیز پاک می کنیم. این کار به این علت است که کارتهای شبکه جدید با نامهای eth2 و eth3 ظاهر شده اند و باید در RAC هم نام باشند.



ماشین ها را خاموش می کنیم.


در قسمت بعد به سراغ ساخت shared disk و ادامه نصب خواهیم رفت.


---------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.

  • قدیر نوروزی میرصادقی
  • ۰
  • ۰
در قسمت قبل نحوه ساختن ماشین  vbox رو دیدیم. حالا به سراغ نصب سیستم عامل می ریم.
بعد از روشن کردن ماشین اولین صفحه ای که می بینیم ، صفحه زیر هست:


بعد از این مرحله پیشنهاد چک کردن دیسک داده می شود. در صورتی که این مرحله را ok کنید ، پس از اتمام چک کردن دیسک خارج می شود. به خاطر داشته باشیم که اگر بصورت remote در جایی که دسترسی به آن سخت است مشغول نصب باشیم، ممکن است با خارج شدن دیسک دچار دردسر شویم. ما skip را انتخاب می کنیم:


صفحه welcome اولین صفحه ای است که بالا می آید:


در طول نصب زبان انگلیسی را انتخاب می کنیم:


زبان کیبرد را انگلیسی انتخاب می کنیم:


با توجه به نوع storage ی که داریم، basic storage را انتخاب می کنیم:


با توجه به اینکه اطمیان داریم بر روی این دیسک اطلاعات دیگری وجود ندارد و برای همین کار تخصیص یافته است، هارد موجود بر روی آن را با قبول گزینه yes ، آماده نصب می کنیم:


فعلا از تغییر نام خود داری می کنیم و آنرا به بعد از clone گرفتن موکول خواهیم کرد.


کشورمان را برای نصب انتخاب می کنیم:


پسوردی را برای کاربر root انتخاب می کنیم:


گزینه آخر را برای فرمت دیسک انتخاب می کنیم تا بتوانیم طبق خواسته خود آنرا پارتیشن کنیم:


برای نصب بهتر است که پارتیشن های مربوط به u01 و var و tmp و ... را جدا کنیم اما با توجه به محدودیت فضا u01 را در حال حاضر نمی سازیم و تنها سه پارتیشن / و boot/ و swap را می سازیم. Swap را هم اندازه با ram که قبلاً 4 گیگابایت انتخاب کرده بودیم ، می سازیم:


این صفحه را بدون تغییر رها می کنیم :


در صفحه زیر گزینه customize now را انتخاب می کنیم تا بتوانیم package های مورد نیاز خود را انتخاب و نصب کنیم:


از صفحه نمایش داده شده از پنجره سمت چک Servers و از پنحره سمت راست system administration tool  و با کلیک بر روی  optinal package گزینه های نمایش داده شده را انتخاب می کنیم:


برای نصب desktop از منوی سمت چپ Desktops و از منوی سمت راست گزینه های انتخاب شده را چک می کنیم. با کلیک بر روی این گزینه ها گزینه all را انتخاب کنید:


عملیات نصب شروع می شود:


پس از اتمام نصب reboot می کنیم.


بر روی دکمه forward کلیک می کنیم:

 
برای قبول license بر روی yes کلیک می کنیم:


بر روی no و از پنجره باز شده no thanks I'll connect later را انتخاب می کنیم:



بر روی forward کلیک می کنیم:


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



تاریخ و زمان را با chrony تنظیم خواهیم کرد:



بر روی finish و سپس yes کلیک کرده تا سیستم reboot شود.



سیستم عامل آمادست:


در پست بعدی به سراع مراحل preinstallation خواهیم رفت.



-----------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.
  • قدیر نوروزی میرصادقی