阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

手把手教你搭建Oracle 11g DataGuard

259次阅读
没有评论

共计 8530 个字符,预计需要花费 22 分钟才能阅读完成。

 

一、前期准备
    在准备搭建 DataGuard 的时候,看过许多篇教程,按着教程去走,出现过问题,然后就不知道该如何进行下一步。
    后来去看了官方文档的,整理一下思路后事情就简单多了。
    以一主主库一备库为例,搭建 DG 的思路如下:
    关闭防火墙。
    配置 ssh 互信(非必须,减少 SCP 时输入密码的次数)
    主库上的操作:
    1)开启归档模式,开启 forced logging;
    2)添加 standby logfile,standby logfile 组比 logfile 组多一个;
    3)修改参数文件
    4)配置 listener.ora 和 tnsnames.ora
    5)备份数据库和控制文件
    备库准备:
    1)将主库上的参数文件、密码文件拷贝到备库上,修改参数文件;
    2)将主库上的 listener.ora 和 tnsnames.ora 复制到备库上,修改 listener.ora 文件
    3)将备份复制到备库上
    4)在备库上创建对应的文件夹
    5)启动备库到 nomount 模式
    6)在备库上使用 RMAN 恢复数据库
    7)备库上添加 standby logfile
    8)应用归档
    9)查看状态
二、基本配置准备
2.1 primary 服务器安装数据库软件并安装 ORCL 数据库,standby 服务器上安装
2.2 关闭防火墙
primary 服务器关闭防火墙:

 

手把手教你搭建 Oracle 11g DataGuard

standby 服务器关闭防火墙

手把手教你搭建 Oracle 11g DataGuard

 

2.3 配置 ssh 互信
百度下“linux scp 免密码”,随便找篇文章看下。
[Oracle@primary dbs]$ ssh-keygen -t rsa
[oracle@primary dbs]$  scp ~/.ssh/id_rsa.pub oracle@192.168.62.202:/home/oracle/.ssh/authorized_keys

 

三、主库配置
1)enable forced logging:
    SQL> ALTER DATABASE FORCE LOGGING;
    查看是否已经是归档模式, 如果是未归档模式,则将其修改成归档模式。
    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP MOUNT;
    SQL> ALTER DATABASE ARCHIVELOG;
    SQL> ALTER DATABASE OPEN;
3)配置 standby logfile 文件,当主库变成备库时,可以接收来自备库的日志。
    alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/orcl/redo_dg_021.log’) size 50M;
    alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/orcl/redo_dg_022.log’) size 50M;
    alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/orcl/redo_dg_023.log’) size 50M;
    alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/orcl/redo_dg_024.log’) size 50M;
3)配置主库的参数:这里有两种方式,一种是使用 alter system 来修改参数,另外一种是生成静态参数文件之后修改参数;我采用的是后一种配置方式。
参数的配置参考 Oracle Data Guard Concepts and Administration 11g Release 2 (11.2) E41134-03 中 3 - 3 和 3 - 4 页
initorcl.ora 已经有的参数,可以不用配置。

 

 

 

SQL> create pfile from spfile;
[oracle@primary ~]$ cd $ORACLE_HOME/dbs
[oracle@primary dbs]$ vim initorcl.ora
#primary
#*.db_name=’orcl’
*.db_unique_name=pri
*.LOG_ARCHIVE_CONFIG=’DG_CONFIG=(pri,sty)’
#*.control_files=’/u01/app/oracle/oradata/orcl/control01.ctl’,’/u01/app/oracle/oradata/orcl/control02.ctl’
*.LOG_ARCHIVE_DEST_1= ‘LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri’
*.LOG_ARCHIVE_DEST_2= ‘SERVICE=sty ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sty’
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.remote_login_passwordfile=’EXCLUSIVE’
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
#standby role
*.FAL_SERVER=sty
*.DB_FILE_NAME_CONVERT=’/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.LOG_FILE_NAME_CONVERT= ‘/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.STANDBY_FILE_MANAGEMENT=AUTO
SQL> shutdown immediate
SQL> create spfile from pfile;
4)主库上配置 listener.ora 和 tnsnames.ora
主库上的 listener.ora:
[oracle@primary admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = ORCL)
    )
  )
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.62.201)(PORT = 1521))
  )
ADR_BASE_LISTENER = /u01/app/oracle
主库上的 tnsnames.ora:
[oracle@primary admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PRI =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.62.201)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = orcl)
    )
  )
STY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.62.202)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = orcl)
    )
  )
修改完成之后要重启监听。
5)备份数据库和控制文件
[oracle@primary admin]$ rman target sys/asd@pri
RMAN> backup database format ‘/u01/app/oracle/backup/full_db_%U’;
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/u01/app/oracle/backup/sty.ctl’;
四、备库上的操作
 1)将主库上的参数文件、密码文件拷贝到备库上,修改参数文件;
