搭建一个物理的standby详解

DataGurd除了了备份恢复,还可用于读写分离应用;

下面详细介绍物理standby的搭建;
0.应用环境:

   OS:RHEL5.2  DB:11gR2.0.2
  数据库  IP       DB_NAME   DB_UNIQUE_NAME    Oracle Net Service Name
  主      1.1.1.1    alex                alex                      alex
  备      1.1.1.2    alex                 alexstb                alexstb


1.主库配置

1)强制日志功能      --This statement can take a considerable amount of time to complete, because it waits for all unlogged direct write I/O to finish
alter database force logging;
select force_logging from v$database;   -- 验证是否为YES

2)创建口令文件

  1) 关闭强密码认证。
在主库和备库上都去执行:  ---11G在密码文件中启用了强密码认证方式,这特性要求主库和备库的密码要求完全一致
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=BOTH;            --否则会报错,returning error ORA-16191.
在主库和备库上创建相同密码的密码文件:
orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>
2) 拷贝主库的密码文件到备库上,更改文件名。

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=10
ls -l $ORACLE_HOME/dbs/orapw*    #检查密码文件
sqlplus sys/oracle@alex as sysdba

3)在主库上创建备用日志——切换时使用
ALTER DATABASE ADD STANDBY LOGFILE
group 4 ('/u01/app/oracle/oradata/alex/stbredo01.log') size 50M,
group 5 ('/u01/app/oracle/oradata/alex/stbredo02.log') size 50M,
group 6 ('/u01/app/oracle/oradata/alex/stbredo03.log') size 50M;

select * from v$log; -- 查看日志组的信息
select * from v$logfile; -- 查看日志组成员的信息。

4)编制主库初始化参数
create pfile='/home/oracle/pfile.ora' from spfile;
cp pfile.ora pfile.stb
cp pfile.ora pfile.org
添加如下行:
*.db_unique_name=alex
*.log_archive_config='dg_config=(alex,alexstb)'
*.log_archive_dest_1='location=/u01/app/oracle/oradata/alex/archive valid_for=(all_logfiles,all_roles) db_unique_name=alex'
*.log_archive_dest_2='service=alexstb async valid_for=(all_logfiles,primary_role)  db_unique_name=alexstb'
*.log_archive_dest_state_2=defer
*.log_archive_format=%t_%s_%r.arc
*.log_archive_max_processes=30
*.remote_login_passwordfile=exclusive

*.fal_client='alex'
*.fal_server='alexstb'
*.standby_file_management=auto
*.log_file_name_convert=("/u01/app/oracle/oradata/alexstb","/u01/app/oracle/oradata/alex")
*.db_file_name_convert=("/u01/app/oracle/oradata/alexstb","/u01/app/oracle/oradata/alex")
*.archive_lag_target=1800   #可选
建议使用spfile,这样可以动态的修改参数;
startup nomount pfile='/home/oracle/pfile.ora'     ---check:select * from V$DATAGUARD_CONFIG;
create spfile from pfile='/home/oracle/pfile.ora';
shutdown immediate

5)设置归档
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

6)创建备库所需的控制文件
startup nomount
alter database create standby controlfile as '/home/oracle/control01.ctl';
alter database open;


7)创建监听和服务器名文件

scp listener.ora tnsnames.ora  1.1.1.2:$ORACLE_HOME/network/admin/.   #copy to 备库

listener.ora:
  LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = study1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

 tnsnames.ora:
alex =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = study1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = alex)
    )
  )

 

2、备库设置
1)在备库创建口令文件
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=10
ls -l $ORACLE_HOME/dbs/orapw*    #检查密码文件
sqlplus sys/oracle@alex as sysdba

2)创建相应的目录
mkdir -p /u01/app/oracle/admin/$ORACLE_SID/{a,b,c,u}dump
mkdir -p /u01/app/oracle/oradata/$ORACLE_SID/archive

2)创建Standby参数文件
*.audit_file_dest='/u01/app/oracle/admin/alexstb/adump'    #注意修改audit路径
*.db_unique_name=alexstb
*.log_archive_config='dg_config=(alex,alexstb)'
*.control_files='/u01/app/oracle/oradata/alexstb/control01.ctl', '/u01/app/oracle/oradata/alexstb/control02.ctl'
*.log_archive_dest_1='location=/u01/app/oracle/oradata/alexstb/archive valid_for=(all_logfiles,all_roles) db_unique_name=alexstb'
*.log_archive_dest_2='service=alex async valid_for=(all_logfiles,primary_role)  db_unique_name=alex'
*.log_archive_dest_state_2=defer
*.log_archive_format=%t_%s_%r.arc
*.log_archive_max_processes=30

*.remote_login_passwordfile=exclusive
*.fal_client='alexstb'
*.fal_server='alex'
*.standby_file_management=auto
*.log_file_name_convert=("/u01/app/oracle/oradata/alex","/u01/app/oracle/oradata/alexstb")
*.db_file_name_convert=("/u01/app/oracle/oradata/alex","/u01/app/oracle/oradata/alexstb")
*.archive_lag_target=1800   #可选

select * from V$DATAGUARD_CONFIG; --检查配置

3)备份主库文件到备库:参数文件、控制文件、数据文件
scp 1.1.1.1:/home/oracle/pfile.stb $ORACLE_HOME/dbs/init$ORACLE_SID.ora
scp 1.1.1.1:/home/oracle/control01.ctl $ORACLE_BASE/oradata/$ORACLE_SID/.
cp $ORACLE_BASE/oradata/$ORACLE_SID/control01.ctl  $ORACLE_BASE/oradata/$ORACLE_SID/control02.ctl 
  1)数据文件冷备份
 
  2)使用RMAN
startup nomount
rman auxiliary /
connect target sys/oracle@alex
duplicate target database for standby dorecover nofilenamecheck;

4)启动备库、主库

 

5)检查状态  
SQL> select database_role,protection_mode,protection_level from v$database;   --主库

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

SQL> select database_role,protection_mode,protection_level from v$database;    ---备库

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

SQL> select sequence# ,applied from v$archived_log order by sequence#;    --检查日志的应用情况

 SEQUENCE# APPLIED
---------- ---------
        33 NO
        33 YES

6)备库应用和关闭应用日志
alter database recover managed standby database disconnect from session;    --开启应用重做

alter database recover managed standby database using current logfile;       --开启实时应用重做
alter database recover managed standby database using current logfile disconnect from session 
--实时应用是当日志传到standby redo log的时候就去应用,是real-time的,必须要有standby redo log.
alter database recover managed standby database cancel;                     --关闭应用重做

select switchover_status from v$database;                                  --查看切换状态

alter system switch logfile;                                             --手工切换日志
alter system archive log current;

1)多种模式切换
2)switch over  先要把主库拉下来,
3)fail over

关机:先关主库,再关备库
开机:先开备库,再开主库