环境描述:
主库:
 IP: 10.8.3.191
 主机名:primary
ORACLE_SID=afc
ORACLE_BASE=/u01/oracle
ORACLE_HOME=/u01/oracle/10g
备库:
 IP: 10.8.3.192
 主机名:standby
ORACLE_SID=afc
ORACLE_BASE=/u01/oracle
ORACLE_HOME=/u01/oracle/10g
 
准备工作:分别在主库和备库都安装上oracle软件,不装数据库。
安装配置步骤:
 1、运行dbca创建数据库
 2、登陆到数据库上
  [oracle@primary ~]$ 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、检查数据库是否处于归档状态
  SQL> archive log list;
  Database log mode              Archive Mode
  Automatic archival             Enabled
  Archive destination            /u01/app/oracle/arch_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;

6、创建备库的控制文件(创建后数据库不能做结构性的改变)
  SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/app/oracle/oradata/dgdemo/stdby.ctl';

7、创建pfile以便于修改配置参数
  SQL> CREATE PFILE FROM SPFILE;

8、关掉数据库开始编辑参数
  SQL> shutdown immediate;

9、$ vi /u01/oracle/10g/dbs/initafc.ora (重点处)
  添加下面内容
DB_UNIQUE_NAME=primary
  LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
  LOG_ARCHIVE_DEST_1='location=/u01/oracle/flash_recovery_area
  valid_for=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=primary'
  LOG_ARCHIVE_DEST_2=
   'SERVICE=standby LGWR ASYNC
    VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
    DB_UNIQUE_NAME=standby'
  LOG_ARCHIVE_DEST_STATE_1=ENABLE
  LOG_ARCHIVE_DEST_STATE_2=ENABLE
  LOG_ARCHIVE_MAX_PROCESSES=30
  FAL_SERVER=standby
  FAL_CLIENT=primary
  DB_FILE_NAME_CONVERT='standby','primary'
  STANDBY_FILE_MANAGEMENT=AUTO

10、进入sqlplus创建spfile(NOMOUNT状态)
  SQL> CREATE SPFILE from PFILE;

11、创建tnsnames.ora和listener.ora,可以手动创建也可以用netca创建,无论哪种方法都必须保证能互相畅通。
  $ cd /u01/oracle/10g/network/admin/
  $ vi tnsnames.ora
  输入下面内容
 primary =
    (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.3.191)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = afc)
   )
    )
  standby =
    (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.3.192)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = afc)
   )
    )

$ vi listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/oracle/10g)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
 
  12、复制备份文件到备库
  $ cd /u01/app/oracle/
  $ scp -r flash_recovery_area/ admin/ oradata/ 10.8.3.192:/u01/oracle/
  $ cd /u01/oracle/10g/network/admin/
  $ scp listener.ora  tnsnames.ora 10.8.3.192:/u01/oracle/10g/network/admin/
  $ cd /u01/oracle/10g/dbs/
  $ scp orapwdafc 10.8.3.192:/u01/oracle/10g/dbs/

13、打开备库做以下操作
  $ cd /u01/oracle/oradata/afc
  $ rm -rf control0*
  $ cp stdby.ctl control01.ctl
  $ cp stdby.ctl control02.ctl
  $ cp stdby.ctl control03.ctl

$ vi initafc.ora 修改备的参数文件如下(重点处)
DB_UNIQUE_NAME=standby
  LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)'
  LOG_ARCHIVE_DEST_1='location=/u01/oracle/flash_recovery_area
  valid_for=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=standby'
  LOG_ARCHIVE_DEST_2=
   'SERVICE=primary LGWR ASYNC
    VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
    DB_UNIQUE_NAME=primary'
  LOG_ARCHIVE_DEST_STATE_1=ENABLE
  LOG_ARCHIVE_DEST_STATE_2=ENABLE
  LOG_ARCHIVE_MAX_PROCESSES=30
  FAL_SERVER=primary
  FAL_CLIENT=standby
  DB_FILE_NAME_CONVERT='standby','primary'
  STANDBY_FILE_MANAGEMENT=AUTO
  $ cd /u01/app/oracle/10.2.0/db_1/network/admin/
  $ vi listener.ora
  将primary修改为standby

13、在备库中进入sqlplus
  $ sqlplus /nolog
  SQL> conn / as sysdba;
  SQL> CREATE SPFILE from PFILE='/u01/app/oracle/oradata/dgdemo/pfile';

14、测试oracle net是否畅通
  首先启动监听服务(分别在主机和备机上进行)
  $ lsnrctl stop
  $ lsnrctl start
  分别在主机和备机上运行下面命令来测试
  $ tnsping primary
  $ tnsping standby

15、启动主库(正常启动)
  $ sqlplus /nolog
  SQL> conn / as sysdba;
  SQL> startup

16、启动备库到mount状态,并打开redo Apply
  $ sqlplus /nolog
  SQL> conn / as sysdba;
  SQL> startup mount
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

17、在主库上做一次日志切换
  SQL> ALTER SYSTEM SWITCH LOGFILE;

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

如果出现上面情况则说明配置成功。

18、在主库建表然后在备库查询进行验证
  SQL> create table haha(id integer,name char(10))
  SQL> insert into haha values(1,'xiao');
  SQL> commit;
  SQL> select * from haha;
    ID NAME
  ---------- ----------
     1 xiao

