DataGuard-RAC到单实例

 物理standby rac到 单机搭建

OS : CentOS 6.6
DB : 11204
 
 数据库类型               DB_UNIQUE_NAME          
 ---------------------------------------------
 primary                  xedb                   
 physical standby              stxedb                 
 

1.创建standby数据库:
 
步骤1: 在主库设置强制日志: sql > alter database force logging;

步骤2: 启用主数据库归档: 
 sql> shutdown immediate;
 sql> startup mount;
 sql> alter database archivelog;
 sql> alter database open;

 步骤3: 配置主数据库standby redo日志

  搭建Data Guard环境,Oracle推荐主数据库配置Standby redo日志。主数据库随时准备快速转换为standby角色,所以需要提前在主数据库配置好standby redo,以便能够顺利的接收实时传送的日志,使整个切换过程更加平滑。

查看主库的联机日志:
sql> select thread#,bytes/1024/1024 "size(MB)",members from v$log;
  THREAD#   size(MB)    MEMBERS
  ---------- ---------- ----------
     1         50          2
     1         50          2
     2         50          2
     2         50          2

 当前环境只有2个节点,有2个日志组,每个日志组50M,每个日志组又两个成员。执行下面的sql为每个线程创建3个大小为50M,每个日志组2个成员。为 datadg1磁盘组。

