一、注意事项:


1、 配置上注意

1.1、Oracle版本需要一致(只有Oracle企业版支持DG)。

1.2、 建议主备数据库路径目录一致,否则需要指定参数:db_file_name_convert和.log_file_name_convert参数。

1.3、 当前备库的redo日志文件大小必须与主库的online redo日志文件完全一致,决定Standbyredo日志文件组的数量最低限度。

Standbyredo 日志组公式如下:

     (每个实例的最大日志文件数量+1)*最大实例数量

1.4、 Standby contorlfile 文件需要在mount的时候创建。

1.5、 同一个DataGuard配置中所有数据库初始化参数:COMPATIBLE的值必须相同,否则redo传输服务项目可能不能把传输redo日志传输从主库传到备用库。

1.6、在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,Oracle不会应用之前的归档日志,而只会应用后面陆续到来的归档日志。

2、如果备库不能接收到归档

    2.1、检查监听配置和参数文件设置

2.2、检查口令文件

    2.3、主库上要执行

ALTERSYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=MEMORY;

ALTERSYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY;

2.4、另外还有很重要一点,注意各服务器的时间设置,不要因为时区/时间设置的不一置造成同步上的问题

2.5、重启两台服务器

       启动顺序:先standby,primary

       关闭顺序:先primary,standby

3、执行下面命令需重建ADG

 alter database clear unarchived logfile;

alterdatabase open resetlogs;

 

4、注册档档文档

出现归档日志gap时,需要找出相应的归档日志, 然后将这些归档日志copy到备用节点的standby_archive_dest和log_archive_dest目录下面。需要注意的是log_archive_dest目录下也需要copy。然后ALTERDATABASE RECOVER AUTOMATIC STANDBY DATABASE;

 

5、表空间问题

新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间,renamedatafile 均不能应用到备库上。

 

6、保护模式更改顺序:

maximizeprotection --->  maximize availability----> maximize performance

当在把dataguard的保护级别按这上面的顺序减低的时候, 不需要primary库在mount状态,否则primary 必须在mount 状态

 

7、查看alter日志

应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这是排错的重要方法,切记!


二、配置要求  Dataguard

1、硬件及操作系统需求

 

同一个Data Gurid配置中的所有oracle数据库必须运行于相同的平台。比如inter架构下的32位linux系统可以与inter架构下的32位linux系统组成一组Data Guard。另外,如果服务器都运行于32位的话,64位HP-UX也可以与32位HP-UX组成一组Data Guard。

不同服务器的硬件配置可以不同,比如cpu啦,内存啦,存储设备啦,但是必须确保standby数据库服务器有足够的磁盘空间用来接收及应用redo数据。

primary 数据库和standby数据库的操作系统必须一致,不过操作系统版本可以略有差异,比如(linux as4&linux as5),primary数据库和standby数据库的目录路径也可以不同。

 

2、软件需求

Data Guard 是Oracle企业版的一个特性,明白了吧,标准版是不支持地。

通过Data Guard的SQL应用,可以实现滚动升级服务器数据库版本(要求升级前数据库版本不低于10.1.0.3)。

同一个Data Guard配置中所有数据库初始化参数:COMPATIBLE的值必须相同。

Primary 数据库必须运行于归档模式 ,并且务必确保在primary数据库上打开FORCE LOGGING,以避免用户通过nologging等方式避免写redo造成对应的操作无法传输到standby数据库。

Primary 和standby数据库均可应用于单实例或RAC架构下 ,并且同一个data guard配置可以混合使用逻辑standby和物理standby 。

Primary 和standby数据库可以在同一台服务器,但需要注意各自的数据文件存放目录,避免重写或覆盖。

使用具有sysdba系统权限的用户管理primary和standby数据库。

建议数据库必须采用相同的存储架构。比如存储采用ASM/OMF的话,那不分primarty或是standby也都需要采用ASM/OMF。

另外还有很重要一点,注意各服务器的时间设置,不要因为时区/时间设置的不一置造成同步上的 问题


三、  Oracle  ADG 搭建步骤:

DataGuard 环境:

OS: Redhat 6u2

DB:       Oracle 11.0.2.3.0  

  

Primary数据库:

IP:192.168.2.60/24

数据库SID:ora11g

DB_UNIQUE_NAME:primary

 

Standby数据库:

IP:192.168.2.62/24

数据库SID:ora11g。

DB_UNIQUE_NAME:standby

 

 

1、操作前准备

1.1、在两台主机上分别同步正确的时间:

查看ntpdate命令路径

#whichntpdate

/usr/sbin

 

配置每30分钟同步一次时间

#crontab-e

内容如下:

*/30* * * * /usr/sbin/ntpdate asia.pool.ntp.org >> /var/log/ntpdates.log

 

1.2、修改主机名和hosts文件:

Primary:

[oracle@dba~]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=dba.test.com

[oracle@dba~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

192.168.2.60dba.test.com  dba

192.168.2.62dba2.test.com  dba2

 

 

Standby

[oracle@dba~]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=dba2.test.com

 

[oracle@dba~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

192.168.2.60dba.test.com  dba

192.168.2.62dba2.test.com  dba2

 

2、主库上的操作:

 

2.1、开启归档

SYS@ora11g>alter system set log_archive_dest_1='LOCATION=/orachivelog' scope=spfile;

SYS@ora11g>alter system set log_archive_format='%t_%s_%r.dbf' scope=spfile;

SYS@ora11g>shutdown  immediate;

SYS@ora11g>startup mount;

SYS@ora11g>alter database archivelog;

 

2.2、启用强制归档

SYS@ora11g>startup open

SYS@ora11g>alter database force logging;

SYS@ora11g>select force_logging from v$database;

SYS@ora11g>archive log list;

 

 

2.3、修改sys用户口令

[oracle@dbadbs]$orapwd file=orapw$ORACLE_SID password=oracle entries=10 force=y ignorecase=Y

 

 

2.4、添加standby redo log

建议:

1).standbyredo log的文件大小与primary数据库onlineredo log 文件大小相同

2).standbyredo log日志文件组的个数依照下面的原则进行计算

    Standby redo log组数公式>=(每个instance日志组个数+1)*instance个数

    例如在环境中,只有一个节点,这个节点有三组redo,所以

    Standby redo log组数公式>=(3+1)*1  == 4

    所以需要创建4组Standbyredo log

3).每一日志组为了安全起见,可以包含多个成员文件

4).添加standbyredo log #大小和nolineredo 日志一样


alterdatabase add standby logfile              
group 7 ('/oradata/ora11g/dglog07.log') size 200m,
group 8 ('/oradata/ora11g/dglog08.log') size 200m,
group 9 ('/oradata/ora11g/dglog09.log') size 200m,
group 10('/oradata/ora11g/dglog10.log') size 200m,
group 11 ('/oradata/ora11g/dglog11.log') size 200m,
group 12 ('/oradata/ora11g/dglog12.log') size 200m,
group 13 ('/oradata/ora11g/dglog13.log') size 200m;

 

5)Standbyredo log删除方法

#sys@ora11g>alter database drop standby logfile group 4;

 

验证standbyredo log文件组是否成功创建

SQL>select group#,thread#,sequence#,archived,status from v$standby_log;

SQL>shutimmdiate

SQL>startup

 

注意:standby redo log组号不能和onlineredo日志重复。

 

2.5、创建pfile

SYS@ora11g>create pfile from spfile;

SYS@ora11g>shut immeidate

 

2.6、修改pfile

在后面添加几行:

*.DB_UNIQUE_NAME='PRIMARY'

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMARY,STANDBY)'

*.LOG_ARCHIVE_DEST_1='LOCATION=/ORACHIVELOG/VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMARY'

*.LOG_ARCHIVE_DEST_2='SERVICE=STANDBYASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY'

*.LOG_ARCHIVE_MAX_PROCESSES=30

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.FAL_SERVER=STANDBY

*.FAL_CLIENT=PRIMARY

*.DB_FILE_NAME_CONVERT='STANDBY','PRIMARY'

*.LOG_FILE_NAME_CONVERT='STANDBY','PRIMARY'