19、在主库上做个日志归档
  SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

20、在备库上取消掉redo apply
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
  SQL> ALTER DATABASE OPEN;
  SQL> select * from haha;
    ID NAME
  ---------- ----------
     1 xiao
 测试成功

24、再次切换为备库的redo apply状态
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
 主库备库互相切换

25、在主库上做如下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

26、在备库上做switchover
  SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
  SQL> shutdown immediate;
  SQL> startup

27、分别在新的主库和备库上查看状态,验证主库备库是否切换正常。
  SQL> select name,database_role from v$database;
 
 再次创建表在切换后的主库备库上验证

28、在新的主库上创建列 
 
  SQL> insert into haha values(2,'yang');
  SQL> commit;
  SQL> select * from haha;

ID NAME
---------- ----------
         1 xiao
         2 yang
  SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

29、在新的备库上做下面操作以取消redo apply
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
  SQL> ALTER DATABASE OPEN;
  SQL> select * from haha;

ID NAME
---------- ----------
         1 xiao
         2 yang

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

最后将数据库切换出去主备状态,如果相关同步都正常说明配置没问题可以用于生产了;
 
 31、主备切换时候遇到如下错误提示(主数据切换为备数据库后再切换回主系统时出现错误),解决
 如下:
 SQL> alter database commit to switchover to primary;
 alter database commit to switchover to primary
 *
 ERROR at line 1:
 ORA-16139: media recovery required

mount模式下执行alter database recover managed standby database finish
 SQL> alter database commit to switchover to primary;
 Database altered.

Linux下Oracle 10g DataGuard配置(主从同步及切换)的更多相关文章

  1. oracle linux下oracle 10g启动EM、isqlplus及相关命令语法

    转载:http://hancang2000.blog.sohu.com/139239421.html ORACLE_HOME/bin/emctl start dbconsole $ORACLE_HOM ...

  2. Linux下的redis的持久化,主从同步及哨兵

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失, 为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久 ...

  3. linux下oracle 10g的sqlplus无法使用

    问题如标题所示. 解决办法, 1,root用户登录,建立软连接 cd / cd /usr/bin ln -s /home/oracle/product/10.2.0/db_1/bin/sqlplus ...

  4. mysql 在Linux 配置 主从同步

    一.主服务器相关配置 1.创建同步账户并指定服务器地址 [root@localhost ~]mysql -uroot -pmysql>use mysqlmysql>grant replic ...

  5. linux下nginx结合keepalived实现主从切换的配置

    linux下nginx结合keepalived实现主从切换的配置   解决方法: 实现一个主nginx宕机,请求转到另一个nginx中. 1.确保两台nginx已启动,假如端口分别是192.168.0 ...

  6. percona-mysql5.7.24使用xtrabackup工具配置主从同步

    主从配置详细过程: 环境准备: 配置好服务器,主从服务器都安装并启动mysql数据库 # 添加读写账号和只读账号,应用配置中,写主库用读写账号,统计从库数据yoga只读账号 grant select, ...

  7. Linux下Rsync+sersync实现数据实时同步

    inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...

  8. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  9. 解决Linux下Oracle中文乱码的一些心得体会 ,转自

    以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找 ...

随机推荐

  1. plan-6.17周末

    喷完了自己,浑身舒爽. 搞个计划,最近要学东西,以提交博客为准,提交了才认为ok. 1.python的新书<<Fluent python>>不错,老的python资料已经满足不 ...

  2. HDU 6026 Deleting Edges

    最短路. 先建一个只包含最短路的有向无环图,每一个点选择任意一条入边即可生成一个树形图,那么树的种类就等于每个点的入度乘积. #include <bits/stdc++.h> using ...

  3. 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]

    洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 299  Solved: 207 Description 加里敦星球的人 ...

  4. bWAPP练习--injection篇SQL Injection (GET/Search)

    SQL注入: SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到 ...

  5. oracle 查询数据库中 有数据的表

    select table_name from ALL_TABLES where TABLESPACE_NAME='xxx' and NUM_ROWS > 0 order by  table_na ...

  6. 谈HTTPS中间人攻击与证书校验(一)

    一.前言 随着安全的普及,https通信应用越发广泛,但是由于对https不熟悉导致开发人员频繁错误的使用https,例如最常见的是未校验https证书从而导致“中间人攻击”,并且由于修复方案也一直是 ...

  7. bzoj 1269 bzoj 1507 Splay处理文本信息

    bzoj 1269 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1269 大致思路: 用splay维护整个文本信息,splay树的中序遍历即为 ...

  8. redis实现简单延时队列(转)

    继之前用rabbitMQ实现延时队列,Redis由于其自身的Zset数据结构,也同样可以实现延时的操作 Zset本质就是Set结构上加了个排序的功能,除了添加数据value之外,还提供另一属性scor ...

  9. 模型的性能评估(二) 用sklearn进行模型评估

    在sklearn当中,可以在三个地方进行模型的评估 1:各个模型的均有提供的score方法来进行评估. 这种方法对于每一种学习器来说都是根据学习器本身的特点定制的,不可改变,这种方法比较简单.这种方法 ...

  10. TCP长连接与短链接

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...