# پایگاه‌های داده > سایر پایگاه‌های داده > Oracle >  اوراکل گارد

## devil00x

لطفا اگر کسی در مورد گارد اوراکل اطلاعاتی داره بیان کنه؟
من اصلا چه چیزای لازم دارم جهت راه اندازی گارد؟
گارد اصلا به چه درد می خوره؟

----------


## devil00x

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

----------


## devil00x

just what is Data Guard?
“An application-transparent high-performance low-impact asymmetrical online reliable Redo or SQL level background standby database transaction exchange utility capable of reporting, switchover and Failover.” 
Data Guard helps you protect your Data.
Takes your data and automatically puts it elsewhere
Makes it available for Failover in case of failure.
The other capabilities are pure bonus.
Switchover for Maintenance
Reporting
Off-loading Queries
Backups

----------


## babila

از دیتا گارد برای ساختن یک نمونه مشابه از دیتابیس بر روی یک سرور دیگر و در مکان جغرافیایی دیگر استفاده می شود. که این کار برای اهداف گوناگون و با روش های گوناگونی پیاده سازی می شود.
یکی از کاربرد های آن داشتن یک دیتابیس سرور STANDBY است تا در صورت بروز مشکل در دیتابیس سرور اصلی به صورت اتوماتیک وارد مدار شود و با اطلاعات بروز شده نقش دیتابیس اصلی را بازی کند.
سرور های STANDBY که با استفاده از DATA GUARD پیاده سازی می شوند در دو مود PHYSICAL  و LOGICAL پیاده می شوند که هر یک مزایا و معایب خاص خودش را دارد و کاربرد هر یک جداست.
برای اطلاعات بیشتر می تونید در اینترنت ORACLE DATA GUARD رو سرچ کنید.

----------


## devil00x

> سرور های STANDBY که با استفاده از DATA GUARD پیاده سازی می شوند در دو مود PHYSICAL و LOGICAL پیاده می شوند که هر یک مزایا و معایب خاص خودش را دارد و کاربرد هر یک جداست.


من متوجه این قسمت فیزیکال و لاجیکال نشدم ، میشه بیشتر توضیح بدین.

----------


## devil00x

من یه مطالعه کوچیک در این مورد داشتم:
این بحث فیزیکال به این صورته که کل داده های که تغییر میکنه روی دیتابیس standby منتقل میشه اما در حالت لاجیکال دستورات sql که روی دیتابیس سرور اصلی اجرا میشه رو روی سرور standby  اجرا میکنه!
اگه اشتباه متوجه شدم لطفا راهنمایی کنید؟؟!!!!

----------


## devil00x

--------------------------------------------
babakhshid man emkane type farsi nadarm
--------------------------------------------
man ye soal dige ham daram aya database main va standby mitone SID yeksan dashte bashe ya inke bayad motefavet bashe.

----------


## babila

می توننن به صورت local یکسان باشند ولی موقعی که به صورت Service name تو همدیگه تعریف می شن نباید اسامی یکسانی داشته باشند.

----------


## devil00x

من یکی از سیستم هام که لینوکسی SID برابر orcl و سیستم دیگم که ویندوزیه هر کاری کردم که همون orcl رو براش بزارم خطا می گرفت و مجبور شدم اونو standby بزارم مشکلی پیش نمیاد یا نباید هم نام باشن؟؟؟

----------


## devil00x

کسی می تونه تو راه اندازی گارد کمک کنه ، میشه مرحله مرحله بفرمایید چطور میشه گارد راه انداخت ، یا حداقل نکاتی که استفاده میشه رو بیان کنید..

----------


## oracle_dba

> کسی می تونه تو راه اندازی گارد کمک کنه ، میشه مرحله مرحله بفرمایید چطور میشه گارد راه انداخت ، یا حداقل نکاتی که استفاده میشه رو بیان کنید..


سلام
من امروز جلسه آخر کلاس standby رو رفتم . یه دوره فشرده درون سازمانی . ایشاالله اندگی تامل کنید documnet  رو آماده می کنم و می فرستم .

----------


## devil00x

خدا خیرت بده جوون. اگه اینکار و بکنی که واقعا ازت ممنون میشم.
----------------------------------------------------------------------------
استادتون کی بود؟ یا به چه موسسه ای دوره داشتید؟اگه راضی هستید ازشون بفرمایید تا ما هم استفاده کنیم.

----------


## oracle_dba

> خدا خیرت بده جوون. اگه اینکار و بکنی که واقعا ازت ممنون میشم.
> ----------------------------------------------------------------------------
> استادتون کی بود؟ یا به چه موسسه ای دوره داشتید؟اگه راضی هستید ازشون بفرمایید تا ما هم استفاده کنیم.


سلام
خواهش می کنم . من در یک سازمان دولتی کلاس رفتم . استاد هم از بچه های سازمانه . شرمنده کلاساش فقط واسه پرسنله وگرنه قدم شما رو چشم . شرکت دانش افزار در این زمینه کلاس داره .
در حال اتمامه . ایشالله اولین جایی که خواهم گذاشت همین جاست

----------


## devil00x

آقا من همچنان منتظر documnet شما هستم ، بی صبرانه!!!

----------


## narcis_86

آقا خواهش مي كنم يه كم سريعتر چون من نياز فوري به اين اطلاعات دارم دارم.

