一、主库准备
1.开启force logging 模式
alter database force logging;
SYS@LEO> select open_mode,log_mode,force_logging,flashback_on from v$database;
OPEN_MODE LOG_MODE FOR FLASHBACK_ON
---------- ------------ --- ------------------------- ------------ --- ------
READ WRITE ARCHIVELOG YES NO
作用:不管什么操作都会生成redo日志
特点:1.在数据库mount状态和open状态都可以启动force logging模式
2. alter database表示直接修改控制文件内容,所以一次设置长期有效
3.临时表空间和临时回滚段动作不会生成redo日志
4. alter database no force logging; 关闭force logging
2.创建密码文件 (如果没有就先创建密码文件)
密码文件:记录特权用户的管理员信息
注意事项:同一套Data Guard 中的所有数据库的密码文件的密码都必须一致,保证重做日志正常传输。因为Data Guard 中数据库通信都是通过监听来访问密码文件来验证管理员身份的。
orapwd file=orapwLEO password=oracle entries=30 创建密码文件语句
3.启动archivelog模式
shutdown immediate 关闭数据库
startup mount 启动到mount状态
alter database archivelog; 开启归档模式
select log_mode,force logging from v$database; 检查修改状态
alter database open ; 打开数据库
col name for a40 设置name字段宽为40个字符
select SEQUENCE#,name,ARCHIVED,APPLIED from v$archived_log; 检查是否生效
SEQUENCE# NAME ARC APP
---------- ---------------------------------------- --- ------------------------- --- -----
5 /home/oracle/arch/LEO/1_5_784052660.dbf YES NO
6 /home/oracle/arch/LEO/1_6_784052660.dbf YES NO
7 /home/oracle/arch/LEO/1_7_784052660.dbf YES NO
【友情提示一下,常规归档日志存放目录设置方法,但物理standby有自己的设置方法】
注:alter system set log_archive_dest_1='location=/home/oracle/arch/LEO' scope=both; 设置归档日志存放目录
select dest_name,destination,status,error from v$archive_dest; 查询归档目录设置信息
4.创建standby logfile
作用:备库角色时接收主库redo日志
语法: 创建standby logfile
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4
('/u01/app/oracle/oradata/LEO/file1/redo4_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo4_2.rdo') SIZE 100M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5
('/u01/app/oracle/oradata/LEO/file1/redo5_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo5_2.rdo') SIZE 100M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6
('/u01/app/oracle/oradata/LEO/file1/redo6_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo6_2.rdo') SIZE 100M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7
('/u01/app/oracle/oradata/LEO/file1/redo7_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo7_2.rdo') SIZE 100M;
检查:
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- -------------- ---------- --- ----------
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
6 0 0 YES UNASSIGNED
7 0 0 YES UNASSIGNED
特点:
a.服务对象是备库
b.standby logfile和online redolog 大小应一致,管理方便
c.如果是单实例数据库那么standby logfile 组 比 online redolog 组的个数多一个
如果是rac架构那么standby logfile 组个数=rac节点数*(online redolog 组个数+1)
目的:缓冲主库传过来的redo日志
d.提示如果在逻辑standby中standby logfile 接收主库的redo日志->转换sql语句重演变化-> 应用备库,同时可以独立操作写入备库online redolog,因为备库可以在open状态下接收日志
e.删除standby logfile,alter database drop standby logfile group 4/5/6/7
5.备份pfile参数文件
作用:当修改参数文件失败的时候可以使用备份重新设置,这种方法趋于便捷和快速
a. 生成最新pfile
SYS@LEO> create pfile from spfile;
File created.
b.复制一个副本
cp initLEO.ora initLEO.ora_bak
6.设置主库初始化参数
参数说明:主库有2部分参数,第1部分是原来已经有的,第2部分是新添加的(Data Guard专有参数)
a.查看一下数据库状态
SYS@LEO> select status,instance_name from v$instance;
STATUS INSTANCE_NAME
------------ ----------------
OPEN LEO
b.添加新参数,有主库角色的参数 and 备库角色的参数
#primary database role initialization parameter 当为主库角色使用的参数
DB_UNIQUE_NAME=LEO 数据库实例名,一经指定不能修改
LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEO,OEL)' 罗列一个DG中所有数据库实例名
LOG_ARCHIVE_DEST_1=
'LOCATION=/home/oracle/arch/LEO 本地数据库归档日志存放目录
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=LEO' 指定本地数据库实例
LOG_ARCHIVE_DEST_2=
'SERVICE=OEL LGWR ASYNC 远程数据库接收日志模式
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=OEL' 指定远程数据库实例
LOG_ARCHIVE_DEST_STATE_1=ENABLE 启动传输redo日志服务
LOG_ARCHIVE_DEST_STATE_2=ENABLE 启动接收redo日志服务
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 可以设置为EXCLUSIVE or SHARED
主备库sys密码必须相同
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc 归档日志格式
注意:有三个参数没写DB_NAME=LEO 数据库名字原来已经有了不用在添加了
LOG_ARCHIVE_MAX_PROCESSES=30 归档日志最大进程数,最大30 默认4
CONTROL_FILES='/arch1/chicago/control1.ctl','/arch2/chicago/control2.ctl' 控制文件所在路径
#standby database role initialization parameter 当为备库角色使用的参数
FAL_SERVER=OEL #fetch archive log_server 获取归档日志服务端,指主库service_name
FAL_CLIENT=LEO #fetch archive log_client 获取归档日志客户端,指备库service_name
DB_FILE_NAME_CONVERT='OEL','LEO' 主备库数据文件转换映射目录,只设置不同部分
LOG_FILE_NAME_CONVERT='OEL','LEO' 主备库日志文件转换映射目录,只设置不同部分,如果你有多个目录路径那么用逗号分隔对应多个
STANDBY_FILE_MANAGEMENT=AUTO 备库是否根据主库的动态变化而变化,例如当主库文件发生重命名、新建等动作时,备库自动做出相应修改
7.创建备库控制文件
特点:
a.在主库中创建具有备库属性的控制文件
b.创建完备库控制文件后主库不能再有structure变化,否则主备库同步不能成功
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oracle/control01.ctl';
检查:已经创建完成
drwxr-xr-x 3 oracle oinstall 4096 May 23 17:39 arch
drwxrwxrwx 25 oracle oinstall 4096 Jun 3 2010 B19306_01
-rwx------ 1 oracle oinstall 465489785 May 17 2011 B19306_01.zip
drwxr-xr-x 3 oracle oinstall 4096 May 23 15:49 backup
-rw-r----- 1 oracle oinstall 7061504 May 26 05:31 control01.ctl
drwxr-xr-x 2 oracle oinstall 4096 May 17 2011 Desktop
drwxr-xr-x 2 oracle oinstall 4096 May 23 15:49 flash
drwxr-xr-x 2 oracle oinstall 4096 May 23 15:49 scripts
drwxr-xr-x 2 oracle oinstall 4096 May 23 15:49 temp
-rw-r--r-- 1 oracle oinstall 2641 May 24 07:00 test.sql
8.创建备库参数文件
a.用参数文件副本复制出一份备库参数文件
cp initLEO.ora_bak initOEL.ora
b. 添加备库参数文件新内容
#standby database set parameter
DB_UNIQUE_NAME=OEL 数据库实例名
LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEO,OEL)' 罗列一个DG中所有数据库实例名
DB_FILE_NAME_CONVERT='LEO','OEL' 主备库数据文件转换映射目录,只设置不同部分
LOG_FILE_NAME_CONVERT='LEO','OEL' 主备库日志文件转换映射目录,只设置不同部分,如果你有多个目录路径那么用逗号分隔对应多个
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc 归档日志格式
LOG_ARCHIVE_DEST_1=
'LOCATION=/home/oracle/arch/OEL 备库接收主库归档日志存放目录
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=OEL'
LOG_ARCHIVE_DEST_2= 当变成主库后传输给备库LEO日志模式
'SERVICE=LEO LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=LEO'
LOG_ARCHIVE_DEST_STATE_1=ENABLE 启动接收redo日志服务
LOG_ARCHIVE_DEST_STATE_2=ENABLE 启动传输redo日志服务
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 主备库sys密码必须相同
STANDBY_FILE_MANAGEMENT=AUTO 备库是否根据主库的动态变化而变化,例如当主库文件发生重命名、新建等动作时,备库自动做出相应修改
FAL_SERVER=LEO 获取归档日志服务端,指主库service_name
FAL_CLIENT=OEL 获取归档日志客户端,指备库service_name
9.添加OEL库tnsnames.ora连接串
在主库的/u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora 文件中添加
指向备库的连接串
OEL=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521))
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=OEL)
)
)
10.创建备库所需目录
mkdir -p $ORACLE_BASE/admin/OEL/adump
mkdir -p $ORACLE_BASE/admin/OEL/bdump
mkdir -p $ORACLE_BASE/admin/OEL/cdump
mkdir -p $ORACLE_BASE/admin/OEL/udump
mkdir -p arch/OEL
11.创建备库5要素,这5要素要在备库上存在
a.密码文件 /u01/app/oracle/product/10.2.0/db_1/dbs
orapwd file=orapwOEL password=oracle entries=30
b.参数文件 现在复制到备库
scp initOEL.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/dbs/
c.数据文件 现在复制到备库,复制之前要先shutdown数据库
tar -zcvf LEO.tar.gz LEO
scp LEO.tar.gz 192.168.61.102:/u01/app/oracle/oradata/
在备库/u01/app/oracle/oradata/目录下解压缩
tar -zxvf LEO.tar.gz
mv LEO OEL 重命名
d.控制文件 现在复制到备库,覆盖原来的老control文件
scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file1/control01.ctl
scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file2/control02.ctl
scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file3/control03.ctl
e.监听 现在复制到备库
scp tnsnames.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/network/admin/
scp listener.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/network/admin/
修改listener.ora内容
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)) IP设置成本地
12.启动备库OEL
注意:
1.startup mount 是可以接收主库redo日志,但不能对外提供服务(常用)
2.startup open read only 不可以接收主库redo日志,但能对外提供服务(常用)
3.startup open 不可以接收主库redo日志,失去数据保护功能,开打闪回,闪回到初始状态,DG自动同步,不需要重建备库(不常用)
4.设置备库sqlplus提示符样子
vim /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql 在最后添加一行
set sqlprompt "_user'@'_connect_identifier> "
现在我们启动备库到mount状态
13.启动备库监听
lsnrctl start listener
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 28-MAY-2012 19:13:09
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 28-MAY-2012 19:13:09
Uptime 0 days 0 hr. 0 min. 1 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))
The listener supports no services
The command completed successfully
启动到mount状态
startup mount
启动redo日志应用恢复备库
alter database recover managed standby database disconnect from session parallel 2;
disconnect from session:把这个session提交到后台运行,相当于no hup 后台恢复备库
如果没有这个关键词:这个session一直处理redo日志应用,不会显示Database altered.结果,不会返回到命令操作符界面,如果还想作其他操作,需要重新打开一个session。
parallel 2:启动2个MRP进程恢复备库
14.启动主库LEO
生成spfile
create spfile from pfile;
启动open状态
startup
注意查看 tail -f alert_LEO.log 告警日志,看看是否给备库发送redo日志
备库
RFS进程接收主库传过来的redo日志保存在standby log file
物理standby通过redo应用
逻辑standby通过sql应用
启动 real time 模式(实时应用)
alter database recover managed standby database using current logfile disconnect from session
using current logfile:直接获取standby log file内容应用
不加 using current logfile:直接获取归档日志内容应用,默认不加
RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_5_784052660.arc'
RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_6_784052660.arc'
RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_7_784052660.arc'
15.测试备库归档能力
主库和备库2边的日志都同步了才行
16.检查归档日志
检查归档日志是否在2边都同步应用了
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
主库
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
5 23-MAY-12 23-MAY-12
5 23-MAY-12 23-MAY-12
6 23-MAY-12 23-MAY-12
6 23-MAY-12 23-MAY-12
7 23-MAY-12 23-MAY-12
7 23-MAY-12 23-MAY-12
8 23-MAY-12 28-MAY-12
8 23-MAY-12 28-MAY-12
9 28-MAY-12 28-MAY-12
9 28-MAY-12 28-MAY-12
10 28-MAY-12 28-MAY-12
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
10 28-MAY-12 28-MAY-12
备库
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
5 23-MAY-12 23-MAY-12
6 23-MAY-12 23-MAY-12
7 23-MAY-12 23-MAY-12
8 23-MAY-12 28-MAY-12
9 28-MAY-12 28-MAY-12
10 28-MAY-12 28-MAY-12
好这时我们可以看出归档日志在2边同步了
ALTER SYSTEM SWITCH LOGFILE; 在归档一次,检查新redo日志是否在备库同步
主库
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ------------------ ---------
10 28-MAY-12 28-MAY-12
10 28-MAY-12 28-MAY-12
11 28-MAY-12 28-MAY-12
11 28-MAY-12 28-MAY-12
备库
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ----------------- ---------
10 28-MAY-12 28-MAY-12
11 28-MAY-12 28-MAY-12
好这时我们可以看出新redo日志已经在2边同步了
检查新归档是否在备库应用了
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APP
---------- ---
5 NO
6 NO
7 NO
8 YES
9 YES
10 YES
11 YES
好这时我们可以看出新归档已经在备库应用了
17.启动备库read only状态
Read only状态:数据库只读状态,这时备库不能应用日志,但可以接收日志。
取消备库日志应用
Alter database recover managed standby database cancel;
Background Media Recovery process shutdown (OEL) 后台介质恢复进程关闭
Standby Recovery Canceled (OEL) 备库恢复取消
启动到alter database open read only;
SYS@OEL> alter database open read only;
Database altered.
SYS@OEL> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- ----------
PHYSICAL STANDBY NOT ALLOWED READ ONLY 只读状态
主库状态
elect database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- ----------
PRIMARY TO STANDBY READ WRITE
小结:创建physical standby database 首先要做好5要素准备,现在启动备库在启动主库,因为主库启动后会刺探一次备库如果此时备库没有启动那么就要等好长时间在循环刺探,注意备库mount状态时候能应用日志,open read only 状态不能应用日志只能接收日志,实时注意2边日志要同步应用,一般物理备库在是在mount状态下,只有需要备库提供一些服务支持的时候会设置成open read only状态
Leonarding
2012.5.28
于天津&summer
Blog:http://space.itpub.net/26686207
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26686207/viewspace-731329/ ,如需转载,请注明出处,否则将追究法律责任。