oracle11g dataguard物理备库搭建

Dataguard 环境:


操作系统:Redhat6.4

Primary数据库:

IP 地址:192.168.1.122

数据库SID:ora11g

DB_UNIQUE_NAME:ora11g_primary

Standby数据库:

IP 地址:192.168.1.123

数据库SID:ora11g

DB_UNIQUE_NAME:ora11g_standby

(注:oracle数据库版本是11.2.0.1.0)

1.Primary端的配置

(1).检查数据库是否支持 Data Guard(企业版才支持),是否归档模式,Enable force logging

$ sqlplus ‘/as sysdba‘

SQL> select * from v$option where parameter = ‘Managed Standby‘;

确认主库处于归档模式

SQL> archive log list        (先检查是否归档模式,不是则修改)

startup mount

alter database archivelog;

alter database open;

(2)将primary 数据库置为 FORCE LOGGING模式

 

SQL> alter database force logging;  (强制产生日志)

如果主库没有密码文件则建立密码文件,从而可以 OS验证的方式登陆

$ orapwd file=$ORACLE_HOME/dbs/orapwora11g password=oracle entries=5

(3)为主数据库添加备用联机日志文件

SQL> alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/ora11g/stdby_redo04.log‘) size 50m;

alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/ora11g/stdby_redo05.log‘) size 50m;

alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/ora11g/stdby_redo06.log‘) size 50m;

alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/ora11g/stdby_redo07.log‘) size 50m;

standby redolog的组数参考公式:(online redolog组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。

standby redolog的组成员数和大小也尽量和online redolog一样。

(注:在备库中也要建立相同的standbylog组。)

(4)修改主库参数文件

SQL> create pfile from spfile;

主库

DB_NAME=ora11g

DB_UNIQUE_NAME=ora11g_primary

LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(ora11g_primary ,ora11g_standby)‘

LOG_ARCHIVE_DEST_1=‘LOCATION=/u01/app/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora11g_primary‘

LOG_ARCHIVE_DEST_2=‘SERVICE=ora11g_standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora11g_standby‘

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

FAL_SERVER=ora11g_standby

FAL_CLIENT=ora11g_primary

STANDBY_FILE_MANAGEMENT=AUTO

(5)建立备用库的控制文件

SQL>shutdown immediate

SQL>startup mount

SQL> alter database create standby controlfile as ‘/u01/standby_ctl01.ctl‘;

(6)配置listener.ora和tnsnames.ora

 

Listener.ora 文件:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = ora11g)

(SID_NAME = ora11g)

(ORACLE_HOME = /home/db/oracle/product/11.2.0/dbhome_1)

)

)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG-Primary)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

tnsnames.ora文件:

 

ORA11G_PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.122)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )
ORA11G_STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.123)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )

 


(7)主库用修改过的PFILE 生产SPFILE

关闭主数据库

SQL>shutdown immediate

生成spfile

SQL> create spfile from pfile;

 

 

 

2.Standby端的配置

 

(1). 创建备库存放数据文件和后台跟踪目录

mkdir -p $ORACLE_BASE/oradata/ora11g

mkdir -p $ORACLE_BASE/admin/ora11g

mkdir -p $ORACLE_BASE/admin/ora11g/adump

mkdir -p $ORACLE_BASE/admin/ora11g/bdump

mkdir -p $ORACLE_BASE/admin/ora11g/cdump

mkdir -p $ORACLE_BASE/admin/ora11g/dpdump

mkdir -p $ORACLE_BASE/admin/ora11g/pfile

mkdir -p $ORACLE_BASE/admin/ora11g/udump

mkdir -p $ORACLE_BASE/diag/rdbms

mkdir -p $ORACLE_BASE/diag/tnslsnr

mkdir -p $ORACLE_BASE/flash_recovery_area/ora11g

mkdir -p $ORACLE_BASE/flash_recovery_area/ORA11g

mkdir -p $ORACLE_BASE/archive

(2).把文件传输到备库下

关闭主库复制文件