----------


## oracle_dba

> آقا خواهش مي كنم يه كم سريعتر چون من نياز فوري به اين اطلاعات دارم دارم.


چشم . دو روزه فقط دارم تایپ می کنم . بالاخره تموم شد 
همیم امشب آپلودش می کنم .
ببخشید دیر شد

----------


## narcis_86

خیلی لطف می کنید ممنون می شم اگه امشب آپلود کنید.

----------


## oracle_dba

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

----------


## narcis_86

مرسی من الان دانلود کردم خیلییییییییییییییییییی ممنمون

----------


## devil00x

دوست عزیز واقعا خوب بود، بازم اگه مقاله هایی از این قبیل داشتی خوشحال میشیم مطالعه کنیم.
ضمنا از وبلاگتم سر زدم جالب بود، سعی کنی مقالات بیشتری توش بزاری مطمئنا بازدیدکننده بیشتری خواهی داشت.
حالا مقالت رو هنوز مطالعه نکردم ، تمام شد حتما نظراتم رو اعلام میکنم.

----------


## narcis_86

سلام 
قسمتی که باید standby controlfile را در مد backup بوجود آوریم error می ده مطمئنید تنظیمات دیگه نیاز نداره

----------


## oracle_dba

> سلام 
> قسمتی که باید standby controlfile را در مد backup بوجود آوریم error می ده مطمئنید تنظیمات دیگه نیاز نداره


سلام
تونستید hot backup بگیرید ؟
در سمت primary بعد از cold backup و قبل از خروج از مد Backup کنتر فایل مخصوص standby رو می سازید با دیتور زیر :
'  Sql > Alter database create standby controlfile as  ’/u01/backup/stanctl.ctl
اگه control file در سمت primary موجود باشه و دیتابیس در مد open باشه می سازه در مسیری که دادیم
پیغام خطا رو بگید ببینم می تونم بفهمم از چیه

----------


## devil00x

حالا یک سوال اینجا پیش میاد ، اگه اوراکل رو به صورت RAC (Real Application Cluster) x نصب شده باشه ، تنظیمات به چه صورت انجام میگیره .
مثلا ما archive log رو روی کدوم نود باید فعال کنیم؟؟؟
کسی چیزی میدونه؟؟؟

----------


## narcis_86

سلام
من تمامي مراحل را انجام دادم ولي در archived_log سمت standby هيچ اطلاعاتي وجود ندارد يعني اطلاعات به اين سمت فرستاده نشده؟ نمي دونيد چرا؟

----------


## oracle_dba

> حالا یک سوال اینجا پیش میاد ، اگه اوراکل رو به صورت RAC (Real Application Cluster) x نصب شده باشه ، تنظیمات به چه صورت انجام میگیره .
> مثلا ما archive log رو روی کدوم نود باید فعال کنیم؟؟؟
> کسی چیزی میدونه؟؟؟



سلام
خیلی عجله دارید ؟ من دارم روی ایجاد و راه اندازی standby روی rac کار می کنم . خوشحال میشم اگه کسی چیزی بدونه به اشتراک بگذاره و منم سعی می کنم کم کم که پیش میرم اینجا بنویسم مراحل رو ولی در آخر حتما document رو خواهم گذاشت .

----------


## oracle_dba

> سلام
> من تمامي مراحل را انجام دادم ولي در archived_log سمت standby هيچ اطلاعاتي وجود ندارد يعني اطلاعات به اين سمت فرستاده نشده؟ نمي دونيد چرا؟


سلام دوست عزیز
document کامل بود اگه نتیجه نگرفتید یعنی یکی از مراحل رو درست انجام ندادید و دوباره شروع کنید از ابتدا مراحل رو چک کنید . 
در این کار عیب یابی خیلی مشکل تر از شروع از نو می باشد .

----------


## devil00x

> سلام
> خیلی عجله دارید ؟ من دارم روی ایجاد و راه اندازی standby روی rac کار می کنم . خوشحال میشم اگه کسی چیزی بدونه به اشتراک بگذاره و منم سعی می کنم کم کم که پیش میرم اینجا بنویسم مراحل رو ولی در آخر حتما document رو خواهم گذاشت .


من هم طی همین 1-2 روز آینده این کار رو باید انجام بدم، درصورتی که مطالب جدیدی دستم اومد حتما اینجا قرار میدم.

----------


## devil00x

نمی دونم چرا دوستمون اون فایل مربوط به دیتا گارد رو از اینجا حذف کردن.
ولی جهت اطلاع دوستان یک نمونه کامل جهت راه اندازی دیتا گارد نوشتم و تو وبلاگم قرار دادم.
دوستان می تونن به آدرس زیر امضام جهت دانلود مراجعه کنند.

----------


## amin-sadeghi

سلام 
من در اراکل تقریبا تازه کارم
می خواستم اگه برای دوستان امکان داره standby db رو به صورت local هم توضیح بدید.
البته به صورت دقیق.
ممنون

----------


## devil00x

دوست عزیز منظورتون از لوکال چیه؟

----------


## oracle_dba

اگه منظورتون روی یه کامپیوتره من این کار رو با WMWare انجام دادم .  خیلی جالب بود چون دیگه نیاز به دو تا سرور نداشتم و با نصب دو تا os در VMWare تونستم راه اندازی کنم .

