|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、准备工作
不管物理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\STANDBYRD0 1 .LOG¨) size 20 M;
删除也同样简单:
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=¨D G _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_PRODUCESSES 指定归档进程的数量(1-30),默认值通常是4 。
以下参数为standby角色相关的参数,建议在Primary数据库的初始化参数中也进行设置,这样在role transition后(Primary转为Standby)也能正常运行:
FAL_SERVER 指定一个 TNSNAMES ,通常该 tnsnames 对应数据库为primary角色。
例如:FAL_SERVER=jssweb
FAL_CLIENT 指定一个 TNSNAMES ,通常该 tnsnames 对应数据库为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;
二、手把手的创建物理standby
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模式打开,某些情况下可以以read-only模式打开,所以默认情况下,加载到mount状态即可。
SQL> STARTUP 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,就是直接拔电源也不怕。
基本步骤就是这样,下面我们进入实践环节....................
为了最大的降低硬件需求,此处创建的data guard处于同一台机器,但其创建过程与多机并无区别。做为演示用的示例足够了,我们分两阶段配置,分别是配置primary数据库和配置standby数据库,如下:
一、 Primary 数据库配置及相关操作
1、确认主库处于归档模式
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 E:\ora10g\oradata\jssweb
最早的联机日志序列 148
下一个存档日志序列 150
当前日志序列 150
SQL>
2、将primary数据库置为FORCE LOGGING模式。通过下列语句:
SQL> alter database force logging;
数据库已更改。
3、创建standby数据库控制文件
SQL> alter database create standby controlfile as ¨d:\backup\jsspdg01.ctl¨;
数据库已更改。
4、创建primary数据库客户端初始化参数文件
注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile重建spfile,你当然也可以通过alter system set命令直接修改spfile内容。
SQL> create pfile from spfile;
文件已创建。
将该初始化参数文件复制一份,做为standby数据库的客户端初始化参数文件
SQL> host copy e:\ora10g\product\10.2.0\db_1\database\initjssweb.ora d:\backup\initjsspdg.ora
已复制 1 个文件。
SQL>
修改客户端初始化参数文件,增加下列内容
DB_UNIQUE_NAME=jssweb
LOG_ARCHIVE_CONFIG=¨DG_CONFIG=(jssweb,jsspdg)¨
LOG_ARCHIVE_DEST_1=¨LOCATION=E:\ora10g\oradata\jssweb\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jssweb¨
LOG_ARCHIVE_DEST_2=¨SERVICE=jsspdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jsspdg¨
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
#-------- 配置standby角色的参数用于角色转换
FAL_SERVER=jss pdg
FAL_CLIENT=jss web
DB_FILE_NAME_CONVERT=¨oradata\jsspdg¨,¨oradata\jssweb¨
LOG_FILE_NAME_CONVERT=¨oradata\jsspdg¨,¨ oradata \jssweb¨
STANDBY_FILE_MANAGEMENT=AUTO
通过pfile重建spfile
SQL> shutdown immediate
...
SQL> create spfile from pfile=¨initjssweb.ora¨;
文件已创建。
5、复制数据文件到standby服务器(方式多样,不详述)
注意需要复制所有数据文件,备份的控制文件及客户端初始化参数文件
6、配置listener及net service names(方式多样,不详述)。
完之后重启listener:
E:\ora10g>lsnrctl stop
E:\ora10g>lsnrctl start
通过tnsping测试tnsnames是否正确有效:
E:\ora10g>tnsping jssweb
...
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = jss)(PORT = 1521)) (CONNECT_
DATA = (SERVER = DEDICATED) (SERVICE_NAME = jssweb)))
OK (30 毫秒)
E:\ora10g>tnsping jsspdg
...
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = jss)(PORT = 1521)) (CONNECT_
DATA = (SERVER = DEDICATED) (SERVICE_NAME = jsspdg)))
OK (10 毫秒)
二、 Standby 数据库配置及相关操作
1、通过ORADIM创建新的OracleService
2、创建密码文件,注意保持sys密码与primary数据库一致。
E:\ora10g>orapwd file=e:\ora10g\product\10.2.0\db_1\database\PWDjsspdg.ora password=verysafe entries=30
3、创建目录
E:\ora10g\product\10.2.0\admin\jsspdg>mkdir adump
4、复制文件,不做过多描述
5、修改初始化参数文件
增加下列参数:
db_unique_name=jsspdg
LOG_ARCHIVE_CONFIG=¨DG_CONFIG=(jssweb,jsspdg)¨
DB_FILE_NAME_CONVERT=¨oradata\jssweb¨,¨oradata\jsspdg¨
LOG_FILE_NAME_CONVERT=¨oradata\jssweb¨,¨oradata\jsspdg¨
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1=¨LOCATION=E:\ora10g\oradata\jsspdg\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jsspdg¨
LOG_ARCHIVE_DEST_STATE_1=ENABLE
#--- 下列参数用于角色切换
LOG_ARCHIVE_DEST_2=¨SERVICE=jssweb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jssweb¨
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
FAL_SERVER=jssweb
FAL_CLIENT=jsspdg
STANDBY_FILE_MANAGEMENT=AUTO
注意同时修改*_dest的路径。
通过该pfile创建spfile
SQL> create spfile from pfile=¨D:\backup\initjsspdg.ora¨;
文件已创建。
6、启动standby到mount
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1289484 bytes
Variable Size 62915316 bytes
Database Buffers 96468992 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
7、启动redo应用
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
8、查看同步情况
首先连接到primary数据库
SQL> show parameter instance_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string jssweb
SQL> alter system switch logfile;
系统已更改。
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
51
连接到standby数据库
SQL> show parameter instance_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string jsspdg
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
51
9、暂停应用
通过下列语句暂停redo应用。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
数据库已更改。
注意,此时只是暂时redo应用,并不是停止Standby数据库,standby仍会保持接收只不过不会再应用接收到的归档,直到你再次启动redo应用为止。
哈哈,成功鸟!现在你是不是想知道怎么把standby变成primary呢?接着往下看~~~~~~~~~
|
|