注意: 无论什么时候添加一个redo日志组到主数据库,也必须添加日志组到standby数据库。否则,standby数据库可能变得不同步,这可能导致零数据丢失配置临时失败,或者导致最大保护模式下的主数据库被关闭。

  sql> alter database add standby  logfile thread 1('+DATADG01'size 50M;
  sql> alter database add standby  logfile thread 1('+DATADG01'size 50M;
  sql> alter database add standby  logfile thread 1('+DATADG01'size 50M;
  sql> alter database add standby  logfile thread 2('+DATADG01'size 50M;
  sql> alter database add standby  logfile thread 2('+DATADG01'size 50M;
  sql> alter database add standby  logfile thread 2('+DATADG01'size 50M;
 

查看所有redo文件列表,select * from v$logfile order by 1;

SQL> select * from v$logfile order by 1;

    GROUP# STATUS    MEMBER                                       
----------------------------------------------------------------------
     1        ONLINE    +DATADG01/xedb/onlinelog/group_1.257.894187573  
     1        ONLINE    +DATADG01/xedb/onlinelog/group_1.272.895662351  
     2        ONLINE    +DATADG01/xedb/onlinelog/group_2.258.894187573  
     2        ONLINE    +DATADG01/xedb/onlinelog/group_2.271.895662355  
     3        ONLINE    +DATADG01/xedb/onlinelog/group_3.265.894189463  
     3        ONLINE    +DATADG01/xedb/onlinelog/group_3.270.895662361  
     4        ONLINE    +DATADG01/xedb/onlinelog/group_4.266.894189465  
     4        ONLINE    +DATADG01/xedb/onlinelog/group_4.273.895662365  
     5        ONLINE    +DATADG01/xedb/onlinelog/group_5.275.898078073  
     5        ONLINE    +DATADG01/xedb/onlinelog/group_5.278.898078215  
     6        ONLINE    +DATADG01/xedb/onlinelog/group_6.277.898078147  
     6        ONLINE    +DATADG01/xedb/onlinelog/group_6.279.898078231  
     7        STANDBY   +DATADG01/xedb/onlinelog/group_7.282.901709803  
     8        STANDBY   +DATADG01/xedb/onlinelog/group_8.283.901709811  
     9        STANDBY   +DATADG01/xedb/onlinelog/group_9.284.901709815  
     10       STANDBY   +DATADG01/xedb/onlinelog/group_10.285.901709823 
     11       STANDBY   +DATADG01/xedb/onlinelog/group_11.286.901709827 
     12       STANDBY   +DATADG01/xedb/onlinelog/group_12.287.901709829 
 6 rows selected.

3.源端:rman 备份
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup  database format '/oradata/backup/full_%d_%T_%s_%p';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format '/oradata/backup/arch_%d_%T_%s_%p';
}

创建目标端控制文件,也可以用rman备份

SQL>alter database create standby controlfile as '/oradata/ctl_bf';
rman target /
 backup current controlfile for standby format '/oradata/backup/ctl_bf'

步骤4:设置主数据库的初始化参数

  在主数据库通过定义log_archive_dest_n控制redo传输服务。当主数据库被转换为standby角色,需要添加额外的参数,控制redo数据的接收和应用服务。

4.1 源端创建pfile:  sql> create pfile='/tmp/test.ora' from spfile;
    由于rac共享spfile文件,所以修改参数文件的操作只需要在一个节点完成。
  
4.2. scp 参数文件到目标端
     scp rman备份到目标端

4.3. vi 参数文件,控制文件 路径改一下添加如下内容

*.db_name='xedb'
*.fal_client='STXEDB'
*.fal_server='XEDB'
*.log_archive_config='dg_config=(xedb,stxedb)'
*.log_archive_dest_1='location=+ARCH_DG/arc1' valid_for=(all_logfiles,all_roles)  db_unique_name=xedb'
*.log_archive_dest_2='service=stxedb lgwr sync affirm  valid_for=(online_logfiles,primary_role) db_unique_name=stxedb'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='+DATADG01','/oradata/stxedb'
*.db_file_name_convert='+DATADG01','/oradata/stxedb'
*.standby_archive_dest='location=/oradata/arch'
*.standby_file_management='AUTO'
 
----------------------------------------------------------------------------
如果主库不停机可直接设置:
alter system set  log_archive_config='dg_config=(xedb,standbyxedb)' scope=spfile;
alter system set  log_archive_dest_1='LOCATION=+ARCH_DG/ARC1' valid_for=(all_logfiles,all_roles)  db_unique_name=xedb' scope=spfile;
alter system set  log_archive_dest_2='service=standbyxedb lgwr sync affirm  valid_for=(online_logfiles,primary_role) db_unique_name=standbyxedb' scope=spfile;
alter system set  log_archive_dest_state_1=enable scope=spfile;
alter system set  log_archive_dest_state_2=enable scope=spfile;
alter system set  remote_login_passwordfile=exclusive scope=spfile;
alter system set  fal_server=standbyxedb scope=spfile;
alter system set  standby_file_management=auto scope=spfile;
-----------------------------------------------------------------------------
参数说明:

log_archive_dest_1: location属性指定LOCATION=+ARCH_DG/ARC1表明本地归档Redo日志存放位置 valid_for 表明无论数据库是什么角色,各种类型的日志都要归档到这个目的地; log_archive_dest_1指定的  db_unique_name  必须在 dg_config 中出现,必须要与归档位置所在的数据库db_unique_name初始化参数相同。

log_archive_dest_2: service  指定远程服务器,通过 oracle net连接串,lgwr sync affirm 表明redo日志由lgwr进程以实时同步的方式传送到standby数据库中的Standby redo日志,并且在同步完成后给出响应;valid_for 表明该数据库是主数据库的时候,联机redo日志会被归档到该目录位置。

fal_server 和 standby_file_management  参数是当主数据库被转换为standby角色的时候变得有效,fal_server 指定本地oracle net服务名,从11g开始不需要fal_client参数。

db_file_name_convert='+DATADG01','/oradata/standynode'
log_file_name_convert='+DATADG01','/oradata/standynode'

注意:对于db_file_name_convert 和 log_file_name_convert 两个参数的配置要特别注意。如果有两台服务器A和B组成的DataGuard环境,服务器A是主服务器,服务器B是Standby数据库服务器,那么在A服务器的参数文件配置从服务器B转换为A的目录,在B服务器中的参数文件配置从服务器A转换到服务器B的目录。

在主数据库的参数文件配置完成后,copy到备服务器的$ORACLE_HOME/dbs目录下

 步骤5: 位standby数据库创建初始化参数文件
 
  直接在standby数据库中对从主数据库拷贝过来的参数文件进行修改,修改后按照init.ora的命名规则重命名参数文件。
  修改传递过来的参数文件,去掉有关rac配置以及修改相关的DG配置。修改后的初始化参数文件如下:

*.db_name='xedb'
*.db_unique_name='stxedb'
*.fal_client='stxedb'
*.fal_server='xedb'
*.log_archive_config='dg_config=(xedb,stxedb)'
*.log_archive_dest_1='location=/oradata/arch'
*.log_archive_dest_2='service=stxedb lgwr sync affirm   valid_for=(online_logfiles,primary_role) db_unique_name=stxedb'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_file_name_convert='+datadg01/xedb/onlinelog','/oradata/stxedb','+arch_dg/xedb/archivelog','/oradata/arch','+arch_dg/arc1','/oradata/arch'
*.db_file_name_convert='+DATADG01/xedb/datafile','/oradata/stxedb','+DATADG01/xedb/tempfile','/oradata/stxedb'
*.remote_login_passwordfile='exclusive'
*.standby_file_management='auto'



如果主数据库与standby数据库的目录不同,还需要添加如下参数,指定数据文件目录和日志文件目录的转换
db_file_name_convert='+DATADG01','/oradata'
log_file_name_convert='+DATADG01/arc','/oradata/arc'
注意:确保compatible初始化参数在主数据库和standby数据库中的设置是相同的。如果值不同,redo传输服务可能不能从主数据库传送redo数据到standby数据库。
 
步骤6:创建相应的目录结构
 
6.1 创建文件系统目录
根据参数文件的内容,创建相应的目录结构,并修改所有者和权限。

11g要创建这些目录
rm -rf $ORACLE_BASE/admin/$ORACLE_SID
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/dpdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/pfile
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/scripts
chmod -R 750 $ORACLE_BASE/admin

rm -rf $ORACLE_BASE/diag/rdbms/$ORACLE_SID
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/alert 
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/cdump 
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/hm    
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/incident
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/incpkg
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/ir    
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/lck   
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/metadata
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/stage 
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/sweep 
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace
chmod -R 750 $ORACLE_BASE/diag/rdbms/$ORACLE_SID


确保参数文件的配置目录都已经创建,并且有合适权限

上面的操作也可以通过asmcmd工具的mkdir命令完成
 
步骤7:配置Redo传输认证

 Data Guard 通过orale net  会话在Data Guard配置的成员之间 传送redo数据和控制消息。 redo传输会话可以使用ssl协议或者远程登陆密码文件进行认证。如果没有使用ssl认证,每个DataGuard配置中的成员必须配置使用远程登陆密码文件和每个物理Standby数据库必须有一个来自主数据库的最新密码文件拷贝。
 
注意: 无论什么时候,在主数据库授权或者收回sysdba权限,或者改变这些权限用户的登陆密码,都必须从主数据库拷贝最新的密码文件到 Data Guard配置中的每个standby数据库以替换密码文件,或者将每个standby 数据库修改为相同密码。
 
 从主数据库的$ORACLE_HOME/dbs目录传递密码文件到standby 数据库的相同目录,并重命名为orapwrtddg1,修改权限和用户组
 
步骤8: 配置主备数据库监听器
 
 用net manager为各自的数据库配置监听器,在11gR2中,监听器的创建和管理要使用grid用户来完成。
 对于standby 数据库而言 ,由于需要在节点使用rman连接standby数据库执行duplicate操作,所以需要配置静态的服务名,用于主数据库RMAN工具
的连接。在grid用户下的$GRID_HOME/network/admin/listener.ora文件加入以下内容:
 
SID_LIST_LISTENER= 
    (SID_LIST = 
        (SID_DESC = 
         (GLOBAL_DBNAME=rtdg1)
         (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
         (SID_NAME = rtdg1)
         )
    )
在listener.ora文件的SID_LIST列表中加入SID_DESC的描述,确保配置中的SID_NAME和ORACLE_HOME与oracle系统用户的 ORACLE_SID和ORACLE_HOME环境变量值是一致的。配置完成后用grid用户重启监听,是配置生效。
 
注意: 配置是修改grid用户下的GRID_HOME/network/admin/listener.ora配置文件,改文件配置中制定的ORACLE_HOME是oracle用户的ORACLE_HOME,而非grid用户的ORACLE_HOME
 
复制密码文件:

步骤9:创建Oracle Net服务名
 
 以oracle 用户登录服务器,修改主备数据库的$ORACLE_HOME/network/tnsname.ora文件,完成后 tnsping 验证一下。
 
步骤10: 启动standby数据库到nomount模式

 SQL> startup nomount pfile='/oradata/test.ora';
 sql> create spfile from pfile;
 sql> startup nomount ;
注意: standby先创建spfile,再启动到nomount模式
 
步骤11: 从主数据库复制文件到standby数据库,这里用rman

 从主数据库复制文件到standby数据库,最简单的方法莫过于使用 rman的duplicate复制命令,在10g中使用rman的duplicate命令复制standby数据库需要先将主数据库进行备份再复制,从11g开始使用该命令支持直接对活动的数据库进行复制,这对于数据量大的系统来说可以大大减少DataGuard部署需要花费的时间。
 

RMAN> restore standby  controlfile from '/oradata/backup/ctl_bf';

Starting restore at 29-DEC-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
output file name=/oradata/ogg02/control01.ctl
output file name=/oradata/ogg02/control02.ctl
Finished restore at 29-DEC-14



alter database mount;
RMAN> alter database mount ;

database mounted
released channel: ORA_DISK_1


验证有没有生效
select name from v$datafile;

12.rman 恢复

run
{
set newname for datafile '+DATADG01/xedb/datafile/system.259.894187575' to '/oradata/stxedb/system.259.894187575'; 
set newname for datafile '+DATADG01/xedb/datafile/sysaux.260.894187589' to '/oradata/stxedb/sysaux.260.894187589';
set newname for datafile '+DATADG01/xedb/datafile/undotbs1.261.894187601'to'/oradata/stxedb/undotbs1.261.894187601';
set newname for datafile '+DATADG01/xedb/datafile/undotbs2.263.894187615'to'/oradata/stxedb/undotbs2.263.894187615';
set newname for datafile '+DATADG01/xedb/datafile/users.264.894187621'  to '/oradata/stxedb/users.264.894187621';
set newname for datafile '+DATADG01/xedb/datafile/users.268.895081225'  to '/oradata/stxedb/users.268.895081225';
set newname for datafile '+DATADG01/xedb/datafile/users.269.895582787'  to '/oradata/stxedb/users.269.895582787';
set newname for datafile '+DATADG01/xedb/datafile/users.280.898078315'  to '/oradata/stxedb/users.280.898078315';
restore database ;
switch datafile all;
}


run{
   allocate channel c1 type disk;
   recover database;
}

主库先备份归档:RMAN> backup archivelog all format '/oradata/backup/arch_%d_%T_%s_%p';
将归档备份集Scp到备库;
备库再注册归档备份集:
RMAN> catalog backuppiece '/oradata/backup/arch_XEDB_20160121_25_1';


RMAN> recover database;
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 11 and starting SCN of 964852828

 
 
注意:所有的standby数据库复制工作结束后,删除之前在standby数据库监听器中配置的静态服务名。
 
 
步骤13: 启动redo apply

13.1 查看实例状态
sql> select status from v$instance;

shutdown immediate;
startup nomount;
alter database mount standby database;

SQL> select controlfile_type from v$database;

CONTROL
-------
STANDBY

13.2 以只读方式打开standby
sql> alter database open read only;

13.3 启动redo apply
sql> alter database recover managed standby database using current logfile disconnect from session;
 
从11gR2开始,物理standby数据库在打开的情况下也能应用日志,成为Active DataGuard
 
注意:如果standby数据库是一个rac数据库,所有节点传送的日志放在共享存储上,只有一个节点会启动MRP进程应用日志
 

你可能感兴趣的:(Oracle,DataGuard)