اوراکل 21.7 – راه اندازی دیتاگارد در سطح PDB(قابلیت DGPDB)

DGPDB(یا همان Data Guard per Pluggable Database) قابلیت جدیدی است که در نسخه 21.7 اوراکل ارائه شده و قرار است با کمک این قابلیت، در سطح PDB، دیتاگارد راه اندازی کنیم.

 در معماری قدیمی(قبل از ارائه DGPDB)، یکی از CDBها(به انضمام همه PDBها) در نقش primary قرار داشت و CDB دیگر نقش standby را ایفا می کرد و راه اندازی دیتاگارد برای یک PDB منوط به راه اندازی دیتاگارد برای CDB$ROOT بود و دیتاگارد هم نمی توانست container اضافه ای را داشته باشد به عبارتی دیگر، Guard عینا مشابه primary و یا در صورت مستثنا کردن بعضی از PDBها(enabled_PDBs_on_standby)، دیتاگارد زیر مجموعه ای از primary بود.

اما DGPDB این محدودیتها را برداشت معماری این قابلیت که شباهتهایی هم با قابلیت PDB switchover دارد(قابلیت switchover  در نسخه 18c ارائه شده بود)، به این صورت است که:

1.هر دو CDB در نقش primary و در حالت read write قرار دارند و برخلاف معماری سنتی، CDB$ROOT بین این دو دیتابیس یکسان نیست و هر CDBء PDBهای مختص به خود را دارند.

2.نقش standby و primary در سطح PDB قابل تنظیم است مثلا برای PDB حاضر در CDB1 می توانیم در CDB2 گارد ایجاد کنیم و به همین شکل می توانیم در CDB1 برای PDBهای حاضر در CDB2 دیتاگارد راه اندازی کنیم.

3.تغییر چندانی در پروسه ارسال و دریافت redoها در طرفین ایجاد نشده و پروسه TTnn در معماری DGPDB نقش کلیدی را ایفا می کند.

 در ادامه با ارائه سناریویی، بیشتر با این قابلیت جدید اوراکل آشنا خواهیم شد.

در سناریوی پیش رو، دو دیتابیس(CDB) داریم که نام یکی Tehran و دیگری Mazandaran است. دیتابیس Tehran یک PDB با نام varamin دارد و دیتابیس Mazandaran هم PDBای با نام babol دارد. قرار است برای babol دیتاگاردی را در دیتابیس Tehran ایجاد کنیم و به همین شکل برای PDB وارمین هم در دیتابیس Mazandaran دیتاگاردی را پیاده سازی کنیم.

قبل از اینکه وارد پیاده سازی این سناریو شویم، وضعیت فعلی دو دیتابیس Mazandaran و  Tehranرا بازبینی می کنیم.

–دیتابیس تهران:

[oracle@tehran  ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Aug 3 07:08:13 2022
Version 21.7.0.0.0
SQL> select NAME,OPEN_MODE,DATABASE_ROLE from v$database;
NAME      OPEN_MODE            DATABASE_ROLE
--------- -------------------- ----------------
TEHRAN    READ WRITE           PRIMARY
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 VARAMIN                        READ WRITE NO

–دیتابیس مازندران:

[oracle@Mazandaran ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Aug 3 06:51:26 2022
Version 21.7.0.0.0
SQL> select NAME,OPEN_MODE,DATABASE_ROLE from v$database;
NAME      OPEN_MODE            DATABASE_ROLE
--------- -------------------- ----------------
MAZANDAR  READ WRITE           PRIMARY
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 BABOL                          READ WRITE NO

برای پیاده سازی قابلیت DGPDB، مراحل زیر را طی خواهیم کرد:

1.هر دو دیتابیس باید در حالت archivelog و force logging باشند:

–Both

SQL> select LOG_MODE,force_logging from v$database;
LOG_MODE     FORCE_LOGGING
------------ ---------------------------------------
ARCHIVELOG   YES

2:پارامتر dg_broker_start را در هر دو دیتابیس به مقدار true تنظیم می کنیم:

–Both

SQL> alter system set dg_broker_start=true;
System altered.

3.تنظیم net service name در هر دو سمت. Net service nameها به CDB$ROOT اشاره می کنند:

–Both

MAZANDARAN =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mazandaran)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = mazandaran)
    )
  )
