oracle 11g dg搭建笔记

? 说明

    线上有套oracle库通过物化视图定时刷新到另外库来实现主备的,其经常出现物化视图刷新Job异常,导致数据未同步;并且此种方式,假如真的主库挂了,那么将备库的物化视图转化为表的过程也会很痛苦,于是,最终决定放弃此种方式来做伪在线备份。

 

Oracle自身有在线standby的解决方案- DataGuard

它是在主节点与备用节点间通过日志同步来保证数据的同步,可以实现数据库快速切换与灾难性恢复。

综上,选用成熟的DataGuard来做在线Standby肯定优于物化视图的方法

关于DataGurad的详细知识,请参考oracle官方文档等

l 实施过程

l 环境规划

主机地址

10.10.10.65

10.10.10.200

角色

primary

standby

OS版本

RHEL 6.5

RHEL 6.5

DB版本

Oracle 11.2.0.1.0 - 64bit 企业版

instance_name

orcl

orcl

db_name

orcl

orcl

db_unique_name

orcl

orcl_stby

1准备工作

1.1清除遗留脏数据

#primary

#删除旧的ygis和ygdw用户,同时删除其下所有对象

Drop user username cascade;


#删除之前创建的物化视图log

select ' drop materialized view log on '||LOG_OWNER||'.'||master||';' from dba_mview_logs;

1.2 standby安装oracle soft

略。。。。。。

1.3关闭防火墙和selinux

#primary and standby

~]# iptables -F

~]# iptables -t nat -F

~]# /etc/init.d/iptables stop

~]# chkconfig iptables off

~]# chkconfig --list iptables

iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

~]# grep SELINUX= /etc/selinux/config |grep ^[^#]

SELINUX=disabled
#若不为disabled,vi /etc/selinux/config 修改为disabled

2.配置dataguard

2.1.Primary数据库

2.1.1确认是否支持dataguard

SQL>  select * from v$option where parameter = 'Managed Standby';

 

PARAMETER                                                        VALUE

---------------------------------------------------------------- ----------------------------------------------------------------

Managed Standby                                                  TRUE

2.1.2打开归档

#归档位置

~]$ mkdir -p /data/oracle/arch

shutdown immediate;

startup mount;

alter database archivelog;

alter database open;

2.1.3启用force logging

alter database force logging;

2.1.4修改DG相关参数的值

ALTER SYSTEM SET DB_UNIQUE_NAME='orcl' SCOPE=SPFILE;

ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orcl_stby)';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/data/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby OPTIONAL LGWR SYNC AFFIRM COMPRESSION=ENABLE VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='enable';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='enable';

ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

ALTER SYSTEM SET FAL_SERVER='orcl_stby';

ALTER SYSTEM SET FAL_CLIENT='orcl';

ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oracle/oradata/orcl_stby','/data/oracle/oradata/orcl' SCOPE=SPFILE;

ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oracle/oradata/orcl_stby','/data/oracle/app/oradata/orcl' SCOPE=SPFILE;

#请记住,有些参数不能修改,所以数据库将需要重新启动才能生效。

标识红颜色的是 primary数据库对应信息,绿颜色的是standby数据库对应信息,需要格外注意,不要搞混了,另外,标识紫色的参数是11g新加的,即支持压缩日志传输,使得传输效率更高效,更小网络负载。

SQL> shutdown immediate

SQL> startup

2.1.5检查参数

SQL> select log_mode,FORCE_LOGGING from v$database;

LOG_MODE     FOR

------------ ---

ARCHIVELOG   YES

SQL>show parameter db_name

SQL>show parameter db_unique_name

SQL> show parameter LOG_ARCHIVE_DEST_

SQL> show parameter DB_FILE_NAME_CONVERT

SQL> show parameter LOG_FILE_NAME_CONVERT

2.1.6生成standby对应的pfile

#在primary生成pfile

create pfile='/tmp/orcl_stby.ora' from spfile;

#修改下面dg相关参数为standby的即可

*.db_unique_name='orcl_stby'

*.fal_client='orcl_stby'

*.fal_server='orcl'

*.log_archive_dest_1='LOCATION=/data/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_stby'

*.LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby OPTIONAL LGWR SYNC AFFIRM COMPRESSION=ENABLE VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';

ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oracle/oradata/orcl','/data/oracle/oradata/orcl_stby' SCOPE=SPFILE;

ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oracle/app/oradata/orcl','/data/oracle/oradata/orcl_stby' SCOPE=SPFILE;

ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oracle/app/oradata/orcl','/data/oracle/oradata/orcl_stby' SCOPE=SPFILE;

#注意:如果ORACLE_BASE与primary的不一致,相关dump目录等其他位置需要替换为standby实际的

2.1.7密码文件

创建密码文件,以下是linux/unix系统创建命令:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5 force=y

注意:

1.如果原来已经创建过密码文件,需要加force=y参数,强制覆盖;

2.Standby数据库密码需要与此文件密码设置完全一致,否则日志传输会有问题

2.1.8配置listener.ora

#编辑监听配置文件

~]$ cat /data/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora

# listener.ora Network Configuration File: /data/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.65)(PORT = 1521))

    )

  )

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /data/oracle/app/product/11.2.0/dbhome_1)

      (SID_NAME = orcl)

    )

  )

 

ADR_BASE_LISTENER = /data/oracle/app

注:标识为黄颜色的地方需要根据实际情况修改。


#修改完成之后,监听需要重启,方法如下

lsnrctl stop

lsnrctl start

lsnrctl status

Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...

有一个unknown 的表示此处为静态监听,另一个 READY 的为动态监听,在监听重启1分钟以后,会自动注册。

2.1.9配置tns

~]$ cat /data/oracle/app/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# tnsnames.ora Network Configuration File: /data/oracle/app/product/11.2.0/dbhome_1/network/admin /tnsnames.ora

# Generated by Oracle configuration tools.

 

ORCL =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.65)(PORT = 1521))

   )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

 

ORCL_STBY =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.200)(PORT = 1521))

   )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

注:标识为绿的地方需要根据实际情况修改。

2.2.Standby数据库

2.2.1密码文件、监听、tns、pfile文件配置

拷贝primary上的生成的standby pfile文件密码文件、listener.ora、tnsname.ora相关配置文件到standby相应的目录

3部署standby

创建standby有不止一个方法,以下介绍最简单的方法,即直接用duplicate命令;

在使用该命令时,先说下使用该命令的注意事项:

1) 使用rman连target数据库时,不能使用操作系统认证,只能使用密码方式连接;

2) 源数据库必须在mount或者open状态,如果在open状态,必须打开归档,如果数据库不是open状态的,则数据库必须已经处于一致性;

3) 使用rman连接auxiliary数据库时,即使standby与primary在同一台服务器上,也要使用tns去连接;

4) 如果创建的不是standby数据库,那么密码文件不会自动复制;

5) 必须要使用具有sysdba权限的用户连接;

6) 在使用active database duplication时,不能使用until;

 

在清楚了以上限制条件之后,就可以开始操作了。

3.1 standby到nomount状态

startup nomount pfile=’/tmp/orcl_stby.ora'

3.2 rman复制数据

3.2.1使用rman DUPLICATE FROM ACTIVE DATABASE建立dg

rman TARGET sys/oracle@orcl AUXILIARY sys/oracle@orcl_stby

DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE  DORECOVER NOFILENAMECHECK;

个别条款的简要说明如下所示。

?    FOR STANDBY :这告诉DUPLICATE命令是用于待机,所以不会强制一个DBID改变。

?    FROM ACTIVE DATABASE的DUPLICATE将被创建,直接从源数据文件,无需额外的备份步骤。

?    DORECOVER :该DUPLICATE将包括恢复步骤,使待机可达目前的时间点。(此选项不需要额外备份)

?    NOFILENAMECHECK :目标文件的位置不检查(主备dbfile logfile路径一致不需要此选项)。

一旦命令完成后,我们就可以启动应用进程。

from active database也是11g之后才推出的新功能,该功能支持源数据库在active的环境下,直接执行standby数据库的创建,而不会遇到以前10g的时候还需要先备份,然后再传输、恢复这种比较费时的缺陷,效率上有了很大的提升。

3.2.2使用rman DUPLICATE方式建立dg

#备份主库

rman TARGET

run{

configure channel device type disk format '/home/oracle/rmanbk/%d_%I_%s_%p.bkp';

backup as compressed backupset database include current controlfile for standby plus archivelog;

}

复制备份集到备库,目录路径要一致

#使用rman恢复数据库

rman TARGET sys/oracle@orcl AUXILIARY sys/oracle@orcl_stby

DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER NOFILENAMECHECK;

3.3.3使用rman恢复方式建立dg

#主库

rman target /

backup full format=’/tmp/FULL_%U’ database plus archivelog;

#sqlplus中,生成standby controlfile

ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/tmp/control01.ctl’;


#备库:拷贝主库上的备份和STANDBY CONTROLFILE到备库相应位置

a.使用修改的参数文件启动standby至nomount状态

b.开启数据库至mount状态

alter database mount standby database;

c.使用rman开始还原数据库
restore database;

 

以上完成之后,standby的创建也就基本完成了,但还需要一些收尾工作,但也是至关重要的

3.3 standby添加standby redo log

standby redo log 的添加原则:

1) 要与online redo log大小一致;

2) 要比online redo log至少多一组,如果primary数据库时rac,则online redo log要将rac的thread加起来

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo01.log') SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo02.log') SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo03.log') SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/oradata/orcl_stby/standby_redo04.log') SIZE 512M;

