Oracle DataGuard 物理Standby 搭建(上)
物理standby database 环境搭建
Arch asysnc
Oracle Dataguard
host |
IP |
Oracle_sid |
DB_unique_name |
FAL_server |
FAL_client |
primary |
192.168.126.136 |
dgtest |
dg_pd |
dg_st |
dg_pd |
standy |
192.168.126.128 |
dgtest |
dg_st |
dg_pd |
dg_st |
一. Primary 端的配置
1. 主库设置为force logging 模式
SQL> alter database force logging;
2. 主库设为归档模式
SQL> archive log list;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> archive log list;
. 创建备库的密码文件和控制文件
SQL> alter database create standby controlfile as '/u01/control01.ctl';
-- 说明: 判断一个数据库是Primary还是Standby,就是通过控制文件来判断的。
[oracle@localhostdbs]$ orapwd file=/u01/orapwDG password=ank88ank
如果已经存在,就不用创建了。 缺省情况下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)
4. 修改初始化参数文件
*.DB_UNIQUE_NAME='dg_pd'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dg_pd,dg_st)'
*.log_archive_dest_1='location=/u01/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dg_pd'
*.LOG_ARCHIVE_DEST_2='SERVICE=dg_st ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg_st '
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.standby_file_management='AUTO'
*.FAL_SERVER='dg_st'
*.FAL_CLIENT='dg_pd'
如果主库和备库的数据文件位置不同,还需要加如下2个参数:
*.log_file_name_convert='/u02/oradata/dgtest/','/u03/oradata/dgtest/'
*.db_file_name_convert='/u02/oradata/dgtest/','/u03/oradata/dgtest/'
-- 注意:orcl_st,orcl_pd 是在tnsnames文件中配置的
用'/u01/pri.ora' 这个pfile 启动数据库,并生成spfile。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile='/u01/pri.ora';
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 79694068 bytes
Database Buffers 83886080 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> create spfile from pfile='/u01/pri.ora';
File created.
6. 修改listener.ora 和tnsnames.ora 文件
Listener.ora 文件:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME =/u01/app/oracle/product/10.2.0/db)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = dg)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db)
(SID_NAME = dgtest)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.32.129)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
注意:SID_LIST_LISTENER 配置的是静态注册,如果没有该参数,而且Data Guard 启动顺序又不正确,那么在主库可能会报 PING[ARC1]: Heartbeat failed to connect to standby 'orcl_st'. Error is 12514. 错误,导致归档无法完成。
Oracle Listener 动态注册 与 静态注册
http://blog.csdn.net/tianlesoftware/archive/2010/04/30/5543166.aspx
Tnsnames.ora 文件
DG_ST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.32.128)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg)
)
)
DG_PD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.32.129)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dg)
)
)
二. Standby 端配置
1. 创建备库存放数据文件和后台跟踪目录, 这个目录可以和主库相同, 如果不同,就需要在主库的初始化文件中进行转换。
如:
*.log_file_name_convert='/u02/oradata/dgtest/','/u03/oradata/orcl/'
*.db_file_name_convert='/u02/oradata/dgtest/','/u03/oradata/orcl/'
--建相目录
mkdir -p $ORACLE_BASE/oradata/dgtest
mkdir $ORACLE_BASE/admin/dgtest
mkdir -p $ORACLE_BASE/admin/dgtest/adump
mkdir $ORACLE_BASE/admin/dgtest/bdump
mkdir $ORACLE_BASE/admin/dgtest/cdump
mkdir $ORACLE_BASE/admin/dgtest/dpdump
mkdir $ORACLE_BASE/admin/dgtest/pfile
mkdir $ORACLE_BASE/admin/dgtest/udump
mkdir $ORACLE_BASE/admin/dgtest/
2. 将主库的密码文件,控制文件,数据文件,参数文件,日志文件copy到备库。
说明一点,这个控制文件是我们自己创建的standby 控制文件。将copy过来的控制文件再复制三份就可以了。 主备的控制文件是不一样的。 这里除了采用直接copy 文件之外,还可以采用Rman 恢复来做。 直接copy 需要停数据库,如果采用RMAN 的话,就不需要停机了。
--数据文件,redo文件
scp *.dbf 192.168.32.144:/u01/app/oracle/oradata/dgtest
scp *.log 192.168.32.144:/u01/app/oracle/oradata/dgtest
--密码文件,参数文件
scp pri.ora 192.168.32.144:/u01
scp orapwdgtest 192.168.32.144:/u01/app/oracle/product/10.2.0/db/dbs
--listener tnsnames
scp listener.ora 192.168.32.144:/u01/app/oracle/product/10.2.0/db/network/admin
scp tnsnames.ora 192.168.32.144:/u01/app/oracle/product/10.2.0/db/network/admin
--standby 控制文件
scp *.ctl 192.168.32.144:/u01/app/oracle/oradata/dgtest/
cp control01.ctl control02.ctl
cp control01.ctl control03.ctl
3. 修改初始化参数文件
*.DB_UNIQUE_NAME='dg_st'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dg_pd,dg_st)'
*.log_archive_dest_1='location=/u01/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dg_st'
*.LOG_ARCHIVE_DEST_2='SERVICE=dg_pd ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg_pd'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.standby_file_management='AUTO'
*.FAL_SERVER='dg_pd'
*.FAL_CLIENT='dg_sd'
--
保存为std.ora
4. 修改listener.ora 和 tnsnames.ora 文件,如果不存在,就从主库上copy 过去。
至此,Data Guard 的操作已经完成,下面来开始验证。
补充:
启动备库
SQL>startup nomount pfile='/u01/std.ora'
SQL>create spfile from pfile='/u01/std.ora'
------------------------------------环境 End-----------------------------------
-----------start------------
--注意Data Guard 启动顺序:
启动顺序:先standby ,后primary;
关闭顺序:先primary 后standby;
在备库将实例启动到mount 状态:
SQL> startup nomount;
SQL>alter database mount standby database ;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>alter database recover managed standby database disconnect from session;
在备库启动监听:
$lsnrctl start
在主库启动实例:
SQL> startup;
在主库启动监听:
$lsnrctl start
--------------------DataGuard Acitve OK------------
Now
Primary:open
Standby:mount
--Standby只读模式打开
--停止redo应用
SQL>alter database recover managed standby database cancel
SQL>alter database open;
SQL>select open_mode from v$database;
OPEN_MODE
----------
READ ONLY
--Standby重新回到redo apply状态
SQL>shutdown immediate
SQL>startup nomount
SQL>alter database mount standby database disconnect
SQL>alter database recover managed standby database disconnect
--验证是否传输到了Standby database
--Primary database
SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME
7 23-FEB-11 23-FEB-11
7 23-FEB-11 23-FEB-11
8 23-FEB-11 23-FEB-11
8 23-FEB-11 23-FEB-11
9 23-FEB-11 23-FEB-11
9 23-FEB-11 23-FEB-11
SQL> alter system switch logfile;
System altered.
--Standby database
SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
7 23-FEB-11 23-FEB-11
8 23-FEB-11 23-FEB-11
9 23-FEB-11 23-FEB-11
10 23-FEB-11 23-FEB-11
--验证Standby redo 是否应用
SQL>SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APP
---------- ---
3 YES
4 YES
5 YES
6 YES
7 YES
8 YES
9 YES
10 YES
8 rows selected.
--如果出错
在主库验证归档目录是否有效:
SQL> SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;
如果有错误,要排查原因。
SQL> SELECT STATUS ,ERROR FROM V$ARCHIVE_DEST;
STATUS ERROR
--------- -----------------------------------------------------------------
VALID
VALID
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
注意:如果在主库执行 alter database clear unarchived logfile或alter database open resetlogs , 则dataguard要重建。
补充:
--监控日志应用服务
SQL>select database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status from v$database;
--设置新的数据保护模式并重启数据库
当保护模式更改顺序:
maximize protection ---> maximize availability ----> maximize performance
当在把dataguard的保护级别按这上面的顺序减低的时候, 不需要primary库在mount状态,否则primary 必须在mount 状态。
如:
SQL> alter database set standby database to maximize availability;
alter database set standby database to maximize availability
*
ERROR at line 1:
ORA-01126: database must be mounted in this instance and not open in any
instance
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 79694068 bytes
Database Buffers 83886080 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
报错了,这是因为最大可用性需要先修改日志传送方式为lgwr同步方式,否则,数据库是无法open.
SQL> alter system set log_archive_dest_2='service=orcl_st lgwr sync AFFIRM';
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 79694068 bytes
Database Buffers 83886080 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> alter database open;
Database altered.
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
alter database set standby database to maximize performance;
提示:maximize后可跟{PROTECTION | AVAILABILITY | PERFORMANCE},分别对应最大保护,最高可用性及最高性能。
在最大保护模式下,直接关闭备库是不行的,如果在备库上关闭数据库,会有如下提示:
SQL> shutdown immediate
ORA-01154: database busy. Open, close, mount, and dismount not allowed now
SQL>
在最大保护模式下,备库是不允许关闭的,此时首先关闭主库,然后备库就可以顺利关闭了
注意: 主库的保护模式修改之后,备库的模式也会改变,和主库保持一致。
3. 查看日志归档情况
主库进行日志切换:
SQL>Alter system switch logfile;
select max(sequence#) from v$archived_log;
select max(sequence#) from v$log_history;
select group#,sequence#,archived,status from v$log;
select name,sequence#,applied from v$archived_log;
select sequence#,applied from v$archived_log;
若不同步,
1>看log日志, archive是否有丢失
2>可以在备库坐如下操作:
--停止redo apply
alter database recover managed standby database cancel;
--开始redo apply
alter database recover managed standby database disconnect from session;
Oracle DataGuard 物理Standby 搭建(上)的更多相关文章
- Oracle DataGuard 物理Standby 搭建(下)
主备库切换 Switchover 一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUAR ...
- (摘)DataGuard物理standby管理 - 主备切换
DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...
- ORACLE11g Dataguard物理Standby 日常巡检操作手册
ORACLE11g Dataguard物理Standby日常巡检操作手册 编写:_____________校对:_____________日期:_____________ 目录1.DG环境的日常巡检 ...
- Oracle 12C 物理Standby 主备切换switchover
Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...
- DataGuard相同SID物理Standby搭建
Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性.数据保护和灾难恢复解决方案.它提供管理.监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受 ...
- [Oracle][DATAGUARD] PHYSICAL STANDBY环境里,11.2.0.4 , 也可以使用Pfile来运行Primary和Standby(虽然很少有人用)
####Primary#### [oracle@primary ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 金 ...
- [Oracle][DATAGUARD] PHYSICAL STANDBY环境里,使用CATALOG管理Primary和Standby
1.先使用控制文件构筑好PHYSICAL STANDBY环境(Primary:Single 11.2.0.4,Standby Single 11.2.0.4) 2.构筑好Catalog用的服务器(Ca ...
- [Oracle][DATAGUARD] LOGICAL STANDBY环境里,有些SEQUENCE无法应用,导致Primary和Standby无法同期
今天遇到了一个客户,问题是这样的,客户构筑了一个RACtoRAC的 LOGICAL STANDBY环境.并用EM在监视同期情况,发现EM页面上55115和55116这两个SEQUENCE一直在应用. ...
- Oracle Dataguard之物理standby的基本配置
尽管网上有很多Oracle Dataguard的配置教程,但不难发现,很多采用的是rman duplicate这种方法,尽管此种方法较为简便.但在某种程度上,却也误导了初学者,虽说也能配置成功,但只知 ...
随机推荐
- ubuntu - chrome 标题栏, 书签乱码 解决
只要修改/etc/fonts/conf.d/49-sansserif.conf这个文件就行了—— 打开/etc/fonts/conf.d/49-sansserif.conf这个文件: sudo ged ...
- ffmpeg的内部Video Buffer管理和传送机制
ffmpeg的内部Video Buffer管理和传送机制 本文主要介绍ffmpeg解码器内部管理Video Buffer的原理和过程,ffmpeg的Videobuffer为内部管理,其流程大致为:注册 ...
- memcache的应用场景和实现原理
面临的问题 对于高并发高访问的 Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的 ...
- GCC 编译优化指南
转自: http://www.jinbuguo.com/linux/optimize_guide.html GCC 编译优化指南 作者:金步国[www.jinbuguo.com] 版权声明 本文作者是 ...
- Android WebView常见问题的解决方案总结----例如Web page not available
之前android虚拟机一直都可以直接联网,今天写了一个WebView之后,突然报出了Web page not available的错误,但是查看虚拟机自带的浏览器,是可以上网的,所以检查还是代码的问 ...
- IOS UINavigationController 操作相关集合
1.修改中间Title字体以及大小 [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dict ...
- QC开发只能修改指派给自己的缺陷,而其他的bug可以查看但是不允许修改
今天在QC9.0项目中增加了几个项目,然后我的想法是:开发只能修改指派给自己的缺陷,而其他的bug可以查看但是不允许修改 虽说qc我还是比较熟悉的,但是对于这个问题,感觉可能要用到脚本,对于脚本我一窍 ...
- 修改linux主机名称
linux修改主机名如下操作即可: [root@kel ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAM ...
- ExcelUtils 导表实例
@RequestMapping("/dealer/chargebook/exportv.htm") public void getChargeBookList(int epm ...
- Android版本判断
尽管Android向下兼容不好,但是一个程序还是可以在多个平台上跑的.向下兼容不好,接口改变,新的平台上不能用旧的API,旧的平台更不可能用新的API,不等于一个平台需要一个APK.可以在高版本的SD ...