见到又有问data guard的问题,最近也做过这方面的东西,但是很成型的文档还没有,这篇先奉献出来,大家可以参考。 --------------------------------------------------------------------------------------------------------------- 备用数据库配置资料 一、基本概念 备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。 ORACLE从7.3才开始支持standby database。7.3.x-8.0.x需要手工拷贝所有归档日志并手工同步,从ORACLE815开始,开始支持多节点复制,并实现了自动同步,但是这种同步是数据异步模式的,可能引起数据丢失。 从ORACLE9i开始,备用服务器已经换了一种新的称呼,叫数据保护(DATA GUARD),在这种模式中,开始支持三种不同的数据保护模式,并开始采用LGWR对数据的传送而不是以往的ARCH,并增加了一个新的后台进程叫DMON监控数据的同步,支持多达9个节点的同时复制。从920开始,还开始支持物理与逻辑备用服务器。 920中的三种数据保护模式分别是: 1、 MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。 2、 MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。在主节点与备用节点的网络断开或连接不正常时,主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。 3、 MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE 建立备用服务器有如下要求: 1、 主节点必须运行在归档模式下 2、 主节点与备用节点最好有相同的OS版本,一般beta号差一点还是可以的 3、 主节点与备用节点必须有相同的数据库版本和兼容版本 二、配置环境 主节点:10.44.0.108,dell 6650 现有数据库版本:9.2.0.1.0,应用生产数据库,4*2G CPU,8G MEMORY OS版本信息如下 [oracle@db oracle9i]$ uname -a Linux db 2.4.18-3.10.2smp64G #1 SMP Tue Nov 12 12:43:17 CST 2002 i686 unknown 磁盘信息如下: [oracle@db product]$ df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda2 29525 2821 25205 11% / /dev/sda1 61 18 39 31% /boot /dev/sda4 78323 41582 32762 56% /data /dev/sda3 98428 56584 36844 61% /u01 数据库建立在/u01/product下面,包括数据文件,也在这个目录下。 主数据库归档信息如下: SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/product/oradata/ora81/archive Oldest online log sequence 1664 Next log sequence to archive 1666 Current log sequence 1666 备用节点:10.44.0.110,dell 6450 现有数据库版本:9.2.0.1.0 备用数据库4*700 CPU,4G MEMORY OS版本信息如下 [oracle@gddb worksh]$ uname -a Linux gddb 2.4.18-3.10.2smp #1 SMP Tue Nov 12 11:51:53 CST 2002 i686 unknown 磁盘信息如下 [oracle@gddb worksh]$ df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda2 19681 1737 16944 10% / /dev/sda1 61 15 43 25% /boot /dev/sda4 33440 25203 6538 80% /data /dev/sda3 49214 27733 18981 60% /u01 /dev/sdb6 67172 25976 37784 41% /DFILE 与主数据库服务器有相同的目录结构
__________________ if not now,when? if not me,who? 欢迎访问我的Blog 天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤
楼主 03-08-15 14:29
<script language="JavaScript" type="text/javascript"> function doZoom891989(size){ document.getElementById('text891989').style.fontSize=size+'px' } document.getElementById('text891989').style.fontSize='12px' </script>
piner that's life 注册日期: 2003 Feb 来自: 西子湖畔 技术贴数:4075 论坛积分:74814 论坛排名:32 论坛徽章:5
三、备用服务器建立步骤 1、检查主服务器的状态 检查归档状态,已经检查了,归档状态 检查是否使用spfile,最好使用spfile,可以自动修改参数。 设置主服务器的强行日志处理 SQL> ALTER DATABASE FORCE LOGGING; 查询V$dbfile获得数据文件信息 SQL> select * from V$dbfile; 9 /u01/product/oradata/ora81/xdb01.dbf 8 /u01/product/oradata/ora81/users01.dbf 2 /u01/product/oradata/ora81/undotbs01.dbf 7 /u01/product/oradata/ora81/tools01.dbf 1 /u01/product/oradata/ora81/system01.dbf 6 /u01/product/oradata/ora81/odm01.dbf 5 /u01/product/oradata/ora81/indx01.dbf 4 /u01/product/oradata/ora81/example01.dbf 3 /u01/product/oradata/ora81/drsys01.dbf 10 /u01/product/oradata/tablespace/mtabackup11.dbf 11 /u01/product/oradata/tablespace/mtabackup21.dbf 12 /u01/product/oradata/tablespace/mtabackup31.dbf 13 /u01/product/oradata/tablespace/mtabackup41.dbf 14 /u01/product/oradata/tablespace/mtamail11.dbf 15 /u01/product/oradata/tablespace/mtamail21.dbf 16 /u01/product/oradata/tablespace/mtamail31.dbf 17 /u01/product/oradata/tablespace/mtamail41.dbf 18 /u01/product/oradata/tablespace/mtamanager01.dbf 19 /u01/product/oradata/tablespace/mtaindex01.dbf 20 /u01/product/oradata/mailcontent/mtabackup01.dbf 21 /u01/product/oradata/mailcontent/mtabackup02.dbf 22 /u01/product/oradata/mailcontent/mtabackup03.dbf 23 /u01/product/oradata/mailcontent/mtabackup04.dbf 24 /u01/product/oradata/mailcontent/mailcontent01.dbf 25 /u01/product/oradata/mailcontent/mailcontent02.dbf 26 /u01/product/oradata/mailcontent/mailcontent03.dbf 27 /u01/product/oradata/mailcontent/mailcontent04.dbf 28 /u01/product/oradata/tablespace/mtamail12.dbf 29 /u01/product/oradata/tablespace/mtamail22.dbf 30 /u01/product/oradata/tablespace/mtamail32.dbf 31 /u01/product/oradata/tablespace/mtamail42.dbf 32 /u01/product/oradata/mailcontent/mailcontent05.dbf 33 /u01/product/oradata/ora81/indx02.dbf 可以看到数据库文件共有三个主要路径 /u01/product/oradata/ora81/ /u01/product/oradata/mailcontent/ /u01/product/oradata/tablespace/ 2、在备用服务器准备环境 包括: ·准备相应目录,如日志文件路径,归档路径,参数文件路径,数据文件准备存放路径等 (我这里有一组数据文件将被改变路径,其它的与主数据库一致) ·确认备用数据库的ORACLE_SID(与主数据库一样) 3、建立备用数据库参数文件 参数文件主要指:init$ORACLE_SID.ora 和 spfile$ORACLE_SID.ora文件,这些文件是启动备用数据库的参数文件,参数文件放在oracle目录下dbs目录中。备用数据库参数文件获得是在主数据库的参数文件基础上修改获得的。 在备用数据库建立参数文件必须注意的参数如下: [1] DB_FILE_NAME_CONVERT db_file_name_convert 主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐一指明对映关系。 格式:*.db_file_name_convert=主数据库数据文件目录,备用数据库数据文件目录 例如: 一对一映射设定 *.db_file_name_convert='u01/product/oracle9i/oradata','/DFILE.bak/oracle/database/standby' 多对多映射设定时,所有相对应路径都一一写出来 [2] LOG_FILE_NAME_CONVERT 指明主数据库和备用数据库的log文件转换目录对映。 格式为:*. log_file_name_convert=主数据库log目录,备用数据库目录 例如: *.log_file_name_convert='u01/product/oracle9i/oradata','/oracle/oracle9i/oradata' [3] STANDBY_ARCHIVE_DEST 备用数据库的归档日志归档目录。 格式:*.standby_archive_dest=备用数据库归档日志存放目录 例如: *.standby_archive_dest='/oracle/oracle9i/oradata/archive' [4]COMPATIBLE 主数据库和备用数据库的oracle版本必须一致,这个参数指明了oracle的版本号 例如: *.compatible='9.2.0.0.0' [5]CONTROL_FILES 指明备用数据库存放的控制文件路径和名称 例如: *.control_files=''/oracle/oracle9i/oradata/dbstand.ctl' [6] fal_server与fal_client 这两个参数是9i的新参数,指明了自动日志同步,在以前的环境中(如8i),只有手工解决日志差异,但是9i的这两个参数可以自动检测并解决日志差异。 例如: fal_server='standby' fal_client='primary' 其中standby与primary必须是连接到主数据库与备用数据库的连接 [7] standby_file_management 这个参数也是9i的新参数,可以自动同步数据文件。 例如: standby_file_management =auto 与主数据库不一样的参数如下 *.db_file_name_convert=('/u01/product/oradata/tablespace','/data/oracle9i/tablespace/') *.standby_file_management=AUTO *.remote_archive_enable=TRUE *.standby_archive_dest='/u01/product/oradata/ora81/archive' *.fal_server='DBPRIMARY' *.fal_client='DBSTANDBY' db_file_name_convert的设置是因为在三组数据文件中,有一组改变了路径,所以就把这一组给标记出来。 4、对主数据库做一次完整的冷或热备份,获得备用数据库数据文件资料 ·做一次完整的冷备份或热备份 ·FTP传送相应的数据文件到备用服务器 5、在主数据库创建备用服务器控制文件 采用专用的sql命令创建备用数据库的控制文件 SQL> alter database create standby controlfile as ‘控制文件名和路径’ 创建后将控制文件cp到备用数据库所在的控制文件目录下。 6、配置网络连接 设定备用服务器的listener.ora文件,增加监听器 [oracle@gddb admin]$ more listener.ora # Generated by Oracle configuration tools. LISTENERDB = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.44.0.110)(PORT = 1522)) ) ) ) SID_LIST_LISTENERDB = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ora81) (ORACLE_HOME = /u01/product/oracle9i) (SID_NAME = ora81) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.44.0.110)(PORT = 1521)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/product/oracle9i) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = ora81) (ORACLE_HOME = /u01/product/oracle9i) (SID_NAME = ora81) ) ) 在这里,我们将配置两个监听,一个用于主服务器到备用服务器的连接,端口是1522,另外一个用于日后的切换需要,默认端口1521(见后面的失败切换)。 启动1522的端口 lsnrctl start listenerdb 设定主服务器的tnsnames.ora文件,连接到该监听 DBSTANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.44.0.110)(PORT = 1522)) ) (CONNECT_DATA = (SID = ora81)(SERVER = DEDICATED)) ) 测试,tnsping DBSTANDBY即可。 7、生成备用服务器口令文件 便于启动备用数据库时的 sys连接用,远程管理时也有用。 Oracle用户登陆 Linux>orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=$ORACLE_SID entries=4 例如: linux>orapwd file= /u01/product/oracle9i/dbs/dbs/orapwtestdb password=testdb entries=4 也可以从主数据库上拷贝下来即可。 8、启动备用数据库 export ORACLE_SID=ora81 sqlplus /nolog SQL>connect / as sysdba SQL> startup nomount pfile='/u01/product/oracle9i/dbs/initora81db.ora' SQL>alter database mount standby database; 这样就进入了手工恢复模式。如果想要进入管理恢复模式继续执行下面的命令 SQL>alter database recover managed standby database disconnect from session; 补充:如果没有设置fal_server和fal_client,而且在主备用服务器上存在日志差异,需要手工同步恢复 以下语句查看差异 SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# 2> FROM V$ARCHIVE_GAP; 通过OS命令或FTP拷贝需要同步的归档日志 发出如下命令用于日志同步 ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE; 9、设定主数据库到备用服务器的归档 自动修改主数据库的参数,使自动归档到备用服务器 alter system set log_archive_dest_2='SERVICE=dbstandby MANDATORY REOPEN=300'; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=dbstandby MANDATORY REOPEN=60' SCOPE=BOTH; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=enable SCOPE=BOTH; SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; 10、验证,在备用服务器上查询 SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME 2 FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 或查看 SQL>SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG; 查看日志应用情况
__________________ if not now,when? if not me,who? 欢迎访问我的Blog 天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤
2楼 03-08-15 14:30
<script language="JavaScript" type="text/javascript"> function doZoom891992(size){ document.getElementById('text891992').style.fontSize=size+'px' } document.getElementById('text891992').style.fontSize='12px' </script>
piner that's life 注册日期: 2003 Feb 来自: 西子湖畔 技术贴数:4075 论坛积分:74814 论坛排名:32 论坛徽章:5
四、日常管理 备用服务器可以启动到管理与只读模式 启动到只读方式 startup nomount pfile='/u01/product/oracle9i/dbs/initora81db.ora' slter database mount standby database alter database open read only 如果在管理恢复模式下到只读模式 recover managed standby database cancel; alter database open read only; 从只读方式到管理恢复方式 recover managed standby database disconnect from session; 五、正常切换 以下的脚本可以实现正常切换 从Primary切换到standby的脚本: [oracle@db worksh]$ more swithstandby.sh ORACLE_BASE=/u01/product;export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/oracle9i;export ORACLE_HOME ORACLE_OWNER=oracle; export ORACLE_OWNER PATH=$ORACLE_HOME/bin:$PATH;export PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib; export LD_LIBRARY_PATH ORACLE_SID=ora81; export ORACLE_SID ORACLE_NLS=$ORACLE_HOME/ocommon/nls/admin/data; export ORACLE_NLS NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';export NLS_DATE_FORMAT editor=vi; export editor export SQLPATH=$HOME/sql sqlplus /nolog <
connect / as sysdba alter database commit to switchover to physical standby with session shutdown; shutdown startup nomount pfile='/u01/prudoct/oracle9i/dbs/initora81db.ora' alter database mount standby database; recover managed standby database disconnect; exit EOF lsnrctl stop lsnrctl start listenerdb 从standby切换到primary的脚本: [oracle@gddb worksh]$ more switchprimary.sh ORACLE_BASE=/u01/product;export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/oracle9i;export ORACLE_HOME ORACLE_OWNER=oracle; export ORACLE_OWNER PATH=$ORACLE_HOME/bin:$PATH;export PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib; export LD_LIBRARY_PATH ORACLE_SID=ora81; export ORACLE_SID ORACLE_NLS=$ORACLE_HOME/ocommon/nls/admin/data; export ORACLE_NLS NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';export NLS_DATE_FORMAT editor=vi; export editor export SQLPATH=$HOME/sql sqlplus /nolog <
connect / as sysdba alter database commit to switchover to primary; shutdown startup pfile='/u01/product/oracle9i/dbs/initora81.ora' exit EOF 切换回来的脚本依次类推。 主机和备机各有两个listener, listener监听1521,listenerdb监听1522. 任何一个节点,在primary期间启动listener, standby 期间启动listenerdb。 连接data guard的客户端的tnsnames配置: ora81 = (DESCRIPTION = (failover = on ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 主)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 备)(PORT = 1521)) ) (CONNECT_DATA = (SID = ora81) ) ) 六、失败切换 失败切换一般指主服务器已经不能使用,必须切换到备用服务器,所以,只操作备用服务器这一端,以下提供一完美切换脚本 [oracle@gddb worksh]$ more switchprimary.sh ORACLE_BASE=/u01/product;export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/oracle9i;export ORACLE_HOME PATH=$ORACLE_HOME/bin:$PATH;export PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib; export LD_LIBRARY_PATH ORACLE_SID=ora81; export ORACLE_SID ORACLE_NLS=$ORACLE_HOME/ocommon/nls/admin/data; export ORACLE_NLS NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';export NLS_DATE_FORMAT editor=vi; export editor sqlplus /nolog < connect / as sysdba -- if standby have active logfile -- alter database recover managed standby database finish; -- else alter database recover managed standby database finish skip standby logfile; -- switch alter database commit to switchover to primary; -- open shutdown immediate startup pfile='/u01/product/oracle9i/dbs/initora81.ora' exit EOF lsnrctl stop listenerdb lsnrctl start 说明,如果有活动日志,必须用 alter database recover managed standby database finish; 否则用 alter database recover managed standby database finish skip standby logfile; 这样切换的备用服务器可以避免最小的数据丢失和不用resetlogs,特别是对于用多个备用服务器的时候,该服务器可以马上作为主服务器而不用重新创建备用服务器。 还有一种切换叫强行失败切换,这样的切换是以激和备用服务器来完成的,在重新启动数据库的时候,备用机会resetlogs,这样会影响到其它备用服务器而且必须重新在主服务器上重新构造备用服务器 [oracle@gddb worksh]$ more activeprimary.sh #!/bin/bash #swith to primary with cancel ORACLE_BASE=/u01/product;export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/oracle9i;export ORACLE_HOME PATH=$ORACLE_HOME/bin:$PATH;export PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib; export LD_LIBRARY_PATH ORACLE_SID=ora81; export ORACLE_SID ORACLE_NLS=$ORACLE_HOME/ocommon/nls/admin/data; export ORACLE_NLS NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG #cancel and startup database sqlplus /nolog < connect / as sysdba alter system archive log current; recover managed standby database cancel; alter database activate standby database; shutdown immediate startup pfile='/u01/product/oracle9i/dbs/initora81.ora' exit EOF lsnrctl stop listenerdb lsnrctl start