第二部分物理standby(1)创建步骤 2007.12.03
一、准备工作
不管物理standby 还是逻辑standby,其初始创建都是要依赖primary 数据库,因为这个准备工作中最重要的一部分,就是对primary 数据库的配置。
1、打开Forced Logging 模式
将primary 数据库置为FORCE LOGGING 模式。通过下列语句:
SQL> alter database force logging;
提示:关于FORCE LOGGING
想必大家知道有一些DDL 语句可以通过指定NOLOGGING 子句的方式避免写redo log(目的是提高速度,某些时候确实有效),指定数据库为FORCE LOGGING 模式后,数据库将会记录除临时表空间或临时回滚段外所有的操作而忽略类似NOLOGGING 之类的指定参数。如果在执行force logging 时有nologging之类的语句在执行,则force logging 会等待直到这类语句全部执行。FORCE LOGGING 是做为固定参数保存在控制文件中,因此其不受重启之类操作的影响(只执行一次即可),如果想取消,可以通过alter database no force logging 语句关闭强制记录。
2、创建密码文件(如果不存在的话)
需要注意的是,同一个Data Guard 配置中所有数据库必须都拥有独立的密码文件,并且必须保证同一个Data Guard 配置中所有数据库服务器的SYS 用户拥有相同密码以保证redo 数据的顺利传输,因为redo传输服务通过认证的网络会话来传输redo 数据,而会话使用包含在密码文件中的SYS 用户密码来认证。
3、配置Standby Redo Log
对于最大保护和最高可用性模式,Standby 数据库必须配置standby redo log,并且oracle 推荐所有数据库都使用LGWR ASYNC 模式传输,当然你现在可能还不知道LGWR ASYNC 是什么问题,没关系,你很
快就会知道了。Oracle 建议你在创建standby 时就考虑standby redolog 配置的问题。standby redologs 与online redologs非常类似,应该说两者只是服务对象不同,其它参数属性甚至操作的命令格式几乎都一样,你在设计standby redologs 的时候完全可以借鉴创建online redologs 的思路,比如多个文件组啦,每组多个文件冗余之类的。除些之外呢,oracle 提供了一些标准的建议如下:
● 确保standby redo log 的文件大小与primary 数据库online redo log 文件大小相同。
这个很好理解的吧,就是为了接收和应用方便嘛。
● 创建适当的日志组
一般而言,standby redo 日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个。推荐standby redo 日志组数量基于primary 数据库的线程数(这里的线程数可以理解为rac 结构中的rac节点数)。
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
例如primary 数据库有两个线程,每个线程分配两组日志,则standby 日志组数建议为6 组,使用这个公式可以降低primary 数据库实例LGWR 进程锁住的可能性。
提示:逻辑standby 数据库有可能需要视工作量增加更多的standby redo log 文件(或增加归档进程),因为逻辑standby 需要同时写online redo log 文件。
Standby redo log 的操作方式与online redo log 几乎一模一样,只不过在创建或删除时需要多指定一个standby 关键字,例如添加:
SQL> alter database add standby logfile group 4 ('e:\ora10g\oradata\jsspdg\STANDBYRD01.LOG') size 20M;
删除也同样简单:
SQL> alter database drop standby logfile group 4;
另外,从可靠性方面考虑,建议在primary 数据库也创建standby redologs,这样一旦发生切换,不会影响primary 做为standby 的正常运行。
验证standby redo log 文件组是否成功创建
例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
4、设置初始化参数
对于primary 数据库,需要定义几个primary 角色的初始化参数控制redo 传输服务,还有几个附加的standby 角色的参数需要添加以控制接收redo 数据库并应用(switchover/failover 后primary/standby 角色可能互换,所以建议对于两类角色相关的初始化参数都进行配置)。
下列参数为primary 角色相关的初始化参数:
DB_NAME
:
注意保持同一个Data Guard 中所有数据库DB_NAME 相同。
例如:DB_NAME=jssweb
DB_UNIQUE_NAME
:
为每一个数据库指定一个唯一的名称,该参数一经指定不会再发生变化,除非你主动修改它。
例如:DB_UNIQUE_NAME=jssweb
LOG_ARCHIVE_CONFIG:
该参数通过DG_CONFIG 属性罗列同一个Data Guard 中所有DB_UNIQUE_NAME(含primary db 及standby db),以逗号分隔
例如:LOG_ARCHIVE_CONFIG='DB_CONFIG=(jssweb,jsspdg)'
CONTROL_FILES
:
没啥说的,控制文件所在路径。
LOG_ARCHIVE_DEST_n:
归档文件的生成路径。该参数非常重要,并且属性和子参数也特别多(这里不一一列举,后面用到时单独讲解如果你黑好奇,建议直接查询oracle 官方文档。Data guard 白皮书第14 章专门介绍了该参数各属性及子参数的功能和设置)。
例如:
LOG_ARCHIVE_DEST_1=
'LOCATION=E:\ora10g\oradata\jssweb
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=jssweb'
LOG_ARCHIVE_DEST_STATE_n:
指定参数值为ENABLE,允许redo 传输服务传输redo 数据到指定的路径。该参数共拥有4 个属性值,功能各不相同。
REMOTE_LOGIN_PASSWORDFILE:
推荐设置参数值为EXCLUSIVE 或者SHARED,注意保证相同Data Guard配置中所有db 服务器sys 密码相同。
LOG_ARCHIVE_FORMAT:
指定归档文件格式。
LOG_ARCHIVE_MAX_PRODUC
ESSES:
指定归档进程的数量(1-30),默认值通常是4。
以下参数为standby 角色相关的参数,建议在Primary 数据库的初始化参数中也进行设置,这样在role transition 后(Primary 转为Standby)也能正常运行:
FAL_SERVER:
指定一个数据库SID,通常该库为primary 角色。
例如:FAL_SERVER=jssweb
FAL_CLIENT:
指定一个数据库SID,通常该库为standby 角色。
例如:FAL_CLIENT=jsspdg
提示:FAL 是Fetch Archived Log 的缩写
DB_FILE_NAME_CONVERT:
在做duplicate 复制和传输表空间的时候这类参数讲过很多遍,该参数及上
述内容中同名参数功能,格式等完全相同。
LOG_FILE_NAME_CONVERT:
同上
STANDBY_FILE_MANAGEMENT:
如果primary 数据库数据文件发生修改(如新建,重命名等)则按照本参数的设置在standby 中做相应修改。设为AUTO 表示自动管理。设为MANUAL表示需要手工管理。
例如:STANDBY_FILE_MANAGEMENT=AUTO
注意:上面列举的这些参数仅只是对于primary/standby 两角色可能会相关的参数,还有一些基础性参数比如*_dest,*_size 等数据库相关的参数在具体配置时也需要根据实际情况做出适当修改。
5、确保数据库处于归档模式
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
.......
如果当前primary 数据库并未处于归档模式,可通过下列命令将数据库置为归档模式:
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
二、手把手的创建物理standbstandby
1、创建备份(手工复制数据文件或通过RMAN) ---primary 库操作
2、创建控制文件--primary 库操作
通过下列语句为standby 数据库创建控制文件
SQL> alter database create standby controlfile as 'd:\backup\jsspdg01.ctl';
注意哟,控制文件通常需要有多份,你要么手工将上述文件复制几份,要么用命令多创建几个出来。另外,创建完控制文件之后到standby 数据库创建完成这段时间内,要保证primary 数据库不再有结构性的变化(比如增加表空间等等),不然primary 和standby 同步时会有问题。
3、创建初始化参数文件
● 创建客户端初始化参数文件
例如:
SQL> create pfile='d:\backup\initjsspdg.ora' from spfile;
● 修改初始化参数文件中的参数
根据实际情况修改吧,注意primary 和standby 不同角色的属性配置,注意文件路径。
4、复制文件到standby 服务器
至少三部分:数据文件,控制文件,修改过的初始化参数文件,注意路径。
5、配置standby 数据库
如果你看过三思之前“一步一步学rman”系列,看过“duplicate 复制数据库”,或看过“传输表空间复制数据”系列,那么对于创建一个新的数据库应该非常熟悉了,下面再简单描述一下步骤:
1).创建新的OracleService(windows 环境下需要)。
2).创建密码文件,注意保持密码与primary 数据库一致。
3).配置监听并启动
4).修改primary 和standby 的tnsnames.ora,各自增加对应的Net Service Name。
5).创建服务器端的初始化文件
6、启动standby
注意哟,咱们前面说过的,物理standby 极少情况下可以以read-write 模式打开,某些情况下可以以readonly模式打开,所以默认情况下,加载到mount 状态即可。
启动redo 应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
启动实时应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
提示:disconnect from session子句并非必须,该子句用于指定启动完应用后自动退出到命令操作符前,如果不指定的话,当前session 就会一直停留处理redo 应用,如果想做其它操作,就只能新建一个连接。
7、停止standby
正常情况下,我们停止也应该是先停止redo 应用,可以通过下列语句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;
然后再停止standby 数据库
SQL> SHUTDOWN IMMEDIATE;
当然你非要直接shutdown 也没问题,dg 本来就是用于容灾的,别说你生停standby,就是直接拔电源也不怕。
基本步骤就是这样,下面我们进入实践环节....................