使用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目录看是否有日志传过来

测试完毕

 

 

 

原创粉丝点击