data guard

见到又有问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

天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤

向版主反映这个帖子  查看piner 的IP地址

楼主 旧帖 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

现任管理团队成员ITPUB元老管理团队2006纪念徽章会员2006贡献徽章授权会员 
      

三、备用服务器建立步骤
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

天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤

向版主反映这个帖子  查看piner 的IP地址

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

现任管理团队成员ITPUB元老管理团队2006纪念徽章会员2006贡献徽章授权会员 
      

四、日常管理
备用服务器可以启动到管理与只读模式
启动到只读方式
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

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值