3.4 primary添加standby redo log

执行命令与上一致,注意logfile文件位置

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo01.log') SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo02.log') SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo03.log') SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE ('/data/oracle/app/oradata/orcl/standby_redo04.log') SIZE 512M;

3.5 standby创建spfile

SQL> create spfile from pfile=’/tmp/orcl_stby.ora’;

使用spfile重启数据库至mount状态

shutdown immediate

startup mount

3.6 开启日志应用

–11g支持redo apply状态下open

alter database open;

–开启归档日志应用
alter database recover managed standby database disconnect from session;
–开启实时应用
alter database recover managed standby database using current logfile disconnect from session;

3.7 primary修改数据保护模式

3.7.1查看当前保护模式

SQL> select OPEN_MODE, DATABASE_ROLE,protection_mode,protection_level from v$database;

PROTECTION_MODE PROTECTION_LEVEL

-------------------- --------------------

MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE

默认是最大性能保护模式;

3.7.2 修改初始化参数

由于开始配置参数时,就考虑到要修改数据保护模式,所以之前已经将参数修改了,如下:

SQL> show parameter log_archive_dest_2

3.7.3 修改保护模式

命令如下:

SQL>alter database set standby database to maximize availability;

3.7.4 重启数据库

shutdown immediate

startup

3.7.5 查看当前保护模式

SQL> show parameter db_unique_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_unique_name                       string      orcl

SQL>

SQL> select protection_mode,protection_level from v$database;

 

PROTECTION_MODE      PROTECTION_LEVEL

-------------------- --------------------

MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

3.8 standby查看当前保护模式

SQL> show parameter db_unique_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_unique_name                       string      orcl_stby

SQL> select protection_mode,protection_level from v$database;

 

PROTECTION_MODE      PROTECTION_LEVEL

-------------------- --------------------

MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

3.9 开启read only

由于11g的adg特性,使得standby在recover期间也可以提供对外查询服务。但如何开启也需要遵循一定的原则:

1) 在mount状态下,执行 alter database open;

2) 然后开启日志应用,alter database recover managed standby database disconnect from session;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

 

注意:以上执行顺序绝对不能颠倒。

 

如果不打算开启read only服务了怎么操作,步骤如下:

【standby】

1) alter database recover managed standby database cancel;

2) shutdown immediate

3) startup mount

4) alter database recover managed standby database disconnect from session;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

 

至此,此dataguard环境已经全部配置完成。

3.10在主库中查看第二存档终点是否有异常                                                                 

col dest_name for a30                                                                                 

col error for a40                                                                                     

select dest_name,status,error,target,process from v$archive_dest where substr(dest_name,-1) in (1,2); 

4数据同步验证

省略

5备份部署

在primary节点上部署

#每天23:15分 全备数据库

]$ crontab  -l

15 23 * * * /data/sh/rman_fullbackup.sh

#备份脚本

]$ cat /data/sh/rman_fullbackup.sh

#!/bin/bash

TIME=`date +%Y%m%d_%H%M`

days=`date +%F`

 

rm -rf /data/backup/$days

mkdir /data/backup/$days

chown -R oracle:oinstall /data/backup/$days

chmod -R 775 /data/backup/$days

 

 

baklog=/data/backup/$days/rmanbk_$days.log

synclog=/data/backup/$days/sync_$days.log

 

. /home/oracle/.bash_profile

export ORACLE_SID=orcl

 

echo "==================start rman bakcup at $TIME==================" >>$baklog

$ORACLE_HOME/bin/rman target / <<EOF >>$baklog 2>&1

run

{

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

sql 'alter system archive log current';

backup as compressed backupset database format '/data/backup/$days/%d_%I_%s_%p_%T.bkp' include current controlfile;

sql 'alter system archive log current';

backup spfile format '/data/backup/$days/spfile_%d_%I_%s_%p_%T.bkp';

backup as compressed backupset archivelog all format '/data/backup/$days/archivelog_%d_%I_%s_%p_%T.bkp' delete input;

backup current controlfile format '/data/backup/$days/control_%d_%I_%s_%p_%T.bkp';

release channel c1;

release channel c2;

release channel c3;

}

delete noprompt obsolete;

crosscheck backup;

report obsolete;

delete noprompt expired backup;

EOF

 

find /data/backup/ -name "20*" -type d -mtime 10|xargs rm -rf

 

TIME=`date +%Y%m%d_%H%M`

echo "==================end bakcup at $TIME==================" >>$baklog

 

#######################################sync######################################################

echo "===================Start backup to storage137 `date '+%Y%m%d_%H%M'`===================" >>$synclog

nohup rsync -avzP /data/backup/ dbbackup@10.10.10.xxx::dB_bak/  >>$synclog  2>&1 &

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27000195/viewspace-1817320/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27000195/viewspace-1817320/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值