oracle一主一备,DataGuard环境搭建 (一主一备一级联)

DG搭建(一主一备一级联)

先说明一下dataguard一主一备一级联,意思是主库将日志传输给备库,然后备库在将日志传输给级联库,主库和级联库其实没有任何关系。另外,关于数据同步问题,后面也做了验证,主库上的操作一般情况下是可以实时同步到备库的,但是级联库必须等备库归档时,才能同步。如果主库切换日志,那么这时级联库也能及时同步。

节点

网络ip地址

数据库名

unique name

数据库实例名

数据文件位置

zyx.test.com(主库)

192.168.11.111

orcl

orcl

test

/u01/app/oracle/oradata/orcl/

orcl.test.com(备库)

192.168.11.22

orcl

orclps

orclps

/u01/app/oracle/oradata/orcl/

dg2.orcl.com(级联库)

192.168.11.23

orcl

orclstd

orclstd

/u01/app/oracle/oradata/orcl/

1.主库设置

1.1 开归档

sys@ORCL> shutdown immediate

sys@ORCL> startup mount

sys@ORCL> alter database archivelog;

sys@ORCL> alter database open;

sys@ORCL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     4

Next log sequence to archive   6

Current log sequence           6

sys@ORCL> alter database force logging;

Database altered.

1.2 参数设置

sys@ORCL>alter system set

log_archive_config='dg_config=(orcl,orclps)';

sys@ORCL>alter system set

log_archive_dest_2='service=orclps sync affirm net_timeout=10

valid_for=(online_logfile,primary_role) db_unique_name=orclps';

#####下面参数是当主库切换为备库时需要的,这里先不设置

alter system set fal_server=orclps;

alter system set fal_client=orcl;

alter system set

standby_file_management=auto;

sys@ORCL>

create pfile='/home/oracle/pfile.ora' from spfile;

1.3 配置TNS

[oracle@zyx ~]$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

ORCL =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.test.com)

)

)

ORCLPS =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = ORCLPS)

)

)

2.备库orclps配置

----数据库软件安装好,数据库不用创建

2.1 环境变量

[oracle@orcl ~]$

vim .bash_profile

export ORACLE_SID=orclps

export

ORACLE_BASE=/u01/app/oracle

export

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export

TNS_ADMIN=$ORACLE_HOME/network/admin

export ORACLE_UNQNAME=orclps

export ORACLE_HOSTNAME=orcl.test.com

export

PATH=$PATH:$ORACLE_HOME/bin

export

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export

NLS_LANG=american_america.ZHS16GBK

export

NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

export EDITOR=vi

export LANG=C

umask 022

[oracle@orcl ~]$ .

.bash_profile

2.2 创建必要目录

mkdir -p $ORACLE_BASE/fast_recovery_area/orcl

mkdir -p

$ORACLE_BASE/admin/orcl/adump

mkdir -p

$ORACLE_BASE/admin/orcl/dpdump

mkdir -p

$ORACLE_BASE/admin/orcl/pfile

mkdir -p

$ORACLE_BASE/oradata/orcl

2.3 静态监听

[oracle@orcl ~]$ vim

/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

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

)

)

ADR_BASE_LISTENER = /u01/app/oracle

SID_LIST_listener=

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=orclps)

(SID_NAME=orclps)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)))

[oracle@orcl ~]$ lsnrctl start

2.4 配置TNS

[oracle@orcl ~]$ vim

/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

ORCL =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.test.com)

)

)

ORCLPS =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = ORCLPS)

)

)

2.5 参数文件设置

[oracle@zyx ~]$ scp pfile.ora

192.168.11.22:/home/oracle

idle>ho vim /home/oracle/pfile.ora

----可以删除的参数,或修改为下面格式(该参数是指当前数据库为主库时,传输在线日志给orcl)

*.log_archive_dest_2='service=orcl sync

affirm net_timeout=10 valid_for=(online_logfile,primary_role) db_unique_name=orcl'

----追加参数

*.db_unique_name='orclps'

*.fal_client='orclps'

*.fal_server='orcl'

*.standby_file_management=auto

----创建spfile,启动到nomount

idle>create spfile from

pfile='/home/oracle/pfile.ora';

idle>startup nomount

2.6 密钥文件创建

[oracle@orcl ~]$ cd $ORACLE_HOME/dbs

[oracle@orcl dbs]$ orapwd file=orapworclps

password=sys

3.duplicate到备库

3.1 登录测试

