一、创建备份


物理Standby数据库相当于Primary数据库在某个时间点的镜像复制,因此在创建物理Standby数据库之前,至少要有一份Primary数据库的完整备份。


Oracle建议使用RMAN创建备份集,不过如果数据库规模不是太大,我个人更倾向于通过用户管理的方式创建备份集。



创建备份有三种方式:


1. RMAN 备份与恢复 -- 不需要shutdown 数据库


备份:


$ rman target /


RMAN> backup full format 'D:/FULL_%d_%T_%s.bak' database include current controlfile for standby;


RMAN> sql 'alter system archive log current';


RMAN> Backup ArchiveLog all format='D:/arch_%d_%T_%s.bak';


传送:


备份完后将备份文件拷到standby上同样的目录,强调:同样的目录,在standby进行rman 恢复即可


恢复:


$rman targetsys/admin@primaryauxiliary /


RMAN> duplicate target database for standby dorecover nofilenamecheck;



2. 用户管理方式  -- 不需要shutdown 数据库


用用户管理方式创建热备份就是备份表空间,可以分成三个步骤:


1)。 通过ALTER TABLESPACE BEGIN BACKUP命令标记指定表空间进入备份状态。


2)。 通过操作系统命令复制锁定表空间的数据文件。


3)。 通过ALTER TABLESPACE END BACKUP命令标记指定表空间结束备份。


例如,对USERS表空间进行备份:


SQL> select tablespace_name, file_name from dba_data_files;


TABLESPACE_NAME                FILE_NAME


------------------------------ -------------------------------------------------


USERS                          /u01/app/oracle/oradata/orcl/users01.dbf


SYSAUX                         /u01/app/oracle/oradata/orcl/sysaux01.dbf


UNDOTBS1                       /u01/app/oracle/oradata/orcl/undotbs01.dbf


SYSTEM                         /u01/app/oracle/oradata/orcl/system01.dbf


SQL> ALTER TABLESPACE USERS BEGIN BACKUP;


Tablespace altered.


SQL> !cp /u01/app/oracle/oradata/orcl/users01.dbf /u01/users01.dbf


SQL> ALTER TABLESPACE USERS END BACKUP;


Tablespace altered.



3. 直接copy 文件 -- shutdown 进行


实例关闭后,拷贝数据文件到备库上即可。




二、创建Standby数据库控制文件


在Primary 库上执行如下语句,为Standby数据库创建控制文件:


SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/backup/control01.ctl';


注 意:控制文件通常需要有多份,你要么手工将上述文件复制几份,要么用命令多创建几个出来。需要注意,如果选择多次执行上述命令创建出多份,务必确保执行创建时数据库处于MOUNT状态,否则几个控制文件的SCN有可能并不匹配,从而导致Standby数据库无法正常启动到MOUNT状态。


另外,创建完控制文件之后到Standby数据库创建完成这段时间内,要保证Primary数据库不再有结构上的变化(如增加表空间等),不然Primary和Standby同步时会有问题。


Data Guard 也是根据控制文件来判断哪个是standby的




三、配置Standby数据库的初始化参数文件


可按照下列步骤操作:


(1)创建PFILE客户端初始化参数文件。


由于SPFILE服务器端初始化参数文件为二进制格式,无法直接编辑,因此建议首先通过SPFILE创建PFILE,操作如下:


SQL> CREATE PFILE FROM SPFILE;


(2)修改初始化参数文件中的参数。


注意Primary和Standby不同角色对应初始化参数的配置。


注意保持各初始化参数中的路径准确有效。




四、复制文件到Standby服务器


复制文件到Standby服务器主要包括三部分:备份的数据文件、创建的Standby数据库控制文件和修改过的初始化参数文件。




五、配置Standby数据库


如果是Windows 环境下, 还需要创建新的OracleService。


oradim.exe -new -sid orcl -startmode m


oradim.exe -edit -sid orcl -startmode a


创建密钥文件,注意保持密码与Primary数据库一致。


配置监听并启动。


修改Primary数据库所在服务器和Standby数据库所在服务器的tnsnames.ora,各自增加对应的Net Service Name。


创建服务器端的初始化文件。




六、启动物理Standby数据库REDO应用


完成对Standby数据库的配置之后,就可以启动该Standby数据库了。物理Standby极少情况下可以以READ WRITE模式打开,某些情况下可以以READ ONLY模式打开,不过多数情况下,应该启动到MOUNT状态。


直接执行STARTUP命令打开物理Standby数据库,默认会以只读方式打开数据库,而不是READ WRITE模式,Oracle会根据控制文件判断是否是物理Standby,如果是则默认启动到READ ONLY模式,例如:


SQL> STARTUP;


……


SQL> SELECT OPEN_MODE FROM V$DATABASE;


OPEN_MODE


----------


READ ONLY


跟你想的不一样是吧,那说明你的思维还没转过弯来。


通常情况下,我们将物理Standby数据库加载到MOUNT状态即可:


SQL> STARTUP MOUNT;


进入MOUNT状态后,Standby数据库就开始接收Primary数据库发送的归档REDO数据,然后你可以继续通过一些命令应用这些REDO数据。


