Oracle 10G windows 平台 DataGuard 实例.docx
《Oracle 10G windows 平台 DataGuard 实例.docx》由会员分享,可在线阅读,更多相关《Oracle 10G windows 平台 DataGuard 实例.docx(21页珍藏版)》请在冰豆网上搜索。
Oracle10Gwindows平台DataGuard实例
Oracle10Gwindows平台DataGuard
serverA:
10.85.10.44SID=orcl
targetserverB:
10.85.10.43
oracleversion:
10.2.0.1
OSplatform:
windowsXP
Primary设置:
1.设置主数据库为forcelogging模式
SQL>sqlplus"/assysdba"
SQL>alterdatabaseforcelogging;
2.设置主数据库为归档模式
SQL>archiveloglist
SQL>shutdownimmediate
SQL>startupmount
SQL>alterdatabasearchivelog;
SQL>archiveloglist
3.添加"备用联机日志文件"
先查看日志文件位置:
SQL>select*fromv$logfile;
在添加:
SQL>alterdatabaseaddstandbylogfilegroup4('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo04.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup5('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo05.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup6('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo06.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup7('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo07.log')size50m;
4.创建主库的初始化参数给备库用
SQL>Createpfilefromspfile;
产生的文件名为initorcl.ora存放目录默认放在$ORACLE_HOME/database下
5.在主库创建备库的控制文件和密码文件
SQL>Alterdatabasecreatestandbycontrolfileas'D:
\oracle\product\10.2.0\control01.ctl';
D:
>orapwdfile=D:
\PWDorcl.orapassword=adminentries=5;
缺省情况下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)
6.在主库创建监听和配置tnsnams.ora
listener.ora配置如下:
#listener.oraNetworkConfigurationFile:
D:
\oracle\product\10.2.0\db_1\network\admin\listener.ora
#GeneratedbyOracleconfigurationtools.
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(SID_NAME=orcl)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.3.44)(PORT=1521))
)
)
tnsnames.ora配置如下:
#tnsnames.oraNetworkConfigurationFile:
D:
\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
#GeneratedbyOracleconfigurationtools.
primary=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.3.44)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
standby=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.3.43)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
7.在initorcl.ora添加以下内容:
*.log_archive_format='%T%S%r.ARC'
*.DB_UNIQUE_NAME='primary'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='location=D:
\oracle\product\10.2.0\oradata\archVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=primary'
*.log_archive_dest_2='SERVICE=standbyarchASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='standby'
*.FAL_CLIENT='primary'
关闭数据库,在用initorcl.ora重启,并创建spfile文件
SQL>startuppfile='$ORACLE_HOME/database/initorcl.ora'
SQL>createspfilefrompfile='$ORACLE_HOME/database/initorcl.ora'
8.
A.拷贝数据文件,参数文件,控制文件,密码文件到备库上
initorcl.ora参数文件,PWDorcl.ora密码文件考到$ORACLE_HOME/database下的,
controlbak.ctl考到$ORACLE_base/oradata/orcl/下,并分别重命名为control01.ctl,control01.ctl,control01.ctl
数据文件考到$ORACLE_base/oradata/orcl/下
B.用Rman拷贝,不用停机
$rmantarget/
RMAN>backupfullformat'D:
/FULL_%d_%T_%s.bak'databaseincludecurrentcontrolfileforstandby;
RMAN>sql'altersystemarchivelogcurrent';
RMAN>BackupArchiveLogallformat='D:
/arch_%d_%T_%s.bak';
备份完后将备份文件拷到standby上同样的目录,强调:
同样的目录,在standby进行rman恢复即可
9.启动主数据库
SQL>startup
---------------------------------------------------------------------
Standy操作:
1.用oradim工具创建备库orcl实例
oradim.exe-new-sidorcl-startmodem
oradim.exe-edit-sidorcl-startmodea
2.创建备库存放数据文件和后台跟踪目录
$ORACLE_BASE\ORADATA\ORCL
$ORACLE_BASE\admin\orcl
$ORACLE_BASE\admin\orcl\adump
$ORACLE_BASE\admin\orcl\bdump
$ORACLE_BASE\admin\orcl\cdump
$ORACLE_BASE\admin\orcl\dpdump
$ORACLE_BASE\admin\orcl\pfile
$ORACLE_BASE\admin\orcl\udump
$ORACLE_BASE\admin\orcl\
3.添加"备用联机日志文件"
SQL>startupmount
先查看日志文件位置:
SQL>select*fromv$logfile;
在添加:
SQL>alterdatabaseaddstandbylogfilegroup4('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo04.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup5('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo05.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup6('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo06.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup7('D:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo07.log')size50m;
4.在备库创建监听和配置tnsnams.ora
listener.ora配置如下:
#listener.oraNetworkConfigurationFile:
D:
\oracle\product\10.2.0\db_1\network\admin\listener.ora
#GeneratedbyOracleconfigurationtools.
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACLE_HOME=D:
\oracle\product\10.2.0\db_1)
(SID_NAME=orcl)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.3.44)(PORT=1521))
)
)
tnsnames.ora配置如下:
#tnsnames.oraNetworkConfigurationFile:
D:
\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
#GeneratedbyOracleconfigurationtools.
primary=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.3.44)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
standby=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.3.43)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
5.测试主备之间网络连通
primary:
C:
>lsnrctlstart
C:
>tnspingstandby
standby
C:
>lsnrctlstart
C:
>tnspingprimary
6.配置备库初始化参数
编辑$ORACLE_HOME/database目录下的initorcl.ora添加以下内容
*.log_archive_format='%T%S%r.ARC'
*.DB_UNIQUE_NAME='standby'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='location=D:
\oracle\product\10.2.0\oradata\archVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=standby'
*.log_archive_dest_2='SERVICE=primaryarchASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=primary'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='primary'
*.FAL_CLIENT='standby'
7.启动备用数据库
C:
>setORACLE_SID=orcl
SQL>sqlplus"/assysdba"
SQL>startupnomountpfile='D:
\oracle\product\10.2.0\db_1\database\initorcl.ora';
SQL>createspfilefrompfile='D:
\oracle\product\10.2.0\db_1\database\initorcl.ora';
若采用Rman备份的,则在此standby端进行Rman还原数据库:
$rmantargetsys/admin@primaryauxiliary/
RMAN>duplicatetargetdatabaseforstandbydorecovernofilenamecheck;
SQL>alterdatabasemountstandbydatabase;
SQL>alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
---------------------------------------------------------------------------
测试
注意DataGuard启动顺序:
启动顺序:
先standby,后primary;
关闭顺序:
先primary后standby;
在备库将实例启动到mount状态:
SQL>startupnomount;
SQL>alterdatabasemountstandbydatabase;
SQL>ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;
SQL>alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
在备库启动监听:
$lsnrctlstart
在主库启动实例:
SQL>startup;
在主库启动监听:
$lsnrctlstart
在主库验证归档目录是否有效:
SQL>SELECTSTATUS,DESTINATION,ERRORFROMV$ARCHIVE_DEST;
如果有错误,要排查原因。
SQL>altersystemswitchlogfile;
SQL>selectmax(sequence#)fromv$archived_log;
MAX(SEQUENCE#)
--------------
70
主备查询结果一致,DataGuard搭建结束。
1.测试主库产生的归档日志是否能正常传送到归档日志
主库进行日志切换:
SQL>Altersystemswitchlogfile;
然后分别查看主库和备库的D:
\arch目录下是否产生了同样的归档日志
文件。
selectmax(sequence#)fromv$archived_log;
selectmax(sequence#)fromv$log_history;
selectgroup#,sequence#,archived,statusfromv$log;
selectname,sequence#,appliedfromv$archived_log;
selectsequence#,appliedfromv$archived_log;
若不同步,
1.看log日志,archive是否有丢失
2.可以在备库坐如下操作:
alterdatabaserecovermanagedstandbydatabasecancel;
alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
-----------------------------------------------------------------------
主备库切换
1.switchover
一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATAGUARD环境不会被破坏,原来DATAGUARD环境中的所有物理和逻辑STANDBY都可以继续工作。
在进行DATAGUARD的物理STANDBY切换前需要注意:
确认主库和从库间网络连接通畅;
确认没有活动的会话连接在数据库中;
PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
确保STANDBY数据库处于ARCHIVELOG模式;
如果设置了REDO应用的延迟,那么将这个设置去掉;
确保配置了主库和从库的初始化参数,使得切换完成后,DATAGUARD机制可以顺利的运行。
主库:
1.查看switchover状态
SQL>SELECTSWITCHOVER_STATUSFROMV$DATABASE;
tostandby
附:
A:
switchover_status出现sessionactive/notallowed
当出现sessionactive的时候表示还有活动的session,则运行
Alterdatabasecommittoswitchovertophysicalstandbywithsessionshutdown;
当出现notallowed时,在官方文档说转换会不成功,但是我测试的时候成功了,如果大家在测试不成功的时候再和我说,让我看看在什么情况下会不成功。
B.ora-01153:
anincompatiblemediarecoveryisactive
运行下面代码
Alterdatabaserecovermanagedstandbydatabasefinish;
或者Alterdatabaserecovermanagedstandbydatabasefinishforce;
Alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
2切换成备库
SQL>Alterdatabasecommittoswitchovertophysicalstandbywithsessionshutdown;
SQL>ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBY;
Databasealtered.
3启动到mount和应用日志状态
SQL>SHUTDOWNIMMEDIATE
SQL>startupnomount;
SQL>alterdataba