[oracle@dg2 ~]$ tnsping orclps

[oracle@dg2 ~]$ tnsping orcl

[oracle@dg2 ~]$ sqlplus sys/sys@orclps as

sysdba

[oracle@dg2 dbs]$ sqlplus sys/sys@orcl as sysdba

3.2 duplicate复制数据库到orclps

[oracle@orcl ~]$ rman target sys/sys@orcl

auxiliary sys/sys@orclps

Recovery Manager: Release 11.2.0.4.0 -

Production on Mon Apr 25 18:30:21 2016

Copyright (c) 1982, 2011, Oracle and/or its

affiliates.  All rights reserved.

connected to target database: ORCL

(DBID=1437652505)

connected to auxiliary database: ORCL (not

mounted)

RMAN>

RMAN> duplicate target database for

standby from active database dorecover nofilenamecheck;

--------如果复制数据库时,备库的路径和原库一致,就需要加nofilenamecheck,不然会报错

3.3 备库orclps配置

----查看当前状态

idle>select instance_name,status from

v$instance;

INSTANCE_NAME    STATUS

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

orclps          MOUNTED

----如果需要手动启动备用数据库:

---- startup nomount

---- alter database mount standby database;

----创建srl日志(比主库redo多一组,大小一样)

idle>alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl01.log' size 50m;

idle>alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl02.log' size 50m;

idle>alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl03.log' size 50m;

idle>alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl04.log' size 50m;

----应用日志,开启redoapply

idle> alter database recover managed

standby database using current logfile disconnect;

---------取消日志应用 recover

managed standby database cancel;

#主库添加srl日志,转为备库时需要

#       alter

database add standby logfile '/u01/app/oracle/oradata/orcl/srl01.log' size 50m;

#       alter

database add standby logfile '/u01/app/oracle/oradata/orcl/srl02.log' size 50m;

#       alter

database add standby logfile '/u01/app/oracle/oradata/orcl/srl03.log' size 50m;

#       alter

database add standby logfile '/u01/app/oracle/oradata/orcl/srl04.log' size 50m;

4.查看主/备应用日志情况

4.1主库切换日志

sys@ORCL>alter system switch logfile;

4.2备库出现新归档

----备库orclps出现新的归档

idle>select sequence#, applied from

v$archived_log;

SEQUENCE# APPLIED

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

7 YES

8 YES

9 IN-MEMORY

----备库orclps传输模式

idle> select protection_mode,

protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

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

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

----主库上最大性能改为最大可用

sys@ORCL>alter database set standby

database to maximize availability;

sys@ORCL>show parameter

log_archive_dest_2

NAME                                 TYPE        VALUE

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

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

log_archive_dest_2                   string      service=orclps sync affirm net

_timeout=10 valid_for=(online_

logfile,primary_role) db_uniqu

e_name=orclps

sys@ORCL>select

protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

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

MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

4.3主库上查看备库应用情况(可以把name字段也加上)

sys@ORCL>select sequence#, applied from

v$archived_log;

SEQUENCE# APPLIED

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

6 NO

7 NO

8 NO

8 YES

9 YES

9 NO

10 YES

10 NO

11 YES

11 NO

12 YES

12 NO

13 YES

13 NO

14 NO

14 NO

16 rows selected.

------上面applied应用:NO的代表本地归档,是不需要应用的,YES的代表备库传输后已经应用。orclps备库是从8号归档开始应用

4.4 查看备库数据文件存放位置

idle>select name from v$controlfile;

idle>select name from v$datafile;

idle>select name from v$tempfile;

idle>select group#,member,type from

v$logfile;

GROUP#         MEMBER              TYPE

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

----------

3  /u01/app/oracle/fast_recovery_area/ORCLPS/onlinelog/o1_mf_3_ckvxlzto_.log  ONLINE

2  /u01/app/oracle/fast_recovery_area/ORCLPS/onlinelog/o1_mf_2_ckvxlydr_.log  ONLINE

1  /u01/app/oracle/fast_recovery_area/ORCLPS/onlinelog/o1_mf_1_ckvxlwvd_.log  ONLINE

4  /u01/app/oracle/oradata/orcl/srl01.log

STANDBY

5  /u01/app/oracle/oradata/orcl/srl02.log

STANDBY

6  /u01/app/oracle/oradata/orcl/srl03.log

STANDBY

7  /u01/app/oracle/oradata/orcl/srl04.log                                                                        STANDBY

7 rows selected.

------后续转为主库后,redo log可以自己调整一下,上面是duplicate主库到备库时,自动生成的redo

log

5.级联配置之备库设置

5.1 备库开启ADG模式

------备库不是一定要开启ADG,备库在mount下也是可以的完成级联库搭建的

idle>alter database recover managed

standby database cancel;

idle>alter database open;

sys@ORCL>alter database recover managed

standby database using current logfile disconnect;

sys@ORCL>select sequence#, applied from

v$archived_log;

SEQUENCE# APPLIED

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

12 YES

13 YES

14 YES

8 rows selected.

sys@ORCL>select

database_role,switchover_status,db_unique_name

from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME

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

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

PHYSICAL STANDBY NOT ALLOWED          orclps

5.2 备库参数设置

sys@ORCL>select log_mode,force_logging

from v$database;

LOG_MODE

FOR

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

ARCHIVELOG

YES

sys@ORCL>alter system set

log_archive_config='dg_config=(orcl,orclps,orclstd)';

sys@ORCL>alter system set

log_archive_dest_3='service=orclstd sync affirm net_timeout=10

valid_for=(standby_logfile,standby_role) db_unique_name=orclstd';

--------- primary_role / standby_role/ all_roles    online_logfile/ standby_logfile/ all_logfiles

---------这几个参数的含义注意理解

sys@ORCL>create

pfile='/home/oracle/orclstd.ora' from spfile;

5.3 备库TNS配置追加

[oracle@orcl ~]$ vim

/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

ORCLSTD =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orclstd)

)

)

6.级联库orclstd配置

6.1 环境变量

[oracle@dg2 ~]$

vim .bash_profile

export ORACLE_SID=orclstd

export ORACLE_BASE=/u01/app/oracle

export

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export

TNS_ADMIN=$ORACLE_HOME/network/admin

export ORACLE_UNQNAME=orclstd

export ORACLE_HOSTNAME=dg2.orcl.com

export

PATH=$PATH:$ORACLE_HOME/bin

export

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export

NLS_LANG=american_america.ZHS16GBK

export

NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

export EDITOR=vi

export LANG=C

umask 022

[oracle@orcl ~]$ .

.bash_profile

6.2 创建必要目录

mkdir -p

$ORACLE_BASE/fast_recovery_area/orcl

mkdir -p

$ORACLE_BASE/admin/orcl/adump

mkdir -p

$ORACLE_BASE/admin/orcl/dpdump

mkdir -p

$ORACLE_BASE/admin/orcl/pfile

mkdir -p

$ORACLE_BASE/oradata/orcl

6.3 静态监听

[oracle@dg2 ~]$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

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

)

)

ADR_BASE_LISTENER = /u01/app/oracle

SID_LIST_listener=

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=orclstd)

(SID_NAME=orclstd)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)))

[oracle@dg2 ~]$ lsnrctl start

6.4 配置TNS

[oracle@dg2 ~]$ vim /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

ORCLPS =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = ORCLPS)

)

)

ORCLSTD =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orclstd)

)

)

6.5 参数文件设置

[oracle@orcl ~]$ scp orclstd.ora

192.168.11.23:/home/oracle/

----修改参数

SQL> !vim /home/oracle/orclstd.ora

*.db_name='orcl'

*.db_unique_name='orclstd'

*.fal_client='orclstd'

*.fal_server='orclps'

----暂时删除参数

*.log_archive_dest_3='service=orclstd sync

affirm net_timeout=10 valid_for=(standby_logfile,standby_role) db_unique_name=orclstd'

----创建spfile,启动到nomount

idle>create spfile from

pfile='/home/oracle/orclstd.ora';

idle>startup nomount

6.6 密钥文件创建

[oracle@dg2 ~]$cd $ORACLE_HOME/dbs

[oracle@dg2 dbs]$ orapwd file=orapworclstd

password=sys

7.duplicate到级联库

7.1 登录测试

[oracle@dg2 ~]$ tnsping orclps

[oracle@dg2 ~]$ tnsping orclstd

[oracle@dg2 ~]$ sqlplus sys/sys@orclps as

sysdba

[oracle@dg2 dbs]$ sqlplus sys/sys@orclstd

as sysdba

7.2 duplicate复制数据库到orclstd

[oracle@orcl ~]$ rman target sys/sys@orclps

auxiliary sys/sys@orclstd

Recovery Manager: Release 11.2.0.4.0 -