----------


## amin-sadeghi

سلام دوست عزیز
منظورم روی یک os و بدون vmwareاست.
در ضمن در فایل پارامتری که در داکیومنت شماست مسیر پارامترها نامشخصه
اگه امکان داره دقیق تر توضیح بدید.
من برای درس آز پایگاه باید Standby db راه اندازی کنم و از روی داکیومنت شما نتونستم.
لطفا کمکم کنید.
ممنون

----------


## devil00x

البته دوست عزیز این مورد رو در نظر داشته باش که دیتابیس Standby db رو معمولا به عنوان یک mirror دیتابیس و روی یک سیستم دیگه که حتی از نظر جغرافیایی هم از سیستم main DB جدا هست ، چرا که این نوع دیتابیس برای مواقعی که مشکلی برای دیتابیس اصلی پیش میاد استفاده می شه و کاربردی برای اینکه روی یک سیستم اجرا بشه دیده نمی شه؟حالا منظور شما از این کار چی هست؟

----------


## amin-sadeghi

بله.شما درست می گید.ولی به دلیل امکانات کم و در اختیار داشتن یک کامپیوتر مجبورم روی یک os اجرا کنم.

----------


## devil00x

دوست عزیز می تونی با نصب یک VM یک سیستم مجازی با یک IP غیره ایجاد میکنی و میشه دوتا سیستم که به راحتی می تونی یکی از این سیستم ها رو main  و دیگری رو standby
امیدوارم اینجوری مشکلت حل بشه.

----------


## amin-sadeghi

سلام
ببخشید ممکنه  سوالات من یکمی مبتدیانه باشه.
 ایا باید orcl instance و standby instance رو با استفاده از dbca روی دو هاست مختلف ایجاد کنم و فایل های داده رو از oradata/orcl به oradata/standby کپی کنم ؟

----------


## devil00x

instance روی main نصب شود و بابت فایلهای داده همونطور که تو آموزش گفتم بایستی از main بر روی standby کپی بشه دقیقا این مطالب رو توی وبلاگ (oraclemaster.blogfa.com)ذکر کردم.

----------


## amin-sadeghi

در کوئری که برای تست می گیریم ستون Applied دارای مقدار no است .چرا؟چه کار باید بکنیم تا مقدار yes داشته باشد؟

----------


## amin-sadeghi

کسی نیست جواب بده؟ اقای Devill00x ؟
نه
دوست عزیز Devill00x

----------


## oracle_dba

> در کوئری که برای تست می گیریم ستون Applied دارای مقدار no است .چرا؟چه کار باید بکنیم تا مقدار yes داشته باشد؟


سلام
مقدار no  در سمت standby به معنی این است که این Archive File که منتقل شده در سمت standby هنوز apply نشده است

----------


## amin-sadeghi

چه کار باید بکنیم که apply شود؟

----------


## oracle_dba

> چه کار باید بکنیم که apply شود؟


اگه هیچ کدام apply نشده یعنی یه جای کار مشکل داشته . یه دستور وجود داره که برای رجیستر کردن و apply کردن آرشیو فایل ها در سمت standby استفاده می شود ولی برای یک فایل آرشیو و نه زمانی که همه فایل های آرشیو apply نشده باشه . راه اندازیتون مشکل داره .

----------


## amin-sadeghi

ممنون از اینکه جواب دادید.
اگه ممکنه بگید این دستور چیه؟

در ضمن من با استفاده از داکیومنت شما و داکیومنتی که اینجا آپلود کردم و با استفاده از VMWare پیاده سازی کردم.اگه براتون امکان داره ببینید مشکل من از کجاست؟

----------


## aidin300

> چه کار باید بکنیم که apply شود؟


برای اینکه apply  بشه باید مراحل زیر رو به ترتیب انجام بدید

اول از انتقال فایل های آرشیو لاگ اطمینان پیدا کنید  و مطمئن شید که خطایی وجود نداره select dest_id,status,target,error from v$archive_dest

دستور زیر رو اجرا کرده باشید تا آرشیو لاگ های انتقال داده شده apply  شوند
alter database recover managed standby database disconenct from session;
مطمئن بشید که گپی وجودنداره 
select * from v$archive_gap
و اینکه تاریخ و timezone  هم یکی باشه و alert log  هم بررسی کنید

----------


## amin-sadeghi

همه ی این کارهایی که شما گفتید رو انجام دادم 
هیچ مشکلی نیست.هیچ خطا یا گپی وجود نداره .اما باز هم apply نشد.
از دستور ALTER DATABASE REGISTER PHYSICAL LOGFILE  هم استفاده کردم تا APPLY شوند ولی خطایی به صورت زیر ایجاد شد:
ERROR at line 1:
ORA-16089: archive log has already been registered
در ضمن منظورتون از timezone چیه؟

----------


## oracle_dba

سلام 
تنظیمات شبکه رو چک کنید 
من با داکیومنت خودم تونستم دوباره راه اندازی کنم . 
ممکنه از vmware باشه آخه من رو دو تا سرور مجزا run کردم . 
البته با vmware 7.0 هم امتحان کردم شد .

----------


## mojiloop

