Oracle10g Data Guard 安装笔记.docx
《Oracle10g Data Guard 安装笔记.docx》由会员分享,可在线阅读,更多相关《Oracle10g Data Guard 安装笔记.docx(17页珍藏版)》请在冰豆网上搜索。
![Oracle10g Data Guard 安装笔记.docx](https://file1.bdocx.com/fileroot1/2022-12/7/07f60e68-203c-4853-a1ab-6d54df9347bb/07f60e68-203c-4853-a1ab-6d54df9347bb1.gif)
Oracle10gDataGuard安装笔记
Oracle10gDataGuard安装笔记
一、DataGuard概念:
1、DataGuard三种模式:
Maximumprotection:
零数据丢失。
发生事务时需要同时向主数据库和备用数据写重做日志。
为了保证数据不丢失,如果有一个事务发现不能向备用数据写重做日志,那么主数据库会自动关闭。
Maximumavailability:
在保证主数据库可用的情况下最大程度上保证数据的不丢失。
同Maximumprotection一样也是同时向主和备用数据库写重做日志。
与Maximumprotection不同的时当发现不能向备用数据库写重做日志时不会关闭数据库,而是采用Maximumperformance的模式管理直到修复故障。
当发生第二次错误时至少要能够将重做日志写入到一个备用数据库中才能保证零数据丢失。
(多备用库的情况下。
如果是一个备用库发生一次错误就会丢失数据)
Maximumperformance:
Oracle默认采用这种方式。
在不影响主库的性能的情况下最大程度上保证数据不丢失。
由于前两种方式要同时向主和备库写重做日志这就会给系统的性能带来负面影响。
当事务提交时会立即将数据写入到本地的联机日志中。
主库的重做数据流至少要写入到一个从库中,但是这个并不是与主库同时发生的。
如果采用了足够的带宽的话,这种模式提供的数据保护保证最大的可用性,同时对主库的性能影响最小。
2、DataGuard工作原理:
从设计原理上来讲,standbydatabase是为primarydatabase建立的备份,因此具有redundancedata,也是相对于database来说的highavailability;
standbydatabase为primarydatabase做的备份,是通过primarydatabase不断产生出的archivedlogfiles来实现的。
primarydatabase处于archivemode的状态,持续送出archivedlogfiles给standbydatabase,而standbydatabase则处于recoverymode,持续applyprimarydatabase的archivedlogfiles.
(图1:
RedoApply与LGWRASYNC)
为了完成上述过程,必须具备以下的条件:
(1)如果primarydatabase和standbydatabase是运行在不同的服务器上面,那么这两台服务器必须有相同version和release的操作系统;必须有相同version,release和patch的oracleRDBMS系统。
(2)Primarydatabase必需处于archivelogmode。
(3)Oracle从version8i(8.1.5以后)开始支持primarydatabase可以将arhivedlogfiles自动送到最多一个remotesite(一般即standbydatabaseserver),本地则可多达七个地点。
并且,standbydatabase在mount的状态下,增加了managedrecoverymode,在这种状态下,standbydatabase可以自动立即apply由primarynode送过来的archivedlogfiles。
(4)Oracle从version8i(8.1.5以后)开始支持standbydatabase的mountrecoverymode和databasereadonlymode的转换。
这样方便了系统可以利用standbydatabase产生reports,而不影响用户正常使用primarydatabase。
(5)一旦standbydatabase被activated,即成为primarydatabase,无法再回归standbydatabasemode。
因此primarydatabase出了问题,standbydatabase被actived成为primarydatabase之后,如果需要在原来的primary/standbynode上面重建primary/standbydatabase,两个database都需要重建。
(6)关于启动standbydatabase时与primarydatabase之间的数据丢失问题。
如果primarydatabase在出问题之前如果无法完成logfileswitch的话,两个database之间会相差currenton-lineredologfile中的数据。
oracle9i中的dataguard弥补了这一缺陷。
3、ARCH与LGWR
采用归档日志传送还是联机日志传送,默认是归档进程
是否采用ARCH进程还是LGWR进程,很多时候依赖于保护的方式,下表可以看到在不同的
保护模式下,采用归档进程还是联机日志进程的情况。
最大保护
最大可用
最大性能
进程
LGWR
LGWR
LGWR或ARCH
网络传输模式
SYNC
SYNC
LGWR时设置ASYNC
磁盘写操作
AFFIRM
AFFIRM
NOAFFIRM
备用日志
Yes
物理备用需要
LGWR和物理备用时需要
备用库类型
物理
物理或逻辑
物理或逻辑
4、SYNC与ASYNC和AFFIRM与NOAFFIRM
SYNC与ASYNC决定了网络传输的同步与异步操作,默认ASYNC
AFFIRM与NOAFFIRM决定了归档日志磁盘写的同步与异步操作,默认NOAFFIRM。
这两个参数用来决定不同的保护模式。
网络I/O性质
归档日志磁盘I/O性质
物理备用的性能
保护的级别
SYNC
AFFIRM
Lowest
Highest
SYNC
NOAFFIRM
Low
High
ASYNC
AFFIRM
High
Low
ASYNC
NOAFFIRM
Highest
Lowest
5、DELAY与NODELAY
是否延迟同步,默认不延迟,如果选择DELAY,默认30分钟
如
SQL>ALTERDATABASERECOVERMANAGEDSTANDBYDATABASENODELAY;
还可以设置在主数据库上
LOG_ARCHIVE_DEST_3=’SERVICE=standbyDELAY=240’
LOG_ARCHIVE_DEST_STATE_3=ENABLE
延迟参数并不影响日志的传送
6、MANDATORY与OPTIONAL
默认是OPTIONAL,如果设置MANDATORY,表示一定要归档成功,否则将引发主数据库
的归档等待。
Oracle建议采用OPTIONAL方式来传送日志。
18
7、REOPEN与NOREOPEN和MAX_FAILURE与
NOMAX_FAILURE
REOPEN与NOREOPEN决定是否重试操作,默认是REOPEN,300秒,表示如果失败后,
最小的重试的时间间隔
Noreopen表示不重试失败操作
MAX_FAILURE与NOMAX_FAILURE表示最大重试次数,默认是NOMAX_FAILURE,表
示一直重试,如果是MAX_FAILURE,则采用MAX_FAILURE=count来决定重试的次数,
如果是MAX_FAILURE,则一定需要在REOPEN模式下
8、ALTERNATE与NOALTERNATE
表示如果归档失败,是否转向新的归档路径,默认是的NOALTERNATE
如采用如下配置
LOG_ARCHIVE_DEST_2=’LOCATION=d:
\bakMANDATORY
ALTERNATE=LOG_ARCHIVE_DEST_3’
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_3=’LOCATION=f:
\bakMANDATORY’
LOG_ARCHIVE_DEST_STATE_3=ALTERNATE那么就是说,如果路径2上归档失败的话,将切换到路径3继续归档。
二、DataGuard实现环境(IP地址视情况而定)
主服务器
备份服务器
操作系统
Windows2003Enterprise
Windows2003Enterprise
Oracle版本
Oracle10.2.0.1.0
Oracle10.2.0.1.0
OracleSID
ERPDB
ERPDB
ORACLE_HOME
E:
\oracle\oradata\erpdb
E:
\oracle\oradata\erpdb
机器名
Bolun(Primary)
Hxbyfwq(Standby)
IP地址
192.168.1.11
192.168.1.19
实现步骤
1.在PrimaryServer上安装Oracle并创建SID为ERPDB的Oracle数据库;
2.在StandbyServer上安装Oracle并创建SID为ERPDB的Oracle数据库;
这一步可以用命令只创建一个名字为ERPDB的Oracle服务名即可,
3.将PrimaryServer上的所有数据文件、redo文件和password文件都copy到StandbyServer机器的相应位置;
E:
\oracle\product\10.2.0\oradata\ERPDB目录下文件
CWMLITE01.DBF
DRSYS01.DBF
EXAMPLE01.DBF
INDX01.DBF
ODM01.DBF
SYSTEM01.DBF
TEMP01.DBF
TOOLS01.DBF
UNDOTBS01.DBF
USERS01.DBF
XDB01.DBF
REDO01.LOG
REDO02.LOG
REDO03.LOG
E:
\oracle\product\10.2.0\db_1\database目录下文件
PWDERPDB.ora(密码文件)
4.修改PrimaryServer的Oraclce初始化参数;
文件位置:
c:
\oracle\admin\erpdb\pfile\下的init初始化参数文件,我们把名字改为initerpdb.ora,这样好记一点;内容如下。
主要配置在#DataGuardNewaddparameters部分。
###########################################
#DataGuardNewaddparameters
###########################################
db_unique_name='ERPDB'
#log_archive_config='dg_config=(ERPDB,ERPDB)'
log_archive_dest_1='location=E:
\oracle\product\10.2.0\oradata\archiveVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=ERPDB'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
log_archive_dest_2='SERVICE=standbyLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=ERPDB'
#注:
到StandbyDatabase的数据库连接名
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_MIN_SUCCEED_DEST=2
fal_client='primary'#注:
PrimaryServer连接StandbyServer的数据库连接名
fal_server='standby'#注:
StandbyServer连接PrimaryServer的数据库连接名
standby_archive_dest='e:
\oracle\product\10.2.0\oradata\standbyarchive'
standby_file_management=auto
5.设置primarydatabase为archivelog模式
SQL>shutdownimmediate;
SQL>startupmountpfile=’c:
\oracle\admin\erpdb\pfile\initerpdb.ora’;
SQL>alterdatabaseforcelogging;
SQL>alterdatabaseopen:
6.在PrimaryDatabase上创建StandbyDatabase的控制文件
SQL>shutdownimmediate;
SQL>startupmount;
SQL>alterdatabasecreatestandbycontrolfileas'd:
\bak\standbyctl.ctl’
SQL>alterdatabaseopen;
然后将该controlfile复制到StandbySevers的对应位置,原来的控制文件已经不需要了;
7.修改StandbyDatabase的初始化参数
拷贝PrimaryDatabase上的初始化参数文件到StandbyDatabase上对应位置,然后修改为以下内容:
CONTROL_FILES='c:
\oracle\oradata\pstest\control01.ctl’
###########################################
#newaddexclusive
###########################################
db_unique_name='ERPDB'
#log_archive_config='dg_config=(ERPDB,ERPDB)'
log_archive_dest_1='location=E:
\oracle\product\10.2.0\oradata\archiveVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=ERPDB'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
log_archive_dest_2='SERVICE=primaryLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=ERPDB'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_MIN_SUCCEED_DEST=2
fal_client='standby'
fal_server='primary'
standby_archive_dest='e:
\oracle\product\10.2.0\oradata\standbyarchive'
standby_file_management=auto
###########################################
具体参数的说明请参考oracle在线文档。
8.设置PrimaryDatabase和StandbyDatabase的tnsnames.ora
文件位于:
E:
\oracle\product\10.2.0\db_1\NETWORK\ADMIN
Primarydatabase
#tnsnames.oraNetworkConfigurationFile:
E:
\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
#GeneratedbyOracleconfigurationtools.
primary=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=erpdb)
)
)
ERTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROCI))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
standby=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.19)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=ERPDB)
)
)
StandbyDatabase
#tnsnames.oraNetworkConfigurationFile:
E:
\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
#GeneratedbyOracleconfigurationtools.
primary=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=erpdb)
)
)
ERTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROCI))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
standby=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=hxbyfwq)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=ERPDB)
)
)
接Oracle10gDataGuard安装笔记
(二)
listener.ora文件
Primarydatabase
#listener.oraNetworkConfigurationFile:
E:
\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
#GeneratedbyOracleconfigurationtools.
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=bolun)(PORT=1521))
)
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=E:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=erpdb)
(ORACLE_HOME=E:
\oracle\product\10.2.0\db_1)
(SID_NAME=erpdb)
)
)
LISTENERDB=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=1522))
)
)
)
SID_LIST_LISTENERDB=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=erpdb)
(ORACLE_HOME=E:
\oracle\product\10.2.0\db_1)
(SID_NAME=erpdb)
)
)
StandbyDatabase
#listener.oraNetworkConfigurationFile:
E:
\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
#GeneratedbyOracleconfigurationtools.
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=hxbyfwq)(PORT=1521))
)
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=E:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=erpdb)
(ORACLE_HOME=E:
\oracle\product\10.2.0\db_1)
(SID_NAME=erpdb)
)
)
LISTENERDB=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=hxbyfwq)(PORT=1522))
)