Production on Mon Apr 25 19:37:45 2016

Copyright (c) 1982, 2011, Oracle and/or its

affiliates.  All rights reserved.

connected to target database: ORCL

(DBID=1437652505)

connected to auxiliary database: ORCL (not

mounted)

RMAN>

RMAN> duplicate target database for

standby from active database dorecover nofilenamecheck;

--------如果复制数据库时,备库的路径和原库一致,就需要加nofilenamecheck,不然会报错

7.3 级联库orclstd调整srl日志

----查看当前状态

SQL> select instance_name,status from

v$instance;

INSTANCE_NAME    STATUS

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

orclstd          MOUNTED

----如果需要手动启动备用数据库:

---- startup nomount

---- alter database mount standby database;

----查看是否有srl日志

set linesize 200

set pagesize 999

col member for a80

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

GROUP# TYPE    MEMBER

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

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

3  ONLINE

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_3_cl7h802v_.log

2  ONLINE

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_2_cl7h7z1l_.log

1  ONLINE

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_1_cl7h7y17_.log

4  STANDBY

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_4_cl7h8102_.log

5  STANDBY /u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_5_cl7h8291_.log

6  STANDBY

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_6_cl7h83dn_.log

7  STANDBY

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_7_cl7h84r2_.log

7 rows selected.

------有redo和srl日志,不用再添加,当然这些日志都可以自己再手动调整位置

------redo日志需要转为主库才能调整,现在先调整srl日志

SQL> alter database drop standby logfile

group 4;

SQL> alter database drop standby logfile

group 5;

SQL> alter database drop standby logfile

group 6;

SQL> alter database drop standby logfile

group 7;

SQL> alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl01.log' size 50m;

SQL> alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl02.log' size 50m;

SQL> alter database add standby logfile '/u01/app/oracle/oradata/orcl/srl03.log'

size 50m;

SQL> alter database add standby logfile

'/u01/app/oracle/oradata/orcl/srl04.log' size 50m;

SQL> select group#,type,member from

v$logfile;

GROUP#     TYPE    MEMBER

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

3      ONLINE

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_3_cl7hf6kq_.log

2   ONLINE

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_2_cl7hf4mo_.log

1   ONLINE

/u01/app/oracle/fast_recovery_area/ORCLSTD/onlinelog/o1_mf_1_cl7hf33q_.log

4 STANDBY

/u01/app/oracle/oradata/orcl/srl01.log

5 STANDBY

/u01/app/oracle/oradata/orcl/srl02.log

6 STANDBY

/u01/app/oracle/oradata/orcl/srl03.log

7 STANDBY /u01/app/oracle/oradata/orcl/srl04.log

7 rows selected.

7.4开启级联库redoapply

SQL> alter database recover managed

standby database using current logfile disconnect;

---------取消日志应用 recover

managed standby database cancel;

8.查看备库/级联库应用日志情况

8.1 级联库日志应用情况

----主库切换日志

sys@ORCL>alter system switch logfile;

----级联库出现新日志

SQL> select sequence#, applied from

v$archived_log;

SEQUENCE# APPLIED

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

15 IN-MEMORY

SQL> select protection_mode,

protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

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

MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

----备库orclps日志应用情况

sys@ORCL>select sequence#, applied from

v$archived_log;

SEQUENCE# APPLIED

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

12 YES

13 YES

14 YES

15 YES

15 YES

10 rows selected.

8.2 主库上创建表,级联库查看

----先开启级联库ADG

SQL> alter database recover managed

standby database cancel;

SQL> alter database open;

SQL> alter database recover managed

standby database using current logfile disconnect;

----主库orcl上创建表,并插入数据

sys@ORCL>create table shall(shall int);

begin

for i in 1..100000 loop

insert into shall values(i);

end loop;

commit;

end;

/

PL/SQL procedure successfully completed.

----备库orclps能实时查询到数据

sys@ORCL>select count(*) from shall;

COUNT(*)

----------

100000

----级联库orclstd不能查询到数据

SQL> select count(*) from shall;

select count(*) from shall

*

ERROR at line 1:

ORA-00942: table or view does not exist

----主库orcl切换日志

sys@ORCL>alter system switch logfile;

----此时级联库orclstd可以查询到数据

SQL> select count(*) from shall;

COUNT(*)

----------

0

SQL> select count(*) from shall;

COUNT(*)

----------

100000

----------备库是实时数据,而级联库需要等备库归档后才能同步

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值