مراحل نصب Physical Stanby Database در مد Maximum Performance در محيط Oracle 10G (انتقال redo ها بوسيله archive ها) 
1. مرور Physical Stanby Database
2. نيازمنديهای سخت افزاری و نرم افزاری
3. انجام  تنظيمات لازم بر روی سيستم primary
4. انجام تنظيمات لازم بر روی سيستم  standby 
5. بررسي درستی عملکرد standby
*1. مرور Physical Stanby Database :*
 در اين قسمت تصميم داريم تا نحوه ايجاد Physical Standby Database  را شرح دهيم همانطور که در قسمتهای قبل گفته شد يک standby  ميتواند به دو صورت physical يا logical باشد که دراين  نصب از روش physical  استفاده ميکنيم هممچنين برای انتقال redo ها از primary به standby تصميم داريم از روش انتقال بوسيله archive ها استفاده نماييم به منظور اگاهي از تفاوت روشهای فوق ميتوانيد به لينک   Data Guard   و مدلهای مختلف Standby Database  مراجعه کنيد .
به منظور راه اندازی يک سيستم data guard لازم است  بر روی حداقل دو سيستم تنظيمات لازم را انجام داد از يک سمت سيستم primary  که يک سيستم عملياتی ميباشد و بايد تنظيمات لازم بر روی آن انجام شود تا redoهای ايجاد شده توسط آن به درستي به standby انتقال پيدا کند . از سوی ديگر حداقل يک سيستم standby  ميباشد که بايد redoهای فرستاده شده از سمت primary را دريافت نمايد و بر روی پايگاه داده خود اعمال نمايد تا با سيستم primary همزمان بماند .
*2. نيازمنديهای سخت افزاری و نرم افزاری :* 
*نيازمنديهای نرم افزاری :* 
به طور کلی هر نرم افزاری که در سمت primary اعم از سيستم عامل و نسخه اراکل موجود ميباشد لازم است بر روی سيستم standby نيز موجود باشد .
به عنوان مثال اگر در سمت primary  سيستم عامل linux ميباشد لازم است بر روی سيستم standby نيز  همين سيستم عامل موجود باشد . بهتر است در انتخاب  ويرايشها نيز دقت شود تا از بروز هرگونه مشکل خودداری شود .  
ليست نرم افزارهای مورد نياز نصب در هر دو سمت primary و standby به شرح زير ميباشد : 
                                                   پايگاه داده primaryنسخه اراکل oracle 10G  Release 10.2.0.1.0نام کامپيوترsrvprimIP کامپيوتر20.20.20.1سيستم عاملRed Hat Enterprise Linux AS release 4 (Nahant Update 3)نام SIDdbtest1Instance Service Namesdbtest1TNS Service Nametns_primary                                               پايگاه داده STANDBYنسخه اراکل oracle 10G  Release 10.2.0.1.0نام کامپيوترsrvstandbyIP کامپيوتر20.20.20.2سيستم عاملRed Hat Enterprise Linux AS release 4 (Nahant Update 3)نام SIDdbtest2Instance Service Namesdbtest2TNS Service Nametns_standby

*3*.* انجام  تنظيمات لازم بر روی سيستم primary :* 
در سمت primary سيستم data guard لازم است  تنظيمات لازم جهت ايجاد redo  در سمت primary , انتقال redo ها به سمت standby و رفع مشکلات security  انجام  شود . به طور کلی اين تنظيمات را ميتوان به شرح ذيل عنوان نمود :
1*. تنظيم پارامترهای مربوط به archive نمودن redolog ها در pfile يا spfile مربوطه و قرار دادن primary database در مد archive :*
پارامترهايی که بايد تنظيم شوند مطابق زير ميتوانند باشند  :

*log_archive_dest_1 = 'location=/u01/archive'*
log_archive_dest_state_1= 'enable'
*log_archive_format='%t_%s_%r.arc'*در صورتی که  پارامترهای بالا تنظيم نشده باشند و با spfile  بالا آمده باشيم ميتوانيم بوسيله دستورات زير اين تنظيمات را انجام دهيم :
*sql_10g   > alter system set* *log_archive_dest_1 = 'location=/u01/archive'  * 
*sql_10g >  alter system set* log_archive_dest_state_1=  'enable'  *sql_10g >  alter system set  log_archive_format='%t_%s_%r.arc'*
پس از اينکه تغييرات بالا اعمال شد ميتوان با استفاده از روش زير پايگاه داده را در مد    archive قرار داد :*sql_10g >* shutdown immediate  ;
*sql_10g* >  startup mount  ;
*sql_10g* > alter database archivelog  ;
*sql_10g >* alter database open  ;*Enable forced logging  . 2 :*enable نمودن ايجاد log  در پايگاه داده به صورت force امکانی است که از oracle 9i در اختيار کاربران قرار داده شده است  در صورت enable نمودن آن چنانچه يک transaction به صورت nologging باشد nologging در نظر گرفته نميشود و redo لازم جهت همزمانی standby   با primary ايجاد ميشود در غير اينصورت  لازم بود که dba خود تغييراتي را که log آنها ايجاد نشده پيدا نموده و به standby ها انتقال دهد . به منظور اعمال force logging  به صورت زير عمل مينماييم :
*sql_10g* > *alter database force logging;*
ميتوانيم با query زيراز اعمال آن اطمينان حاصل نمود : 
sql_10g > select force_logging from v$database 