*.STANDBY_FILE_MANAGEMENT=AUTO

 

 

 

备注:

db_unique_name# 必要参数,每个数据库的唯一标识.

log_archive_config# 必要参数

log_archive_dest_1# 必要参数 本地归档路径

log_archive_dest_2#必要参数 远程归档日志 其中delay=1440指明只传送归档,24小时后再应用.

fal_server|| fal_client #主库可选参数备库必要参数定义主库和备库的net服务名

db_file_name_convert|| db_file_name_convert # 虽算不上必要参数 但没有会报ORA-00367和ORA-19527错误,建议加上

standby_file_management# 使主库增删数据文件的修改,备库能够自动同步

log_archive_max_processes=30#指定归档进程数量(1-30)默认为4,可不设置

 

2.7、使用修改后的文本启库并创建二进制文件,再二进制文件启库

[oracle@dbadbs]$ mv spfileora11g.ora spfileora11g.ora.bak

[oracle@dbadbs]$ sqlplus / 'as sysdba;'

idle>startup open pfile=$ORACLE_HOME/dbs/initora11g.ora

SYS@ora11g>create spfile from pfile;

SYS@ora11g>shut immediate;

SYS@ora11g>startup open;

 

SYS@ora11g>show parameter pfile;

NAME                TYPE                  VALUE

spfile        string          /u01/oracle/product/11.2.0/dbs/spfileora11g.ora

 

2.8、创建备库控制文件

SYS@ora11g>shut immediate;

SYS@ora11g>startup mount

SYS@ora11g>alterdatabase create standby controlfile

as '/home/oracle/standby01.ctl';

 

2.9、一致性停库,拷贝所有数据文件、redo、备库控制文件、参数文件、口令文件到物理备库,注意备库目标路径是否有文件。

SYS@ora11g>shut immediate;

[oracle@dba/]$ scp -r ora11g 192.168.2.62:/oradata/

#拷贝主库数据文件目录到备库的相应位置,注意路径一致和权限问题。

[oracle@dba~]$scp/home/oracle/standby01.ctl192.168.2.62:/oradata/ora11g/

#拷贝主库上创建的备库控制文件到备库数据文件目录,需要修改备库的参数文件指定备库控制文件,控制文件可以复制多个

 

2.10、配置监听,修改文件之前进行备份

[oracle@dbaadmin]$ cd $ORACLE_HOME/network/admin

[oracle@dbaadmin]$ ll -thr

-rw-r--r--1 oracle oinstall  187 2007-05-09shrept.lst

drwxr-xr-x2 oracle oinstall 4.0K 03-03 16:25 samples

-rw-r--r--1 oracle oinstall  199 03-04 10:47sqlnet.ora

-rw-r--r--1 oracle oinstall  309 03-04 10:47listener.ora

-rw-r-----1 oracle oinstall  325 03-04 11:14tnsnames.ora

-rw-r-----1 oracle oinstall  325 03-11 14:54tnsnames.ora.bak

-rw-r--r--1 oracle oinstall  309 03-11 14:54listener.ora.bak

 

 

[oracle@dbaadmin]$ vi listener.ora

#listener.ora Network Configuration File: /u01/oracle/product/11.2.0/db1/network/admin/listener.ora

#Generated by Oracle configuration tools.

 

LISTENER=

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST =dba.test.com)(PORT = 1521))

    )

  )

 

ADR_BASE_LISTENER= /u01/oracle

 

[oracle@dbaadmin]$ vi tnsnames.ora

#Generated by Oracle configuration tools.

 

primary=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =dba.test.com)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = primary)

    )

  )

 

 

standby=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =dba2.test.com)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = standby)

    )

  )

 

 

测试连接标识符是否连通

[oracle@dbaadmin]$ tnsping primary

[oracle@dbaadmin]$ tnsping standby

 

3、备库上的操作

3.1、安装ORACLE不需要创建库其它环境变量$ORACLE_SID也一致,并创建相关的目录,如下:

[oracle@dba2]$mkdir $ORACLE_BASE/admin/$ORACLE_SID\a\b\c\d.dump

             

 

