Chinaunix首页 | 论坛 | 博客
  • 博客访问: 115041
  • 博文数量: 10
  • 博客积分: 268
  • 博客等级: 入伍新兵
  • 技术积分: 159
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 18:24
文章分类

全部博文(10)

文章存档

2015年(1)

2014年(4)

2013年(4)

2012年(1)

分类: LINUX

2013-11-15 16:53:18

原文链接:

说明:
Oracle Dataguard
配置文章多如牛毛,但就笔者来说大部分不能叫做文档,只是作者的笔记罢了,未免有很多新手看不明白的,所以做Dataguard的配置可能需要找许多文章才能完成,历时艰辛。本文旨在为希望快速清晰的理解并顺利完成配置:

一、环境介绍
1.
主数据库环境
操作系统版本  : CentOS5.8 x64
数据库版本    : Oracle 11.2.0 x64
数据库名      : orcl
数据库SID    : orcl
db_unique_name: orcl
instance_name : orcl
DGMGRL        : orcl_DGMGRL

2. 备库环境
操作系统版本  : CentOS5.8 x64
数据库版本    : Oracle 11.2.0 x64 只安装Oracle数据库软件,不创建数据库,切记
数据库名      : standby
数据库SID    : standby
db_unique_name: standby
instance_name : standby
DGMGRL        : standby_DGMGRL

3. DataGuard数据库启动顺序
启动顺序:先启备库,后启主库
关闭顺序:先关主库,后关备库
 
二、主数据库环境准备

1. 主库环境对比
充分利用主数据库原来环境,仅量不对主库参数配置做过多的修改。
重新创建口令文件
# su - oracle
$ orapwd file='/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' password=oracle entries=10 force=y

2. 修改配置lisener监听文件
说明:添加dgmgrl静态监听配置,为后面的dg broker配置打基础。
$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.161.130)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle
#
其中的GLOBAL_DBNAME具有固定的格式:_DGMGRL.

4. 修改配置tnsname.ora文件
说明:ORCL是主库的服务名,DG是备库的服务名。
$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.161.130)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.161.131)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = standby)
    )
  )

5. 修改配置成规档模式
1)
、检查数据库是否处于归档状态
SQL> archive log list;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database flashback on;
SQL> alter database open;

2)、将主库设置为 FORCE LOGGING 模式
SQL> alter database force logging;
SQL> select force_logging,flashback_on from v$database;
FOR FLASHBACK_ON
--- ------------------
YES YES

6. 修改主库参数文件
SQL>
alter system set instance_name='orcl' scope=spfile; 
alter system set db_unique_name='orcl' scope=spfile; 
alter system set local_listener='orcl' scope=spfile;
alter system set log_archive_config='DG_CONFIG=(orcl,standby)'; 
alter system set log_archive_dest_1='LOCATION=/u01/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=spfile;
alter system set log_archive_dest_2='SERVICE=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=standby' scope=spfile; 
alter system set log_archive_format='arch_%r_%t_%s.arc' scope=spfile;
alter system set fal_client='orcl' scope=spfile;
alter system set fal_server='standby' scope=spfile; 
alter system set standby_file_management=AUTO; 
alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/standby_redo04.log' size 50M; 
alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/standby_redo05.log' size 50M; 
alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/standby_redo06.log' size 50M; 
alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/standby_redo07.log' size 50M; 
SQL> shutdown immediate;
SQL> startup;
 
三、备库配置

1. 备库环境
操作系统版本  : CENTOS5.8 x64
数据库版本    : Oracle 11.2.0.3 x64 (只安装oracle数据库软件,no netca dbca
数据库名      : standby
数据库SID    : standby
db_unique_name: standby
instance_name : standby
DGMGRL        : standby_DGMGRL

2. 修改配置lisener监听文件
$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.161.131)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = standby)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = standby)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = standby_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = standby)
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

其中的GLOBAL_DBNAME具有固定的格式:_DGMGRL.

3. 修改配置tnsname.ora文件
说明:ORCL是主库的服务名,DG是备库的服务名。
$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.161.130)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.161.131)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = standby)
    )
  )

测试服务名连通性:
tnsping orcl
tnsping standby