FORCE_LOGGING
-------------
YES


3*.** ايجاد PASSWORD فايل* :   به منظور اطمينان از SECURITY پايگاه داده های STANDBY تمامی آنها بايد دارای   PASSWORD FILE باشند و پسورد کاربر SYS  درآنها بايد با پسورد کاربر SYS در PRIMARY يکسان باشد . در صورتيکه اين فايل قبلا در PRIMARY ايجاد شده باشد ميتوان با کپي نمودن آن به STANDBY از اين مرحله گذر نمود در غير اينصورت ميتوان اين فايل را در PRIMARY ايجاد وسپس به STANDBY انتقال داد.
$ *orapwd file=*_orapwdbtest1_*  password=*_sys_pass_
*نکته :* پس از انتقال password file  به standbyها بايد نام آن در سمت standby به صورت 'orapw'ORACLE_SID تغيير شود که  ORACLE_SID برابر نام INSTANCE مربوط به STANDBY ميباشد که در اين مثال dbtest2 ميباشد  (دقت داشته باشيد در linux حروف بزرگ و کوچک متفاوت ميباشند)
پس از اينکه password file  ايجاد شد لازم است تا امکان استفاده از آن برای primary  فراهم  شود  لذا مطابق زير خواهيم  داشت :
*sql_10g*  >  shutdown immediate 
*sql_10g*  >  startup nomount
*sql_10g* >  alter system set remote_login_passwordfile=exclusive scope=spfile 
*sql_10g*  >  alter database mount
*sql_10g*  >  alter database open4*.* *ايجاد سرويسهای لازم در oracle network file :*
به منظور امکان ايجاد ارتباط primary   با standby  جهت ارسال redo ها لازم است سرويس لازم در سمت primary ايجاد شود همچنين يک سرويس ديگر ايجاد ميشود تا در صورت تغيير نقش بتوان از آن استفاده نمود لذا لازم است تا در فايل tnsname.ora هر دو سمت standby  , primary اين دو سرويس را قرار داد . 
tns_primary=
(  DESCRIPTION =
   (ADDRESS_LIST =
        (ADDRESS =
            (PROTOCOL = TCP)
            (HOST = 20.20.20.1)
            (PORT = 1521)
         )
    )
    (CONNECT_DATA =
           (SERVICE_NAME =dbtest1)
     )
 )

tns_standby  =
(DESCRIPTION =
      (ADDRESS_LIST =
           (ADDRESS =
                (PROTOCOL = TCP)
                (HOST = 20.20.20.2)
                (PORT = 1521)
            )
       )
   (CONNECT_DATA =
           (SERVICE_NAME = dbtest2)
    )
)
همچنين لازم است listener مورد نياز در سمت primary را ايجاد نمود لذا در فايل listener.ora خواهيم داشت :LISTENER =
      ( DESCRIPTION_LIST =
          (DESCRIPTION =
              (ADDRESS_LIST =
                            (ADDRESS = (PROTOCOL = TCP)(HOST = 20.20.20.1)(PORT = 1521))
               )
            (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
            )
          )
      )
 پس از اينکه تنظيمات لازم را در listener.ora اعمال نموديم لازم است  listener را بالا و پايين کنيم $ *lsnrctl stop* 
*$* *lsnrctl start*پس از اين مرحله لازم است که درون فايل sqlnet.ora  يک پارامتر را تنظيم نماييم  البته اين تنظيم در سمت primary به اين دليل لازم است که امکان دارد بخواهيم يک switchover انجام بدهيم در غير اينصورت اين تنظيم فقط در سمت standby صورت ميگيرد :

                                      sqlnet.ora    
