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;
如果有需要帮助,请留言!!!