3. 创建11g数据库基本目录
# su - oracle
mkdir -p /u01/app/oracle/admin/standby/{adump,dpdump,pfile,scripts} 
mkdir -p /u01/app/oracle/oradata/standby 
mkdir -p /u01/app/oracle/fast_recovery_area/standby
mkdir -p /u01/archivelog

4. 拷贝主库口令文件并改名
注:10g DG环境只要求密码相同,11g DG则要求与主库完全一致。
否则报无权限错误。
$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
$ scp oracle@192.168.161.131:/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl  $ORACLE_HOME/dbs/
$ mv orapworcl orapwstandby

测试远程登录
$ sqlplus sys/oracle@orcl as sysdba;
$ sqlplus sys/oracle@standby as sysdba;

5. 启动到nomount状态
$ echo 'db_name=standby' > $ORACLE_HOME/dbs/initstandby.ora 
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup nomount;


四、 开始在RMAN duplicate数据库

1. RMAN同进连接主库与备库
在开始RMAN duplicate之前需要在从库进行以下操作

点击(此处)折叠或打开

  1. SQL> shut immediate
  2. Database closed.
  3. Database dismounted.
  4. ORACLE instance shut down.
  5. SQL> create pfile from spfile;

  6. File created.

  7. SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initstandby.ora';

$ rman target sys/oracle@orcl auxiliary sys/oracle/standby
恢复管理器: Release 11.2.0.1.0 - Production on 星期五 11 15 41:58:10 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
已连接到目标数据库: ORCL (DBID=1351417842)
已连接到辅助数据库: STANDBY (未装载)


2. 开始duplicate数据库
RMAN>

run {

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate auxiliary channel stby type disk;

duplicate target database for standby nofilenamecheck from active database

dorecover

spfile

parameter_value_convert 'orcl','standby'

set instance_name='standby'

set db_unique_name='standby'

set local_listener='standby'

set db_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/standby/'

set log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/standby/'

set control_files='/u01/app/oracle/oradata/standby/control01.ctl','/u01/app/oracle/oradata/standby/control02.ctl','/u01/app/oracle/oradata/standby/control03.ctl'

set log_archive_dest_1='LOCATION=/u01/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=standby'

set log_archive_dest_2='SERVICE=orcl lgwr async valid_for=(online_logfile,primary_role) db_unique_name=orcl'

set log_archive_max_processes='5'

set standby_file_management='AUTO'

set fal_client='standby'

set fal_server='orcl';

release channel c1;

release channel c2;

release channel stby;

}

 
恢复管理器完成。

3. 查看备库状态
说明:duplicate数据库之后,备库只是处于mount状态,查看备库状态。
$ sqlplus / as sysdba
#
查看备库状态
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED              PHYSICAL STANDBY standby

4. 将备库置与应用日志模式状态
SQL> alter database recover managed standby database using current logfile disconnect from session; 
Database altered. 

5. 验证物理备库日志应用
1
)主库上操作
SQL> conn / as sysdba;
SQL> create user abc identified by abc ;
SQL> grant dba to abc;
SQL> conn abc/abc
SQL> create table abc ( id integer , name char(10));
SQL> insert into abc values ( 0 , 'aaa' );
SQL> commit;
SQL> conn / as sysdba;
SQL> archive log list;
数据库日志模式          存档模式
自动存档                启用
存档终点                /u01/archivelog/
最早的联机日志序列      9
下一个存档日志序列      9
当前日志序列          10
 
2
)备库上验证
SQL> archive log list
数据库日志模式        存档模式
自动存档              启用
存档终点              /u01/archivelog/
最早的联机日志序列    0
下一个存档日志序列    0
当前日志序列        10

SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
 SEQUENCE# FIRST_TIME    NEXT_TIME      APPLIED
---------- -------------- -------------- ---------
        7 15-11
-13    15-11 -13    YES
        8 15-11
-13    15-11 -13    YES
        9 15-11
-13    15-11 -13    IN-MEMORY

经过测试,Oracle 11g dataguard物理备库创建成功。


阅读(3708) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

xushaonan0012016-06-07 09:34:01

royzs:这只是一种情况,实际环境需要根据需求配置,仅仅一篇文章是远远不够的

我晕了,人家只是把思路帮我们捋一下而已,试问有谁能把全部的实际情况写出来?你能吗?

回复 | 举报

royzs2013-12-23 10:15:04

这只是一种情况,实际环境需要根据需求配置,仅仅一篇文章是远远不够的