例如,启动REDO应用:


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


或者附加USING CURRENT LOGFILE子句启动实时应用:


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;


注意,要启动实时应用,Primary数据库在发送REDO数据时必须使用LGWR进程发送。如果使用ARCH方式发送REDO数据,Standby数据库无法启动实时应用,强行启动会报ORA-38500错误。


提 示: DISCONNECT FROM SESSION子句并非必需,该子句的作用呢,是指定启动完应用后自动退出到命令操作符前。如果不指定该子句的话,当前SESSION就会一直停留处理REDO应用,如果想做其他操作,就只能新建一个连接。




七、停止Standby数据库


跟启动一样,关闭Standby数据库也有很多讲究,某些情况下如果操作不当,关闭Standby数据库甚至会连带导致Primary数据库也关闭(这点后面会有详细介绍),幸好一般情况下不会出现这种情况,即使是像Primary数据库那样直接关闭,数据库也没有问题,毕竟Data Guard就是用于容灾的,别说普通的关闭数据库,就是直接拔电源也不怕,最多就是在Primary数据库的警告日志文件中记录一堆报错信息。


正常情况下,停止Standby数据库(含物理Standby和逻辑Standby)之前,应该首先停止Primary数据库,如果直接停止Standby数据库,轻则Primary数据库的Alert文件中记录一堆归档发送失败的错误信息,重则Primary直接shutdown。


不过,对于一些测试环境,偶尔也希望能在Primary数据库正常运行的情况下,停止Standby以进行一些其他操作,在这种情况下通常建议使用下列步骤:


首先是Primary端操作,修改Primary数据库的log_archive_dest_state_n参数,暂时取消向Standby数据库发送日志,例如:


SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;


这样Standby端不可访问时,Primary数据库的Alert日志文件中也不会再报错了。


然后Standby端就可以停止REDO应用:


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;


最后才是关闭Standby数据库:


SQL> SHUTDOWN IMMEDIATE;


物理Standby创建的基本步骤就是这样。


Oracle Data Guard 环境搭建的完整实例,请参考我的CSDN Blog:


Oracle Data Guard Linux 平台 Physical Standby 搭建实例


http://blog.csdn.net/tianlesoftware/archive/2010/04/30/5547565.aspx


Oracle 10G windows 平台 DataGuard 实例


http://blog.csdn.net/tianlesoftware/archive/2009/10/27/4730092.aspx




八、用READ ONLY模式打开物理Standby


物理Standby可以有效分担Primary数据库压力,提升资源利用,实际上说的就是将物理Standby置于OPEN状态。


当以READ ONLY模式打开物理Standby,可以将一些不涉及数据库写操作的任务如查询、备份转移到Standby数据库端进行,通过这种方式来分担Primary数据库的压力。下面我们通过实际操作,详细了解Standby数据库在关闭状态、打开状态以及REDO应用状态中的转换。


1.物理Standby数据库从SHUTDOWN状态启动到READ ONLY状态


SQL>STARTUP


ORACLE instance started.


SQL> SELECT OPEN_MODE FROM V$DATABASE;


OPEN_MODE


----------


MOUNTED


不过启动成功之后,并不是像普通Oracle数据库那样置于READ WRITE模式,而是进入到READ ONLY模式。



2.物理Standby数据库从REDO应用状态启动到READ ONLY状态


1)首先需要取消REDO应用,执行下列语句:


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;


Database altered.


注意:虽然当前是在MOUNT状态,但并不能直接ALTER DATABASE OPEN打开数据库,否则会报ORA-01154错误。


SQL> ALTER DATABASE OPEN;


ALTER DATABASE OPEN


*


ERROR at line 1:


ORA-01154: database busy. Open, close, mount, and dismount not allowed now



2)取消REDO应用后,再打开数据库:


SQL> ALTER DATABASE OPEN;


Database altered.


SQL> SELECT OPEN_MODE FROM V$DATABASE;


OPEN_MODE


----------


MOUNTED


注意:OPEN的时候不需要附加READ ONLY子句,Oracle会根据控制文件判断是否是物理Standby,从而自动启动到READ ONLY模式。



3.物理Standby数据库从READ ONLY状态切换回REDO应用状态


要从OPEN状态切换回REDO应用状态,并不需要SHUTDOWN数据库再启动,直接执行启用REDO应用的语句即可,例如:


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


Database altered.


SQL> SELECT OPEN_MODE FROM V$DATABASE;


OPEN_MODE


----------


MOUNTED


由于只读打开时不能应用,查询的结果可能与Primary数据库并不同步的,这一点小小的缺憾降低了物理Standby提供报表服务,分担Primary数据库压力的实用性,对于这点呢,我们有两个解决方案:


改用逻辑Standby,由于逻辑Standby是打开状态下的实时应用,因此数据同步应该是没啥问题了(只要Primary数据库的数据类型都能被逻辑Standby支持)。


Oracle 11g全面改良了物理Standby,最突出的特点就是在READ ONLY打开模式下,可以边接收边应用了,所以可以考虑升级数据库到最新版本,当然新版本也有新版本的问题,如各种尚未暴露出来的Bug。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html