به قسمت سوم از راه‌اندازی سناریو Active DataGuard پایگاه داده اوراکل خوش آمدید

پیکربندی rlwrap

تو مرحله اول از این سری نصب و راه‌اندازی پکیج rlwrap رو معرفی و نصب کردیم. حالا نوبت به این رسیده که پیکربندی مورد نیاز رو انجام بدیم

[oracle@shafaq ~]$ vim ~/.bash_profile

# rlwrap configuration
alias condb='rlwrap sqlplus / as sysdba'
alias conrm='rlwrap rman target /'
alias condg='rlwrap dgmgrl /'

از این به بعد از aliasها برای اتصال به دیتابیس، rman و گلدن گیت استفاده می‌کنیم.

چک کردن وضعیت grid و database

از طریق کاربر grid به سیستم‌عامل login کرده و با دستور crsctl نسبت به بررسی وضعیت منابع grid و database به شکل زیر اقدام می‌کنیم

از آپشن help می‌توانید برای کمک بیشتر استفاده کنید

crsctl = cluster control
----
stat = status
res = resurces
option t = Tabular display

چک کردن سایت شفق (primary)

[grid@shafaq ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       shafaq
ora.FRA.dg
               ONLINE  ONLINE       shafaq
ora.LISTENER.lsnr
               ONLINE  ONLINE       shafaq
ora.asm
               ONLINE  ONLINE       shafaq                   Started
ora.ons
               OFFLINE OFFLINE      shafaq
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       shafaq
ora.diskmon
      1        OFFLINE OFFLINE
ora.evmd
      1        ONLINE  ONLINE       shafaq
ora.orcl.db
      1        ONLINE  ONLINE       shafaq                   Open

چک کردن سایت تابان (standby)

[grid@taban ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       taban
ora.FRA.dg
               ONLINE  ONLINE       taban
ora.LISTENER.lsnr
               ONLINE  ONLINE       taban
ora.asm
               ONLINE  ONLINE       taban                    Started
ora.ons
               OFFLINE OFFLINE      taban
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       taban
ora.diskmon
      1        OFFLINE OFFLINE
ora.evmd
      1        ONLINE  ONLINE       taban

نحوه گرفتن help

[grid@taban ~]$ crsctl stat res -help
Usage:
  crsctl status resource [<resName>[...]|-w <filter>] [<-p|-v> [-e]] | [[-f|-l|-g]] | [[-k <cid>|-n <server>] [-d <did>]] | [-s -k <cid> [-d <did>]]
     Check status of designated resources

  crsctl status resource [<resName>[...]|-w <filter>] -t
     Print status of resources in tabular format

  crsctl status resource [<resName>[...]] -dependency [-stop | -pullup]
    Print resource dependencies
where
     resName [...]     One or more blank-separated resource names
     -w                Resource filter (e.g., "TYPE = ora.database.type")
     -p                Print static configuration
     -v                Print runtime configuration
     -e                Evaluate a resource instance's special values
     -f                Print full configuration
     -l                Print all cardinal and degree members
     -g                Check if resources are registered
     -k                Cardinality ID
     -d                Degree ID
     -n                Server name
     -s                Get target servers for relocation
     -t                Tabular display
     -dependency       Display resource dependencies, default is start dependencies
     -stop             Display resource stop dependencies
     -pullup           Display resource pullup dependencies

سناریو دیتاگارد

قدم اول - سایت primary

فعال کردن force logging یکی از شرطهای راه‌اندازی دیتاگارد است. در حقیقت با دادن hintهایی به optimizer می‌توان نوشتن در Online Redo Log Fileها را برای دستوراتی خاص متوقف کرد (مانند append, nologging) ولی با فعال کردن این ویژگی دیتابیس در هر حالتی عملیات ایجاد redoها را انجام خواهد داد.

[oracle@shafaq ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 3 23:05:21 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Automatic Storage Management option

SQL> alter database force logging;

Database altered.

قدم دوم (پارامترها) - سایت primary

۲ روش برای تغییر پارمترهای اوراکل وجود دارد:

  • روش اول: از روی SPFILE ما یک PFILE بسازیم و بعد از تغییر دوباره PFILE را تبدیل به SPFILE کنیم
  • روش دوم: تغییر پارامترها با استفاده از Alter در دیتابیس

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

فعالسازی فضای FRA

برای فعالسازی فضای FRA دو پارامتر db_recovery_file_dest و db_recovery_file_dest_size باید مقداردهی شوند

اگر موقع پیکربندی دیتابیس با ابزار DBCA این فضا رو پیکربندی کردید نیازی به پیکربندی ندارید

SQL> show parameter DB_RECOVERY_FILE_DEST;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
db_recovery_file_dest_size           big integer 20384M
SQL>

لیست پارامترها

alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles)' scope=both;
alter system set log_archive_dest_state_1=enable scope=both;
alter system set log_archive_format='archive_%s_%t.%r' scope=spfile;
alter system set log_archive_max_processes=30 scope=both;

alter system set log_archive_dest_2='service=standby lgwr sync valid_for=(online_logfiles,primary_roles) db_unique_name=maindg' scope=both;
alter system set log_archive_dest_state_2=enable scope=both;
alter system set log_archive_config='dg_config=(maindb,maindg)' scope=both;
alter system set db_unique_name=maindb scope=spfile;

alter system set dg_broker_start=true scope=both;
alter system set fal_server=standby scope=both;
alter system set fal_client=primary scope=both;
alter system set standby_file_management=auto scope=both;
alter system set db_file_name_convert='+data','+data' scope=spfile;
alter system set log_file_name_convert='+fra','+fra' scope=spfile;

مفهوم پارامترها

دنیای بدون مفهوم معنا نداره! تک تک مفهوم پارامترها رو بررسی میکنیم

پارامتر log_archive_dest_1

محل قرارگیری 1 مکان آرشیوها

مقدارها

LOCATION = محل قرارگیری لاگ‌ها

VALID_FOR = پارامتر ما برای چه حالت‌هایی redo dataها را در مقصد(محل مشخص شده) براساس فاکتورهای مشخص عملیات نوشتن را انجام دهد. این مقدار دارای ۲ آرگومان ورودی است.

 نکات مفید

ویژگی VALID_FOR به صورت اختیاری است (optional) ولی به هر حال اوراکل پیشنهاد میکنه این ویژگی برای هر مقصد redo transport در هنگام پیکربندی Oracle Data Guard تنظیم شود. با این تتظیم عملیات redo transport بعد از هر switchover و تغییر نقش ادامه پیدا می‌کند.

این ویژگی می‌تواند برای هر پارمتر LOG_ARCHIVE_DEST_n فعال شود. به طور مشخص این ویژگی از ۲ ورودی وابسته به هم پشتیبانی می‌کند: VALID_FOR=(redo_log_type,database_role)

کلمه کلیدی redo_log_type به طور مشخص برای تعیین این موضوع است که مقصد ما برای آرشیو کردن اطلاعات از چه نوعی است.

  • ONLINE_LOGFILE = در مقصد فقط online redo log fileها آرشیو می‌شوند.
  • STANDBY_LOGFILE = در مقصد فقط standby redo log fileها آرشیو می‌شوند.
  • ALL_LOGFILES = مقصد ما می‌تواند online redo log fileها و یا standby redo log fileها را آرشیو نماید.

کلمه کلیدی database_role به طور مشخص برای تعیین این موضوع است که مقصد ما در چه نقشی در باید در حال انجام عملیات آرشیو گردد:

  • PRIMARY_ROLE = پارامتر فقط در زمانی که مقصد در نقش primary است فعال میگردد.
  • STANDBY_ROLE = پارامتر فقط در زمانی که مقصد در نقش standby است فعال میگردد.
  • ALL_ROLES = پارارمتر در زمانهایی که مقصد در نقش primary و یا standby است می‌تواند معتبر و فعال باشد.

اگه شما به طور مشخص ویژگی VALID_FOR رو برای هر مقصدتان مشخص نکنید به طور پیش‌فرض آرشیو کردن online redo log fileها و standby redo log fileها در مقصد فعال میگردد، صرف نظر از اینکه پایگاه داده در نقش primary و یا standby است. رفتار پیش‌فرض مساوی تنظیم (ALL_LOGFILES,ALL_ROLES) در ویژگی VALID_FOR است.

این ویژگی می‌تواند هم در پایگاه داده primary و هم در پایگاه داده standby با یک initialization parameter فعال گردد.

مثال ویژگی VALID_FOR

مثال زیر رفتار این ویژگی در حالت پیش‌فرض است:

LOG_ARCHIVE_DEST_1='LOCATION=/disk1/oracle/oradata VALID_FOR=(ALL_LOGFILES, ALL_ROLES)'

وقتی پایگاه داده در نقش primary و یا standby است destination 1 تمام log fileها را در مسیر دایرکتوری لوکال /disk1/oracle/oradata آرشیو می‌کند.

Online Redo Log Fileها (ORL)

زمانی که Redo Buffer از RAM در Disk فلاش می‌شود محتویات redo در Online Redo Log Fileها نوشته می‌شود. حال زمانی که ما گارد راه‌اندازی می‌کنیم به پایگاه داده می‌گوییم با استفاده از عملیات log shipping شروع کن Online Redo ها را از روی Buffer‌ و یا Fileها با استفاده از Oracle Net Services به سمت مقصد مشخص شده بفرست.

Standby Redo Log Fileها (SRL)

درحقیقت SRLها از جنس ORL و با همان مکانیزم‌ها هستند با این تفاوت که redo ای را در خود نگهداری می‌کنند که از سمت پایگاه داده primary به پایگاه داده فعلی (standby) فرستاده شده است. بعد از دریافت redoها از سمت standby توسط background process ای به نام RFS و ذخیره در SRLها وظیفه‌ی  Background Process ای به نام MRP و یا LSP (بسته به نوع مکانیزم دیتاگارد - فیزیکال و یا لاجیکال) است که SRLها را بر روی ORLهای آن پایگاه داده اعمال نماید.

نکته: SRLها هم در سمت primary و هم standbyها ساخته می‌شوند ولی تا زمانی که SwitchOver ای اتفاق نیافتد(نقش‌ها عوض نشوند) در سمت primary خالی هستند.

بررسی نیاز یا عدم نیاز به SRL

اوراکل پیشنهاد میکنه همیشه در سناریو دیتاگارد SRL داشته باشید اما می‌توانید بدون ایجاد SRLها هم زیرساخت دیتاگارد را فقط با استفاده از آرشیوهای دیتابیس primary راه‌اتدازی کنید.

دیتاگارد اوراکل(standby) به طور کلی در ۳ رفتار مختلف می‌تواند از پایگاه داده primary شما محافظت می‌کند انتخاب هر کدام از این رفتارها با توجه به بیزنس و نیازمندی شما است و زیرساخت می‌تواند بدون SRL و یا با SRL باشد:

  •  Maximum Performance = الزاما نیاز به SRL نداره، چون در این رفتار پایگاه داده standby میتواند sync نباشد
  • Maximum Protection = الزاما نیاز به SRL دارد، چون الزما باید پایگاه داده standby با primary حتما sync باشد
  •  Maximum Availability = در این رفتار مادامی پایگاه داده ها با هم sync هستند همانند رفتار protection عمل می‌گردد و مادامی که sync نیستند همانند رفتار performance عمل می‌گردد

منابع

https://docs.oracle.com/cd/B28359_01/server.111/b28294/log_arch_dest_param.htm

https://community.oracle.com/docs/DOC-1007036