*SQLNET.EXPIRE_TIME=2*
.
.
.
5*.* *تنظيم پارامترهای primary database* :
پارامترهای متعددی در فايل پارامتر تنظيم ميشوند بيشتر اين پارامترها  به چگونگي استفاده instance  از disk ,cpu و حافظه  مربوط ميشوند . 
در سيستم dataguard  زمانی که مشخصات سيستم primary و standby مشابه ميباشند بيشتر پارامترها به جز موارد اندکی مشابه ميباشند .  
در اين قسمت  پارامترهايی  مهمی که در سمت primary به منظور  پيکربندی data guard لازم است  شرح ميدهيم : DB_UNIQUE_NAME 
INSTANCE_NAME
SERVICE_NAMES
LOG_ARCHIVE_CONFIG
FAL_CLIENT 
FAL_SERVER 
LOG_ARCHIVE_DEST_1
LOG_ARCHIVE_DEST_STATE_1
LOG_ARCHIVE_DEST_2
LOG_ARCHIVE_DEST_STATE_2 
STANDBY_FILE_MANAGEMENT اين پارامترها را به صورت زير تنظيم مينماييم :
DB_UNIQUE_NAME =  'dbtest1'
INSTANCE_NAME   =   'dbtest1'اين پارامتر مشخص کننده يک نام منحصر به فرد برای پايگاه داده primary ميباشد .SERVICE_NAMES =  'dbtest1'از اين پارامتر در تنظيم سرويس شبکه اراکل استفاده ميشود    . LOG_ARCHIVE_CONFIG = 'DG_CONFIG=(dbtest1,dbtest2)'اين پارامتر مشخص کننده ليست DB_UNIQUE_NAME ها در سمت primary و standby ميباشد .FAL_CLIENT  =  tns_primary      اين پارامتر در سمت PRIMARY برابر با سرويسی شده که به پايگاه داده سيستم PRIMARY  اشاره ميکند .FAL_SERVER =  tns_standby اين پارامتر در سمت   PRIMARY برابر با سرويسی شده که به پايگاه داده سيستم STANDBY اشاره ميکند .LOG_ARCHIVE_DEST_1= 'location= /u01/archive  valid_for=(all_logfiles,all_roles) db_unique_name=dbtest1'
LOG_ARCHIVE_DEST_STATE_1='enable' در تنظيم پارامتر LOG_ARCHIVE_DEST_1 لازم است  گزينه   VALID_FOR را که خود شامل دو قسمت است  تنظيم کنيم :
                   (VALID_FOR=(redo_log_type,database_roleredo_log_type : اين پارامتر مشخص کننده اين است که log فايلهايي که ميخواهد archive شود در صورتي مجاز ميباشد که بوسيله کدام redo log fileها ايجاد شده باشد اين گزينه ميتواند برابر ONLINE_LOGFILE ,  STANDBY_LOGFILE و ALL_LOGFILES باشدdatabase_role  : اين گزينه مشخص ميکند  LOG_ARCHIVE_DEST_1  در چه صورت معتبر است و ميتواند برابر PRIMARY_ROLE  ,STANDBY_ROLE و   ALL_ROLES باشد .  ALL_ROLES به اين معنا است که در هرشرايطی  PRIMARY يا STANDBY  معتبر است .
LOG_ARCHIVE_DEST_2='SERVICE=tns_standby  
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=dbtest2'اين پارامتر مشخص ميکند که  archive های توليد شده در LOG_ARCHIVE_DEST_2   به کجا ارسال ميشود . همچنين جزييات اين ارسال به چه صورت ميباشد  که مطابق آنچه تنظيم شده با استفاده از يک سرويس شبکه اراکل service=tns_standby به پايگاه داده standby اشاره شده است . همچنين  اين آدرس فقط زماني مجاز ميباشد که پايگاه داده ای که اين logها را توليد ميکند دارای نقش primary باشد در آخر  DB_UNIQUE_NAME مربوط به پايگاه داده standby ذکر شده است .
STANDBY_FILE_MANAGEMENT =AUTOنکته :  تعدادی از پارامترهای فوق مربوط به زمانی است که سيستم PRIMARY تغيير نقش داده و STANDBY شده است همچنين در تنظيم پارامترهای فوق همانطور که مشاهده کرديد امکاناتی قرار داه شده است که بتوان بدون تغيير در پارامتر فايل تغيير نقش داد  اين امکان همراه  ORACLE 10G  فراهم شده است . 
6.* تهيه  يک کپی از datafileهای primary و انتقال آنها به* * standby :*کپي تهيه شده از فايلهای داده primary ميتواند consistent  و يا غير consistent باشد  در صورتی که پايگاه داده open  نباشد کپی تهيه شده cold و consistent  خواهد بود و در صورتی که پايگاه داده open  باشد کپي تهيه شده hot و غير consistent است  . در صورتی نتوانيم پايگاه داده را برای مدتی  shutdown نماييم ناگزير از تهيه کپی به صورت inconsistent هستيم روشی که ما استفاده ميکنيم inconsistent است لذا به صورت زير عمل ميکنيم :
*sql_10g*> select name from v$datafile   ;
NAME
--------------------------------------------------------------------------------
/u03/data/db/system01.dbf
/u03/data/db/undotbs01.dbf
/u03/data/db/sysaux01.dbf
/u03/data/db/users01.dbf

*sql_10g*> select * from v$logfile           ;
 GROUP#        STATUS TYPE     MEMBER                           IS_RECOVERY_DEST_FILE
---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
 3                     ONLINE              /u03/data/db/redo03.log           NO
 2                     ONLINE              /u03/data/db/redo02.log           NO
 1                     ONLINE              /u03/data/db/redo01.log           NO
با اجرای دستورات فوق ليست فايلهای داده و redo log فايلها مشخص ميشود . در ادامه دستورات زير را اجرا ميکنيم :*sql_10g**>  alter database begin backup ;*
Database alteredحال فايلهای داده و redo log فايلها را از آدرسهای فوق به همان آدرس در سيستم standby انتقال ميدهند برای اين کار ميتوان از دستور scp  استفاده ميکنيم :*$ scp    /u03/data/db/*.dbf   20.20.20.2:/u03/data/db*
*$ scp    /u03/data/db/*.log  20.20.20.2:/u03/data/db*در ادامه در سمت primary خواهيم داشت :*sql_10g**>  alter database end backup ;**
**توجه : پس از اينکه فايلها را به standby سرور انتقال داديم دقت شود که فايلهای انتقال داده شده دارای owner مناسب باشند .
*7. ايجاد کنترل فايل مخصوص standby :* کنترل  فايل مربوط به standby متفاوت با کنترل فايل مربوط  به   primary ميباشد .  به همين دليل بايد  از روی کنترل فايل primary کنترل فايل مخصوص standby را ايجاد نمود . اين کنترل فايل به صورت زير ايجاد ميشود :
*sql_10g* >  *alter database create standby controlfile as '/u01/app/oracle/stbyctl.ctl';*

پس از اينکه کنترل فايل مربوط به standby ايجاد شد آنرا به STANDBY سرور در همان آدرس PRIMARY سرور انتقال ميدهيم . *توجه : *STANDBY CONTROL FILE  . 1 بايد پس از اينکه فايلهای داده کپی شدند ايجاد شود .*
*2 .  برای ايجاد فايل فوق ميتوانيم از RMAN نيز استفاده نماييم .* 


* 8.  تهيه PFILE  مورد نياز* *standby* :همانطور که قبلا گفتيم پارامتر فايل primary و standby از بسياری جهات مشابه يکديگر ميباشند لذا ميتوان با استفاده از پارامتر فايل primary  و اندکي تغيير در آن pfile مورد نياز standby را ايجاد نمود . در صورتی که با استفاده از spfile بالا آمده باشيم ميتوانيم ابتدا با استفاده از دستور زير pfile معادل آنرا ايجاد نماييم .
*sql_10g* > *create pfile='/u02/app/oracle/product/10.2.0/dbtest/dbs/initdbtest1.ora' from spfile* *توجه :  اسم پارامتر فايل بالا با علم به اينکه instance_name برابر dbtest1 است انتخاب شده است . پس از انتقال به standby آنرا به initdbtest2.ora تغيير ميدهيم

پس از اينکه فايل فوق ايجاد شد اين فايل را به همراه standby control file به سرور standby انتقال ميدهيم  . *توجه : پس از اينکه فايلها را به standby سرور انتقال داديم دقت شود که فايلهای انتقال داده شده دارای owner مناسب باشند .
** نکته مهم* :  *در تمام مراحل فرض  شده که آدرسهای ايجاد شده در سمت standby همان آدرسهای ايجاد شده در سمت primary ميباشند در صورتي که اينگونه نباشد لازم است تعدادی پارامتر ديگر نيز تنظيم شوند .*

4.* انجام  تنظيمات لازم بر روی سيستم  standby  :*
*1.* *تنظيم فايلهای شبکه اراکل:*
در اين مرحله همان سرويسهای ايجاد شده در سمت primary را به سمت فايل tnsnames.ora  مربوط به standby اضافه ميکنيم :
tns_primary=
(  DESCRIPTION =
   (ADDRESS_LIST =
        (ADDRESS =
            (PROTOCOL = TCP)
            (HOST = 20.20.20.1)
            (PORT = 1521)
         )
    )
    (CONNECT_DATA =
           (SERVICE_NAME = dbtest1)
     )
 )
tns_standby  =
(DESCRIPTION =
      (ADDRESS_LIST =
           (ADDRESS =
                (PROTOCOL = TCP)
                (HOST = 20.20.20.2)
                (PORT = 1521)
            )
       )
   (CONNECT_DATA =
           (SERVICE_NAME = dbtest2)
    )
) 
*فايل * listener.ora مربوط به standby را مشابه primary با اندکی تغيير به مانند زير تنظيم مينماييم :

LISTENER =
    (DESCRIPTION_LIST =
      (DESCRIPTION =
           (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = 20.20.20.2)(PORT = 1521))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
      )
    )
)
تنظيم فايل sqlnet.ora   به صورت زير :                                      sqlnet.ora    
*SQLNET.EXPIRE_TIME=2*
.
.
.
حال listener سمت standby را stop و start  تا از درستي آن اطمينان حاصل کنيم :$ lsnrctl stop
$ lsnrctl start2.*تنظيم پارامتر فايل مربوط به* *standby* :پس از اينکه پارامتر فايل primary را به standby انتقال داديم بايد تغييرات لازم را در آن اعمال کنيم تا بتوان از آن در سمت standby استفاده نمود سپس ميتوان از روی آن spfile ساخت . پارامترهايي که بايد در سمت primary آنها را تغيير داد به شرح زير ميباشند :
 
DB_UNIQUE_NAME =  'dbtest2'
INSTANCE_NAME   =   'dbtest2'اين پارامتر مشخص کننده يک نام منحصر به فرد برای پايگاه داده primary ميباشد .SERVICE_NAMES  =  dbtest2از اين پارامتر در تنظيم سرويس شبکه اراکل استفاده ميشود    .FAL_CLIENT  =      tns_standby 
FAL_SERVER =      tns_primaryدر سمت standby مقدار دو پارامتر فوق مطابق آنچه مشاهده ميشود با هم عوض ميشود .LOG_ARCHIVE_DEST_1= 'location= /u01/archive   valid_for=(all_logfiles,all_roles) db_unique_name=dbtest2'
LOG_ARCHIVE_DEST_STATE_1='enable' در تنظيم پارامتر LOG_ARCHIVE_DEST_1 لازم است  گزينه   VALID_FOR را که خود شامل دو قسمت است  تنظيم کنيم :
                   (VALID_FOR=(redo_log_type,database_roleredo_log_type : اين پارامتر مشخص کننده اين است که log فايلهايي که ميخواهد archive شود در صورتي مجاز ميباشد که بوسيله کدام redo log fileها ايجاد شده باشد اين گزينه ميتواند برابر ONLINE_LOGFILE ,  STANDBY_LOGFILE و ALL_LOGFILES باشد .
database_role  : اين گزينه مشخص ميکند  LOG_ARCHIVE_DEST_1  در چه صورت معتبر است و ميتواند برابر PRIMARY_ROLE  ,STANDBY_ROLE و   ALL_ROLES باشد .  ALL_ROLES به اين معنا است که در هرشرايطی  PRIMARY يا STANDBY  معتبر است .
LOG_ARCHIVE_DEST_2='SERVICE=tns_primary
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=dbtest1'اين پارامتر مشخص ميکند که  archive های توليد شده در LOG_ARCHIVE_DEST_2   به کجا ارسال ميشود . همچنين جزييات اين ارسال به چه صورت ميباشد  که مطابق آنچه تنظيم شده با استفاده از يک سرويس شبکه اراکل service=tns_primary به پايگاه داده primary اشاره شده است . همچنين  اين آدرس فقط زماني مجاز ميباشد که پايگاه داده ای که اين logها را توليد ميکند دارای نقش primary باشد در آخر  DB_UNIQUE_NAME مربوط به پايگاه داده  primary ذکر شده است . از اين پارامتر زماني استفاده ميکند که switchover انجام داده باشيم .
control_files =  /u03/data/db/stbyctl.ctlنام و مکان کنترل فايل کپي شده در سمت standby  را مشخص ميکند .  
3. *password file* : در اين روش نصب فرض بر اين شده که نام  instance  در هردو سمت primary , standby متفاوت  ميباشد لذا  در صورت وجود پسورد فايل در سمت  primary آنرا به standby انتقال ميدهيم و سپس نام آنرا به صورت  orapw$ORACLE_SID   تغيير ميدهيم  که   ORACLE_SID$ بيان کننده نام INSTANCE در سمت STANDBY ميباشد . در صورتی که مايل باشيد ميتوانيد آنرا در سمت STANDBY با دستور orapwd بسازيد . فراموش نکنيد که پسورد کاربر sys بايد همان پسورد کاربر sys در سمت primary باشد . 
 ORACLE_SID$  بيان کننده نام INSTANCE ميباشد . 
*4. شروع به کار standby database :*پايگاه داده standby  مادامي که در وضعيت standby باشد در دو وضعيت قرار داده ميشود open read only و يا redo log apply . در حالت open read only ميتوان يک سری کارهای مديريتی بر روی پايگاه داه انجام داد   . هرگز نبايد پايگاه داده را به صورت READ AND WRITE باز نمود   . در حال redo log apply اراکل REDO های فرستاده شده از سمت PRIMARY   را بر روی STANDBY اعمال مينمايد تا همزمان با تغييرات PRIMARY  پيش برود . 
با توجه به اين که امکان دارد در آينده بخواهيم SWITCHOVER يا FAILOVER انجام بدهيم بهتر است از هم اکنون فايلهای TEMPORARY را در سمت STANDBY ايجاد نماييم لذا به صورت زير عمل ميکنيم :
*sql_10g* > STARTUP OPEN READ ONLY  ;
*sql_10g*  > SELECT TABLESPACE_NAME FROM DBA_TABLESPACES
2> WHERE CONTENTS = 'TEMPORARY';
TABLESPACE_NAME
--------------------------------
TEMP1بوسيله دستور فوق ميتوانيم نام  TEMPORARY TABLESPACE  را بدانيم حال خواهيم داشت : *sql_10g* > ALTER TABLESPACE TEMP1 ADD TEMPFILE  '/u03/data/db/temp01.dbf' SIZE 40M REUSE;
سپس پايگاه داده را در مد redo log apply  قرار ميدهيم :*sql_10g*> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION 
تا وقتي که در سمت primary  يک log switch  صورت نگيرد هيچ فايل archive  به standby  فرستاده نميشود لذا با انجام يک switch  اجباری در سمت primary  اين امکان را فراهم ميکنيم  .
در سمت primary خواهيم داشت :*sql_10g* > ALTER SYSTEM SWITCH LOGFILE

*5. اطمينان از صحت انتقال و اعمال archiveها از سمت primary به standby :*
ابتدا در سمت primary بررسی ميکنيم که شماره redo log file جاری چند است :*sql_10g* > select SEQUENCE# ,STATUS
2  from v$log
3 /

SEQUENCE#   STATUS
---------- ----------------
221                    INACTIVE
222                   CURRENT
220                    INACTIVE 
مطابق نتيجه به دست آمده  شماره log جاری برابر 222 ميباشد اين log  را در سمت   primary  به صورت archive    تبديل    ميکنيم  :  *sql_10g* >  *alter system archive log current  ;*حال در سمت standby بررسي ميکنيم که آيا اين شماره archive رسيده و apply شده است يا خير :   *sql_10g*> select  max(sequence#)  from  v$archived_log  where applied='YES'در صورتيکه  شماره    archive نمايش داده شده  برابر 222 باشد نشان دهنده درستی عملکرد standby ميباشد .

----------


## tk2005730

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

میشه این داکیومنتی که دوستمون تو پست های اول گذاشتن را دوباره بذارین چون من لینک دانلودش را نمیبینم

ممنون
خیلی نیاز دارم :افسرده:

----------


## nargesx

سلام.
این مطالب رو میشه از کجا دانلود کرد؟
لطفا به ایمیلم جواب بدید onila10@yahoo.com

----------

