Oct 12 2017

Oracle 12c R2 (12.2.0.1) Real Time Apply Data Guard Installation on Oracle Linux 7.3

Category: Administration,Backup And RecoveryFatih Acar @ 11:11

Oracle Data Guard ensures high availability, data protection, and disaster recovery for enterprise data. Oracle Data Guard provides a comprehensive set of services that create, maintain, manage, and monitor one or more standby databases to enable production Oracle databases to survive disasters and data corruptions. Oracle Data Guard maintains these standby databases as copies of the production database.Then, if the production database becomes unavailable because of a planned or an unplanned outage, Oracle Data Guard can switch any standby database to the production role, minimizing the downtime associated with the outage. Oracle Data Guard can be used with traditional backup, restoration, and cluster techniques to provide a high level of data protection and data availability.

With Oracle Data Guard, administrators can optionally improve production database performance by offloading resource-intensive backup and reporting operations to standby systems.

Types of standby databases are Physical standby database, Logical standby database and Snapshot standby database.

I will demonstrate Physical standby database as working real time apply at this document. Most used type is Physical standby database type. You can investigate other types of standby database from Oracle docs.

I used Oracle RAC database as primary side and I used single instance database with asm file system as secondary side (Data Guard).

Firstly, you have to adjust system parameters of operating system on secondary side and create asm disks. After, you can start to install of grid infrastructure. You can create disk groups for DATA and FRA disk groups after install grid. After grid installation, you can install Oracle Data Guard database on grid infrastructure and ASM disks as software only. Finally you can restore and recover standby database from primary side and you can start synchronization apply after add standby redo log. I divide the stages of installation five steps.

You can find primary side (Oracle 12c RAC) installation steps here. I will use this infrastructure as primary side.

First Step : Configure Operation System on Secondery Side

1. Upgrade Packages

yum upgrade

yum install oracleasm-support

2. Selinux Disable

You can do disabled or permissive

vi /etc/selinux/config

SELINUX=disabled

3. Firewall Close and Disable

You can open after installation,but you have to give permission to necessary ports and services.

systemctl stop firewalld.service

systemctl disable firewalld.service

4. Create Users

groupadd –g 501 oinstall

groupadd –g 502 dba

groupadd –g 503 oper

groupadd –g 504 asmadmin

groupadd –g 505 asmdba

groupadd –g 506 asmoper

useradd –u 502 –g oinstall –G dba,asmdba,oper oracle

passwd oracle

useradd –u 501 –g oinstall –G asmadmin,asmoper,asmdba grid

passwd grid

5. Configure Bash Profile of Users

Oracle User

vi .bash_profile

# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_HOSTNAME=test12cdg.yourdomain

export ORACLE_UNQNAME=TDG

export ORACLE_BASE=/oracle/db/12.2.0.1

export DB_HOME=$ORACLE_BASE/db_home

export ORACLE_HOME=$DB_HOME

export ORACLE_SID=TDG

export ORACLE_TERM=xterm

export BASE_PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

alias sql=’sqlplus / as sysdba’

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

 

Grid User

# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_HOSTNAME=test12cdg.yourdomain

export ORACLE_UNQNAME=TDG

export ORACLE_BASE=/oracle/gridbase/12.2.0.1

export GRID_BASE=/oracle/gridbase/12.2.0.1

export GRID_HOME=/oracle/grid/12.2.0.1/grid_home

export ORACLE_HOME=/oracle/grid/12.2.0.1/grid_home

export ORACLE_SID=+ASM

export ORACLE_TERM=xterm

export BASE_PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$BASE_PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

alias sql=’sqlplus / as sysasm’

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

6. Create Directories

mkdir -p /oracle/grid/12.2.0.1/grid_home

mkdir -p /oracle/grid/12.2.0.1/log

mkdir -p /oracle/gridbase/12.2.0.1/

mkdir -p /oracle/db/12.2.0.1/db_home

chown -R oracle.oinstall /oracle/

chown -R grid.oinstall /oracle/grid*

chmod -R 775 /oracle/

7. Configure ASM Disks

*Your disk name can be different from I used. I configured sdc, sdd,sde disks for asm on my test suite. These sd* disks can be different on your system.

with root user.

oracleasm configure -i

Answers of Questions;

grid

asmadmin

y

y

After finish configuration you can make init with below command.

oracleasm init

Create partition.

fdisk /dev/sdc

fdisk /dev/sdd

fdisk /dev/sde

oracleasm createdisk DATA1 /dev/sdc1

oracleasm createdisk FRA1 /dev/sdd1

oracleasm createdisk GRID1 /dev/sde1

You can use scandisks and listdisks to control.

oracleasm scandisks

oracleasm listdisks

 

8. Configure Passwordless SSH Connection

You have to configure ssh passwordless connection. Oracle and Grid user of primary and secondary side have to connect each other passwordless.

You can find how to do this step here.

9. Chrony NTP Configuration

Chrony plugin came with Oracle Linux 7 version for ntp sync. You can write your ntp server information in /etc/chrony.conf file.

vi /etc/chrony.conf

server ntp.yourdomain

systemctl restart chronyd.service

systemctl enable chronyd.service

10. Configure Hosts File

You can write your domain name info instead of yourdomain text. Also, you can give IP addresses as your IP structure. You have to write IP and domain information to /etc/hosts file if you do not use dns server.

You have to add “40.50.60.100 tdg tdg.yourdomain” line on primary side. 40.50.60.100 IP address is our data guard server IP address.

vi /etc/hosts

20.10.4.141 ractest12c01 ractest12c01.yourdomain

20.10.4.142 ractest12c02 ractest12c02.yourdomain

20.10.4.143 ractest12c01-vip ractest12c01-vip.yourdomain

20.10.4.144 ractest12c02-vip ractest12c02-vip.yourdomain

20.10.4.145 ractest12c-scan ractest12c-scan.yourdomain

20.10.4.146 ractest12c-scan ractest12c-scan.yourdomain

20.10.4.147 ractest12c-scan ractest12c-scan.yourdomain

40.50.60.100 test12cdg test12cdg.yourdomain

11. DNS Register (optional)

You can configure dns information of nodes in /etc/resolf.conf file.

12. Preinstallation Package Intallation

yum install oracle-database-server-12cR2-preinstall

reboot

Second Step : Install Grid Infrastructure

You have to copy your grid installation files to grid_home. I recommend that you copy grid zip file to grid home and change owner of zip file, and unzip with grid user.

Copy and Unzip Grid Files

cp linuxx64_12201_grid_home.zip /oracle/grid/12.2.0.1/grid_home

chown grid.oinsall linuxx64_12201_grid_home.zip

su – grid

unzip linuxx64_12201_grid_home.zip

Display Config and Start Grid Installation

su –

export DISPLAY=:0.0

xhost +

su – grid

export DISPLAY=:0.0

xhost +

cd /$GRID_HOME/

./grid_Setup.sh

Fix & Check Again button creates fix scripts to resolve warnings. You have to run this scripts to resolve warnings.

You have to run this scripts respectively. The run can be a bit long. You can click OK, after run scripts. If you do not get an error, you can continue.

You can check your grid status with crs_stat -t and crsctl stat res -t commands with grid user.

Third Step : Create ASM Disk Group For DATA and FRA

Display Config and Start ASMCA

su –

export DISPLAY=:0.0

xhost +

su – grid

export DISPLAY=:0.0

xhost +

asmca

Fourth Step : Install Database as Software Only

You can unzip database file under /tmp/ and you have to give permission oracle user.

chown oracle.oinstall -R /tmp/database/

Display Config and Start Database Installation

su –

export DISPLAY=:0.0

xhost +

su – oracle

export DISPLAY=:0.0

xhost +

cd /tmp/database/

./runInstaller

Fifth Step : Restore Database And Synchronize

Now, we have to configure primary and secondary side to data transport for data guard.

1. Listener Configuration

I use different port to connect of primary side and secondary side.

Primary Side Rac Node 1

su – oracle

cd $ORACLE_HOME/network/admin

vi listener.ora

listener_dr_for_arch_test =

(ADDRESS_LIST =

(ADDRESS= (PROTOCOL= TCP)(Host= ractest12c01-vip.sm.gov.tr)(Port= 1545))

)

 

SID_LIST_listener_dr_for_arch_test =

(SID_LIST =

(SID_DESC =

(ORACLE_HOME= /oracle/db/12.2.0.1/db_home)

(SID_NAME = RACTEST1)

)

)

 

Start Listener

lsnrctl start listener_dr_for_arch_test

 

Primary Side Rac Node 2

su – oracle

cd $ORACLE_HOME/network/admin

vi listener.ora

listener_dr_for_arch_test =

(ADDRESS_LIST =

(ADDRESS= (PROTOCOL= TCP)(Host= ractest12c02-vip.sm.gov.tr)(Port= 1545))

)

SID_LIST_listener_dr_for_arch_test =

(SID_LIST =

(SID_DESC =

(ORACLE_HOME= /oracle/db/12.2.0.1/db_home)

(SID_NAME = RACTEST2)

)

)

 

Start Listener

lsnrctl start listener_dr_for_arch_test

 

Secondary Side

su – oracle

cd $ORACLE_HOME/network/admin

vi listener.ora

listener_dr_for_arch_test =

(ADDRESS_LIST =

(ADDRESS= (PROTOCOL= TCP)(Host = test12cdg.sm.gov.tr)(Port= 1545))

)

 

SID_LIST_listener_dr_for_arch_test =

(SID_LIST =

(SID_DESC =

(ORACLE_HOME= /oracle/db/12.2.0.1/db_home)

(SID_NAME = TDG)

)

)

 

Start Listener

lsnrctl start listener_dr_for_arch_test

 

2. Tnsnames Configuration

Primary Side Rac Node 1

su – oracle

vi tnsnames.ora

RACTEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c-scan)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

 

RACTEST1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c01-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)
RACTEST2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c02-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

 

DG_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = test12cdg.sm.gov.tr)(PORT = 1545))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = TDG)

)

)

 

PRI_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c01-vip.sm.gov.tr)(PORT = 1545))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

Primary Side Rac Node 2

su – oracle

vi tnsnames.ora

RACTEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c-scan)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

 

RACTEST1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c01-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

RACTEST2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c02-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

DG_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = test12cdg.sm.gov.tr)(PORT = 1545))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = TDG)

)

)

PRI_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c01-vip.sm.gov.tr)(PORT = 1545))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

Secondary Side

su – oracle

cd $ORACLE_HOME/network/admin

vi tnsnames.ora

RACTEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c-scan.sm.gov.tr)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RACTEST)

)

)

PRI_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ractest12c01-vip.sm.gov.tr)(PORT = 1545))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SID=RACTEST1)

)

)

DG_TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = test12cdg.sm.gov.tr)(PORT = 1545))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = TDG)

)

)

3. Archivelog Mode

Primary has to be archivelog mode.

You can check current status of archivelog mode with below query.

select log_mode from gv$database;

If write NOARCHIVELOG, you have to do below operation to do ARCHIVELOG mode.

srvctl stop database -d RACTEST

sqlplus / as sysdba

startup mount;
alter database archivelog;
alter database force logging;
alter database open;

4. Force Logging

You have to do force logging to log every thing.

alter database force logging;

5. Configure Parameters

You have to configure parameter to data guard.

Primary Side

sqlplus / as sysdba

alter system set log_archive_format=’%t_%s_%r.arc’ scope=spfile sid=’*’;
alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile sid=’*’;

alter system set log_archive_dest_1=’location=+FRA/RACTEST/ARCHIVELOG’ scope=both sid=’*’;

DB Name can be max 8 characters

alter system set log_archive_config=’DG_CONFIG=(RACTEST,TDG)’ scope=both sid=’*’;

alter system set log_archive_dest_2=’SERVICE=DG_TEST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TDG’ scope=both sid=’*’;

alter system set standby_file_management=AUTO scope=both sid=’*’;

alter system set log_archive_dest_state_2=enable scope=both sid=’*’;

alter system set fal_client= PRI_TEST scope=both sid=’*’;

alter system set fal_server= DG_TEST scope=both sid=’*’;

exit;

srvctl stop database -d RACTEST
srvctl start database -d RACTEST

5. Take Backup

Take backup from primary side and move to secondary side. I used /backup directory to take backup and use secondary side backup directory. Backup dir has to be the same on primary side and secondary side.

rman target /

delete archivelog all;

run {
ALLOCATE CHANNEL d1 TYPE DISK FORMAT ‘/backup/backup_pri_%d_s%s_p%p_%T’ ;
backup as compressed backupset database plus archivelog;
backup current controlfile for standby format ‘/backup/controlfile_standby.ctl’ ;
release channel d1;
}

exit;

sqlplus / as sysdba

create pfile=’/backup/pfile.ora’ from spfile;

exit;

Move backup files

cd /backup/

scp backup* oracle@test12cdg:/backup/

scp controlfile_standby.ctl oracle@test12cdg:/backup/

scp file.ora oracle@test12cdg:/backup/

6. Configure Pfile to Data Guard on Secondary Side

You have to configure pfile.ora file to data guard for secondary side. You can see configured pfile.ora at below.

vi pfile.ora

*.__data_transfer_cache_size=0
*.__db_cache_size=3657433088
*.__inmemory_ext_roarea=0
*.__inmemory_ext_rwarea=0
*.__java_pool_size=16777216
*.__large_pool_size=83886080
*.__oracle_base=’/oracle/db/12.2.0.1’#ORACLE_BASE set from environment
*.__pga_aggregate_target=1660944384
*.__sga_target=4982833152
*.__shared_io_pool_size=251658240
*.__shared_pool_size=956301312
*.__streams_pool_size=0
*.audit_file_dest=’/oracle/db/12.2.0.1/admin/TDG/adump’
*.audit_trail=’db’
*.cluster_database=false
*.compatible=’12.2.0′
*.control_files=’+DATA/TDG/CONTROLFILE/current.262.950370543′,’+DATA/TDG/CONTROLFILE/current.261.950370543′
*.db_block_size=8192
*.db_create_file_dest=’+DATA’
*.db_name=’RACTEST’
*.db_unique_name=’TDG’
*.db_recovery_file_dest=’+FRA’
*.db_recovery_file_dest_size=214748364800
*.diagnostic_dest=’/oracle/db/12.2.0.1′
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TDGXDB)’
*.fal_client=’DG_TEST’
*.fal_server=’PRI_TEST’
*.local_listener=’-oraagent-dummy-‘
*.log_archive_config=’DG_CONFIG=(RACTEST,TDG)’
*.log_archive_dest_1=’location=+FRA/TDG/ARCHIVELOG’
*.log_archive_dest_2=’SERVICE=PRI_TEST LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=RACTEST’
*.log_archive_dest_state_2=’DEFER’
*.log_archive_format=’%t_%s_%r.arc’
*.db_file_name_convert=’+DATA/RACTEST/DATAFILE’,’+DATA/TDG/DATAFILE’,’+FRA/RACTEST/DATAFILE’,’+FRA/TDG/DATAFILE’
*.log_file_name_convert=’+DATA/RACTEST/ONLINELOG’,’+DATA/TDG/ONLINELOG’,’+FRA/RACTEST/ONLINELOG’,’+FRA/TDG/ONLINELOG’
*.nls_language=’AMERICAN’
*.nls_territory=’AMERICA’
*.open_cursors=300
*.pga_aggregate_target=1579m
*.processes=640
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=4737m
*.standby_file_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′

7. Create Spfile from Pfile

You can create spfile from pfile.ora at secondary side.

sqlplus / as sysdba

create spfile from pfile=’/backup/pfile.ora’;

startup nomount;

8. Restore Database

Method 1

Secondary side

rman target /

restore standby controlfile from ‘/backup/controlfile_standby.ctl’;

alter database mount standby database;

restore database;

Method 2

Secondary side

rman target sys@PRI_TEST auxiliary sys@DG_TEST

target database Password:

connected to target database: RACTEST (DBID=1915123103)

auxiliary database Password:

connected to auxiliary database: RACTEST (not mounted)

duplicate target database for standby from active database dorecover nofilenamecheck;

9. Check Error Logs

After restore operation, if you see error logs like below, you have to do switch operation like below.

tail -100f /oracle/db/12.2.0.1/diag/rdbms/tdg/TDG/trace/alert_TDG.log

Error example:

WARNING: The converted filename ‘+DATA/TDG/datafile/users.260.950370491’
is an ASM fully qualified filename.
Changing the filename to ‘+DATA/MUST_RENAME_THIS_DATAFILE_7.4294967295.4294967295’.
Please rename it accordingly.

Solution:

sqlplus / as sysdba

alter system set standby_file_management=MANUAL;

exit;

You have to check datafile number from alert log, and you have to check datafiles.

rman target /

run{
set newname for datafile 1 to ‘+DATA/TDG/DATAFILE/SYSTEM.293.953893449’;
set newname for datafile 3 to ‘+DATA/TDG/DATAFILE/SYSAUX.292.953893449’;
set newname for datafile 4 to ‘+DATA/TDG/DATAFILE/UNDOTBS1.267.953893449’;
set newname for datafile 5 to ‘+DATA/TDG/DATAFILE/UNDOTBS2.291.953893449’;
set newname for datafile 7 to ‘+DATA/TDG/DATAFILE/USERS.294.953893451’;
switch datafile all;
}

exit;

sqlplus / as sysdba

alter system set standby_file_management=AUTO;

shutdown immediate;

startup mount;

10. Add Standby Log File

You have to add standby log file both on primary side and secondary side to real time apply synchronization.

You have to add one more number standby log than normal logfile.

You can see log file with below query.

Primary side

select * from gv$logfile;

If you see 4 logfile (default number), you can add 5 standby logfile and size has to be the same. You can see size with bwlow query.

select * from gv$log;

Also, you read this article to see how to add and drop standby log files.

Primary side

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;

alter database add standby logfile size 200M;

Secondary side

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;

alter database add standby logfile size 200M;

11. Start Synchronization

Secondary side

sqlplus / as sysdba

alter database open read only;

alter database recover managed standby database using current logfile disconnect from session;

12. Check Synchronization

Secondary side

Check alert log

tail -100f /oracle/db/12.2.0.1/diag/rdbms/tdg/TDG/trace/alert_TDG.log

Check query

sqlplus / as sysdba

select open_mode, database_role, protection_mode from gv$database;

READ ONLY WITH APPLY | PHYSICAL STANDBY | MAXIMUM PERFORMANCE

Primary side

select * from v$dataguard_status order by timestamp desc

alter system set log_archive_dest_state_2 = ENABLE

select * from gv$archive_dest_status where dest_id in (1,2)

SELECT a.name,a.resetlogs_id, DECODE (a.thread#, 1, ‘RAC NODE1’, ‘RAC NODE2’) HOST, b.last_seq son_olusan,
a.applied_seq son_uygulanan, TO_CHAR (a.uygulanan_son_zaman, ‘dd/mm/yyyy hh24:mi:ss’) son_uygulama_zamani
FROM (SELECT name,resetlogs_id, thread#, MAX (sequence#) applied_seq, MAX (next_time) uygulanan_son_zaman
FROM gv$archived_log
WHERE applied = ‘YES’ and name in (‘DG_TEST’) and resetlogs_id=(select max(resetlogs_id) from gv$archived_log)
GROUP BY name,resetlogs_id, thread# ) a,
(SELECT name,resetlogs_id, thread#, MAX (sequence#) last_seq
FROM gv$archived_log where name in (‘DG_TEST’) and resetlogs_id=(select max(resetlogs_id) from gv$archived_log)
GROUP BY name,resetlogs_id, thread# ) b
WHERE a.thread# = b.thread#
and a.name = b.name;

13. Post Installation

Secondary side

If you have grid user to manage listener, you have to give permission on $ORACLE_HOME/bin/oracle executable file. You have to give chmod 6751 permission. This provides that grid user can execute oracle file like oracle user. Oracle open process on OS when you connect to database. If you connect from remote with using listener, listener owner (grid) will want to open new process on OS but grid user cannot open process with using $ORACLE_HOME/bin/oracle file due to do not have permission. So you have to give 6751 permission to use $ORACLE_HOME/bin/oracle file.

[root@tdg bin] cd $ORACLE_HOME/bin/

[root@tdg bin] chmod 6751 oracle

 

 

234 total views, 14 views today

Tags: Oracle 12c, Oracle Administration, Oracle Backup and Restore, Oracle Data Guard

facebook comments:

Leave a Reply

Time limit is exhausted. Please reload CAPTCHA.