一.准备工作:主库:虚拟机名称host06 主机名:host06 IP:192.168.100.60 db_name&SID:ENMO  db_unique_name:PROD 存储:文件系统

备库:虚拟机名称:host07 主机名:host07 IP:192.168.100.70 db_name&SID:ENMO db_unique_name:SBDB 存储:文件系统

二.主库:

1.数据库归档并强制生成日志

[oracle@host06 ~]$ sqlplus / as sysdba

SQL> select status from v$instance;

SQL> archive log list;

Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence     4
Current log sequence           6

SQL> shutdown immediate;

SQL> alter database archivelog;

SQL> alter database force logging;

SQL> alter database open;

SQL> archive log list; 
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6
SQL> select force_logging from v$database;

FOR
---
YES

2.主库创建 standby logfile,原则是最大日志组数+1

SQL> select group#,member from v$logfile; 查看日志组数

SQL> select group#,bytes/1024/1024 as size_m from v$log; 查看日志组大小

SQL> alter database add standby logfile group 4 ('/u01/app/oracle/oradata/ENMO/standby_redo04.log') size 50m;  创建standby logfile

SQL> alter database add standby logfile group 5 ('/u01/app/oracle/oradata/ENMO/standby_redo05.log') size 50m;

SQL>  alter database add standby logfile group 6 ('/u01/app/oracle/oradata/ENMO/standby_redo06.log') size 50m;

SQL> alter database add standby logfile group 7 ('/u01/app/oracle/oradata/ENMO/standby_redo07.log') size 50m;

3.查看添加的日志组

SQL> select group#,sequence#,bytes,status from v$standby_log;

GROUP#  SEQUENCE#      BYTES STATUS
---------- ---------- ---------- ----------
         4          0   52428800 UNASSIGNED
         5          0   52428800 UNASSIGNED
         6          0   52428800 UNASSIGNED
         7          0   52428800 UNASSIGNED

SQL> select group#,type,member from v$logfile;

4.主库查看当前参数文件

SQL> host                   
[oracle@host06 ~]$ cd $ORACLE_HOME/dbs
[oracle@host06 dbs]$ ls
hc_ENMO.dat  init.ora  lkENMO  orapwENMO  spfileENMO.ora

5.生成pfile文件并修改

SQL> create pfile from spfile;

File created.

SQL> host
[oracle@host06 ~]$ cd $ORACLE_HOME/dbs
[oracle@host06 dbs]$ ls
hc_ENMO.dat  initENMO.ora  init.ora  lkENMO  orapwENMO  spfileENMO.ora
[oracle@host06 dbs]$ vi initENMO.ora

追加如下内容

db_unique_name=PROD
log_archive_format=%t_%s_%r.arc
log_archive_config='DG_CONFIG=(PROD,SBDB)'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/FRA
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD'
LOG_ARCHIVE_DEST_2='SERVICE=ENMO70      LGWR                               SYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SBDB'
log_archive_dest_state_1=ENABLE
log_archive_dest_state_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=4
## Paraneters which using for switch over from Primary to Standby.
fal_server=ENMO70
standby_file_management=AUTO
db_file_name_convert='ENMO','ENMO'
log_file_name_convert='ENMO','ENMO'

6.通过pfile重新生成spfile并启动数据库

SQL> shutdown immediate;

SQL> create spfile from pfile;

SQL> startup

SQL> show parameter name;

7.主库配置tnsnames(注:数据库service_name默认与db_unique_name相同)

[oracle@host06 dbs]$ cd $ORACLE_HOME/network/admin
[oracle@host06 admin]$ ls
listener.ora  samples  shrept.lst
[oracle@host06 admin]$ vi tnsnames.ora
ENMO60 =
  (DESCRIPTION =
    (ADDESS_LIST =
      (ADDERSS = (PROTOCOL = TCP)(HOST = 192.168.100.60)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = PROD)
    )
   )

ENMO70 =
 (DESCRIPTION =
  (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.70)(PORT = 1521))
  )
  (CONNECT_DATA =
   (SERVER = DEDICATED)
   (SERVICE_NAME = SBDB)
  )
 )

8.主库 拷贝相关文件至备库

找到主库文件所在目录

[oracle@host06 admin]$ cd $ORACLE_HOME/dbs

[oracle@host06 dbs]$ ls
hc_ENMO.dat  initENMO.ora  init.ora  lkENMO  lkPROD  orapwENMO  spfileEN

拷贝密码文件

[oracle@host06 dbs]$ scp orapwENMO oracle@192.168.100.70:$ORACLE_HOME/dbs/orapwENMO

拷贝pfile参数文件

[oracle@host06 dbs]$ scp initENMO.ora oracle@192.168.100.70:$ORACLE_HOME/dbs/initENMO.ora

拷贝tnsnames配置文件

[oracle@host06 dbs]$ scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.100.70:$ORACLE_HOME/network/admin/tnsnames.ora

二.备库

1.备库创建静态监听并启动

[oracle@host07 admin]$ cd $ORACLE_HOME/dbs
[oracle@host07 dbs]$ ls
initENMO.ora  init.ora  orapwENMO
[oracle@host07 dbs]$ vi initENMO.ora

