尽管网上有很多Oracle Dataguard的配置教程,但不难发现,很多采用的是rman duplicate这种方法,尽管此种方法较为简便。但在某种程度上,却也误导了初学者,虽说也能配置成功,但只知其然不知其所以然,Dataguard的本质没有吃透,也不利于其维护和调优。

本配置文档基于Oracle官方文档,目的在于加深大家对于Dataguard的了解。

本配置的结果是最大性能模式下的异步传输 ,因此在参数文件中,只涉及基本的主备参数,没有考虑switchover和最大性能模式下的real time apply。在监听的配置中,也没有考虑Data Guard Broker的应用情况

配置环境:

主库:                                                                         备库:

操作系统版本:           Oracle Linux 6.3                             Oracle Linux 6.3

数据库版本:              Oracle 11.2.0.1.0                           Oracle 11.2.0.1.0

主机名:                    node1.being.com                           node2.being.com

IP:                          192.168.1.11                                192.168.1.12

db_name                   orcl                                              victor

db_unique_name        orcl                                               orcl

instance_name           orcl                                              victor

service_names            orcl                                              victor

注意:1. Dataguard中只需要db_unique_name保持一致即可

2. 主库中除了安装Oracle软件以外,还需要dbca建库。而备库中,只需要安装Oracle软件即可,即在./runInstaller安装过程中,第三步选择install software only

即可

3. 主备库的ORACLE_BASE=/u01/app/oracle,ORACLE_HOME=$ORACLE_BASE/product/11.2.0.1/db_1

一、配置监听

1> 主库上

[oracle@node1 ~]$ cd $ORACLE_HOME/network/admin/

[oracle@node1 admin]$ cat tnsnames.ora

TO_VICTOR =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = victor)
)
)

其中to_victor为网络服务名,在后面配置log_archive_dest_2和fal_server中会用到

2> 备库上

[oracle@node2 ~]$ cd $ORACLE_HOME/network/admin/

[oracle@node2 admin]$ cat tnsnames.ora

TO_ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

注意:该配置只是基于基本的Dataguard配置,没有考虑Dataguard broker的配置

二、主库环境准备  -->> 在node1上操作

1> 将数据库设置为归档模式

SQL> archive log list   -->>若Database log mode为No Archive Mode,则表示该数据库运行在非归档模式下。进行以下操作

SQL> shutdown immediate

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

2> 将数据库设置为Force Logging模式

SQL> select force_logging from v$database;  -->>若为NO,则进行以下操作

SQL> alter database force logging;

3> 修改主库参数文件

SQL> alter system set log_archive_config='dg_config=(orcl,victor)';

-->> 代表该Dataguard是两个节点,一主一从,若要配置多个节点,则需要在此处添加。

SQL> alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(online_logfiles,primary_role) db_unique_name=orcl';

-->> location代表本地归档。在这里我们使用闪回区作为在线日志文件的归档目录,在实际生产环境中,如果归档日志是归档在本地文件系统上,不建议使用闪回区,因为闪回区和数据库软件是在同一个目录下,如果归档日志过多,闪回区空间增长过快,容易造成磁盘空间不足,这样容易使数据库挂掉。valid_for代表该归档目录只有在该库为主库,归档在线日志文件时才有效。

SQL> alter system set log_archive_dest_2='service=to_victor async valid_for=(online_logfiles,primary_role) db_unique_name=victor';

-->> service后面接的是网络服务名

SQL> alter system set log_archive_dest_state_1='enable';

SQL> alter system set log_archive_dest_state_2='enable';

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;  -->> 设置密码文件的权限,该设置需重启数据库才能生效

SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;  -->> 设置归档日志的格式,该设置需重启数据库才能生效

-->> 最后两项可不用显性设定

三、 为备库创建各种文件 -->> 在node1上操作

1> 密码文件

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

[oracle@node1 dbs]$ orapwd file=orapworcl entries=5 force=y password=oracle

2> 参数文件

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

3> 备份数据库

对数据库做备份有多种办法,包括冷备、在线热备、RMAN备份,在这里我们使用RMAN备份

[oracle@node1 ~]$ mkdir /home/oracle/rman

[oracle@node1 ~]$ rman target /

RMAN> backup database format '/home/oracle/rman/full_%U';

4> 备份控制文件

SQL> alter system switch logfile;

SQL> alter database create standby controlfile as '/home/oracle/victor.ctl';

四、将上述四类文件copy到备库

[oracle@node1 ~]$ scp $ORACLE_HOME/dbs/orapworcl oracle@192.168.1.12:/u01/app/oracle/product/11.2.0.1/db_1/dbs/orapwvictor

[oracle@node1 ~]$ scp /home/oracle/orcl.ora oracle@192.168.1.12:/home/oracle/victor.ora

[oracle@node1 ~]$ scp -r /home/oracle/rman/ oracle@192.168.1.12:/home/oracle/rman

[oracle@node1 ~]$ scp /home/oracle/victor.ctl oracle@192.168.1.12:/home/oracle

五、 创建备库

1> 修改参数文件

[oracle@node2 ~]$ vim victor.ora

