Linux下Oracle 10g DataGuard配置(主从同步及切换)
环境描述:
主库:
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配置(主从同步及切换)的更多相关文章
- oracle linux下oracle 10g启动EM、isqlplus及相关命令语法
转载:http://hancang2000.blog.sohu.com/139239421.html ORACLE_HOME/bin/emctl start dbconsole $ORACLE_HOM ...
- Linux下的redis的持久化,主从同步及哨兵
redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失, 为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久 ...
- linux下oracle 10g的sqlplus无法使用
问题如标题所示. 解决办法, 1,root用户登录,建立软连接 cd / cd /usr/bin ln -s /home/oracle/product/10.2.0/db_1/bin/sqlplus ...
- mysql 在Linux 配置 主从同步
一.主服务器相关配置 1.创建同步账户并指定服务器地址 [root@localhost ~]mysql -uroot -pmysql>use mysqlmysql>grant replic ...
- linux下nginx结合keepalived实现主从切换的配置
linux下nginx结合keepalived实现主从切换的配置 解决方法: 实现一个主nginx宕机,请求转到另一个nginx中. 1.确保两台nginx已启动,假如端口分别是192.168.0 ...
- percona-mysql5.7.24使用xtrabackup工具配置主从同步
主从配置详细过程: 环境准备: 配置好服务器,主从服务器都安装并启动mysql数据库 # 添加读写账号和只读账号,应用配置中,写主库用读写账号,统计从库数据yoga只读账号 grant select, ...
- Linux下Rsync+sersync实现数据实时同步
inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...
- Linux下Kafka单机安装配置方法(图文)
Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...
- 解决Linux下Oracle中文乱码的一些心得体会 ,转自
以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找 ...
随机推荐
- 面试题13:在O(1)时间删除链表节点
注意分情况讨论: 1. 要删除的不是尾节点 2. 链表只有一个节点 3. 链表中有多个节点,删除尾节点 void DeleteNode(ListNode** pListHead, ListNode* ...
- 【C#日期系列(三)】--C#获取某个月的第一个星期几的年月日
需要获取某个月的第一个星期几的年月日 简单写了一个算法 #region 计算每月第一个星期1-7是各是几号 /// <summary> /// 计算每月第一个星期1-7是各是几号 /// ...
- rsync: chroot No such file or directory (2)
rsync: ) 查了N多资料,均未解决,最终发现是因为report后面多了个空格...
- c# 递归异步获取本地驱动器下所有文件
//获取所有驱动器 string[] drives = Environment.GetLogicalDrives(); foreach (string driver in drives) { Cons ...
- ie8浏览器 图片本身问题导致 无法显示图片--- 诡异现象的排查分享
引子: 前段时间 做新版2.0 首页 的时候, 总感觉 新版首页 线上 精彩回顾下的 2张图片颜色怪怪的,当时以为是图片压缩太厉害导致的,由于实在太忙就没太在意!以下 是来自线上 截图: 红色方 ...
- 洛谷P3950 部落冲突 [LCT]
题目传送门 部落冲突 格式难调,体面就不放了. 分析: julao们应该都看得出来就是个$LCT$板子,战争就$cut$,结束就$link$,询问就$find$.没了... 太久没打$LCT$,然后发 ...
- Python模块-xml
XML的例子 import xml.etree.ElementTree as ET tree = ET.parse("test.xml") root = tree.getroot( ...
- JavaScript三种数据类型之间的互转
一:number<===>string 数字类型和字符串类型之间的互相转换 number===>string 数字转字符串有三种方式: 1.在数字后面 +“ ”; 2.利用字符串的 ...
- go chapter 11 初始化 map 数组
// 初始化 map m1 = make(map[string]string) // 初始化 数组 var array3 = []int{9, 10, 11, 12} var a [4]int a[0 ...
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 99 Solved: 65 Description JYY 带 ...