因为主库备库的DB_NAME和SID相同,所以只需改如下参数(已加粗)即可

db_unique_name=SBDB

log_archive_format=%t_%s_%r.arc

log_archive_config='DG_CONFIG=(PROD,SBDB)'

LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/FRA

VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=SBDB'

LOG_ARCHIVE_DEST_2='SERVICE=SBDB60      LGWR                               SYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PROD'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=ENABLE

LOG_ARCHIVE_MAX_PROCESSES=4

## Paraneters which using for switch over from Primary to Standby.

fal_server=SBDB60

standby_file_management=AUTO

db_file_name_convert='ENMO','ENMO'

"initENMO.ora" 38L, 1415C written

2.按照参数创建文件目录

[oracle@host07 dbs]$ mkdir -p /u01/app/oracle/admin/ENMO/adump
[oracle@host07 dbs]$ mkdir -p /u01/app/oracle/oradata/ENMO/
[oracle@host07 dbs]$ mkdir -p /u01/app/oracle/FRA

3.备库通过pfile生成spfile并启动数据库至nomount

[oracle@host07 dbs]$ echo $ORACLE_SID

SQL> create spfile from pfile;

SQL> startup nomount;

三.在主库操作,用RMAN auxiliary恢复数据库

[oracle@host06 dbs]$ rman target sys/oracle@enmo60 auxiliary sys/oracle@enmo70

Recovery Manager: Release 11.2.0.4.0 - Production on Tue May 2 02:47:05 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:

ORA-12533: TNS:illegal ADDRESS parameters

加粗部分报错说明 tnsnames.ora 的 ‘ADDRESS ’写错了

action:cd $ORACLE_HOME/network/admin

vi tnsnames.ora

注:修改完毕一定要在主库和备库都重新启动一下监听(lsnrctl stop  lsnrctl start)

4.再次执行连接rman的命令

[oracle@host06 dbs]$ rman target sys/oracle@enmo60 auxiliary sys/oracle@enmo70

5.连接成功

Recovery Manager: Release 11.2.0.4.0 - Production on Tue May 2 03:29:19 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ENMO (DBID=784235869)
connected to auxiliary database: ENMO (not mounted)

6.执行恢复命令

RMAN> duplicate target database for standby from active database dorecover nofilenamecheck;

四。在备库应用日志同步数据

[oracle@host07 dbs]$ sqlplus / as sysdba

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED

SQL> alter database recover managed standby database using current logfile disconnect from session;

五。启库

开启备库应用日志之后没取消应用日志,直接启库,报错

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in
progress

备库取消应用日志,启库

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database open;

Database altered.

六。做快照

切换物理备库为snapshot standby,报错

SQL> alter database convert to snapshot standby;
alter database convert to snapshot standby
*
ERROR at line 1:
ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_05/02/2017
04:43:13'.
ORA-38786: Recovery area is not enabled.

解决办法:(1)SQL> show parameter recovery;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer 0
recovery_parallelism                 integer     0
SQL> alter system set db_recovery_file_dest='/u01/recovery';
alter system set db_recovery_file_dest='/u01/recovery'

(2)SQL> alter system set db_recovery_file_dest_size=3G;

(3) 创建一个目录用于存放快速恢复区

[oracle@host07 ~]$ cd /u01

[oracle@host07 u01]$ mkdir recovery

(4)SQL> alter system set db_recovery_file_dest='/u01/recovery';

解决完报错就可以执行快照

SQL> alter database convert to snapshot standby;

七:查看快照信息(可以查看alert日志,会发现数据库创建了一个guaranteed restore point,确保我们切回主备,可应用日志)

SQL> show parameter user_dump;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /u01/app/oracle/diag/rdbms/sbd
b/ENMO/trace

[oracle@host07 u01]$ cd /u01/app/oracle/diag/rdbms/sbdb/ENMO/trace

[oracle@host07 trace]$ tail -100f alert_ENMO.log

alter database convert to snapshot standby
Starting background process RVWR
Tue May 02 04:47:40 2017
RVWR started with pid=28, OS id=24152
Allocated 3981120 bytes in shared pool for flashback generation buffer
Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_05/02/2017 04:47:40
Killing 3 processes with pids 24140,24144,24148 (all RFS) in order to disallow current and future RFS connections. Requested by OS process 24071
All dispatchers and shared servers shutdown

八。查看备库数据库状态,并从快照状态恢复至物理状态

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
SNAPSHOT STANDBY MOUNTED

报错

SQL> alter database convert to physical standby;
alter database convert to physical standby
*
ERROR at line 1:
ORA-16433: The database must be opened in read/write mode.

解决:SQL> alter database open;

Database altered.

SQL> select open_mode from v$database;

OPEN_MODE
       --------------------
       READ WRITE

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
SNAPSHOT STANDBY READ WRITE

SQL> shutdown immediate

 SQL> startup mount;
 SQL> alter database convert to physical standby;

SQL> select status from v$instance;

STATUS
------------
STARTED

