oracle DataGuard 主从 踩过坑的
一、主机描述
dbprimary: 192.168.1.57 主机名称db1
dbstandby: 192.168.1.58 主机名成db2
SID: orcl
二、配置tns,配置好的文件内容:
dbprimary的listener.ora
(/db/app/oracle/product/11.2.0/network/admi目录下):
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /db/app/oracle/product/11.2.0)
(GLOBAL_DBNAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db1)(PORT =
1521))
)
)
dbstandby的listener.ora:
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /db/app/oracle/product/11.2.0)
(GLOBAL_DBNAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db2)(PORT =
1521))
)
)
dbprimary和dbstandby上的tnsnames.ora是一样的
# Generated by Oracle configuration tools.
DBSTANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = db2)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
DBPRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = db1)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
然后在两台机器上分别检查配置是否正确
oracle>lsnrctl stop
oracle>lsnrctl start
oracle>lsnrctl status
oracle>tnsping dbprimary
oracle>tnsping dbstandby
oracle>sqlplus sys/password@dbprimary as sysdba
oracle>sqlplus sys/password@dbstandby as sysdba
三、在dbprimary上操作
1. oracle> mkdir /db/app/oracle/oradata/archive
2. cd /db/app/oracle/product/11.2.0/dbs
oracle> cp orapworcl orapworcl.bak
oracle> orapwd file=orapw$ORACLE_SID password=oracle entries=30 force=y
产生密码文件oraworcl,一定要拷贝到从库上,就算从库执行同样的命令也不行
3. 备份并重新创建pfile文件
oracle>mv initorcl.ora initorcl.ora.bak
oracle>sqlplus sys/password as sysdba
sql>create pfile from spfile;
在/db/app/oracle/product/11.2.0/dbs下生成initorcl.ora 在initorcl.ora文件后面增加内容:
*.DB_UNIQUE_NAME='dbprimary'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbprimary, dbstandby)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/db/app/oracle/oradata/archive/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbprimary'
*.LOG_ARCHIVE_DEST_2='SERVICE=dbstandby LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbstandby'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER='dbstandby'
*.FAL_CLIENT='dbprimary'
*.DB_FILE_NAME_CONVERT='dbstandby','dbprimary'
*.STANDBY_FILE_MANAGEMENT='AUTO'
4. 备份并重新创建spfile文件
oracle>mv
spfileorcl.ora spfileorcl.ora.bak
oracle>sqlplus sys/password as sysdba
sql>create spfile from pfile;
sql>startup mount;
sql>alter database archivelog;
sql>alter database open;
sql>archive log list; 查看是否处于log模式,如果不是执行如下命令
sql>alter database force logging; 改变为logging模式
sql>alter database create standby controlfile as '/db/app/oracle/oradata/standby01.ctl';
创建dbstandby上的控制文件
sql>shutdown immediate;
5. 把/db/app/oracle/oradata打包传到dbstandby服务器, 把 /db/app/oracle/product/11.2.0/dbs/oraworcl也传过去
四、在dbstandby服务器上操作
1. oracle>sqlplus sys/password as sysdba
sql>shutdown immediate;
2. oracle>cd /db/app/oracle
oracle>mv oradata
oradata.bak
把刚才传过来的包解压
oracle>cd oradata
oracle>cp standby01.ctl standby02.ctl
oracle>cp standby01.ctl standby03.ctl
3. 备份并重新创建pfile文件
oracle>mv initorcl.ora initorcl.ora.bak
sql>create pfile from spfile
修改initorcl.ora中的*.control_files参数
*.control_files='/db/app/oracle/oradata/standby01.ctl','/db/app/oracle/oradata/standby02.ctl','/db/app/oracle/oradata/standby03.ctl'
增加
*.DB_UNIQUE_NAME='dbstandby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbprimary, dbstandby)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/db/app/oracle/oradata/archive/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbstandby'
*.LOG_ARCHIVE_DEST_2='SERVICE=dbprimary LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbprimary'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER='dbprimary'
*.FAL_CLIENT='dbstandby'
*.DB_FILE_NAME_CONVERT='dbstandby','dbprimary'
*.STANDBY_FILE_MANAGEMENT='AUTO'
4. 备份并重新创建spfile文件
oracle>mv
spfileorcl.ora spfileorcl.ora.bak
oracle>sqlplus sys/password as sysdba
sql>create spfile from pfile;
sql>shutdown immediate;
到此为止,已经完成了oracle DataGuard主备的所有配置
五、主备配置验证,及数据库重启步骤
(重点)在主库(db1)服务器上开启两个命令窗口,分别使用sqlplus登录主库和备库
登录主库
sqlplus sys/oracle@DBPRIMARY as sysdba
登录备库
sqlplus
sys/oracle@DBSTANDBY as sysdba
1.关闭主库
SHUTDOWN
IMMEDIATE;
2.关闭备库
SHUTDOWN
IMMEDIATE;
3.启动备库到mount
startup mount;
4.启动主库
startup;
5.打开备库
alter database open;
6.开启备库上的同步服务
alter database recover managed standby
database disconnect from session;
7.检查是否工作正常
(备)sql>select max(sequence#) from
v$archived_log;
(主)sql>alter system switch logfile;
(主)sql>select max(sequence#) from v$archived_log; 查看当前sequence
(备)sql>select max(sequence#) from v$archived_log;
如果dbstandby的sequence跟着改变,说明已经好了
8. select dest_name,status,error from
v$archive_dest; 察看相应的归档路径的状态是否valid,否则根据error信息进行处理
9. 可以查看alert日志文件
/db/app/oracle/diag/rdbms/dbprimary/orcl/alert/log.xml
/db/app/oracle/diag/rdbms/dbprimary/orcl/trace/alert_orcl.log
oracle DataGuard 主从 踩过坑的的更多相关文章
- oracle dataguard主从切换
前言: 众所周知DataGuard一般的切换分成两种,一种是系统正常的情况下的切换这种方式为:switchover是无损切换,不会丢失数据:另外一种方式属于灾难情况下的切换,这种情况下一般主库已经启动 ...
- Oracle DataGuard主库丢失归档日志后备库的RMAN增量恢复一例
第一部分 问题描述和环境状态确认 ----1. 问题场景 Oracle DataGuard主库丢失archivelog,如何不重建备库完成同步? 在Oracle DataGuard主从同步过程中可能 ...
- Oracle Dataguard故障转移(failover)操作
注意:故障转移会破坏DG的主从关系,使其变为互不相关的2个数据库,谨慎使用. (一)故障转移操作流程图 (二)故障转移操作流程 备注:以下操作步骤与上面流程图步骤一一对应 STEP1:刷新所有未发送到 ...
- Oracle DataGuard故障转移(failover)后使用RMAN还原失败的主库
(一)DG故障转移后切换为备库的方法 在DG执行故障转移之后,主库与从库的关系就被破坏了.这个时候如果要恢复主从关系,可以使用下面的3种方法: 将失败的主库重新搭建为备库,该方法比较耗时: 使用数据库 ...
- 从零开始学 Java - Spring 支持 CORS 请求踩的坑
谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...
- Oracle Dataguard之failover
Oracle Dataguard中,角色转换包含两类:Switchover和Failover.上文<Oracle Dataguard之switchover>中,我们已经谈过了switcho ...
- Oracle Dataguard之switchover
Oracle Dataguard的角色转换包含两类:Switchover和Failover.Switchover指主备之间角色转换,主库降为备库,备库升级为主库.而failover则是指主库出现问题时 ...
- Oracle Dataguard之Real-Time Apply
Oracle Dataguard一共支持三种模式:最大可用模式(Maximum Availability),最大性能模式(Maximum Performance),最大保护模式(Maximum Pro ...
- Oracle Dataguard之物理standby的基本配置
尽管网上有很多Oracle Dataguard的配置教程,但不难发现,很多采用的是rman duplicate这种方法,尽管此种方法较为简便.但在某种程度上,却也误导了初学者,虽说也能配置成功,但只知 ...
随机推荐
- 手机web——自适应网页设计(html/css控制)(转)
一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name="v ...
- iPhone手机屏幕的尺寸180330更新
以下是 iPhone的型号和对应的屏幕宽高 英寸 宽 高 厚度 3.5 320 480 4s ipad 系列 4 320 568 5 5s 4.7 375 66 ...
- asp.net core mvc视频A:笔记4-1.数据验证
开发建议:永远不要相信客户端提交过来的数据!!! 前端数据验证定位:提高用户体验,仅此而已! 后端数据验证定位:保证系统安全与数据完整!!! 实例:用户登录验证 定义一个用户登录类 在用户登录类基础上 ...
- 五种I/O模型和select函数简介
一.五种I/O模型 1.阻塞I/O 我们在前面所说的I/O模型都是阻塞I/O,即调用recv系统调用,如果没有数据则阻塞等待,当数据到来则将数据从内核空间(套接口缓冲区)拷贝到用户空间(recv函数提 ...
- Android事件分发机制源代码分析
小小感慨一下,做android有一段时间了,一直以来都是习惯整理笔记存到有道笔记上,没有写博客的习惯. 以后逐步分类整理出来,也算"复习"一遍了 - _ - . android的事 ...
- 三极管工作区在Spectre中的表示
三极管的工作区在Spectre中通过静态工作点的region字段表示,具体表示如下: region: 0:off 1:fwd 2:rev 3:sat 4:breakdown 可在终端中输入 : ”sp ...
- django 在建模时的一个手贱
最近在写一个网站,在建立model的时候遇到了一些问题,最后找了好久才找到为什么. 一.django的model定义如下: from django.db import models # Create ...
- php导出excel(xls或xlsx)
$titles = array('订单号','商品结算码','合同号','供应商名称','专柜','商品名称','商品货号','商品单价','商品总价','供应商结算金额','商品数量','商品促销优 ...
- Windows Store Apps 开发转载
懒得写了,就直接记录转载一下文章地址吧. 如何为应用定义全局默认字体:http://blogs.msdn.com/b/gautamdh/archive/2014/03/16/how-to-change ...
- 把Xilinx的IPCORE解密成源代码的方法
把Xilinx的IPCORE解密成源代码的方法 1.加密的文件格式以can_v1_5/can_tl_bsp.vhd为例子a)前8个字节XlxV38EB是加密的版本号,没研究过其他加密版本,不知道有 ...