*.audit_file_dest='/u01/app/oracle/admin/victor/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/victor/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
db_unique_name=victor
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(protocol=TCP)'
*.log_archive_config='dg_config=(orcl,victor)'
*.log_archive_dest_1='location=/u01/archivelog valid_for=(standby_logfiles,standby_role) db_unique_name=victor'
*.log_archive_dest_state_1='enable'
*.memory_target=471859200
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_servers=1
*.undo_tablespace='UNDOTBS1'
fal_server=to_orcl
db_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/victor/'
log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/victor/’
standby_file_management=auto

2> 创建参数文件中相应的目录

[oracle@node2 ~]$ mkdir -p /u01/app/oracle/admin/victor/adump

[oracle@node2 ~]$ mkdir /u01/archivelog

[oracle@node2 ~]$ mkdir -p /u01/app/oracle/oradata/victor

[oracle@node2 ~]$ cp /home/oracle/victor.ctl /u01/app/oracle/oradata/victor/control01.ctl

3> 创建备库

[oracle@node2 ~]$ sqlplus / as sysdba

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

SQL> startup mount

[oracle@node2 ~]$ rman target /

RMAN> restore database;

RMAN> alter database open;

SQL> alter database recover managed standby database disconnect from session;

六、测试

1> 在备库上查询归档日志的序列号

SQL> select sequence# from v$archived_log;

2> 在主库上切换一次日志

SQL> alter system switch logfile;

3> 在备库上查询归档日志的序列号,看是否有增加

SQL> select sequence# from v$archived_log;

4> 在备库上查询归档日志是否被应用

SQL> select sequence#,applied from v$archived_log;

当然,也可以用具体案例进行测试,譬如在主库中新建一张表,对表进行增、删、改,然后切换日志,看备库能否应用。

Oracle Dataguard之物理standby的基本配置的更多相关文章

  1. Oracle Dataguard之Real-Time Apply

    Oracle Dataguard一共支持三种模式:最大可用模式(Maximum Availability),最大性能模式(Maximum Performance),最大保护模式(Maximum Pro ...

  2. 9. Oracle DataGuard的介绍

    一. Oracle DataGuard简介 Oracle DataGuard:简称DG.是由一个Primary Database(主库)和一个或者多个Standby Database(备库)组成.对O ...

  3. Oracle DataGuard 物理Standby 搭建(上)

    物理standby database 环境搭建 Arch asysnc Oracle Dataguard host IP Oracle_sid DB_unique_name FAL_server FA ...

  4. Oracle DataGuard 物理Standby 搭建(下)

    主备库切换 Switchover 一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUAR ...

  5. Oracle Data Guard 创建物理Standby数据库

    创建物理备库 机器名                    a1                    a2                    IP:                    192 ...

  6. 【DATAGUARD】物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误

    [DATAGUARD]物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各 ...

  7. 【DATAGUARD】物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技术爱好者,看完本文后,你 ...

  8. 【DATAGUARD】物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各 ...

  9. 【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技 ...

随机推荐

  1. babylonjs

    A Babylon.js Primer Table of contents Babylon.js WebGL Game Creation System! The Browser Useful Link ...

  2. iOS navigationcontroller pop 回到上一层视图 如何刷新

    1.从视图A中navigation controller push到视图B,当视图B navigationcontroller pop回到视图A时,并不会调用A的viewDidLoad,但是会调用vi ...

  3. Strong name signature not valid for this assembly Microsoft.mshtml.dll

    Strong name signature not valid for this assembly Microsoft.mshtml.dll  http://social.msdn.microsoft ...

  4. (转)Android开发出来的APP在手机的安装路径是?

    一.安装路径在哪? Android应用安装涉及到如下几个目录: system/app系统自带的应用程序,无法删除.data/app用户程序安装的目录,有删除权限.安装时把apk文件复制到此目录.dat ...

  5. java的值传递和引用传递

    昨天博主在对于值传递和引用传递这里栽了一个大坑啊,导致一下午时间都浪费在这里,我们先说下值传递和引用传递java官方解释: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对 ...

  6. [laravel] Laravel - composer install

    #composer installLoading composer repositories with package informationUpdating dependencies (includ ...

  7. entityframework使用oracle的几个小问题

    问题一:Operation is not valid due to the current state of the object 生成的edmx文件有问题,解决方法参考链接 问题二:InvalidO ...

  8. 来科普下游标(MSSQL)这东西。。。

    刚刚接到一个面试电话,对头的先生问我懂不懂触发器和存储过程,当时是觉得有些好笑,毕竟“视图.触发和存储”是咱数据库工程师的吉祥三宝,怎么可能不认识?只是稍后他还问了下游标这东西,仔细想想我是不常使用C ...

  9. git抽疯了。。。

    今天用git推送提交的时候,莫名其妙的要求输入密码,输就输吧,输入了还都验证不了,继续弹出输入框,难道我的密码记错了,于是我去更改了密码,但还是继续弹出密码输入框. 百思不得姐,于是把重新生成了pub ...

  10. Unity3D热更新全书-脚本(五) NGUI

    让我们实际的研究一下如何将NGUI和C#LightEvil结合起来. 这里使用NGUI2.7,因为他是一个开源的版本,NGUI最新的版本未经作者的许可,是不可以带入我们的开源项目使用的. 这个例子完成 ...