使用RMAN来实现主库不停机的物理standby Data Guard 搭建
来源:互联网 发布:linux vim颜色设置 编辑:程序博客网 时间:2024/05/20 00:49
测试环境:
操作系统: vm虚拟机的win2003
Primary数据库:
IP地址:192.168.94.198
数据库SID:dgdb1
机器名:oracle1
DB_UNIQUE_NAME:dgdb1
数据库版本:10.2.0.4
Standby数据库:
IP地址:192.168.94.199
数据库SID:dgdb1
机器名:oracle2
DB_UNIQUE_NAME:dgdb1_s
数据库版本:10.2.0.4
一:搭建前的准备工作
1:强制数据库logging和开启archivelog是必须的
只有达到这个条件的数据库才能实现不停机的搭建dg,如果说没有开启archivelog,那就是扯淡了,必须重启了。
SQL> alter database force logging;
SQL> archive log list;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> archive log list;
2:相应的目录建好
standby端
mkdir C:/oracle/product/10.2.0/oradata/dgdb1
mkdir C:/oracle/product/10.2.0/admin/dgdb1/adump
mkdir C:/oracle/product/10.2.0/admin/dgdb1/bdump
mkdir C:/oracle/product/10.2.0/admin/dgdb1/cdump
mkdir C:/oracle/product/10.2.0/admin/dgdb1/udump
mkdir C:/oracle/product/10.2.0/admin/dgdb1/dpdump
mkdir C:/oracle/product/10.2.0/admin/dgdb1/pfile
mkdir C:/oracle/archive
primary端
mkdir C:/oracle/archive
3:修改或新增listener.ora 和tnsnames.ora 文件
这里最好注意一点的就是listener.ora 中新增的部分是在括号内不是在括号外的
primary端:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = dgdb1)
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
(SID_NAME = dgdb1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
---------------------------------------------------------------------------------------------------------------------
dgdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.198)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgdb1)
)
)
dgdb1_s =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.199)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgdb1)
)
)
standby端:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = dgdb1)
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1)
(SID_NAME = dgdb1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle2)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
----------------------------------------------------------------------------------------------------------------
dgdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.198)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgdb1)
)
)
dgdb1_s =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.94.199)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dgdb1)
)
)
二:具体的搭建工作
1:创建standby需求的pfile并修改添加相应参数
根据primary数据库创建相应的pfile
primary端执行:
C:/>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期四 5月 26 16:44:56 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> CREATE PFILE='c:/standby.ora' FROM SPFILE;
文件已创建。
使用文本编辑器编辑该文档,添加如下的参数配置:
*.db_unique_name='dgdbs'
*.fal_server='dgdb1'
*.fal_client='dgdbs'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgdb1,dgdbs)'
*.log_archive_dest_1='LOCATION=C:/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgdbs'
*.LOG_ARCHIVE_DEST_2='SERVICE=dgdb1 LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=dgdb1'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.standby_archive_dest='C:/oracle/archive'
*.standby_file_management='AUTO'
修改完毕后拷贝到standby端。
2:在standby端创建数据库并使用pfile启动
使用命令创建数据库,密码文件直接拷贝主库的
standby端:
C:/>oradim -new -sid dgdb1 -startmode manual
实例已创建。
拷贝primary的
C:/oracle/product/10.2.0/db_1/database/PWDdgdb1.ora
到standby的相应目录存放
也可手工创建
orapwd file=... password=...
使用拷贝过来的pfile启动数据库并创建spfile
C:/>set oracle_sid=dgdb1
C:/>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期四 5月 26 16:44:56 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
已连接到空闲例程。
SQL> startup nomount pfile=c:/standby.ora
ORACLE 例程已经启动。
Total System Global Area 197132288 bytes
Fixed Size 1295800 bytes
Variable Size 150997576 bytes
Database Buffers 41943040 bytes
Redo Buffers 2895872 bytes
SQL> CREATE SPFILE FROM PFILE='c:/standby.ora';
文件已创建。
3:在primary端修改相应参数
不只是丛库有新增修改的参数,主库同样有些要变动的参数,由于db_unique_name不能直接修改,所以为了保证数据库不停机,我们就不修改这个参数,只用他的sid来定位。
primary端:
修改相应的参数
C:/>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期四 5月 26 16:44:56 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
已连接到空闲例程。
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = AUTO;
系统已更改。
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = AUTO scope=both;
系统已更改。
SQL> ALTER SYSTEM SET fal_server='dgdb1_s' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET fal_client='dgdb1' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgdb1_s,dgdb1)' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET log_archive_dest_1='LOCATION=C:/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgdb1' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=dgdb1_s LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgdb1_s' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' scope=both;
系统已更改。
SQL> ALTER SYSTEM SET standby_archive_dest='C:/oracle/archive' scope=both;
系统已更改。
SQL>
4:在primary端开始使用rman备份数据库
指定这个是为了standby的目的的rman备份。
primary端:
C:/Documents and Settings/Administrator>rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期五 5月 27 14:46:56 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: DGDB1 (DBID=152223982)
RMAN> backup full database format='c:/dgdb1_%U_%T' include current controlfile for standby;
启动 backup 于 27-5月 -11
当前日志已存档
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=141 devtype=DISK
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =60 记录 ID=33 时间戳=752168273
输入存档日志线程 =1 序列 =61 记录 ID=34 时间戳=752251110
输入存档日志线程 =1 序列 =62 记录 ID=35 时间戳=752251630
通道 ORA_DISK_1: 正在启动段 1 于 27-5月 -11
通道 ORA_DISK_1: 已完成段 1 于 27-5月 -11
段句柄=C:/DGDB1_02MDCSNJ_1_1_20110527 标记=TAG20110527T144712 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 27-5月 -11
启动 backup 于 27-5月 -11
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/SYSTEM01.DBF
输入数据文件 fno=00002 name=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/UNDOTBS01.DBF
输入数据文件 fno=00003 name=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/SYSAUX01.DBF
输入数据文件 fno=00005 name=C:/ORACLE/PRODUCT/10.2.0/DB_1/DATABASE/TB_ALL_1.DBF
输入数据文件 fno=00004 name=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 27-5月 -11
通道 ORA_DISK_1: 已完成段 1 于 27-5月 -11
段句柄=C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/DGDB1/BACKUPSET/2011_05_27/O
1_MF_NNNDF_TAG20110527T144720_6XYL7T6T_.BKP 标记=TAG20110527T144720 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:26
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括备用控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 27-5月 -11
通道 ORA_DISK_1: 已完成段 1 于 27-5月 -11
段句柄=C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/DGDB1/BACKUPSET/2011_05_27/O
1_MF_NCSNF_TAG20110527T144720_6XYLBJOH_.BKP 标记=TAG20110527T144720 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 27-5月 -11
启动 backup 于 27-5月 -11
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =63 记录 ID=36 时间戳=752251730
通道 ORA_DISK_1: 正在启动段 1 于 27-5月 -11
通道 ORA_DISK_1: 已完成段 1 于 27-5月 -11
段句柄=C:/DGDB1_05MDCSQI_1_1_20110527 标记=TAG20110527T144850 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 27-5月 -11
RMAN>
备份完毕后,把相应备份文件拷贝到丛库的相应目录
5:使用duplicate 还原standby数据库
这里要注意了,虽然备份文件是拷贝到从库的,但是执行这个命令还是在主库primary执行的
primary端:
C:/Documents and Settings/Administrator>rman target / auxiliary sys/system@dgdb1
_s
恢复管理器: Release 10.2.0.4.0 - Production on 星期五 5月 27 15:33:05 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: DGDB1 (DBID=152223982)
已连接到辅助数据库: DGDB1 (未装载)
RMAN> duplicate target database for standby nofilenamecheck dorecover;
启动 Duplicate Db 于 27-5月 -11
使用通道 ORA_AUX_DISK_1
内存脚本的内容:
{
set until scn 1007695;
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
正在执行内存脚本
正在执行命令: SET until clause
启动 restore 于 27-5月 -11
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在还原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份片段 C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_A
EA/DGDB1/BACKUPSET/2011_05_27/O1_MF_NCSNF_TAG20110527T144720_6XYLBJOH_.BKP
通道 ORA_AUX_DISK_1: 已还原备份片段 1
段句柄 = C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/DGDB1/BACKUPSET/2011_05_2
/O1_MF_NCSNF_TAG20110527T144720_6XYLBJOH_.BKP 标记 = TAG20110527T144720
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:03
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/CONTROL01.CTL
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/CONTROL02.CTL
输出文件名=C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/CONTROL03.CTL
完成 restore 于 27-5月 -11
sql 语句: alter database mount standby database
释放的通道: ORA_AUX_DISK_1
内存脚本的内容:
{
set until scn 1007695;
set newname for tempfile 1 to
"C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/TEMP01.DBF";
switch clone tempfile all;
set newname for datafile 1 to
"C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/SYSTEM01.DBF";
set newname for datafile 2 to
"C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/UNDOTBS01.DBF";
set newname for datafile 3 to
"C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/SYSAUX01.DBF";
set newname for datafile 4 to
"C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/USERS01.DBF";
set newname for datafile 5 to
"C:/ORACLE/PRODUCT/10.2.0/DB_1/DATABASE/TB_ALL_1.DBF";
restore
check readonly
clone database
;
}
正在执行内存脚本
正在执行命令: SET until clause
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/TEMP01
DBF
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 27-5月 -11
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=156 devtype=DISK
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/SYSTEM01.DBF
正将数据文件00002还原到C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/UNDOTBS01.DBF
正将数据文件00003还原到C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/SYSAUX01.DBF
正将数据文件00004还原到C:/ORACLE/PRODUCT/10.2.0/ORADATA/DGDB1/USERS01.DBF
正将数据文件00005还原到C:/ORACLE/PRODUCT/10.2.0/DB_1/DATABASE/TB_ALL_1.DBF
通道 ORA_AUX_DISK_1: 正在读取备份片段 C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_A
EA/DGDB1/BACKUPSET/2011_05_27/O1_MF_NNNDF_TAG20110527T144720_6XYL7T6T_.BKP
通道 ORA_AUX_DISK_1: 已还原备份片段 1
段句柄 = C:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/DGDB1/BACKUPSET/2011_05_2
/O1_MF_NNNDF_TAG20110527T144720_6XYL7T6T_.BKP 标记 = TAG20110527T144720
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:01:38
完成 restore 于 27-5月 -11
内存脚本的内容:
{
switch clone datafile all;
}
正在执行内存脚本
数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=6 stamp=752254666 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADAT
/DGDB1/SYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=7 stamp=752254666 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADAT
/DGDB1/UNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=8 stamp=752254666 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADAT
/DGDB1/SYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=9 stamp=752254666 文件名=C:/ORACLE/PRODUCT/10.2.0/ORADAT
/DGDB1/USERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=10 stamp=752254666 文件名=C:/ORACLE/PRODUCT/10.2.0/DB_1/
ATABASE/TB_ALL_1.DBF
内存脚本的内容:
{
set until scn 1007695;
recover
standby
clone database
delete archivelog
;
}
正在执行内存脚本
正在执行命令: SET until clause
启动 recover 于 27-5月 -11
使用通道 ORA_AUX_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 63 已作为文件 C:/ORACLE/ARCHIVEARC00063_0743945006.001 存在
于磁盘上
存档日志文件名 =C:/ORACLE/ARCHIVEARC00063_0743945006.001 线程 =1 序列 =63
介质恢复完成, 用时: 00:00:02
完成 recover 于 27-5月 -11
完成 Duplicate Db 于 27-5月 -11
6:完毕后的收尾工作及开启dg
建立redo log
standby端:
C:/>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期五 5月 27 15:45:00 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('C:/oracle/product/10.2.0/orada
ta/dgdb1/redo04.log') size 50M;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('C:/oracle/product/10.2.0/orada
ta/dgdb1/redo05.log') size 50M;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('C:/oracle/product/10.2.0/orada
ta/dgdb1/redo06.log') size 50M;
数据库已更改。
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('C:/oracle/product/10.2.0/orada
ta/dgdb1/redo07.log') size 50M;
数据库已更改。
开启服务:
standby端:
SQL> alter database mount standby database ;
alter database mount standby database
*
第 1 行出现错误:
ORA-01100: 数据库已装载
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
SQL>
7:测试服务是否正常
在primary端执行
SQL> alter system switch logfile;
系统已更改。
测试完毕
查看standby端得相应dg目录看是否有日志传过来
- 使用RMAN来实现主库不停机的物理standby Data Guard 搭建
- Oracle 10G R2的Data Guard物理standby搭建
- Data Guard——使用 RMAN 创建单实例物理(physical) standby 数据库
- DATA GUARD物理STANDBY的 SWITCHOVER切换
- DATA GUARD物理STANDBY的 SWITCHOVER切换
- 使用RMAN duplicate搭建12C的Data Guard环境
- 利用Rman搭建物理standby
- Data Guard学习物理standby高级管理
- Oracle Data guard 物理standby 测试
- 创建物理standby (data guard)
- Oracle Data Guard 创建物理Standby数据库
- 维护Data Guard物理standby(原创)
- Oracle 11g Data Guard搭建物理Standby数据库(一)
- Oracle 11g Data Guard搭建物理Standby数据库(二)
- 搭建ORACLE10G DATA GUARD--->Physical Standby
- 使用rman进行data guard环境搭建(maximize performance)
- data guard中利用rman构建physical standby
- Data Guard 知识简介(一) 11g新特性、介绍及物理standby的配置
- 方法重载
- 解决asp.net中radio button的排他性在DataList控件中失效的BUG
- DIV居中,居于窗口四角的方法
- SMPP协议
- 一个底层驱动函数的解读
- 使用RMAN来实现主库不停机的物理standby Data Guard 搭建
- KMP算法详解
- shell脚本调用java
- JAVA 开发内存溢出
- Web开发者必知的12款jQuery插件
- oracle 建表--序列--插入值
- C语言写的MD5加密核心算法--只是摘抄的网上的算法
- java基本算法总结
- quartz cron触发器表达式