TEHRAN =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = tehran)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = tehran)
    )
  )

4.با اتصال به بروکر یکی از این دیتابیسها، configurationای را ایجاد می کنیم:

[oracle@Tehran ~]$ dgmgrl sys/sys@tehran
DGMGRL for Linux: Release 21.0.0.0.0 - Production on Wed Aug 3 07:21:42 2022
Version 21.7.0.0.0
Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "tehran"
Connected as SYSDBA.
DGMGRL> create configuration tehran primary database is tehran connect identifier is tehran ;
Connected to "tehran"
Configuration "tehran" created with primary database "tehran"
DGMGRL> show configuration;
Configuration - tehran
  Protection Mode: MaxPerformance
  Members:
  tehran - Primary database
Fast-Start Failover:  Disabled
Configuration Status:
DISABLED

5.در ادامه configuration مربوط به دیتابیس مازندران را در همین محیط اضافه می کنیم. برای این کار ابتدا باید password file دیتابیس Tehran را به mazanadaran منتقل کنیم:.

[oracle@Tehran dbs]$ scp orapwtehran mazandaran:/oracle21R7/base/dbs/orapwmazandaran

–tehran

DGMGRL> add configuration mazandaran connect identifier is mazandaran;
Configuration mazandaran added.
DGMGRL> show configuration;
Configuration - tehran
  Protection Mode: MaxPerformance
  Members:
  tehran     - Primary database
  mazandaran - Primary database in mazandaran configuration
Fast-Start Failover:  Disabled
Configuration Status:
DISABLED

با ورود در بروکر دیتابیس مازندران، خواهیم دید که همین پیکربندی در دیتابیس mazandaran هم ایجاد شده است:

— Mazandaran

[oracle@Mazandaran ~]$ dgmgrl sys/sys@mazandaran
DGMGRL for Linux: Release 21.0.0.0.0 - Production on Wed Aug 3 07:19:16 2022
Version 21.7.0.0.0
Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "mazandaran"
Connected as SYSDBA.
DGMGRL> show configuration;
Configuration - mazandaran
  Protection Mode: MaxPerformance
  Members:
  mazandaran - Primary database
  tehran     - Primary database in tehran configuration
Fast-Start Failover:  Disabled
Configuration Status:
DISABLED

6.configuration ایجاد شده را فعال می کنیم:

–tehran

DGMGRL> enable configuration all;
Succeeded.
DGMGRL> show configuration;
Configuration - tehran
  Protection Mode: MaxPerformance
  Members:
  tehran     - Primary database
  mazandaran - Primary database in mazandaran configuration
Fast-Start Failover:  Disabled
Configuration Status:
SUCCESS   (status updated 16 seconds ago)

7.همانطور که در ابتدای متن توضیح داده شد، قصد داریم استندبای varamin در دیتابیس mazandaran و استندبای babol را در دیتابیس Tehran راه اندازی کنیم:

–tehran

DGMGRL> add pluggable database varamin at mazandaran source is varamin at tehran pdbfilenameconvert is "'/tehran/varamin/','/mazandaran/varamin/'";
Connected to "mazandaran"
Connected to "tehran"
Enter password for DGPDB@tehran:
Connected to "mazandaran"
Enter password for DGPDB@mazandaran:
Pluggable Database "VARAMIN" added
DGMGRL> add pluggable database babol at tehran source is babol at mazandaran pdbfilenameconvert is "'/mazandaran/babol/','/tehran/babol/'";
Connected to "tehran"
Connected to "mazandaran"
Connected to "tehran"
Pluggable Database "BABOL" added

با اجرای این دستور، پارامترهای زیر هم به صورت خودکار توسط اوراکل تنظیم می شوند:

–tehran

Data Guard Broker executes SQL [alter system set log_archive_config='dg_config=(tehran,mazandaran)']
ALTER SYSTEM SET log_archive_config='dg_config=(tehran,mazandaran)' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_dest_2='service="mazandaran"','ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="mazandaran" net_timeout=30','valid_for=(online_logfile,all_roles)' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH;
ALTER SYSTEM SET fal_server='' SCOPE=BOTH;

