博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 启用版本化控制,Oracle DG 物理Standby创建步骤
阅读量:5742 次
发布时间:2019-06-18

本文共 5827 字,大约阅读时间需要 19 分钟。

一、创建备份

物理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。

你可能感兴趣的文章
Oracel10G Dateguard 配置最大性能保护模式
查看>>
Linux文件系统探索
查看>>
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
查找恶意的TOR中继节点
查看>>
设计模式实战序
查看>>
谈谈我对 可读_可扩展 等6个概念的理解
查看>>
Cocos2d-x 3.0 RichText富文本
查看>>
使用IO Analyzer测试ESXI的性能
查看>>
Discuz!NT由虚拟目录转换为应用程序(server2008)
查看>>
jquery.form附件上传的 $.handleError 、以及 $.httpData
查看>>
MDSTableClient类相关分析
查看>>
我的友情链接
查看>>
Linux命令行:查看服务器开放的端口号
查看>>
烂泥:学习Nagios(二):Nagios配置
查看>>
cmake编译安装mysql
查看>>
我的友情链接
查看>>
git服务器笔记
查看>>
如何搭建基于ldap和mysql的gerrit服务
查看>>
ajax可以伪造的头部信息
查看>>
Guava库学习:学习Concurrency(八)Futures
查看>>