3.2、拷贝多个控制文件(注意权限)

[oracle@dba2ora11g]$ cp standby01.ctl standby02.ctl

[oracle@dba2ora11g]$ cp standby01.ctl standby03.ctl

 

 

3.3修改主库上传过来的参数文件(注意修改控制文件路径)

[oracle@dba2dbs]$ mv initora11g.ora.bak initora11g.ora

[oracle@dba2dbs]$ vi initora11g.ora

 

添加下面的行

 

*.DB_UNIQUE_NAME='STANDBY'

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMARY,STANDBY)'

*.LOG_ARCHIVE_DEST_1='LOCATION=/ORACHIVELOG/VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STANDBY'

*.LOG_ARCHIVE_DEST_2='SERVICE=PRIMARYASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRIMARY'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.FAL_SERVER=PRIMARY

*.FAL_CLIENT=STANDBY

*.DB_FILE_NAME_CONVERT='PRIMARY','STANDBY'

*.LOG_FILE_NAME_CONVERT='PRIMARY','STANDBY'

*.STANDBY_FILE_MANAGEMENT=AUTO

 

 

3.4、配置监听

[oracle@dba2admin]$ vi listener.ora

#listener.oraNetworkConfigurationFile:/u01/oracle/product/11.2.0/db1/network/admin/listener.ora

#Generated by Oracle configuration tools.

 

LISTENER=

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST =dba2.test.com)(PORT = 1521))

    )

  )

ADR_BASE_LISTENER= /u01/oracle

[oracle@dba2admin]$ vi tnsnames.ora

#tnsnames.ora Network Configuration File:/u01/oracle/product/11.2.0/db1/network/admin/tnsnames.ora

#Generated by Oracle configuration tools.

 

primary=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =dba.test.com)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = primary)

    )

  )

standby=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =dba2.test.com)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = standby)

    )

  )

 

[oracle@dba2 admin]$lsnrctl stat|start|stop

[oracle@dba2admin]$ tnsping primary

[oracle@dba2admin]$ tnsping standby


 

3.5、启动物理备库

[oracle@dba2admin]$#lsnrctl start

SQL>startup nomount

SQL>alter database mount standby database;

idle>create spfile from pfile

idle>shut immediate

SQL>startup nomount

SQL>alter database mount standby database;

 

3.6、备库启动redo apply (或执行实时应用redo apply )

SQL>alter database recover managed standby database disconnect from session;

SQL>alter database recover managed standby database using current logfiledisconnect from session;#实时应用

 

 

4、启动主库:

[oracle@dba2oradata]$ sqlplus / as sysdba;

idle>startup open;

SQL>lsnrctlstart #启监听

 

5、验证ADG是否搭建成功

5.1、查看数据库相关的状态

SQL>selectopen_mode,protection_mode,protection_level,switchover#,database_role,switchover_statusfrom v$database;

 

测试归档的操作到达远程物理备用库

   在这个例子中,传输redo日志文件到远程备用库直到日志切换才发生,当日志切换发生,默认情况下,当一个onlineredo日志文件变满。

 

5.2、强制切换

SQL>altersystem switch logfile;

 

5.3、验证物理备用库执行正常:

确认已经存在的归档redo日志文件

SQL>selectsequence#, first_time, next_time from v$archived_log order by sequence#;

SQL>altersystem switch logfile;

SQL>selectsequence#, first_time, next_time from v$archived_log order by sequence#;

 

5.4、验证新归档的redo日志文件被应用

SQL>selectsequence#,applied from v$archived_log order by sequence#;

在standby上查看数据库的当前状态信息

SYS@ora11g>select process,client_process,sequence#,status from v$managed_standby;

 

4.5、查看归档应用情况

SYS@ora11g>selectdest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_namefrom v$archive_dest_status where status='VALID';

 

5.6、检查归档文件路径及创建信息

selectname,creator,sequence#,applied,completion_time from v$archived_log;

 

5.7、查看归档历史

selectfirst_time,first_change#,next_change#,sequence# from v$log_history;