با انجام این مرحله، varamin به دیتابیس mazandaran و babol به دیتابیس tehran اضافه شده است:

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 BABOL                          READ WRITE NO
         4 VARAMIN                        MOUNTED
SQL> alter session set container=VARAMIN;
Session altered.
SQL> select name from v$datafile;
/oracle21R7/base/oradata/TEHRAN/E528BE23480D198EE0530288200A6259/datafile/o1_mf_system_kggv3dc8_.dbf
/oracle21R7/base/oradata/TEHRAN/E528BE23480D198EE0530288200A6259/datafile/o1_mf_sysaux_kggv3dcl_.dbf
/oracle21R7/base/oradata/TEHRAN/E528BE23480D198EE0530288200A6259/datafile/o1_mf_undotbs1_kggv3dcn_.dbf

9.با رفتن به مسیری که این ویو به ما نشان می دهد، خواهیم دید که هنوز دیتافایلهای مربوط به PDB ورامین، به سرور Mazandaran منتقل نشده اند. در این مرحله دیتافایلها را به روش زیر، به سرور Mazandaran منتقل می کنیم:

–mazandaran

[oracle@Mazandaran ~]$ mkdir -p /oracle21R7/base/oradata/TEHRAN/E528BE23480D198EE0530288200A6259/datafile/

–tehran