$scp $ORACLE_BASE/oradata/*.dbf 192.168.1.123:/$ORACLE_BASE/oradata/ora11g

$scp $ORACLE_BASE/oradata/*.log 192.168.1.123:/$ORACLE_BASE/oradata/ora11g

$scp /u01/standby_ctl01.ctl 192.168.1.123:/$ORACLE_BASE/oradata/ora11g

$scp $ORACLE_HOME/dbs/initora11g.ora 192.168.1.123: $ORACLE_HOME/dbs/

$ cd $ORACLE_BASE/oradata/ora11g

$ mv standby_ctl01.ctl  control01.ctl

$ cp control01.ctl /u01/app/oracle/flash_recovery_area/ora11g/

$cd /u01/app/oracle/flash_recovery_area/ora11g/

$ mv control01.ctl  control02.ctl

 

(3)建立密码文件

如果主库没有密码文件则建立密码文件,从而可以 OS验证的方式登陆

$ orapwd file=$ORACLE_HOME/dbs/orapwora11g password=oracle entries=5

(4)修改备库参数文件

DB_NAME=ora11g

DB_UNIQUE_NAME=ora11g_standby

LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(ora11g_primary ,ora11g_standby)‘

LOG_ARCHIVE_DEST_1=‘LOCATION=/u01/app/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora11g_standby‘

LOG_ARCHIVE_DEST_2=‘SERVICE=ora11g_primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora11g_primary‘

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

FAL_SERVER=ora11g_primary

FAL_CLIENT=ora11g_standby

STANDBY_FILE_MANAGEMENT=AUTO

(4)修改备库的listener.ora和tnsnames.ora,如果没有的话,可以直接从主库复制过去

 

Listener.ora 文件:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = ora11g)

(SID_NAME = ora11g)

(ORACLE_HOME = /home/db/oracle/product/11.2.0/dbhome_1)

)

)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DG-Standby)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

tnsnames.ora文件:

 

ORA11G_PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.122)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )
ORA11G_STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.123)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )

 

(5)复制主库的密码文件到备库的相应位置(注:如果主备库不能同步很可能就是密码文件不一样)

 

先查看备份库是否有密码文件,有就先删除,然后再复制。

scp $ORACLE_HOME/dbs/orapwora11g 192.168.1.123:/$ORACLE_HOME/dbs/

 

 

 

3.Dataguard启动

(1)启动顺序,先启动备库,然后再启动主库

 

启动standby database

SQL>startup nomount
SQL>alter database mount standby database; #执行此命令后备库会处于手动恢复状态。

启动primary database
SQL>startup mount

SQL>alter database set standby database to maximize availability;     (设置为最大性能模式也是默认模式)

SQL>alter database open;

启动standby database到recover manage模式

SQL>alter database recover managed standby database disconnect from session;
#执行此命令后,备库会切换到自动恢复模式。

 

如果要启动到实时日志应用模式 (注:前提必须创建standby logfile)

alter database recover managed standby database using current logfile; #切换备库到适时应用日志模式,即real-time apply。执行这个命令后光标会停止在那里。

或者alter database recover managed standby database using current logfile disconnect from session;  #执行这个命令后,会切断这个session,执行的功能与上面相同。

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

切换standby database到read only模式

SQL> alter database recover managed standby database cancel;    #首先取消备库的自动恢复模式
SQL>alter database open read only;
如果要切换回recover manage模式(启动日志应用或者启动日志实时应用)
SQL> alter database recover managed standby database disconnect from session; 启动日志应用

SQL>alter database recover managed standby database using current logfile disconnect from session; 启动日志实时应用

4、启动和关闭顺序

 

启动顺序

 

(1).启从、主库的监听Listener
从库DG-Standby:

$lsnrctl start

主库DG-Primary:

$lsnrctl start

(2).启动备库数据库,执行如下:
$sqlplus /nolog

SQL>conn /as sysdba
SQL> startup nomount
SQL> alter database mount standby database;               #让备库处于standby
SQL> alter database recover managed standby database using current logfile disconnect from session; ;                                                  #开始实时同步

(3).启动主库

$sqlplus /nolog

SQL>conn /as sysdba
SQL> startup

.切换standby database到read only模式

SQL> alter database recover managed standby database cancel;    #首先取消备库的自动恢复模式
SQL>alter database open read only;
如果要切换回recover manage模式(启动日志应用或者启动日志实时应用)
SQL> alter database recover managed standby database disconnect from session; 启动日志应用

SQL>alter database recover managed standby database using current logfile disconnect from session; 启动日志实时应用

(3).启动主库数据库(上述第二步执行完毕后,方可执行如下命令):
SQL>startup

关闭顺序


关闭的时候正好相反,先关闭主库,然后关闭从库。
(1).  关闭主库
$su – oracle
SQL>sqlplus /nolog

SQL>conn /as sysdba
SQL>shutdown immediate;
(2). 关闭从库
su – oracle

SQL>sqlplus /nolog

SQL>conn /as sysdba

SQL>alter database recover managed standby database cancel;     #停止同步
SQL>shutdown immediate

5、功能切换
Switchover状态切换

首先在primary上操作:

 

 (1).   验证主库是否能执行角色转换到备库(原主库执行)

 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

-----------------

TO STANDBY

1 row selected

(2).开始把物理主库改变为物理备库(原主库执行)

 

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY with session shutdown;

注:如果有活动的session可以使用此选项,否则转换会遇到ORA-01093错误,也可以杀掉活动会话或等活动会话后进行转换

(3).关闭并重启主库(原主库执行)

SQL> shutdown immediate

SQL> startup nomount
SQL> alter database mount standby database;               #让备库处于standby
SQL> alter database recover managed standby database using current logfile disconnect from session; ;                                                  #开始实时同步

 

然后在standby上操作:

(1).验证备库是否能执行角色转换到主库(原备库执行)

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

-----------------

TO_PRIMARY

1 row selected

(2).开始把物理备库转换成物理主库(原备库执行)

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

--如果报ORA-16139: media recovery required,可能是由于未应用日志引起,可先执行

ALTER  DATABASE RECOVER MANAGED STANDBY  DATABASE DISCONNECT FROM SESSION;

(3)打开备库,然后关闭重启.(原备库执行)

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP;

 (4)  验证是否转换成功(原备库执行)

SQL> ALTER SYSTEM SWITCH LOGFILE;

   启动日志应用

 

(5)  应用归档日志(原主库上执行)

SQL> ALTER  DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

小窍门:要想顺利的实现switchover,最好在每台server上都同时设置好primary和standby的一些初始化参数,虽然其中一些参数只有在primary或者standby其中之一上起作用。

应急切换

(注:模拟主库由于故障无法正常switchover,需要执行failover,强制备库->pridb并接管业务)

(1).备库:

由于是failover,所以理解主库这时候已经无法正常使用,只需备库切换至pridb

停止应用恢复模式

alter database recover managed standby database finish;

转换standbydb为primary db

alter database commit to switchover to primary;

重启数据库,恢复正常业务

SQL>shutdown immediate

SQL>startup

select open_mode,database_role from v$database;

OPEN_MODE       DATABASE_ROLE
----------             ----------------
OPEN                 PRIMARY

注:failover将破坏dataguard模式,需要重新配置dataguard,网上也说不需要配置,但是还没有测试成功

Failover状态切换
在备库上进行切换:
1.首先停止备库的自动恢复状态:
SQL>alter database recover managed standby database finish;
如果没有使用过standby redo log的话执行:
SQL>alter database recover managed standby database finish skip standby logfile;
2.切换备库到主库:
SQL>alter database commit to switchover to primary;
3. 关闭数据库:
SQL>shutdown immediate;
4. 启动数据库:
SQL>startup;
Active状态切换:
Active是从8i延续过来的,其实不建议采用:

在备库上执行切换:
1:alter database recover managed standby database cancel;
2:alter database activate standby database;
3:shutdown immediate

总结一下Failover 和 Switchover 的区别:

在9i 的dataguad环境中:
1:执行Switch Over 必须是Primary 正常,并且是必须Primary 主动先Switch成 standby.然后standby 才能switch 成primary。
2:如果需要作成primary出问题,standby 能接管的话,必须作 failover ,而不是SwitchOver。

Failover :
将主数据库offline,备用数据库online,这种操作由系统和软件失败引起。 即使在备用数据库上应用重做日志,也可能出现数据丢失的现象,除非备用数据库运行在 guaranteed protection 模式。
原主数据库重新使用时必须重新启动实例。
其它的备用数据库也需重新启动实例。

Switchover :
故意将主数据库offline,而将另一备用数据库online,它能够切换到备用数据库而不需同步操作。如:可使用 Switchover 完成系统的平滑升级。 即使在备用数据库上不应用重做日志,也不会造成数据的丢失。
数据库不需重新启动实例。这使主数据库几乎能立即在备用数据库上恢复它的功能,因此可经常进行定期维护而不需中断操作。
Failover和Switchover的区别为:
当Failover发生,备用数据库切换为主数据库之后,它丢失了备用数据库的所有能力,也就是说,不能再返回到备用模式;而Switchover可以,备用数据库可切换为主数据库,也可从主数据库再切换回备用数据库。

四、相关视图
v$archive_dest
v$archive_dest_status
v$log_history
v$archvied_log
v$managed_standby
v$archive_gap

6、常见问题

(1). 日志无法传送

SQL>select dest_name,status,error from v$archive_dest;

察看相应的归档路径的状态是否 valid ,否则根据error 信息进行处理

(2). 无法使用alter database 重命名 data file

在standby 上,当设置 standby_file_management 为auto 时,不允许下列操作

alter database rename

alter database add/drop logfile

alter database add/drop standby logfile member

alter database create datafile as

(3). switchover 失败

SQL>alter database commit to switchover to physical standby

错误: ORA-01093:alter database close only permitted with no session connected

可以察看引起该错误的活动 session

SQL> select sid,process,program from v$session where type=‘USER‘ and

sid<>(select distinct sid from v$mystat);

然后根据查出的 sid 结合v$session 视图最后用

alter system kill session ‘ sid,serial’ 来kill 掉进程,断开该 session

或者使用如下命令来做 switchover

SQL>alter database commit to switchover to physical standby with session shutdown;

(4). 在standby database 的 read only模式下做 report 时出现错误:

ora-01220:file base sort illegal before database is open.

可能原因: standby database 没有temporary tablespace

(5).当主机和备机在运行过程中,把备机停下来,主机的归档日志将不能传到备机,当把备机服务起来后,主机的归档日志也不能传到备机,需要把主机的所有服务都重启一次才可以传日志。

请问为什么需要把主机要重启一次呢?有没有不需要重启主机就可以解决此问题呢?

发生这种情况时,核查几处:

( 1) . show parameter log_archive_dest ;

( 2) . select REOPEN_SECS,MAX_FAILURE from V$ARCHIVE_DEST;

察看是否是因为由于备机没有开机,造成 primary node 无法正常传送 archived log,并且达到了最大允许的失败次数。如果是这样,可以通过 alter system set log_archive_dest... 来重置属性值,恢复日志的正常传送。

也可以手工传送相关的日志到备机,

对于物理standby : ALTER DATABASE REGISTER LOGFILE ‘/xxx/xxx/arcr_xxx.arc‘

对于逻辑standby : ALTER DATABASE REGISTER LOGICAL LOGFILE ‘/xxx/xxx/arcr_xxx.arc‘

(3). 执行SELECT MESSAGE FROM V$DATAGUARD_STATUS; 察看相关信息,还有根据 dataguard 的不同类型来察看相关的 view 来确定当前的状态,具体参见 dataguard 的官方文档。

至于本文设置主备库参数在此博客有详解http://www.cnblogs.com/Elliot-wang/p/3790878.html

oracle11g dataguard物理备库搭建

时间: 2024-10-12 08:57:38

oracle11g dataguard物理备库搭建的相关文章

linux下oracle11G DG搭建(三):围绕备库搭建操作

环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本 RedHat Enterprise5.5.Oracle 11g 11.2.0.1 RedHat Enterprise5.5.Oracle 11g 11.2.0.1 三.围绕备库操作: 1.备库-修改初始化参数文件 $cd$ORACLE_HOME/dbs $df -h $vi initshdb.ora 修改简要说明: *.audit_file_dest='/u01/app/oracle/admin/sh/adump' //审计文件存

Oracle 11g Dataguard 暂停物理备库的日志传输

Oracle 11g Dataguard 暂停物理备库的日志传输分类: Oracle2017-07-18 10:03:17这两天生产端的日志产生过多导致灾备端的归档日志目录满的现象,在清除灾备端的日志后发现log_archive_dest_2处于error状态,需要将其enable.在实际生产系统中,通常有这样的场景,例如在系统维护日,对主库进行大量的业务更新,会有大量的DML操作:为了避免主库中的业务更新对备库造成影响,可以暂停主库对备库的日志传输,这样的话,如果主库的更新出现问题,备库还保留

Oracle 11g Data Guard 物理备库快速配置指南(上)

缘起 最近做了10g和11g的物理备库配置实验,发现 Data Guard 其实很容易,但是缺少好文档.我是参考官方文档做的实验,觉得它写的不是很清楚的. Google 出来两个pdf文档,读了觉得比官方文档强很多.翻译下,也许会对某些朋友有用.翻译的同时我也好更熟悉下这两个文档.好久没翻译过英文了,可以顺便练练手. 原文档下载地址(墙外): Configure Dataguard 11gR2 Physical Standby Part 1 Configure Dataguard 11gR2 P

DG之主库、备库切换(物理备库)

DG之主库.备库切换 一.开库与关库顺序 开库顺序 先启备库,再启主库(启动监听.打开告警日志) 关库顺序 先关主库,再关备库 二.主备库切换 1.操作过程一览 步骤1:启动备库.监听.告警: 步骤2:启动主库.监听.告警: 步骤3:主库(bj)查询信息 SQL>selectname,dbid,database_role,protection_mode from v$database; 步骤4:备库(sh)上做recover SQL>recovermanaged standby databas

oracle dataguard主备库参数文件配置详解

主库参数详解: 保持同一个Data Guard中所有的DB_NAME相同 DB_NAME=ora11g 为一个数据库指定一个唯一的名称,该参数一经指定就不会发生改动除非DBA主动改动 DB_UNIQUE_NAME=ora11g_primary 初始化参数LOG_ARCHIVE_CONFIG用于控制发送归档日志到远程位置.接收远程归档日志,并指定Data  Guard配置的惟一数据库名,默认值为SEND,RECEIVE,NODG_CONFIG. 当设置该参数为SEND时,会激活发送归档日志到远程位

Oracle 11g Data Guard 之物理备库角色转换

一.物理备库的Switchover操作 本节主要内容是物理备库的switchover操作,该操作起始于主库,结束于目标备库. 1.确认主库可以切换为standby角色 SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; 如果结果显示TO STANDBY或者SESSIONS ACTIVE,则表明主库可以切换为standby角色,否则,切换操作将不可行,因为redo传输不是配置错误就是不能正常进行. 2.主库启动switchover 执行如下SQL语句将主库

DG搭建物理备库

搭建过程难免会出现各种错误,所以之前最好做一个备份!!! service iptables stop 关闭防火墙 [[email protected] ~]# setenforce 0 [[email protected] ~]# getenforce Permissive 主库 [[email protected] ~]# su - oracle [[email protected] ~]$ db11g [[email protected] ~]$ sqlplus / as sysdba SQ

搭建物理备库

Primary db configure:1. 开启主库强制日志 查询当前是否强制日志: SQL> select force_logging from v$database;  FOR --- NO  开启强制日志 SQL> alter database force logging;  Database altered.  查询 SQL> select force_logging from v$database;  FOR --- YES2. 开启归档模式 SQL> alter s

linux下oracle11G DG搭建(三):环绕备库搭建操作

环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本号 RedHat Enterprise5.5.Oracle 11g 11.2.0.1 RedHat Enterprise5.5.Oracle 11g 11.2.0.1 三.环绕备库操作: 1.备库-改动初始化參数文件 $cd$ORACLE_HOME/dbs $df -h $vi initshdb.ora 改动简要说明: *.audit_file_dest='/u01/app/oracle/admin/sh/adump' //审计文件