400 likes | 1.18k Views
Oracle Standby Database. Chao_Ping@vip.163.com. Oracle 数据库保护- standby 技术 . 1. Standby 技术该览,实现机制 2. Standby 实现需要注意的问题 3. Oracle Standby 和其他技术的比较 4. Standby 切换 * 假设大家对 Oracle Standby 数据库有一定理解. Oracle Standby 概念. 什么是 Standby 数据库?
E N D
Oracle Standby Database Chao_Ping@vip.163.com
Oracle数据库保护-standby技术 1. Standby 技术该览,实现机制 2. Standby 实现需要注意的问题 3. Oracle Standby和其他技术的比较 4. Standby 切换 * 假设大家对Oracle Standby数据库有一定理解
Oracle Standby 概念 • 什么是Standby数据库? • Standby Database产生于Oracle 7.3,在9版本里面重命名为Data Guard • 主要作用是Oracle数据库的灾难恢复 • Oracle的特有的灾难恢复方法 • 为什么需要Standby数据库 • 优秀的Oracle数据库灾备方法 • Oracle数据库高可用解决方案之一
实现机制 • 核心机制: • Standby Controlfile + • 一份初始的数据库备份 + • 持续不断的Archivelog Recover过程
Standby:系统框架 Primary Database Physical Standby Database Sync or Async Redo Shipping Network Redo Apply Backup
Standby创建 • 一份最近数据库物理备份 • 冷备份 • Rman备份 • OS 热备份(begin backup,cp, end backup) • 一份Standby Controlfile SQL>alter database create standby controlfile as ‘$PATH/$FILENAME’; • 一份同版本的$ORACLE_HOME,一套initsid.ora • 约束: • 相同平台,相同Oracle 版本
Standby创建 Standby InitSID.ora的关键参数: • db_file_name_convert • log_file_name_convert • standby_archive_dest • fal_client (9i) • fal_server (9i) • standby_file_management (9i) • Remote_login_passwordfile(For monitor)
Standby 同步 • 归档日志同步 • Cron调用脚本,rcp/ftp拷贝归档日志 成熟,稳定,Standby问题不会对Primary造成任何影响 自己编写同步脚本,通过Cron控制同步时间间隔 • Log_archive_dest_n=‘service=standby optional…’; 优点: 简单。8i开始支持。Oracle 推荐方式。趋势。 其他的no data lost等新的DataGuard Feature必须采用这种模式 可能有问题产生 8.1.6: standby down, possible primary down Standby os hangs, primary arch process can hangs…
Standby数据库同步 • Lgwr 同步 • Asyncalter system set log_archive_dest_2 ='service=miscguard reopen=200 lgwr async'; • Sync alter system set log_archive_dest_2 ='service=miscguard reopen=200 lgwr async';
Standby 数据库同步 • LGWR同步 • 需要先在standby数据库添加standby logfile. • Standby Logfile数目需要足够充裕,以免Production数据库挂起
Standby数据库同步 Async和Sync之间的选择
Standby 数据库维护:归档日志 • 归档日志源源不断的产生,必须及时删除,才能维护系统的正常运行 • 只能删除已经成功Recover的归档日志。 • 删除依据: • 1)alert_$ORACLE_SID.log文件,关键词: ORA-279(oracle 8i/9i, Manual Recovery) • 2)v$archived_log.applied(Oracle 9i)
Standby 数据库维护:影响Standby数据库的操作 影响Standby的Primary数据库操作: • 添加tablespace/Datafile • Resetlogs 操作: • recreate controlfile resetlogs • Incomplete Recover • Nologging操作 • 9i: Forcelogging(v$database.force_logging) • 8i: Recreate affected datafile • Clear unarchived logfile
7-8i Standby自动添加datafile set term off echo off head off feedback off connect / as sysdba set autorecovery on spool /home/oracle/admin/catalog/nohup.out recover standby database; exit EOF sql=`grep ORA-01110 /home/oracle/admin/catalog/nohup.out |awk '{print $5}'` echo $sql wrong=`grep ORA-01157 /home/oracle/admin/catalog/nohup.out |wc -l` echo $wrong if [ $wrong -gt 0 ] then sqlplus /nolog <<EOF connect / as sysdba alter database create datafile $sql; exit EOF else echo OK fi;
输出示例 ALTER DATABASE RECOVER CONTINUE DEFAULT Media Recovery Log /home/oracle/admin/catalog/arch/arch_1_17758.arc Fri Aug 29 14:00:11 2003 Errors in file /home/oracle/admin/catalog/bdump/dbw0_16742.trc: ORA-01157: cannot identify/lock data file 21 - see DBWR trace file ORA-01110: data file 21: '/oradata/catalog/table17.dbf' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 Media Recovery failed with error 1670 ORA-283 signalled during: ALTER DATABASE RECOVER CONTINUE DEFAULT ... Fri Aug 29 14:00:14 2003 ALTER DATABASE RECOVER CANCEL ORA-1112 signalled during: ALTER DATABASE RECOVER CANCEL ... Fri Aug 29 14:00:14 2003 alter database create datafile '/oradata/catalog/table17.dbf' Fri Aug 29 14:01:10 2003 Completed: alter database create datafile '/oradata/catalog/t
9i Standby 添加Datafile自动维护 关键: standby_file_management=auto 例子: Media Recovery Log /home/oracle/9.2.0/dbs/archarch1_792.dbf Mon Dec 22 16:32:51 2003 Recovery created file /oradata/misc/filter02.dbf Successfully added datafile 5 to media recovery Datafile #5: '/oradata/misc/filter02.dbf' Media Recovery Waiting for thread 1 seq# 793
Nologging操作(8i) • 1。DBA管理规范:一般情况下,不允许进行Nologging操作 • 2。事后补救: Media Recovery Log /archivelog/biddbstandby/biddb_arch_1_36640.arc Recovery is repairing media corrupt block 11 of file 17 Recovery is repairing media corrupt block 12 of file 17 Recovery is repairing media corrupt block 13 of file 17 Recovery is repairing media corrupt block 14 of file 17 Recovery is repairing media corrupt block 15 of file 17 SQL>SELECT NAME, UNRECOVERABLE_CHANGE# FROM V$DATAFILE order by 2 asc 比较Production和Standby的结果。 把受影响的Datafile从Production重新备份,恢复到Standby
Nologging操作(9i) SQL> select force_logging from v$database; FORCE_LOGGING --- NO SQL> alter database force logging; Database altered. SQL> select force_logging from v$database; FORCE_LOGGING --- YES
Standby + RAC • Prod:RAC 多节点 • Standby:可以是RAC单节点或者多节点 • 这个是Oracle推荐的RAC 高可用性解决方案 • RAC—解决节点失败,OS失败等问题 • DataGuard—解决存储失败,Site失败等问题。
Standby数据库:暂时网络中断之后的处理 • 网络的暂时中断,会使Standby和Primary的Log相差几个 • 如何检查:V$ARCHIVE_GAP; • 缺少一个Logfile,Standby无法继续Recover Fal_client, Fal_server的配置,可以解决这个问题,Standby自动从Production取回中间缺少的几个Logfile RFS: Successfully opened standby logfile 4: '/oradata/misc/standbylog1.log' Fri Jan 2 22:55:04 2004 Fetching gap sequence for thread 1, gap sequence 838-841 Trying FAL server: misc
Standby数据库妙用 1。Standby数据库作为Reporting Database 通过Cron 调度,可以让Standby数据库定期以只读方式打开,在一定程度上满足数据仓库类应用的查询需要。减轻Production数据库的压力
Standby数据库妙用 • 在很多情况下,Standby是高可用性的非常好的解决方案,而不仅仅是灾备 例子: 需要把一个200G的数据库,从一个存储升级到更新的存储,需要尽量降低停机时间,用Standby 数据库切换。
Standby数据库妙用 • 作为快速restore 的数据来源 一般数据库备份,如果Prod数据库出现data file corruption,或者磁盘损坏,文件系统损坏。需要从磁带恢复,或者磁盘备份。磁带恢复的restore非常长,磁盘恢复的Recover事件可能也会非常长,但是Standby数据库的数据文件和Prod是基本上同步的,拷贝Datafile回去,几乎马上可以recover完成,继续业务运行。
Standby数据库妙用 • 替代Primary来做Backup • Backup对Primary的IO压力很大 • 如果对Standby做备份,可以直接Tar,或者Rman备份,或者通过TSM/Netbackup等直接备份到带库 • 备份的文件可以直接恢复到Primary数据库
Standby Graceful Failover • Graceful Failover/SwitchOver在Oracle 9i 正式开始支持 • Standby数据库的本质,是Standby Controlfile + 数据库备份。 • Oracle 7/8i 也支持Graceful Failover/SwitchOver。 • 方法:recreate controlfile/copy online redo logfiles. • 详细参考metalink note:76450
Standby Failover 为了Failover之后,客户端还能连接,需要配置tnsnames.ora文件,或者类似的配置names Server filter = (DESCRIPTION = (failover = on) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = misc2)(PORT = 1521)) ) (CONNECT_DATA = (SID = misc) ) [oracle@misc1 oracle]$ cat inst.sql select host_name from v$instance; [oracle@misc1 oracle]$ sqlplus -s system/manager@filter @inst Rac2 After Primary down,Activate Standby: [oracle@misc1 oracle]$ sqlplus -s system/manager@filter @inst misc2
Standby Failover • 为了Standby Database激活之后可以正常继续原来的业务,需要添加tempfile. SQL>Alter tablespace temp add tempfile ‘/oradata/$ORACLE_SID/temp/temp01.tmp’ size 1000m;
Standby Best Practice • 不要把Production和Standby放在一个阵列上面。(两个机器共享一个磁盘阵列) • 不要把Production和Standby放在一个主机上面。(一个主机,两个阵列) • 作为灾备方案必须是放在不同的Data Center
Standby Best Practice • 一个机器可以作为多个Oracle Database的Standby Server。 1备N模式。 datafile目录结构: 数据库1:/oradata/db1/ 数据库2:/oradata/db2/ 数据库3:/oradata/db3/ Log/Tracefile目录结构: $HOME/admin/db1/bdump,udump,arch,cdump $HOME/admin/db2/bdump,udump,arch,cdump $HOME/admin/db3/bdump,udump,arch,cdump
Standby Best Practice • 良好的磁盘文件系统命名规范有助于复杂环境的管理。 例子: • 使用raw device的环境 primary:/dev/vx/rdsk/dg1_app1proddg/ Standby 数据库:/dev/vx/rdsk/dg3_app1standbydg/ DB/LOG_FILE_NAME_CONVERT=(dg1_app1proddg, dg3_app1standbydg) • 使用文件系统的例子: Primary: /oradata/app1prod/ Standby:/oradata/app1standby/ Db/Log_file_name_convert=(‘/oradata/app1prod’,’/oradata/app1standby’)
Standby Best Practice • 为了能够应付Human Error,我们常常需要有一个Delay的时间,不是马上Recover 归档日志 • 为了适应尽量少的数据丢失的要求,我们需要归档日志/online redolog尽快的传递到Standby数据库 • 为了适应HA的要求,我们需要和Prod数据库保持尽量的实时同步 • Solution: • 保持两份拷贝,一份实时同步,一份Delay 几个小时。 • Recover Managed standby database delay 40 • 升级到10G
Standby Best Practice • Prod数据库的Redo log大小选择,需要权衡性能和Standby可恢复性(采用arch模式时) • 使用Lwgr方式时候,调整OS的TCP send/receive Buffer参数。
Standby 监控 • 监控standby数据库和Prod数据库的同步性 • 需要设置remote_login_passwordfile=exclusive才能允许远程SQL*Net登陆。 echo "last log in miscdb is ">>checkstandby.log sqlplus -s system/manager@misc @maxlog >>checkstandby.log sqlplus -s "sys/oracle@miscguard as sysdba" @maxlog >>checkstandby.log cat checkstandby.log |mail -s "sync of the standby database" chao_ping@vip.163.com
Oracle 的其他高可用技术 Real Application ClustersContinuous Availability for all Applications System Failure Data GuardZero Data Loss UnplannedDowntime Data Failure& Disaster Flashback QueryEnable Users to Correct their Mistakes Human Error Dynamic ReconfigurationCapacity on Demand without Interruption SystemMaintenance PlannedDowntime Online RedefinitionAdapt to Change Online Data Maintenance
Standby和SharePlex • SharePlex • 来自Quest公司的产品 • 也是基于Redo Log传输 • Parse Oracle Redo Log,解析成SQL Apply到备机 • 和Oracle的Logical Standby Database同一个机制 • 和Standby 的比较 • Standby的安装,配置,维护比较简单 • ST对Prod的压力小,SharePlex大一些 • Standby支持Oracle所有数据类型,Feature • SharePlex 相当于成熟的Logical Standby • SharePlex更加适合作为Replication的一种方案 • Shareplex非常昂贵,Standby是Oracle自带功能 • Standby可以做到实时,SharePlex??(不知道)
Standby和远程磁盘镜像 Standby优势: • 成本低:不需要特别的专门硬件 • 可以起到除了灾备之外的其他作用 • 更低的网络带宽使用率(只传输redo log) • 比较灵活,和其他Oracle HA Feature结合 • 安装,维护,配置简单,不需要第三方硬件,软件 远程磁盘镜像: • 可以备份除了oracle database 之外的东西 • 比如Informix,DB2,Email系统等 • 如实复制数据库的逻辑错误
Standby 发展 • Logical Standby Database开始出现,虽然还不成熟 • 10G Key Features: • Real Time Apply • FlashBack Database In Standby Site • Logical Standby 更加成熟
FAQ • Windows单机Standby试验: • ORA-01157 • 解决: DB_FILE_NAME_CONVERT需要大写 • 为什么有些归档日志在v$archived_log里面看不到 • control_file_record_keep_time参数太小
Q&A End