切换完成后需要重启到mount应用日志

SQL> shutdown immediate;

 SQL> startup mount;
SQL> alter database recover managed standby database using current logfile disconnect from session
 

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED

  SQL> alter database recover managed standby database cancel;
  SQL> alter database open; 

搭建DG(data guard),及搭建过程中遇到的一些小问题的更多相关文章

  1. Oracle data guard 10g 搭建

    Oracle data guard 10g 搭建 1系统常规参数检查 硬盘 [root@localhost ~]# df -h 内核 [root@localhost ~]# uname -a [roo ...

  2. 一步一步搭建 Oracle Data Guard

    前言 为什么要写前言,因为我要吐槽一下.作为一个Java后端,搭建Oracle Data Guard真的是一件,嗯,既不专业也不擅长的事情,然而,为什么还是要我来弄? 因为DBA出差了,我们这边急着要 ...

  3. thinkphp 使用过程中遇到的一个小函数

    1.实现导出Excel文件,并在导出的文件中显示图片 //导出 public function push(){ $goods_list=M('Dajia')->select(); $data = ...

  4. js:使用js过程中遇到的一个小问题

    在一个作业中使用了js,函数A调用函数B.当A和B中均含有变量i的时候,相关操作结果可能会出错. 将B中的i替换为j(j不存在于A中)后,结果正确. 目前考虑原因是两个变量i有相关性(或者说实际上就是 ...

  5. AdminIII连接linux Postgresql过程中的几个小问题

    1.postgresql.conf主配置文件中要配置postgresql绑定的IP,如果不设置,可能只绑定本地闭环地址:127.0.0.1,可以设定为0.0.0.0:就包括了一切IPv4地址 2.pg ...

  6. Fiddler使用过程中容易忽略的小技巧

    fiddler的基本使用,在之前的一篇博文中有详细介绍,可参见Fiddler抓包工具使用详解,今天来分享几个容易忽略的小技巧. 1.ios机装了证书,依然抓不到包 近期总被同事问及ios机装了证书,但 ...

  7. Filebeat和logstash 使用过程中遇到的一些小问题记录

    一.filebeat 收集软链文件日志 1.1.场景 由于我们新部署的Nginx 日志都是采用的软链的形式. lrwxrwxrwx 1 root root 72 Apr 6 00:00 jy.baid ...

  8. flowplayer+flashhls使用过程中发现的一些小问题

    flashls里边有好几套代码,主要看生成路径,其中flowplayer用了flashls.swc,flashls.swc使用的代码在这里:/src/org/mangui/hls,所以要注意,当搜索代 ...

  9. [Oracle维护工程师手记]Data Guard Broker中改属性是否需要两侧分别执行?

    Data Guard Broker中改属性是否需要两侧分别执行? Data Guard Broker有一些属性,可以通过 show configuration 看到.我有时会想,这些个属性,是否是分别 ...

随机推荐

  1. Webpack5构建速度提升令人惊叹,早升级早受益

    为什么要升级? webpack4用的好好的,运行稳定,为什么要升级到webpack5, 每次升级,都要经历一场地震,处理许多loader和plugin API的破坏性改变. 请给我们一个充分的升级理由 ...

  2. VS2010编写32位和64位dll环境配置,以及判断dll是多少位

    前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...

  3. .NET 平台系列6 .NET Core 发展历程

    系列目录     [已更新最新开发文章,点击查看详细] 在我的上一篇博客<.NET平台系列5 .NET Core 简介>中主要介绍了.NETCore的基本情况,主要包括.NET跨平台的缘由 ...

  4. 手把手教你看MySQL官方文档

    前言: 在学习和使用MySQL的过程中,难免会遇到各种问题.不知道当你遇到相关问题时会怎么做,我在工作或写文章的过程中,遇到不懂或需要求证的问题时通常会去查阅官方文档.慢慢的,阅读文档也有了一些经验, ...

  5. printf/scanf格式

    (1)打印字符 char c; printf("%c",c); (2)打印整形 int i; printf("%d",i); //有符号十进制数 printf( ...

  6. 5分钟让你理解K8S必备架构概念,以及网络模型(中)

    写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...

  7. 最全的cURL命令使用

    cURL是什么 curl是Linux命令行工具,可以使用任何可支持的协议(如HTTP.FTP.IMAP.POP3.SCP.SFTP.SMTP.TFTP.TELNET.LDAP或FILE)在服务器之间传 ...

  8. python-dict和list常用方法

    1 # *********-list-********* 2 # 创建一个list 3 list1 = [1, 2, '力气,', 'afd'] 4 print(type(list1)) 5 prin ...

  9. SSH实现免密登陆

    SSH实现免密登陆配置 ssh实现免密码登录的配置过程,主要分为以下几个步骤: serverA生成密钥,包括私钥和公钥 serverA将公钥传到serverB上 serverA上配置serverB登陆 ...

  10. HTTP、TCP、UDP,Socket,HTTPS

    TCP   HTTP   UDP三者的关系如下: TCP/IP是个协议组,可分为四个层次:网络接口层.网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...