SQL> alter session set container=VARAMIN;
Session altered.
SQL> alter database begin backup;
Database altered.
[oracle@Tehran ~]$ scp -r /oracle21R7/base/oradata/TEHRAN/E528BE23480D198EE0530288200A6259/datafile/* mazandaran:/oracle21R7/base/oradata/TEHRAN/E528BE23480D198EE0530288200A6259/datafile/
oracle@mazandaran's password:
o1_mf_sysaux_kggv3dcl_.dbf       100%  380MB 152.2MB/s   00:02
o1_mf_system_kggv3dc8_.dbf       100%  290MB 158.9MB/s   00:01
o1_mf_undotbs1_kggv3dcn_.dbf     100%  110MB 119.6MB/s   00:00
SQL> alter database end backup;
Database altered.

*همین مراحل را برای دیتابیس babol در Tehran تکرار می کنیم.

–tehran

[oracle@Tehran ~]$ mkdir -p /oracle21R7/base/oradata/MAZANDARAN/E5288100D1FA4C6DE055025056BC9305/datafile

–mazandaran

SQL> alter session set container=babol;
Session altered.
SQL> alter database begin backup;
Database altered.
[oracle@Mazandaran ~]$ scp /oracle21R7/base/oradata/MAZANDARAN/E5288100D1FA4C6DE055025056BC9305/datafile/* tehran:/oracle21R7/base/oradata/MAZANDARAN/E5288100D1FA4C6DE055025056BC9305/datafile/
oracle@tehran's password:
o1_mf_sysaux_kggt3bv8_.dbf        100%  380MB  63.3MB/s   00:06
o1_mf_system_kggt3btn_.dbf        100%  290MB  58.0MB/s   00:05
o1_mf_temp_kggt3bvd_.dbf          100%   35MB  60.9MB/s   00:00
o1_mf_undotbs1_kggt3bvb_.dbf      100%  110MB  55.0MB/s   00:01
SQL> alter database end backup;
Database altered.

10.در قدم بعدی، وضعیت دیتابیس babol و varmain را چک می کنیم:

DGMGRL>  show pluggable database varamin at mazandaran;
Connected to "mazandaran"
Pluggable database 'varamin' at database 'mazandaran'
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at tehran
  Transport Lag:       0 seconds (computed 27 seconds ago)
  Intended State:      APPLY-ON
  Apply State:         Not Running
Pluggable Database Status:
ORA-16766: Redo Apply is stopped
DGMGRL> show pluggable database babol at tehran;
Pluggable database 'babol' at database 'tehran'
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at mazandaran
  Transport Lag:       0 seconds (computed 43 seconds ago)
  Intended State:      APPLY-ON
  Apply State:         Not Running
Pluggable Database Status:
ORA-16766: Redo Apply is stopped

همانطور که می بینید، هنوز استندبای varamin و babol در حالت ریکاوری قرار نگرفته اند. قبل از انکه این دو استندبای را در حالت ریکاور قرار دهیم، standby redo log را برای هر دو ایجاد می کنیم:

–tehran

SQL> alter session set container=babol;
Session altered.
SQL> alter database add standby logfile thread 1 group 10 size 200M, group 11 size 200M, group 12 size 200M;
Database altered.

–mazandaran

SQL> alter session set container=varamin;
Session altered.
SQL> alter database add standby logfile thread 1 group 10 size 200M, group 11 size 200M, group 12 size 200M;
Database altered.

بعد از ایجاد SRL، استندبای را در حالت recover قرار خواهیم داد:

[oracle@Tehran ~]$ dgmgrl sys/sys@tehran
DGMGRL for Linux: Release 21.0.0.0.0 - Production on Wed Aug 3 09:26:12 2022
Version 21.7.0.0.0
Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "tehran"
Connected as SYSDBA.
DGMGRL> edit pluggable database babol at tehran set state='APPLY-ON';
Succeeded.
DGMGRL> edit pluggable database varamin at mazandaran set state='APPLY-ON';
Connected to "mazandaran"
Succeeded.

هر دو pdb در وضعیت recover قرار دارند:

DGMGRL> show pluggable database varamin at mazandaran;
Connected to "mazandaran"
Pluggable database 'varamin' at database 'mazandaran'
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at tehran
  Transport Lag:       0 seconds (computed 1 second ago)
  Intended State:      APPLY-ON
  Apply State:         Running
  Apply Instance:      mazandaran
  Average Apply Rate:  106 KByte/s
  Real Time Query:     OFF
Pluggable Database Status:
SUCCESS
DGMGRL> show pluggable database babol at tehran;
Pluggable database 'babol' at database 'tehran'
  Data Guard Role:     Physical Standby
  Con_ID:              4
  Source:              con_id 3 at mazandaran
  Transport Lag:       0 seconds (computed 1 second ago)
  Intended State:      APPLY-ON
  Apply State:         Running
  Apply Instance:      tehran
  Average Apply Rate:  1 KByte/s
  Real Time Query:     OFF
Pluggable Database Status:
SUCCESS

همچنین در alert log دیتابیس tehran، این اطلاعات قابل مشاهده است:

BABOL(4):Serial Media Recovery started
BABOL(4):TT07 (PID:52576): PDBID:4 Managed Recovery starting Real Time Apply [krsm.c:15931]
BABOL(4):max_pdb is 4
2022-08-03T09:26:13.781751-04:00
BABOL(4):TT07 (PID:52576): Media Recovery Log /oracle21R7/Archive/1_10_1111538197.dbf [krd.c:9452]
BABOL(4):TT07 (PID:52576): Media Recovery Waiting for T-1.S-11 (in transit) [krsm.c:6205]

و در دیتابیس mazandaran هم می توانیم اطلاعاتی را در مورد ریکاوری دیتابیس varamin ببینیم:

TT05 (PID:17443): Background Managed Recovery process started [krsm.c:1697]
2022-08-03T09:09:35.462862-04:00
VARAMIN(4):Serial Media Recovery started
VARAMIN(4):TT05 (PID:17443): PDBID:4 Managed Recovery starting Real Time Apply [krsm.c:15931]
VARAMIN(4):max_pdb is 4
2022-08-03T09:09:35.567467-04:00
VARAMIN(4):TT05 (PID:17443): Media Recovery Log /oracle21R7/Archive/1_10_1111542361.dbf [krd.c:9452]
VARAMIN(4):TT05 (PID:17443): Media Recovery Waiting for T-1.S-11 (in transit) [krsm.c:6205]

با هر log switchای در دیتابیس تهران، redoها به دیتابیس mazandaran هم منتقل می شوند(و بالعکس):

–tehran

SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.

–mazandaran

VARAMIN(4):Recovery of Online Redo Log: Thread 1 Group 10 Seq 15 Reading mem 0
VARAMIN(4):  Mem# 0: /oracle21R7/base/oradata/MAZANDARAN/onlinelog/o1_mf_10_kgnwqtcj_.log
2022-08-03T09:13:58.291468-04:00
TT03 (PID:15269): Archived Log entry 6 added for B-1111542361.T-1.S-15 ID 0x7f4e74074059 LAD:1 [krse.c:4934]
2022-08-03T09:13:58.312522-04:00
 rfs (PID:17598): Opened LNO:10 for DBID:1946630489 B-1111542361.T-1.S-16 [krsr.c:18238]
2022-08-03T09:13:58.312570-04:00
VARAMIN(4):TT05 (PID:17443): Media Recovery Waiting for T-1.S-16 (in transit) [krsm.c:6205]
2022-08-03T09:13:59.338512-04:00
VARAMIN(4):Recovery of Online Redo Log: Thread 1 Group 10 Seq 16 Reading mem 0
VARAMIN(4):  Mem# 0: /oracle21R7/base/oradata/MAZANDARAN/onlinelog/o1_mf_10_kgnwqtcj_.log
2022-08-03T09:14:01.301318-04:00
TT03 (PID:15269): Archived Log entry 7 added for B-1111542361.T-1.S-16 ID 0x7f4e74074059 LAD:1 [krse.c:4934]
2022-08-03T09:14:01.319898-04:00
 rfs (PID:17598): Opened LNO:10 for DBID:1946630489 B-1111542361.T-1.S-17 [krsr.c:18238]
2022-08-03T09:14:01.320127-04:00
VARAMIN(4):TT05 (PID:17443): Media Recovery Waiting for T-1.S-17 (in transit) [krsm.c:6205]
2022-08-03T09:14:02.344977-04:00
VARAMIN(4):Recovery of Online Redo Log: Thread 1 Group 10 Seq 17 Reading mem 0
VARAMIN(4):  Mem# 0: /oracle21R7/base/oradata/MAZANDARAN/onlinelog/o1_mf_10_kgnwqtcj_.log

برای switchover کردن دیتابیس هم کار سختی در پیش نداریم. برای مثال، با دستور زیر، دیتابیس varamin در mazandaran نقش primary و در Tehran نقش standby را به خود خواهد گرفت:

DGMGRL> switchover to pluggable database varamin at mazandaran;
Verifying conditions for Switchover...
Connected to "mazandaran"
Connected to "tehran"
  Source pluggable database is 'VARAMIN' at database 'tehran'
Performing switchover NOW, please wait...
  Closing pluggable database 'VARAMIN'...
  Switching 'VARAMIN' to standby role...
Connected to "mazandaran"
  Waiting for 'VARAMIN' to recover all redo data...
  Stopping recovery at 'VARAMIN'...
  Converting 'VARAMIN' to primary role...
  Opening new primary 'VARAMIN'...
Connected to "tehran"
  Waiting for redo data from new primary 'VARAMIN'...
  Starting recovery at new standby 'VARAMIN'...
Switchover succeeded, new primary is "VARAMIN"
DGMGRL> show pluggable database varamin at mazandaran;
Connected to "mazandaran"
Pluggable database 'varamin' at database 'mazandaran'
  Data Guard Role:     Primary
  Con_ID:              4
  Active Target:       con_id 3 at tehran
Pluggable Database Status:
SUCCESS
DGMGRL> show pluggable database varamin at tehran;
Pluggable database 'varamin' at database 'tehran'
  Data Guard Role:     Physical Standby
  Con_ID:              3
  Source:              con_id 4 at mazandaran
  Transport Lag:       0 seconds (computed 1 second ago)
  Intended State:      APPLY-ON
  Apply State:         Running
  Apply Instance:      tehran
  Average Apply Rate:  20 KByte/s
  Real Time Query:     OFF
Pluggable Database Status:
SUCCESS

–mazandaran:

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 BABOL                          READ WRITE NO
         4 VARAMIN                        READ WRITE NO

***با توجه به آنکه قابلیت DGPDB به تازگی ارائه شده محدودیتهای فراوانی نسبت به Data Guard(مرسوم) دارد(در نسخه 21.7):

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *