Linux环境下部署DG(一对一、一对多、RAC到单机)

本文详细介绍了如何在Linux系统中部署Oracle数据库的一对一、一对多及RAC到单机的主备同步配置。内容涵盖启动归档模式、修改数据库参数、配置监听、创建和恢复备库等关键步骤,旨在提供全面的数据库高可用性解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux环境下部署DG(一对一、一对多、RAC到单机)
注:此文章可能有些参数值不规划的不太一致,但整体部署没有问题,所涉及参数请自行替换即可。
规划:
主机名 iP db_unique_name instance_name service_names tnsname
primary 172.12.7.233 prod orcl prod prod
standby 172.12.7.234 prodstd orcl prodstd prodstd
注意:primary、standby在/etc/hosts文件内做了解析

首先在备库创建对应的目录,一定要注意目录的属主:

mkdir -p /u01/app/oracle/admin/orcl/{a,b,u}dump
mkdir -p /u01/app/oracle/oradata/orcl

主库配置:
一、启动归档模式

[oracle@temp01 database]$sqlplus / as sysdba
关闭数据库:
SQL> shutdown immediate
启动实例到mount状态:
SQL> startup mount
启用归档模式:
SQL> alter database archivelog;
启用强制记录日志模式:
SQL> alter database force logging;
查看是否开启强制记录日志模式:
SQL> select force_logging from v$database;
开启闪回数据库功能:
SQL> alter database flashback on;
查看是否开启了闪回:
SQL> select FLASHBACK_ON from  v$database;

开启闪回数据库功能需要调整以下参数:

修改db_recovery_file_dest、db_recovery_file_dest_size及db_flashback_retention_target三个参数内容
1)db_recovery_file_dest、db_recovery_file_dest_size两个参数用于指定闪回日志存放位置及最大大小。可以根据具体环境做相应调整。

SYS@ora11g> show parameter recovery_file
NAME                       TYPE        VALUE
-------------------------- ----------- ------------------------------
db_recovery_file_dest      string      /u01/app/oracle/flash_recovery _area
db_recovery_file_dest_size big integer 3852M

2)确认db_flashback_retention_target参数设置的内容。
db_flashback_retention_target参数限定了闪回可恢复的时间范围,默认是1440分钟,一天的时间。

SYS@ora11g> show parameter db_flashback_retention_target
NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
db_flashback_retention_target        integer     1440

查看是否开启闪回数据库功能:

SQL> select flashback_on from v$database;
SQL> alter database open;

二、修改参数(主库)
注:关于数据文件和日志文件路径转换参数的设置,放到了standby库里进行了设置。
单机配置(一对一模式):

alter system set db_unique_name='PROD';
alter system set fal_client='prod';
alter system set fal_server='prodstd';
alter system set log_archive_config='DG_CONFIG=(prod,prodstd)';
alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=prod';
alter system set log_archive_dest_2='service=prodstd lgwr async  valid_for=(online_logfiles,primary_role) db_unique_name=prodstd';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=enable;
alter system set standby_file_management='AUTO';

单机配置(一对多模式):

alter system set db_unique_name='oadb';
alter system set fal_client='oadb';
alter system set fal_server='oabk','xtoadg';
alter system set log_archive_config='dg_config=(oadb,oabk,xtoadg)';
alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=oadb';
alter system set log_archive_dest_2='service=oabk lgwr async valid_for=(online_logfile,primary_role) db_unique_name=oabk';
alter system set log_archive_dest_3='service=xtoadg lgwr async valid_for=(online_logfile,primary_role) db_unique_name=xtoadg';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=enable;
alter system set log_archive_dest_state_3=enable;
alter system set standby_file_management='AUTO';

RAC配置(一对多模式):

alter system set db_unique_name='omdb'  scope=both sid='*'
alter system set fal_client='omdb' scope=both sid='*'
alter system set fal_server='omdg','xtomdbdg' scope=both sid='*'
alter system set log_archive_config='dg_config=(omdb,omdg,xtomdbdg)' scope=both sid='*'
alter system set log_archive_dest_1='location=+FRA valid_for=(all_logfiles,all_roles) db_unique_name=omdb' scope=both sid='*'
alter system set log_archive_dest_2='service=omdg lgwr async valid_for=(online_logfile,primary_role) db_unique_name=omdg' scope=both sid='*'
alter system set log_archive_dest_3='service=xtomdbdg lgwr async valid_for=(online_logfile,primary_role) db_unique_name=xtomdbdg' scope=both sid='*'
alter system set log_archive_dest_state_1=enable scope=both sid='*';
alter system set log_archive_dest_state_2=enable scope=both sid='*';
alter system set log_archive_dest_state_3=enable scope=both sid='*';
alter system set standby_file_management='AUTO' scope=both sid='*';

一对一和一对多就是多了一个log_archive_dest_3参数的配置。

主库创建standby日志文件(单机配置):
注意:standby日志比redo日志多一组即可,建议10之前留给redo日志,11以后给standby日志使用。
standby日志文件大小要和redo日志文件大小一致。

ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby04.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby05.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby06.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby07.log') SIZE 50M;

主库创建standby日志文件(RAC配置):

alter database add logfile thread 1 group 5 ('+DATA/omdb/onlinelog/redo05a.log','+FRA/omdb/onlinelog/redo05b.log') size 50M; 
alter database add logfile thread 1 group 6 ('+DATA/omdb/onlinelog/redo06a.log','+FRA/omdb/onlinelog/redo06b.log') size 50M; 
alter database add logfile thread 2 group 7 ('+DATA/omdb/onlinelog/redo07a.log','+FRA/omdb/onlinelog/redo07b.log') size 50M; 
alter database add logfile thread 2 group 8 ('+DATA/omdb/onlinelog/redo08a.log','+FRA/omdb/onlinelog/redo08b.log') size 50M; 

三、配置监听(主库)
cd $ORACLE_HOME/network/admin
配置tnsnames.ora
一对一配置:

OMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = imesomdb-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdb.dlsteel.com)
    )
  )

omdg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.30.6.111)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdg.dlsteel.com)
    )
  )

一对多配置(各个节点的配置要确保一致):

OMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = imesomdb-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdb.dlsteel.com)
    )
  )

omdg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.30.6.111)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdg.dlsteel.com)
    )
  )

xtomdbdg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.204.41)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omts.dlsteel.com)
    )
  )

四、配置监听(备库)
cd $ORACLE_HOME/network/admin
配置tnsnames.ora
一对一配置:

OMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = imesomdb-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdb.dlsteel.com)
    )
  )

omdg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.30.6.111)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdg.dlsteel.com)
    )
  )

一对多配置:

OMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = imesomdb-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omdb.dlsteel.com)
    )
  )

xtomdbdg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.204.41)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = omts.dlsteel.com)
    )
  )

五、创建pfile文件和备份control文件和数据库

创建pfile文件:

SQL> create pfile='/home/oracle/pfile.bak' from spfile;

文件已创建。

备份控制文件:

SQL> alter database create standby controlfile as '/home/oracle/standbycontorl01.ctl';

备份数据库:

rman target /

backup database format '/u01/rmanbackup/FULL_%U.bak' ;
分多个多个通道快速备份:
rman target /
run
{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
backup database format='/u01/rmanbackup/full_%d_%T_%s_%p';
backup current controlfile format='/u01/rmanbackup/ctl_%d_%T_%s_%p';
backup spfile format='/u01/rmanbackup/spfile_%d_%T_%s_%p';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}

六、将pfile、密码文件、控制文件传到备库

将pfile文件和控制文件传到备库:

scp pfile.bak con.bak standby:/home/oracle

将密码文件传到备库:

scp $ORACLE_HOME/dbs/orapworcl standby:$ORACLE_HOME/dbs

传递数据库文件到备库:

scp 0103p09h_1_1 0203p09l_1_1 standby:/u01/rmanbackup

七、备库修改pfile文件
一对一配置:

*.db_unique_name='PRODSTD'
*.fal_client='prodstd'
*.fal_server='prod'
*.log_archive_config='DG_CONFIG=(prodstd,prod)'
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=prodstd'
*.log_archive_dest_2='service=prod lgwr async  valid_for=(online_logfiles,primary_role) db_unique_name=prod'
*.standby_file_management='AUTO'

RAC(一对多配置):
备库修改pfile文件(standby01)

*.db_unique_name='omdg'
*.fal_client='omdg'
*.fal_server='omdb'
*.log_archive_config='dg_config=(omdb,omdg)'
*.log_archive_dest_1='location=use_db_recovery_file_dest  valid_for=(all_logfiles,all_roles) db_unique_name=omdg'
*.log_archive_dest_2='service=omdb lgwr async valid_for=(online_logfile,primary_role) db_unique_name=omdb'
*.db_file_name_convert='+DATA/omdb/datafile/','/u01/app/oracle/oradata/omdb/'
*.log_file_name_convert='+DATA/omdb/onlinelog/','/u01/app/oracle/oradata/omdb/','+FRA/omdb/onlinelog/','/u01/app/oracle/oradata/omdb/'
*.standby_file_management='AUTO'

备库修改pfile文件(standby02)

*.db_unique_name='xtomdbdg'
*.fal_client='xtomdbdg'
*.fal_server='omdb'
*.log_archive_config='dg_config=(omdb,xtomdbdg)'
*.log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=xtomdbdg'
*.log_archive_dest_2='service=omdb lgwr async valid_for=(online_logfile,primary_role) db_unique_name=omdb'
*.db_file_name_convert='+DATA/omdb/datafile/','/u01/app/oracle/oradata/omdb/'
*.log_file_name_convert='+DATA/omdb/onlinelog/','/u01/app/oracle/oradata/omdb/','+FRA/omdb/onlinelog/','/u01/app/oracle/oradata/omdb/'
*.standby_file_management='AUTO'

八、恢复备库
1、首先通过pfile文件启动实例到nomount:

startup pfile='/home/oracle/pfile.bak' nomount

可能有些目录不存在,如果报错,创建对应的目录即可。
创建spfile文件:
方式一:

create spfile='/u01/app/oracle/product/11.2.0.4/db_1/dbs/spfilededa.ora'  from pfile='/home/oracle/pfile.bak';

方式二(启动到nomount状态直接创建spfile文件):

create spfile from pfile;

2、恢复standby控制文件
将stanbycontrol01.ctl 拷贝到

cp stanbycontrol01.ctl /u01/app/oracle/oradata/omdb/control01.ctl
cp stanbycontrol01.ctl /u01/app/oracle/fast_recovery_area/omdb/control02.ctl'

3、修改备库到mount状态

alter database mount;

注:只有在mount状态了,才可以利用rman进行数据库的恢复,来达到初始化的目的

备库创建standby日志文件,注意文件存放路径:

ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby04.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby05.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby06.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/orcl/standby07.log') SIZE 50M;

4、通过rman恢复备库
此处是将主库的备份文件拷贝到了standby服务器的/u01/dir目录下;

rman target /
catalog start with '/u01/dir';
restore database;

启用日志应用:

alter database recover managed standby database disconnect from session;

启动日志应用后,数据库在mount状态;

如果要启用只读模式下日志实施应用,请按以下步骤操作:
先确认源端和目标端的日志是否同步:

select max(sequence#) from v$archived_log;

查看灾备端日志是否应用完

SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM  V$MANAGED_STANDBY;

查询视图v$archived_log的applied字段

select applied from v$archived_log;

将standby库修改为只读模式:

alter database recover managed standby database cancel;
shutdown immediate;
重启启动数据库到只读模式:
startup nomount;
alter database mount standby database;
alter database open read only;
然后切回到日志应用模式:
alter database recover managed standby database using current logfile disconnect from session;

如果有需要帮助,请留言!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值