Linux Oracle 11g dataguard物理standby 配置过程

这两天研究了下oracle 11g dataguard 物理standby 功能,总体来说这个功能满足公司需求,好了,不多说了,以下是详细的配置过程。

数据库的安装可以参考之前写的六步搞定Linux Oracle 11gR2 配置安装

注意:分别在主库和备库都安装上oracle软件,不装数据库。

主库:

IP:192.168.77.5
主机名:nod1
ORACLE_SID=test
ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1

备库

IP:192.168.77.10
主机名:nod2
ORACLE_SID=test
ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1

安装配置步骤:

1、主库运行dbca创建数据库(安装过程中需要注意:先关掉flash recovery),数据库名为test

2、登陆到数据库上

[[email protected] ~]$ sqlplus /nolog
 
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 11 20:31:09 2010
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
SQL> conn / as sysdba;
Connected.
SQL>

3、将主库设置为 FORCE LOGGING 模式

SQL> ALTER DATABASE FORCE LOGGING;
 
Database altered.

4、创建一个密码文件,如果数据库是用dbca创建的则会在$ORACLE_HOME/dbs/下自动创建一个叫orapwdSID的一个密码文件。(否则可以用orapwd命令创建一个)。

5、配置Standby Redo Log。创建组数至少要比主库的online redo log组数多一个。

SQL> select group#,bytes from v$log;
 
GROUP#      BYTES
---------- ----------
1   52428800
2   52428800
3   52428800
 
这里创建4组
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 (‘/oracle/app/oracle/oradata/test/stdbyredo01.log‘) SIZE 52428800;
 
Database altered.
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 (‘/oracle/app/oracle/oradata/test/stdbyredo02.log‘) SIZE 52428800;
 
Database altered.
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 (‘/oracle/app/oracle/oradata/test/stdbyredo03.log‘) SIZE 52428800;
 
Database altered.
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 (‘/oracle/app/oracle/oradata/test/stdbyredo04.log‘) SIZE 52428800;
 
验证一下创建是否成功
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
 
GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
4          0          0 YES UNASSIGNED
5          0          0 YES UNASSIGNED
6          0          0 YES UNASSIGNED
7          0          0 YES UNASSIGNED
 
Database altered.
 
如果想删除某个组可以用下面的命令
SQL> alter database drop standby logfile group 4;
如果给某个组添加成员可以用下面命令
SQL> ALTER DATABASE ADD STANDBY LOGFILE MEMBER ‘/oracle/app/oracle/oradata/test/stdbyredo04_1.log‘ TO GROUP 7;
删除组中的成员用以下命令
SQL> ALTER DATABASE DROP STANDBY LOGFILE MEMBER ‘/oracle/app/oracle/oradata/test/stdbyredo04_1.log‘;
 
Database altered.
 
SQL> host rm -f /oracle/app/oracle/oradata/test/stdbyredo04_1.log

6、检查数据库是否处于归档状态

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oracle/app/oraclearch_log
Oldest online log sequence     1
Next log sequence to archive   2
Current log sequence           2
 
如果不是处于归档状态则运行下面命令
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

7、创建备库的控制文件(创建后数据库不能做结构性的改变)

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/oracle/app/oracle/oradata/test/stdby.ctl‘;

8、创建pfile以便于修改配置参数

SQL> CREATE PFILE=‘/oracle/app/oracle/oradata/test/pfile‘ FROM SPFILE;

9、关掉数据库开始编辑参数

SQL> shutdown immediate;

10、编辑porfile

$ vi /oracle/app/oracle/oradata/test/pfile
添加下面内容
DB_UNIQUE_NAME=nod1
LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(nod1,nod2)‘
LOG_ARCHIVE_DEST_2=
‘SERVICE=nod2 LGWR ASYNC
 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 
 DB_UNIQUE_NAME=nod2‘
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=nod2
FAL_CLIENT=nod1
DB_FILE_NAME_CONVERT=‘nod2‘,‘nod1‘
STANDBY_FILE_MANAGEMENT=AUTO

11、进入sqlplus创建pfile(NOMOUNT状态)

SQL> CREATE SPFILE from PFILE=‘/oracle/app/oracle/oradata/test/pfile‘;

12、创建tnsnames.ora和listener.ora,可以手动创建也可以用netca创建,无论哪种方法都必须保证能互相畅通。

$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ vi tnsnames.ora
输入下面内容
nod2 =
 (DESCRIPTION =
(ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.77.10)(PORT = 1521))
)
(CONNECT_DATA =
 (SERVICE_NAME = test)
)
 )
 
nod1 =
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.77.5)(PORT = 1521))
(CONNECT _DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = test)
)
 )
 
 
$ vi listener.ora
 
SID_LIST_LISTENER =
 (SID_LIST =
(SID_DESC =
 (SID_NAME = test)
 (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
 (PROGRAM = extproc)
)
(SID_DESC =
                           (GLOBAL_DBNAME = test)
 (SID_NAME = test)
 (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
)
 )
 
LISTENER =
 (DESCRIPTION_LIST =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = nod2)(PORT = 1521))
 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
 )

13、复制备份文件到备库

$ cd /oracle/app/oracle
$ scp -r arch_log/ admin/ oradata/ 192.168.77.10:/oracle/app/oracle
$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ scp listener.ora  tnsnames.ora 192.168.77.10:/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/dbs/
$ scp orapwtest 192.168.77.10:/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/

14、打开备库做以下操作

$ cd /oracle/app/oracle/oradata/test/
$ rm -rf control0*
$ cp stdby.ctl control01.ctl
$ cp stdby.ctl control02.ctl
$ cp stdby.ctl control03.ctl
 
 
$ vi pfile 对相应文件做修改
DB_UNIQUE_NAME=nod2
LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(nod1,nod2)‘
LOG_ARCHIVE_DEST_2=
‘SERVICE=nod1 LGWR ASYNC
 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
 DB_UNIQUE_NAME=nod1‘
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=nod1
FAL_CLIENT=nod2
DB_FILE_NAME_CONVERT=‘nod2‘,‘nod1‘
STANDBY_FILE_MANAGEMENT=AUTO
 
 
$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ vi listener.ora
将nod1修改为nod2

15、在备库中进入sqlplus

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> CREATE SPFILE from PFILE=‘/oracle/app/oracle/oradata/test/pfile‘;
SQL>shutdown immediate; 

16、测试oracle net是否畅通

首先启动监听服务(分别在主机和备机上进行)
$ lsnrctl stop
$ lsnrctl start
分别在主机和备机上运行下面命令来测试
$ tnsping nod1
$ tnsping nod2

17、启动主库(正常启动)

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup

18、启动备库到mount状态,并打开redo Apply

$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup mount
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

19、在主库上做一次日志切换

SQL> ALTER SYSTEM SWITCH LOGFILE;

20、分别在主库和备库上做下列查询,检查归档日志是否由主库传送到备库

以下语句可以查看日志应用情况
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG  ORDER BY SEQUENCE#;

SEQUENCE# APP
---------- ---
2 YES
3 YES
 
 
如果出现上面情况则说明配置成功。

进行数据测试

1、在主 库建表然后在备库查询进行验证

SQL> create table nod2(id integer,name char(10))
SQL> insert into nod2 values(1,‘nod1‘);
SQL> commit;
SQL> select * from nod2;
 
ID NAME
---------- ----------
1 nod1

2、在主库上做个日志归档

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

3、在备库上取消掉redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN;
SQL> select * from nod2;
 
ID NAME
---------- ----------
1 nod1
 
测试成功

4、再次切换为备库的redo apply状态

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

注意:

此步骤在切换成功后,要进行主机HOST的相应配置,要不然在日志切换时会报错,

5、在主库上做如下sql语句

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> shutdown immediate;
SQL> startup nomount;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT;

6、在备库上做switchover

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SQL> shutdown immediate;
SQL> startup

7、分别在新的主库和备库上查看状态,验证主库备库是否切换正常。

SQL> select name,database_role from v$database;

再次创建表在切换后的主库备库上验证

8、在新的主库上创建表

SQL> create table nod1(id integer,name char(10));

SQL> insert into nod1 values(111,‘haha‘);

SQL> commit;

SQL> select * from nod1;

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

9、在新的备库上做下面操作以取消redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN;
SQL> select * from nod1;

10、恢复新备库为redo apply状态

以上是dataguard的配置过程,如何让数据实时同步,我们将在下篇进行讨论

维护
 
1、开机顺序,先备库的listener再启动备库。再启动主库的listener,再启动主库。
2、关机顺序,先关闭主库,再关闭备库
 
附上实时查看日志同步日志,可以查看问题所在
 
 tail -f /oracle/app/oracle/diag/rdbms/nod1/test/trace/alert_test.log 
 
stanby上检查应用率和活动率(Ps)
SQL>select to_char(start_time,‘dd-mon-rr hh24:mi:ss‘) start_time,item,sofar from V$recovery_progress where item in (‘Active Apply Rate‘, ‘Average Apply Rate‘,‘Redo Applied‘);
Redo Applied值以MB衡量,而Active Apply Rate和Average Apply Rate以KB/s计算。
时间: 2024-12-14 12:22:26

Linux Oracle 11g dataguard物理standby 配置过程的相关文章

Oracle Study之案例--Oracle 11g DataGuard Snapshot Standby

Oracle Study之案例--Oracle 11g  DataGuard Snapshot Standby Oracle 11g的Data Guard不仅仅带给我们的是Active Data Guard实时查询特性,同时还带来了另外一个新特性,这便是Snapshot Standby数据库功能,此项功能可将备库置身于"可读写状态"用于不方便在生产环境主库中测试的内容,比如模拟上线测试等任务.当备库读写状态下任务完成后,可以非常轻松的完成Snapshot Standby数据库角色切换回

Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置

之前我们讨论过<Linux Oracle 11g dataguard物理standby 配置过程>, 但是在实际过程中会遇到不同的问题,首先我们讨论下ORACLE DATAGUARD的三种模式, 保护最大化:这种模式的配置可以保证主库和备库的同步,任何情况下主库的损毁都不会导致已提交数据的丢失.如果主库和备库之间的网络出现问题,或者备库本身出现问题,都会导致主库停止数据处理. 可用最大化:这种模式和上面一种类似,也是会保证主库和备库的同步,区别在于,当网络或备库不可用时,主库仍然可以继续处理.

最简单的11g Active DataGuard(ADG)搭建配置过程(项目步骤)

最简单的11g Active DataGuard(ADG)搭建配置过程(项目步骤) 一.环境介绍: 我在db01和db02两台Linux虚拟机上首先分别安装了一套数据库软件,在db01主机上创建了名为woo的数据库:我们这次的实验是要搭建了一套Oracle 11g Active DataGuard:目的是为了实现数据库同步的功能,并且了解Oracle 11g DG的基本功能. db01:192.168.1.50db02:192.168.1.51 二.11g ADG部署: 1.pri端和sty端配

Oracle 11G DataGuard生产环境重新启动详细过程

场景,重启数据库,不重启linux系统,所以不用考虑监听程序,#linux输入lsnrctl start1 数据库关闭1.1 关闭主库SHUTDOWN IMMEDIATE; SQL> SHUTDOWN IMMEDIATE;                                                                                                                                          

Oracle 11G DataGuard ORA-16086问题修复详细过程

1,问题描述,standby从库没有应用redo日志Tue Jul 22 09:05:07 2014RFS[8852]: Assigned to RFS process 12956RFS[8852]: Identified database type as 'physical standby': Client is ARCH pid 16028Tue Jul 22 09:05:09 2014RFS[8853]: Assigned to RFS process 12958RFS[8853]: Id

Oracle 11g Dataguard 暂停物理备库的日志传输

Oracle 11g Dataguard 暂停物理备库的日志传输分类: Oracle2017-07-18 10:03:17这两天生产端的日志产生过多导致灾备端的归档日志目录满的现象,在清除灾备端的日志后发现log_archive_dest_2处于error状态,需要将其enable.在实际生产系统中,通常有这样的场景,例如在系统维护日,对主库进行大量的业务更新,会有大量的DML操作:为了避免主库中的业务更新对备库造成影响,可以暂停主库对备库的日志传输,这样的话,如果主库的更新出现问题,备库还保留

【转】Oracle 11g Dataguard 参数详解

转自:https://www.jb51.net/article/52269.htm 这篇文章主要介绍了Oracle 11g Dataguard参数详解,包含了独立参数.主库参数.备库参数的详细说明,需要的朋友可以参考下. 注:本文译自<Oracle Data Guard 11g Handbook> Page 78 – Page 88 就Data Guard(后面都写成DG)来说,我们只关注如下三种参数: 1.独立于数据库角色的参数2.数据库角色为primary时的参数3.数据库角色为stand

ORACLE 11G DataGuard的一些高级管理案例研究

搭建完了ORACLE 11G dataguard后,也做了角色切换的实验,有switchover已经failover,感觉受益颇多,而后继续研究了下dataguard的一些高级管理功能,所谓冰山一角,ORACLE果然博大精深,总结记录如下:1,ORACLE 11G dataguard的高级管理1.1.READ ONLY/WRITE模式打开物理STANDBY一般standby都是可以设置为mount状态的,于物理standby 可以有效分担primary 数据库压力,提升资源利用,实际上说的就是这

Oracle 11g R2 Snapshot Standby

Oracle 11g引入Snapshot Standby,允许standby database以read-write模式打开.当切换回standby模式,所有在read-write模式的修改都丢失.它是通过flashback database实现,但是standby database不需要显式启用flashback database. 如果使用RAC,关闭所有其他实例,而保留一个实例.确保实例在mount模式. shutdown immediate; startup mount; 1.关闭man