در بسیاری از سازمانها، امنیت و پایداری دادهها از مهمترین نیازهای زیرساختی محسوب میشود. Oracle Data Guard راهکاری قدرتمند برای ایجاد پایگاه دادهی پشتیبان (Standby) است که در صورت بروز مشکل در پایگاه دادهی اصلی (Primary)، بتوان بهسرعت سرویسدهی را ادامه داد.
در این راهنما، گامبهگام نصب Oracle Database 19c بر روی ویندوز سرور و سپس پیکربندی Data Guard برای ایجاد یک پایگاه دادهی Primary و یک Standby شرح داده میشود. تمامی مراحل با جزئیات عملی آورده شدهاند تا در پیادهسازی محیط تست یا حتی محیط عملیاتی کاربرد داشته باشند.
پیشفرضهای محیط آزمایشگاهی
برای اجرای این سناریو، ما یک محیط آزمایشگاهی بر پایه VMware Workstation ایجاد کردهایم. مشخصات کلی به صورت زیر در نظر گرفته شده است:
-
سیستمعامل:
Windows Server 2022 Datacenter (نصب روی هر دو ماشین مجازی) -
نسخه اوراکل:
Oracle Database 19c (نسخه 19.3) – نصب به صورت Single Instance -
نام ماشینها (Computer Name):
-
سرور اصلی (Primary):
winmain
-
سرور گارد (Standby):
winguard
-
-
آدرسهای IP:
-
Primary →
192.168.188.15
-
Standby →
192.168.188.16
-
Subnet Mask:
255.255.255.0
-
Gateway:
192.168.188.1
-
-
کاربران ویندوز:
-
Administrator (با پسورد دلخواه)
-
oracle (کاربری اختصاصی برای اجرای نرمافزار اوراکل، با پسورد دلخواه و دسترسی لازم به پوشههای بالا)
-
-
پورت ارتباطی اوراکل:
پورت پیشفرض 1521 باز و در فایروال مجاز شده است.
مرحله ۱: آمادهسازی ویندوز سرورها
تغییر نام کامپیوتر (Computer Name)
-
روی دسکتاپ یا منوی Start روی This PC یا Server Manager راستکلیک کنید و گزینه Properties را انتخاب نمایید.
-
در پنجره بازشده، سمت راست روی Advanced system settings کلیک کنید.
-
در تب Computer Name روی Change کلیک کنید.
-
نام جدید را وارد کنید:
-
سرور اصلی (Primary):
winmain
-
سرور پشتیبان (Standby):
winguard
-
-
OK کنید و سیستم را Restart نمایید.
تنظیم IP ثابت
-
روی آیکون شبکه پایین سمت راست (کنار ساعت) راستکلیک کرده و گزینه Open Network & Internet settings را انتخاب کنید.
-
در بخش Change adapter options، کارت شبکه (Ethernet) را انتخاب کنید.
-
روی کارت شبکه راستکلیک → Properties.
-
روی Internet Protocol Version 4 (TCP/IPv4) دابلکلیک کنید.
-
گزینه Use the following IP address را انتخاب نمایید:
-
Primary →
192.168.188.15
-
Standby →
192.168.188.16
-
Subnet mask:
255.255.255.0
-
Default gateway: (مثلاً
192.168.188.1
) -
DNS: همان Gateway یا DNS داخلی
-
-
OK کنید.
فعال کردن remote desktop
-
از Start منو Server Manager رو باز کن.
-
سمت چپ روی Local Server کلیک کن.
-
در بخش Properties آیتم Remote Desktop رو میبینی → روش کلیک کن.
-
پنجره System Properties باز میشه (مثل همون مسیر قدیمی).
-
گزینه Allow remote connections to this computer رو انتخاب کن.
ویرایش فایل hosts
-
مسیر زیر را در Notepad (Run as Administrator) باز کنید:
C:\Windows\System32\drivers\etc\hosts
2. این خطوط را اضافه نمایید:
192.168.188.15 winmain
192.168.188.16 winguard
فعالسازی Remote Desktop
-
از منوی Start، Server Manager را باز کنید.
-
در بخش Local Server، گزینه Remote Desktop را بیابید و روی آن کلیک کنید.
-
در پنجره بازشده، Allow remote connections to this computer را انتخاب کنید.
تنظیم پسورد برای Administrator
-
روی Start راستکلیک → Computer Management.
-
از منوی سمت چپ: Local Users and Groups → Users.
-
روی کاربر Administrator راستکلیک کنید → Set Password.
-
پسورد دلخواه را وارد نمایید.
ایجاد کاربر Oracle
-
در Computer Management به مسیر Local Users and Groups → Users بروید.
-
راستکلیک روی Users → New User.
-
نام کاربری:
oracle
-
پسورد دلخواه وارد کنید.
-
تیک Password never expires را بزنید و گزینه User must change password at next logon را بردارید.
مرحله ۲: آمادهسازی مسیرها و مجوزها
ایجاد مسیرهای لازم
روی هر دو سرور پوشههای زیر را بسازید:
C:\app\oracle
C:\app\oracle\product\19c\db_home
C:\app\oracle\oradata
C:\app\oracle\fra
C:\app\oracle\admin
اختصاص دسترسیها به کاربر oracle:
میتونی سریع همه مجوزها رو با CMD بزنی:
icacls "C:\app\oracle" /grant oracle:(OI)(CI)F /T
icacls "C:\app\oracle\product\19c\db_home" /grant oracle:(OI)(CI)F /T
icacls "C:\app\oracle\oradata" /grant oracle:(OI)(CI)F /T
icacls "C:\app\oracle\fra" /grant oracle:(OI)(CI)F /T
icacls "C:\app\oracle\admin" /grant oracle:(OI)(CI)F /T
-
(OI)(CI)
یعنی Permission برای فایلها و پوشههای داخل هم اعمال میشه. -
/T
یعنی recursive (همه زیرپوشهها). -
F
یعنی Full Control.
خروجی دستور:
C:\Users\Administrator>icacls "C:\app\oracle" /grant oracle:(OI)(CI)F /T
processed file: C:\app\oracle
processed file: C:\app\oracle\admin
processed file: C:\app\oracle\fra
processed file: C:\app\oracle\oradata
processed file: C:\app\oracle\product
processed file: C:\app\oracle\product\19c
processed file: C:\app\oracle\product\19c\db_home
processed file: C:\app\oracle\product\19c\db_home\WINDOWS.X64_193000_db_home.zip
Successfully processed 8 files; Failed processing 0 files
C:\Users\Administrator>icacls "C:\app\oracle\product\19c\db_home" /grant oracle:(OI)(CI)F /T
processed file: C:\app\oracle\product\19c\db_home
processed file: C:\app\oracle\product\19c\db_home\WINDOWS.X64_193000_db_home.zip
Successfully processed 2 files; Failed processing 0 files
C:\Users\Administrator>icacls "C:\app\oracle\oradata" /grant oracle:(OI)(CI)F /T
processed file: C:\app\oracle\oradata
Successfully processed 1 files; Failed processing 0 files
C:\Users\Administrator>icacls "C:\app\oracle\fra" /grant oracle:(OI)(CI)F /T
processed file: C:\app\oracle\fra
Successfully processed 1 files; Failed processing 0 files
C:\Users\Administrator>icacls "C:\app\oracle\admin" /grant oracle:(OI)(CI)F /T
processed file: C:\app\oracle\admin
Successfully processed 1 files; Failed processing 0 files
مرحله ۳: نصب نرمافزار Oracle
-
فایل Oracle Database 19c را در مسیر:
C:\app\oracle\product\19c\db_home\
و در همین مسیر extract می کنیم. هم در سرور اصلی و هم در سرور گارد.
بعد از extract میریم برای نصب.
روی setup راست کلیک می کنیم و run as administrator اجرا می کنیم
در صفحه اول set up software only رو انتخاب می کنیم
در صفحه دوم single instance database installation رو انتخاب می کنیم
در صفحه سوم enterprise edition رو انتخاب می کنیم.
در صفحه چهارم use existing windows user رو انتخاب می کنیم و در قسمت user name نام oracle رو وارد می کنیم.
در صفحه پنجم مقدار oracle base را برابر C:\app\oracle می گذاریم. این مقدار همان مقدار پیشنهادی است.
در صفحه شش پیش نیازها را چک می کند.
در صفحه هفتم دستور نصب را می زنیم.
در صفحه هشتم پیشرفت کار رو می بینید و در صفحه نهم با موفقیت نصب شده.
مرحله ۴: پیکربندی Listener
با اجرای دستور زیر:
روی هر دو سرور با زدن دستور netca یا اونطور که در ویندوز نمایش داده میشه net configuration assistant رو اجرا می کنیم
در صفحه اول listener configuration رو در نظر می گیریم
در صفحه دوم add رو انتخاب می کنیم
در صفحه سوم اسم listener و همچنین پسوردی که برای کاربر oracle در نظر گرفته بودیم رو وارد می کنیم.
در صفحه بعد همان tcp رو می گذاریم باشد.
همان پورت 1521 بصورت پیش فرض را وارد می کنیم.
در صفحه بعد next را می زنیم
و finish
مرحله ۵: ایجاد دیتابیس اصلی (Primary):
برای اینکار به مسیر
C:\app\oracle\product\19c\db_home\bin
می رویم و بر روی dbca کلیک می کنیم.
create a database > advanced configuration > general purpose or transaction processing >
اسم دیتابیس را orcl و اسم sid را نیز orcl می گذاریم. دیتابیس را از نوع container می سازیم و اسم pdb را نیز orclpdb میگذاریم.
در صفحه بعد use following for the datbase storage attributes می گذازیم و از نوع file system و مسیر را
{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}
می گذاریم بماند. تیک use oracle-managed files (omf) را هم می زنیم
در صفحه بعد تیک specify fast recovery area را می زنیم و مسیر را به مسیری که ساختیم تغییر می دهیم
{ORACLE_BASE}\fra\{DB_UNIQUE_NAME}
همینطور تیک ENABLE ARCHIVING را هم میزنیم.
در صفحه بعد همان LISTENERی که ساختیم را انتخاب می کنیم
در صفحات DATA FAULT چیزی را انتخاب نمی کنیم
در صفحه بعد چون محیط تست است، همه چیز را پیش فرض می گذاریم
در صفحه بعد همه تیکها را بر میداریم
در صفحه بعد همه پسوردها را یکی می دهیم و پسورد کاربر اوراکل سیستم عامل را نیز وارد می کنیم.
صفحه بعد را رها می کنیم و نصب را می زنیم.
پیکربندی Standby Logfile و Log Archive Config
ابتدا روی دیتابیس اصلی یک CMD باز کنید و دستورات زیر را برای اضافه کردن standby logfile اجرا کنید:
با دستور
sqlplus / as sysdba
به دیتابیس وصل می شویم.
alter database add standby logfile size 200m;
alter database add standby logfile size 200m;
alter database add standby logfile size 200m;
alter database add standby logfile size 200m;
تعداد standby logfile باید یک عدد بیشتر از تعداد redo logfileهای اصلی باشد و اندازه آنها نیز برابر انتخاب شود.
سپس برای آمادهسازی Data Guard پارامتر log_archive_config
را مقداردهی کنید:
alter system set log_archive_config='dg_config=(orcl,orclg)';
پیکربندی Listener در سرور Standby
قبل از شروع عملیات duplicate
، باید تنظیمات شبکه در هر دو سرور بهدرستی انجام شده باشد. ابتدا فایل listener.ora
در سرور گارد (Standby) را ویرایش کنید. مسیر فایل:
C:\app\oracle\product\19c\db_home\network\admin\listener.ora
قبل از تغییر:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle\product\19c\db_home)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\19c\db_home\bin\oraclr19.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = winguard)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
نسخه اصلاحشده:
LISTENER =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST=winguard)(PORT=1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orclg)
(ORACLE_HOME = C:\app\oracle\product\19c\db_home)
(GLOBAL_DBNAME = orclg)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle\product\19c\db_home)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\19c\db_home\bin\oraclr19.dll")
)
)
سپس listener را ریستارت کنید:
lsnrctl stop
lsnrctl start
lsnrctl status
خروجی status
باید نشان دهد که سرویس orclg
و CLRExtProc
بهدرستی ثبت شدهاند.
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 23-AUG-2025 14:26:54
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=TCP)(HOST=winguard)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 19.0.0.0.0 - Production
Start Date 23-AUG-2025 14:25:21
Uptime 0 days 0 hr. 1 min. 37 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File C:\app\oracle\product\19c\db_home\network\admin\listener.ora
Listener Log File C:\app\oracle\diag\tnslsnr\WIN-8N55M4BH8S2\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN-8N55M4BH8S2)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orclg" has 1 instance(s).
Instance "orclg", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
پیکربندی فایل tnsnames.ora
فایل tnsnames.ora
هم در همان مسیر network\admin
قرار دارد. تنظیمات هر دو سرور باید یکدیگر را بشناسند.
روی سرور اصلی (Primary):
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = winmain)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = winmain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCLG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = winguard)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclg)
)
)
روی سرور گارد (Standby):
LISTENER_ORCLG =
(ADDRESS = (PROTOCOL = TCP)(HOST = winguard)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = winmain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCLG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = winguard)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclg)
)
)
ساخت PFILE برای Standby
روی سرور اصلی وارد SQL*Plus شوید و یک PFILE مخصوص Standby بسازید:
sqlplus / as sysdba
create pfile='C:\app\oracle\product\19c\db_home\database\initorclg.ora' from spfile;
این فایل را به سرور Standby منتقل کنید و مطابق نیاز ویرایش کنید. نسخه نمونه:
*.audit_file_dest='C:\app\oracle\admin\orclg\adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='C:\APP\ORACLE\ORADATA\ORCLG\CONTROLFILE\O1_MF_xxx.CTL','C:\APP\ORACLE\FRA\ORCLG\CONTROLFILE\O1_MF_xxx.CTL'
*.db_block_size=8192
*.db_create_file_dest='C:\app\oracle\oradata'
*.db_name='orcl'
*.db_unique_name='orclg'
*.db_recovery_file_dest='C:\app\oracle\fra'
*.db_recovery_file_dest_size=12732m
*.diagnostic_dest='C:\app\oracle'
*.enable_pluggable_database=true
*.local_listener='LISTENER_ORCLG'
*.log_archive_format='%t_%s_%r.dbf'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1639m
*.processes=320
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4914m
*.undo_tablespace='UNDOTBS1'
*.log_archive_config='dg_config=(orcl,orclg)'
مقدار db_unique_name
باید حتماً متفاوت از Primary باشد (اینجا orclg
).
انتقال Password File
از روی Primary فایل پسورد را کپی کنید:
-
مسیر روی Primary:
C:\app\oracle\product\19c\db_home\database\PWDorcl.ora
کپی به Standby و تغییر نام به:
C:\app\oracle\product\19c\db_home\database\PWDorclg.ora
ایجاد سرویس اینستنس روی Standby
در ویندوز برای بالا آوردن Instance باید سرویس بسازیم. در CMD اجرا کنید:
oradim -new -sid orclg -startmode auto
پسورد کاربر oracle را وارد کنید. حالا سرویس OracleServiceORCLG
در Windows Services ایجاد میشود.
ساخت SPFILE از PFILE:
sqlplus sys@orclg as sysdba
create spfile='C:\app\oracle\product\19c\db_home\database\spfileorclg.ora'
from pfile='C:\app\oracle\product\19c\db_home\database\initorclg.ora';
shutdown immediate;
startup nomount;
show parameter spfile;
باید مقدار spfile روی مسیر ساختهشده اشاره کند.
اجرای RMAN Duplicate
روی Primary وارد RMAN شوید:
rman target sys@orcl auxiliary sys@orclg
سپس دستور زیر را بزنید:
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
اگر همه چیز رو تا حالا با من درست پیش اومده باشید، دستور duplicate با موفقیت انجام میشه.
روی دیتابیس گارد این تنظیمات رو انجام میدیم.
تنظیم Auto Start در ویندوز
بعد از ساخت موفق، در قسمت Services ویندوز سرویس OracleServiceORCLG
را از حالت Manual به Automatic تغییر دهید.
تنظیم Environment Variables (گرافیکی)
-
روی This PC راستکلیک کنید → Properties
-
سمت راست روی Advanced system settings بزنید
-
در تب Advanced → Environment Variables
در بخش System variables مقادیر زیر را اضافه کنید:
Variable name: ORACLE_HOME
Variable value: C:\app\oracle\product\19c\db_home
Variable name: ORACLE_SID
Variable value: orclg
همچنین متغیر Path
را ویرایش کرده و این مقدار را اضافه کنید:
C:\app\oracle\product\19c\db_home\bin
اکنون CMD جدید باز کرده و تست کنید:
sqlplus / as sysdba
اگر این کار رو انجام ندید یا بصورت محلی تنظیم نکنید،در هنگام اتصال به دیتابیس بدون پسورد ، با خطای زیر مواجه میشید
ERROR: ORA-12560: TNS:protocol adapter error
فعالسازی Data Guard Broker
روی هر دو سرور دستور زیر را اجرا کنید:
ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH;
با دستور زیر به دیتابیس اصلی وصل میشیم:
dgmgrl sys@orcl
بعد از اتصال ساخت کانفیگ اصلی با اضافه کردن دیتابیس اصلی
CREATE CONFIGURATION dg_cfg AS PRIMARY DATABASE IS orcl CONNECT IDENTIFIER IS orcl;
اضافه کردن گارد
ADD DATABASE orclg AS CONNECT IDENTIFIER IS orclg MAINTAINED AS PHYSICAL;
فعال کردن کانفیگ
ENABLE CONFIGURATION;
بعد از مدت کوتاهی دستور show configuration رو بزنید.
خروجی:
DGMGRL> show configuration;
Configuration - dg_cfg
Protection Mode: MaxPerformance
Members:
orcl - Primary database
orclg - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 10 seconds ago)
تبریک! Data Guard روی ویندوز سرور 2022 با Oracle 19c بهدرستی پیکربندی و آماده استفاده است. حتی پس از ریستارت سرورها، سرویسها بهصورت خودکار شروع خواهند شد و دیتابیس گارد در مدار باقی میماند.