一、注意事项:
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