ORACLE高级应用--DATA GUARD(物理standby创建)

Data Guard是一个集合,由一个primary数据库(生产数据库)及一个或多个standby数据库(最多9个)组成,是一种为了保证生产数据库安全、稳定(24*7不间断)运行的容灾技术。组成Data Guard数据库通过oracle Net连接,并且可以分步在不同物理主机上。
1、primary数据库
Data Guard包含一个primary数据库即被大部分应用访问的生产数据库,该库即可以是单实例数据库,也可以是RAC。
2、standby数据库
standby数据库是primary数据库的复制(事务上一致)。一旦创建完成,Data Guard通过应用primary数据库的redo自动维护每一个standby数据库。standby数据库同样既可以是单实例,也可以是RAC结构。
关于standby数据库,通常分两类:逻辑standby和物理standby
逻辑standby是通过接收primary数据库的redo log 并转换成sql语句,然后在standby数据库上执行sql语句实现同步,物理standby是通过接收并应用primary数据库redo log以介质恢复的方式实现同步。
此次试验是在同一台服务器上创建primary数据库和物理standby数据库(正式环境下这种方式是不建议采用的,最好是把primary数据库和standby数据库放在不同服务器上才能达到真正容灾的目的)。
步骤:一、primary数据库上相关操作
1、查看数据库归档模式(确保primary数据库已经开启归档)
C:\Documents and Settings\Administrator>set oracle_sid=dadweb
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 9月 14 11:35:10 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            E:\backup\dadweb
最早的联机日志序列     21
下一个存档日志序列   23
当前日志序列           23
2、将Primary数据库置为force logging模式。
SQL> alter database force logging;(强制写日志,确保standby数据库正确恢复)
3、创建standby数据库控件文件
SQL> alter database create standby controlfile as 'e:\bak\control01.ctl';
4、创建primary数据库客户端初始化参数文件,手动增加data guard相关参数并重建spfile
SQL> create pfile='e:\bak\initdadweb.ora' from spfile;
文件已创建。
在参数文件中手动增加下面参数:
DB_UNIQUE_NAME=dadweb
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dadweb,dadls)'
LOG_ARCHIVE_DEST_1='LOCATION=E:\backup\dadweb
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dadweb'
LOG_ARCHIVE_DEST_2='SERVICE=dadls LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dadls'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
#--------配置standby 角色的参数用于角色转换
FAL_SERVER=dadls
FAL_CLIENT=dadweb
DB_FILE_NAME_CONVERT='oradata\dadls','oradata\dadweb'
LOG_FILE_NAME_CONVERT='oradata\dadls','oradata\dadweb'
STANDBY_FILE_MANAGEMENT=AUTO
重建spfile:
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup pfile='e:\bak\initdadweb.ora';
ORACLE 例程已经启动。
Total System Global Area 1073741824 bytes
Fixed Size                  1334992 bytes
Variable Size             275423536 bytes
Database Buffers          792723456 bytes
Redo Buffers                4259840 bytes
数据库装载完毕。
数据库已经打开。
SQL> create spfile from pfile='e:\bak\initdadweb.ora';
文件已创建。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1073741824 bytes
Fixed Size                  1334992 bytes
Variable Size             275423536 bytes
Database Buffers          792723456 bytes
Redo Buffers                4259840 bytes
数据库装载完毕。
数据库已经打开。
SQL>
5、配置listener和net service names
二、创建物理standby步骤
1、通过ORADIM创建实例(如果是linux系统此步省略)
C:\Documents and Settings\Administrator>oradim -new -sid dadls
实例已创建。
2、通过ORAPWD创建新实例的密码文件(密码一定要和primary数据库SYS密码一致)
C:\Documents and Settings\Administrator>orapwd  file=D:\oracle\product\10.2.0\db_1\database\PWDdadls.ora password=sys entries=30;
3、创建新实例的目录
C:\Documents and Settings\Administrator>mkdir D:\oracle\product\10.2.0\admin\dadls\adump
4、根据primary数据库客户端参数文件修改相关参数,同时不要忘记修改_dest中的路径
db_unique_name=dadls
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dadweb,dadls)'
DB_FILE_NAME_CONVERT='oradata\dadweb','oradata\dadls'
LOG_FILE_NAME_CONVERT='oradata\dadweb','oradata\dadls'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1='LOCATION=E:\backup\dadls
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dadls'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
#---下列参数用于角色切换
LOG_ARCHIVE_DEST_2='SERVICE=dadweb LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dadweb'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
FAL_SERVER=dadweb
FAL_CLIENT=dadls
STANDBY_FILE_MANAGEMENT=AUTO
5、通过pfile创建spfile,并启动到nomount
C:\Documents and Settings\Administrator>set oracle_sid=dadls
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 9月 14 13:33:07 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已连接到空闲例程。
SQL> create spfile from pfile='e:\bak\initdadweb.ora';--这里我是把修改过后的primary参数文件创建的
文件已创建。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1073741824 bytes
Fixed Size                  1334992 bytes
Variable Size             275423536 bytes
Database Buffers          792723456 bytes
Redo Buffers                4259840 bytes
6、重新执行一次primary数据库备份(保证恢复standby的一致性),并在备份后primary数据库不能再有结构化的改变
RUN {
 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
 CONFIGURE CONTROLFILE AUTOBACKUP ON;
 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'E:/backup/dadweb/%F';
 ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT 'E:/backup/dadweb/%U';
backup incremental level=0 database plus archivelog delete input; 
backup current controlfile for standby;
 RELEASE CHANNEL CH1;
 }
 ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
 CROSSCHECK BACKUPSET;
 DELETE NOPROMPT OBSOLETE;