[oracle@primary admin]$ cd $ORACLE_HOME/dbs
[oracle@primary dbs]$ scp initorcl.ora orapworcl oracle@192.168.62.202:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/
修改参数文件:
vim /u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora
*.db_name=’orcl’
*.DB_UNIQUE_NAME=sty
*.control_files=’/u01/app/oracle/oradata/orcl/control01.ctl’,’/u01/app/oracle/flash_recovery_area/orcl/control02.ctl’
*.DB_FILE_NAME_CONVERT=’/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.LOG_FILE_NAME_CONVERT= ‘/u01/app/oracle/oradata/orcl’,’/u01/app/oracle/oradata/orcl’
*.LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
*.LOG_ARCHIVE_DEST_1=’LOCATION=/u01/app/oracle/arch  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sty’
*.LOG_ARCHIVE_DEST_2=’SERVICE=pri ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri’
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.STANDBY_FILE_MANAGEMENT=AUTO
*.FAL_SERVER=pri
标红的是修改的部分
密码文件说明:主库上有授权或者收回 sysdba 时,要更新备库上的密码文件。
2)将主库上的 listener.ora 和 tnsnames.ora 复制到备库上,修改 listener.ora 文件
主库上执行:
[oracle@primary admin]$ scp listener.ora tnsnames.ora oracle@192.168.62.202:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
备库上执行:
[oracle@standby ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
[oracle@standby admin]$ vim listener.ora
将 host 中的 201 改成 202,也就是将 host 改成备库机器上的 IP,tnsnames.ora 不用修改。
修改完成之后要重启监听

 

3)将备份复制到备库上
[oracle@primary backup]$ scp /u01/app/oracle/backup/* oracle@192.168.62.202:/u01/app/oracle/backup
4)在备库上创建对应的文件夹
[oracle@standby oracle]$ cd $ORACLE_BASE
[oracle@standby oracle]$ ls
arch  backup  checkpoints  database  product
[oracle@standby oracle]$ mkdir -p oradata/orcl
[oracle@standby oracle]$ mkdir -p admin/orcl/adump
[oracle@standby oracle]$ mkdir -p admin/orcl/dpdump
[oracle@standby oracle]$ mkdir -p admin/orcl/pfile
5)启动备库到 nomount 模式
SQL>create spfile from pfile=’/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora’;
SQL> startup nomount;
6)在备库上使用 RMAN 恢复数据库
[oracle@standby ~]$ rman target sys/asd@pri
RMAN> connect auxiliary /
run {
allocate auxiliary channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
duplicate target database for standby nofilenamecheck dorecover;
release channel c1;
release channel c2;
}
虽然最后出现了这个问题,但备库还是可以打开的。
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 06/08/2016 17:38:36
RMAN-03015: error occurred in stored script Memory Script
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 16 and starting SCN of 1010403 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 15 and starting SCN of 1009794 found to restore
7)备库上添加 standby logfile
备库上添加 standby logfile,我做测试时,v$logfile 视图里有 standby logfile group4 至 group 7,而 /u01/app/oracle/oradata/orcl 并没有这些文件,所以要先把这几组日志删除再重建:
SQL>alter database open;# 未试过在 mount 状态创建 standby 日志
SQL> alter database drop logfile group 4;
SQL> alter database drop logfile group 5;
SQL> alter database drop logfile group 6;
SQL> alter database drop logfile group 7;
SQL>alter database add standby logfile group 4 (‘/u01/app/oracle/oradata/orcl/redo_dg_021.log’) size 50M;
SQL>alter database add standby logfile group 5 (‘/u01/app/oracle/oradata/orcl/redo_dg_022.log’) size 50M;
SQL>alter database add standby logfile group 6 (‘/u01/app/oracle/oradata/orcl/redo_dg_023.log’) size 50M;
SQL>alter database add standby logfile group 7 (‘/u01/app/oracle/oradata/orcl/redo_dg_024.log’) size 50M;
  8)应用归档
– 应用归档
SQL>shutdown immediate;

 

SQL>startup mount;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
– 退出归档
alter database recover managed standby database cancel;

 

    9)查看状态
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
 SEQUENCE# FIRST_TIME          NEXT_TIME      APPLIED
———- —————— —————— ———
    15 08-JUN-16          08-JUN-16      YES
    16 08-JUN-16          08-JUN-16      YES
    17 08-JUN-16          08-JUN-16      YES
    18 08-JUN-16          08-JUN-16      YES
    19 08-JUN-16          08-JUN-16      YES
    20 08-JUN-16          08-JUN-16      YES
    21 08-JUN-16          08-JUN-16      IN-MEMORY
说明 DG 已经搭建成功

 

注:如果备库处于 open 状态,告警日志中会出现:ORA-16058: 未装载备用数据库实例的告警信息。

Oracle 11gR2 在 VMWare 虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htm

Debian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm

Oracle Data Guard 重要配置参数 http://www.linuxidc.com/Linux/2013-08/88784.htm

基于同一主机配置 Oracle 11g Data Guard http://www.linuxidc.com/Linux/2013-08/88848.htm

探索 Oracle 之 11g DataGuard http://www.linuxidc.com/Linux/2013-08/88692.htm

Oracle Data Guard(RAC+DG) 归档删除策略及脚本 http://www.linuxidc.com/Linux/2013-07/87782.htm

Oracle Data Guard 的角色转换 http://www.linuxidc.com/Linux/2013-06/86190.htm

Oracle Data Guard 的日志 FAL gap 问题 http://www.linuxidc.com/Linux/2013-04/82561.htm

Oracle 11g Data Guard Error 16143 Heartbeat failed to connect to standby 处理方法 http://www.linuxidc.com/Linux/2013-03/82009.htm

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132128.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计8530字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中