一、准备工作
不管物理standby 还是逻辑standby,其初始创建都是要依赖primary 数据库,因为这个准备工作中最重要的一部分,就是对primary 数据库的配置。
将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 语句关闭强制记录。
需要注意的是,同一个Data Guard 配置中所有数据库必须都拥有独立的密码文件,并且必须保证同一个Data Guard 配置中所有数据库服务器的SYS 用户拥有相同密码以保证redo 数据的顺利传输,因为redo传输服务通过认证的网络会话来传输redo 数据,而会话使用包含在密码文件中的SYS 用户密码来认证。
快就会知道了。Oracle 建议你在创建standby 时就考虑standby redolog 配置的问题。standby redologs 与online redologs非常类似,应该说两者只是服务对象不同,其它参数属性甚至操作的命令格式几乎都一样,你在设计standby redologs 的时候完全可以借鉴创建online redologs 的思路,比如多个文件组啦,每组多个文件冗余之类的。除些之外呢,oracle 提供了一些标准的建议如下:
这个很好理解的吧,就是为了接收和应用方便嘛。
一般而言,standby redo 日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个。推荐standby redo 日志组数量基于primary 数据库的线程数(这里的线程数可以理解为rac 结构中的rac节点数)。
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
例如primary 数据库有两个线程,每个线程分配两组日志,则standby 日志组数建议为6 组,使用这个公式可以降低primary 数据库实例LGWR 进程锁住的可能性。
提示:逻辑standby 数据库有可能需要视工作量增加更多的standby redo log 文件(或增加归档进程),因为逻辑standby 需要同时写online redo log 文件。
SQL> alter database add standby logfile group 4 ('e:\ora10g\oradata\jsspdg\STANDBYRD01.LOG') size 20M;
SQL> alter database drop standby logfile group 4;
验证standby redo log 文件组是否成功创建
例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
对于primary 数据库,需要定义几个primary 角色的初始化参数控制redo 传输服务,还有几个附加的standby 角色的参数需要添加以控制接收redo 数据库并应用(switchover/failover 后primary/standby 角色可能互换,所以建议对于两类角色相关的初始化参数都进行配置)。
例如:DB_NAME=jssweb
例如:DB_UNIQUE_NAME=jssweb
例如:LOG_ARCHIVE_CONFIG='DB_CONFIG=(jssweb,jsspdg)'
LOG_ARCHIVE_DEST_1=
推荐设置参数值为EXCLUSIVE 或者SHARED,注意保证相同Data Guard配置中所有db 服务器sys 密码相同。
FAL_SERVER:
例如:FAL_SERVER=jssweb
例如:FAL_CLIENT=jsspdg
提示:FAL 是Fetch Archived Log 的缩写
述内容中同名参数功能,格式等完全相同。
如果primary 数据库数据文件发生修改(如新建,重命名等)则按照本参数的设置在standby 中做相应修改。设为AUTO 表示自动管理。设为MANUAL表示需要手工管理。
例如:STANDBY_FILE_MANAGEMENT=AUTO
注意:上面列举的这些参数仅只是对于primary/standby 两角色可能会相关的参数,还有一些基础性参数比如*_dest,*_size 等数据库相关的参数在具体配置时也需要根据实际情况做出适当修改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
.......
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 不同角色的属性配置,注意文件路径。
1).创建新的OracleService(windows 环境下需要)。
2).创建密码文件,注意保持密码与primary 数据库一致。
3).配置监听并启动
4).修改primary 和standby 的tnsnames.ora,各自增加对应的Net Service Name。
5).创建服务器端的初始化文件
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;
SQL> SHUTDOWN IMMEDIATE;
基本步骤就是这样,下面我们进入实践环节....................