7、使用duplicate从primary备份集中复制文件给standby数据库
创建standby控制文件:
C:\Documents and Settings\Administrator>set oracle_sid=dadls
C:\Documents and Settings\Administrator>rman target sys/sys@dadweb auxiliary /
恢复管理器: Release 10.2.0.1.0 - Production on 星期五 9月 14 13:45:31 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
连接到目标数据库: DADWEB (DBID=2693561876)
已连接到辅助数据库: DADWEB (未装载)
RMAN> copy current controlfile for standby to 'D:\oracle\product\10.2.0\oradata\
dadls\control01.ctl';--创建一个就好,另外两个手动复制
启动 backup 于 14-9月 -12
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=62 devtype=DISK
通道 ORA_DISK_1: 启动数据文件副本
复制备用控制文件
输出文件名 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\DADLS\CONTROL01.CTL 标记 = TAG2012
0914T134720 recid = 1 时间戳 = 793979242
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
完成 backup 于 14-9月 -12
启动 Control File and SPFILE Autobackup 于 14-9月 -12
段 handle=E:\BACKUP\DADWEB\C-2693561876-20120914-01 comment=NONE
完成 Control File and SPFILE Autobackup 于 14-9月 -12
生成物理standby数据库:
RMAN> duplicate target database for standby nofilenamecheck dorecover;(用duplicate创建standby只能到mount不能到open) 
C:\Documents and Settings\Administrator>set oracle_sid=dadls
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 9月 14 14:14:51 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
创建临时表空间(先打开数据库):
SQL>alter tablespace temp add tempfile ' D:\oracle\product\10.2.0\oradata\dadls\temp01.dbf' size 20M;
创建适当的standby redo 日志文件组(online redo可以不用创建之后开启redo应用后会自动同步过来):
关于创建standby redo日志文件组,有一个具体的公式:(每线程的日志组数+1)*最大线程数,如果嫌麻烦可以在创建standby redo日志文件组时按online redo日志文件组+1来创建,具体创建方式就只多一个standby关键字而已,如果要做primary数据库和standby数据库的角色切换在primary中也创建好standby redo日志文件组。
SQL> alter database add standby LOGFILE
     GROUP 4 ('D:\oracle\product\10.2.0\oradata\dadls\redo04.log') SIZE 100M,
     GROUP 5 ('D:\oracle\product\10.2.0\oradata\dadls \redo05.log') SIZE 100M,
     GROUP 6 ('D:\oracle\product\10.2.0\oradata\dadls \redo06.log') SIZE 100M,
     GROUP 7 ('D:\oracle\product\10.2.0\oradata\dadls \redo07.log') SIZE 100M;
8、开启redo应用,并测试同步
开启redo应用:
SQL> alter database recover managed standby database disconnect from session;--在standby库
测试同步:
SQL> alter system switch logfile;--primary库
系统已更改。
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
dadweb
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
            29

SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
dadls
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
             29
查看各自角色及保护模式(默认是最大性能):
SQL> select name,database_role,open_mode,protection_mode from v$database;--primary数据库
NAME      DATABASE_ROLE    OPEN_MODE  PROTECTION_MODE
--------- ---------------- ---------- --------------------
DADWEB    PRIMARY          READ WRITE MAXIMUM PERFORMANCE


SQL> alter database set standby database to maximize performance;
数据库已更改。
SQL> select name,database_role,open_mode,protection_mode from v$database;--standby数据库
NAME      DATABASE_ROLE    OPEN_MODE  PROTECTION_MODE
--------- ---------------- ---------- --------------------
DADWEB    PHYSICAL STANDBY MOUNTED    MAXIMUM PERFORMANCE
9、关闭redo应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
关闭redo应用也会接收primary库的归档日志只是不会应用归档日志,如下所示:
SQL> alter system switch logfile;
系统已更改。
SQL> select max(sequence#) from v$archived_log;--primary数据库
MAX(SEQUENCE#)
--------------
            30

SQL> select max(sequence#) from v$archived_log;--standby数据库
MAX(SEQUENCE#)
--------------
            30
上面是我实验的一些测试结果,如有不当之处请大家指教。期望通过大家交流能更好的学习dg。之后的角色切换switchover和failover我也会整理出来供大家学习交流。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27795470/viewspace-743464/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27795470/viewspace-743464/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值