本文主要介绍了9iR2的data guard的一些原理和基本配置方法,以及在data guard环境下的升级和一些监控检测手段,还涉及到一些切换的配置。由于当中涉及的操作可能会导致数据库不能正常运行,贴别提醒,不要在生产系统上直接试验,切记做好备份工作。
免得到时候想哭都哭不出来。
一 : data guard介绍
dataguard为随着oracle9i R1推出的一项有了重大改进的融灾技术,可以在网络联通的情况下,对生产库做一个完整的在线备份,起到容灾备份的作用。且成本低廉。目前应用也很广,如联通,电信都有data guard的系统在运行。
随着9i R2的推出,data guard也有了很大的改进,主要有下面的一些新功能
1. Logical standby database
在9i R2之前,data gauard的服务器只能运行在read only或者recover 模式,
一个physical standy database 在物理上完全等同主库,当physical standy database再做恢复的时候,不能打开用作其他用途。
而logical standby database只是在logical上等同需要恢复的schema,
所以在恢复的时候,可以同时打开做report,也可以用户和主库不一样的
数据对象等等,极大了提高了从库的利用率。
2.Database protection modes
在9iR2中,主库可以置于下面三种模式
– Maximum protection
– Maximum availability
– Maximum performance
在Maximum protection下, 可以保证从库和主库数据完全一样,做到zero data loss.事务同时在主从两边提交完成,才算事务完成。如果从库宕机或者网络出现问题,主从库不能通讯,主库也立即宕机。在这种方式下,具有最高的保护等级。但是这种模式对主库性能影响很大,要求高速的网络连接。
在Maximum availability模式下,如果和从库的连接正常,运行方式等同
Maximum protection模式,事务也是主从库同时提交。如果从库和主库失去
联系,则主库自动切换到Maximum performance模式下运行,保证主库具有最大的可用性。
在Maximum performance,主库把归档的 archived log通过arch进程传递给从库,在这种方式下,主库运行性能最高,但是不能保证数据不丢失,且丢失的数据受redo log的大小影响。在redo log过大的情况下,可能一天都没有归档一个日志,可以通过手工切换日志的方式来减小数据的丢失。
3.Cascading standby databases
再R2中,从库也可以设置把接受到得日志传递到下一级的从库。在有多台standby得情况下,通过这种方式,可以极大的减少主库的压力。
二:data guard原理
data guard原理可以通过如下的图来说明
physical standby直接从主库接受archived log,然后直接做基于block的物理恢复,所以physical standby再物理文件一级完全都等同于主库。
而logical standby则把从主库接受过来的archived log通过logmnr技术,解析为sql语句,直接在logical standby上作基于sql的同步,所以比较灵活。
三: data guard 的使用优势
1.增强了可用性,
通过和RAC协作,可以达到目前最高的可用性。可以做到同机房或者异地的容灾备份,同时成本很廉价。
2.提供三种保护模式选择,可以很灵活的在性能和数据保护等级上作选择。
3.提供switch over和fail over功能,可以在主库宕机的情况,把从库
切换为主库,在最短时间内恢复性同的运行。
4.通过参数设置,可以控制传到data guard上的日志做延迟恢复,可以防止
用户的一些无操作或者physical corruptions
四:配置data guard
方案中涉及的软件及硬件环境介绍如下
机器 a (primary ip 10.2.33.100)以下简称主库,,机器 b(standby 10.1.1.78) ,以下简称从库。
其中10.2.33.41为本地操作平台,安装有xwin32,
用于linux远程的图形操作。
操作系统 10.2.33.100 linux redhat advanced server 2.1
操作系统 10.1.1.78 linux redhat advanced server 2.1
操作系统 10.2.33.41 win2k server
数据库版本 9.2.0.1
由于本文主要关注9irelease 2的 dataguard配置,对一些oracle的基本操作,
如安装,建库等,不做过多说明,请参考其他文章。操作系统的参数设置在不同平台,也不相同,请参考相关文档。
如果说到a,b两机,这表示同时在a,b机操作。
1.主从两机的操作系统参数修改(root用户操作)
vi /etc/sysctl.conf 文件,修改后为下面
kernel.sysrq = 1
kernel.shmmax = 1073741824 --这个参数为服务器ram的一半
kernel.msgmni = 1024
kernel.sem = 100 32000 100 100
fs.file-max = 65535
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
2.a,b两机重起网卡,使第一步设置参数生效(root用户操作)
/etc/init.d/network restart
输出如下
Shutting down interface eth0: [ OK ]
Setting network parameters: [ OK ]
Bringing up interface lo: [ OK ]
Bringing up interface eth0: [ OK ]
检查参数设置是否生效
cat /proc/sys/kernel/shmmax
输出如下
1073741824 ,说明刚才设置生效
3.主从两机建立oracle安装用户(root用户操作)
useradd oracle9i
passwd oracle9i
4. a,b两机建立相关目录(root用户操作)
cd /
mkdir tpdata tpsys
chmod 777 tpdata
chmod 777 tpsys
5.主从两机oracle9i用户设置环境变量(oracle9i用户操作)
vi ~/.bash_profile
环境变量如下
export PATH
unset USERNAME
export ORACLE_BASE=/tpdata/9.2.0
export ORACLE_BASE1=/tpsys/app/oracle/product
#export ORACLE_BASE1=/tpsys/app/oracle/product/server
export ORACLE_HOME=$ORACLE_BASE1/9.2.0
export ORACLE_SID=sfssgbk
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=american_america.zhs16gbk
export DISPLAY=10.2.33.41:0 #便于远程操作
6.执行下面操作,使环境变量生效(oracle9i用户操作)
. ~/.bash_profile
echo $ORACLE_BASE
/tpdata/9.2.0
echo $ORACLE_HOME
/tpsys/app/oracle/product/9.2.0
确认环境变量已经生效。
7.在主库上安装好 oracle 9201,选择只安装software,建库的动作下一步做(oracle9i用户操作)
8.打包主库上$ORACLE_HOME,$ORACLE_BASE下面的安装文件,ftp到从库,解开(oracle9i用户操作)
主库
cd /
tar cvzf /tpdata/oracle9201server.tgz /tpsys/app/oracle/product9.2.0 /tpdata/9.2.0/doc /tpdata/9.2.0/jre /tpdata/9.2.0/oraInventory /tpdata/9.2.0/oui
ftp 到从库 /tpdata目录
从库
cd /
tar xvzf /tpdata/oracle9201server.tgz
9.在主库上建立数据库,通过dbca建立,除了字符集选择 zhs16gbk外,全部使用缺省方式(oracle9i用户操作)
10.关闭主库数据库,备份数据文件到从库(oracle9i用户操作)
确定需要cp过去的数据文件以及redo log
sqlplus /nolog
SQL> conn / as sysdba;
SQL> select FILE_NAME from dba_data_files;
FILE_NAME
---------------------------------------------------------------------
/tpdata/9.2.0/oradata/sfssgbk/system01.dbf
/tpdata/9.2.0/oradata/sfssgbk/undotbs01.dbf
/tpdata/9.2.0/oradata/sfssgbk/drsys01.dbf
/tpdata/9.2.0/oradata/sfssgbk/example01.dbf
/tpdata/9.2.0/oradata/sfssgbk/indx01.dbf
/tpdata/9.2.0/oradata/sfssgbk/odm01.dbf
/tpdata/9.2.0/oradata/sfssgbk/tools01.dbf
/tpdata/9.2.0/oradata/sfssgbk/users01.dbf
/tpdata/9.2.0/oradata/sfssgbk/xdb01.dbf
SQL> select MEMBER from v$logfile;
MEMBER
---------------------------------------------------------------------
/tpdata/9.2.0/oradata/sfssgbk/redo03.log
/tpdata/9.2.0/oradata/sfssgbk/redo02.log
/tpdata/9.2.0/oradata/sfssgbk/redo01.log
SQL> select NAME from v$tempfile;
NAME
---------------------------------------------------------------------
/tpdata/9.2.0/oradata/sfssgbk/temp01.dbf
SQL> shutdown immediate;
ftp 上面选出的所有文件到从库上相应的目录,为了简单起见,我选择用tar,然后ftp过去
在主库上
cd /tpdata
tar cvzf sfssgbk.tgz /tpdata/9.2.0/oradata/sfssgbk /tpdata/9.2.0/admin/sfssgbk
ftp sfssgbk.tgz 到从库 /tpdata目录
在从库上
cd /tpdata
tar xvzf sfssgbk.tgz
11.打开主库数据库,修改为归档方式(oracle9i用户操作)
mkdir -p /tpdata/9.2.0/oradata/sfssgbk/archive
sqlplus /nolog
SQL> conn / as sysdba;
Connected.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /tpsys/app/oracle/product/9.2.0/dbs/arch
Oldest online log sequence 0
Current log sequence 1
SQL> alter database archivelog;
Database altered.
SQL> archive log start;
Statement processed.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /tpsys/app/oracle/product/9.2.0/dbs/arch
Oldest online log sequence 0
Next log sequence to archive 1
Current log sequence 1
SQL> alter database open;
Database altered.
SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/tpdata/9.2.0/oradata/sfssgbk/archive';
System altered.
SQL> alter system set log_archive_format='%t_%s.dbf' scope=spfile;
System altered.
SQL> alter system set log_archive_start=true scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /tpdata/9.2.0/oradata/sfssgbk/archive
Oldest online log sequence 0
Next log sequence to archive 1
Current log sequence 1
12.在主库上制作从库control file(oracle9i用户操作)
sqlplus /nolog
SQL> conn / as sysdba;
Connected.
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tpdata/standby.ctl';
Database altered.
ftp 主库/tpdata/standby.ctl 到从库 /tpdata/9.2.0/oradata/sfssgbk目录
13.配置主库listener.ora和tnsnames.ora文件(oracle9i用户操作)
vi /tpsys/app/oracle/product/9.2.0/network/admin/listener.ora ,修改后为下
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.33.100)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = sfssgbk)
(ORACLE_HOME = /tpsys/app/oracle/product/9.2.0)
(SID_NAME = sfssgbk)
)
)
vi /tpsys/app/oracle/product/9.2.0/network/admin/tnsnames.ora ,
修改后为下
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.33.100)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sfssgbk)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.78)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sfssgbk)
)
)
14.配置从库listener.ora和tnsnames.ora文件(oracle9i用户操作)
vi /tpsys/app/oracle/product/9.2.0/network/admin/listener.ora ,修改后为下
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.78)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = sfssgbk)
(ORACLE_HOME = /tpsys/app/oracle/product/9.2.0)
(SID_NAME = sfssgbk)
)
)
vi /tpsys/app/oracle/product/9.2.0/network/admin/tnsnames.ora ,修改后为下
PRIMARY =
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3618/viewspace-485515/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/3618/viewspace-485515/