5.8、查看data guard事件

SYS@ora11g>select message from v$dataguard_status;

 

5.9、调整物理standby log应用频率#慎用,根据需要调整

SQL>alterdatabase recover managed standby database parallel 2 disconnect from session;

设置recover并行度,在介质恢复或redo应用期间,都需要读取重做日志文件,默认都是串行恢复,执行时可以加parallel子句指定并行度,提高读取和应用性能。推荐parallel的值是#CPUs*2

 

 四、  READ ONLY模式打开物理standby

注意: 11G 支持Standby Open状态应用redo日志

两种情况:

1、 Standby 数据库处于shutdown状态

SQL>startup

SQL> alterdatabase recover managed standby database using current logfile disconnect fromsession;

#11G执行这条语句后,处理open状态也能应用redo,不过是在主上切日志后,执行altersystem switch logfile 马上就能在standby上看到结果

2、 standby 数据库处于redo应用状态

2.1、取消redo应用

SQL>alter database recover managed standby database cancel;

 

2.2、打开数据库

SQL>alter database open;

 

2.3、数据为open read only需要添加临时文件

SQL>altertablespace temp add tempfile '/u02/oradata/standby/temp01.dbf' size 100M;

 

2.4、查看状态

sys@ora11g>selectopen_mode,protection_mode,protection_level,switchover#,database_role,switchover_statusfrom v$database;

SYS@ora11g>select status from v$instance;

STATUS

OPEN

 

2.5回到mount redo logfile状态

SQL>shut immediate;

SQL>startup nomount;

SQL>alter database mount standby database;

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

 

五、物理standby角色转换

1、角色转换分为switchover和failover

switchover:主从之间可以相互切换,也叫无损切换 #不需要重建ADG。

failover:   当主数据库损坏后将备库切为主库,原库将不能再切回主库 #需重建ADG。

 

 

角色转换前的准备

A,检查数据库的初始化参数,主要确认对不同角色相关的初始化参数。

B,确保主从数据库服务器都处于archivelog模式。

C,确保standby数据库的临时文件存在并与primary相匹配。

D,rac集群环境需特殊处理。

 

 

2、物理Standby Switchover角色转换操作:

注意:

A, 确认主库和从库间网络连接通畅;

B, 确认没有活动的会话连接在数据库中;

C,  PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;

D, 确保STANDBY数据库处于ARCHIVELOG模式;

E, 如果设置了REDO应用的延迟,那么将这个设置去掉; 

F, 确保配置了主库和从库的初始化参数,使得切换完成后,DATAGUARD机制可以顺利的运行。

 

 

2.1、检查是否支持switchover操作#primary上操作

  SQL>select switchover_status fromv$database;

#如果该参数为"tostandby"表示主支持转换为standby,否则检查相关参数设置

 

2.2、启动switchover,将parmary转换为standby的角色 #primary上操作

  SQL>alter database commit to switchover tophysical standby; #执行这步会自动备份控制文件到trace

 

 当出现session active的时候表示还有活动的session,则运行

 SQL>Alter database commit to switchover tophysical standby with session shutdown;

 

2.3、重启动到mount #primary上操作

  SQL>shutdown immediate;

  SQL>startup mount;

2.4、检查待转换standby是否支持switchover操作

  SQL>select switchover_status fromv$database;

#如果该参数为“toprimary”表示支持转换为primary,但一般显示为“NOTALLOWED”也是能转换

 

2.5、转换角色为primary #待转换standby数据库操作

  SQL>alter database commit toswitchover to primary;#待转换的standby不能处于openread write模式,可以处于mount和openread only 模式

 

2.6、转换角色完成,重新打开数据库

  SQL>shut immediate;

  SQL>startup open;

 

2.7、验证

  SQL>show parameter name;

  SQL>alter system switch logfile;

  SQL>select max(sequence#) fromv$archived_log;

 

3、物理Standby Failover角色转换操作:

注意:

A,检查STANDBY是否运行在最大保护模式下,如果是的话,需要将其置为最大性能模式,否则切换到PRIMARY角色也无法启动。

B,failover之后,原primary数据库默认不再是ADG配置的一部份。

C,通常其它逻辑、物理standby数据库不直接参与failover的过程,因此这些数据库不需要做任何操作。

D,某些情况下,新的primary数据库配置后,需要重新创建其它所有的standby数据库。

E,另外,如果待转换角色的standby处于maximumprotection或maximumavailability模式的话,归档日志应该是连续存在的,这种情况下可以直接从第3步执行,否则从第1步执行。

F,通常执行failover说明primary已不能用了,因此不需要在primary上进行操作。

 

3.1、检查归档文件是否连续

  select thread#,low_sequence#,high_sequence#from v$archive_gap;

#如果返回的有记录,按照列出的记录号复制对应的归档文件到待转换的standby服务器,这一步非常重要必须确保所有已生成的归档文件均已存在于standby服务器上,不然可能会数据不一致造成转换时报错。

  文件复制后,通过以下命令将其加入到数据字典(注册归档)

 SQL>alter databaseregister physical logfile '/oracle/arc1/1_32_668404789.arc'

3.2、检查归档是否完整

  分别在primary/standby执行下面语句

  SQL>select distinctthread#,max(sequence#)over(partition by thread#)a from v$archived_log;

#该语句取得当前数据库各线程已归档文件最大序,如果primary与standby最大序号不相同,必须将多出的序号对应的归档文件复制到待转换的standby服务器,不过既然是failover,有可能primary数据库此时已打不开,甚至无法访问。

3.3、启动failover

  SQL>alter database recover managed standbydatabase finish force;

#force关键字将会停止当前活动的RFS进程,以便立刻执行failover

3.4、切换物理standby角色为primary

SQL>alterdatabase commit to switchover to primary;

3.5、重新启动新的primary数据库

  shut immediate;

  startup open;

角色转换工作完成,剩下的就是补救措施(针对原primary数据库),转换后primary数据库不再是adg配置的一部份,我们需要做的就是尝试看能否恢复原primary数据库,将其改造为新的standby服务器。

 

 

4、failover和switchover

 

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

 

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


六、DBA 手工解决日志缺失问题, 具体操作步骤如下:

1查看是否有日志GAP

SELECTUNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROMV$ARCHIVED_LOG;

SELECTTHREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

2如果有,则拷贝过来

3手工的注册这些日志:

SQL>ALTER DATABASE REGISTER LOGFILE '/path/archive.log';

 

failover角色转换参考

http://www.linuxidc.com/Linux/2011-03/33525.htm

 

 

七、Data guard的优点:

1、支持所有的DDL和DML语句

2、不管是什么数据类型、表的类型,任何DDL和DML语句都可以应用在物理备用数据库上。

3、可以减轻主数据库的备份压力

4、standby的中的数据文件可以用来快速恢复主数据库的数据文件

5、逻辑standby可以减轻主数据库的工作压力

6、物理standby也可以用只读来打开,可以分担一部分非实时的查询的工作

7、逻辑standby数据是近实时更新的,而且也可以让用户进行查询操作

8、逻辑standby可以在standby中建立索引和物化视图以方便用户的查询

 

八、其它:

在Oracle11g里,DataGuard 切换多了一个新的功能:flushredo。

Flush能把没有发送的redo 从主库传送到standby库。 只要主库能启动到mount状态,那么Flush就可以把没有发送的归档和currentonline redo 发送到备库。

Flush语法:

SQL>alter system flush redo to 'target_db_name';


注意:

target_db_name需要加单引号,这里的target_db_name是备库的db_unique_name名称。 也就是在tnsnames.ora文件中standby的链接标识符名称。Flush 会将未发送的redo 从主库传到备库,并且等待redo 在standby库上apply之后返回成功。 所以只要Flush成功,那么Failover就没有数据丢失。


注:整理来自互联网

本文档下载地址:http://download.csdn.net/detail/fffygapl/5022534

=========================================================

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任! 谢谢合作!

QQ: 164798858@qq.com
Sina: weibo.com/kaijunfeng
Yahoo: fffygapl@yahoo.com.cn

Logo

更多推荐