export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin

export ORACLE_SID=orcl

一 主库jchdg1配置,放在第一台机器上

1.启动归档模式并打开force logging

export ORACLE_SID=jchdg1

sqlplus / as sysdba

archive log list

shutdown immediate

startup mount

alter database archivelog;

alter database open;

archive log list

alter database force logging;

select force_logging from v$database;

2.添加standby logfile 用于接收来自主库的redo日志

select group# from v$log;

alter database add standby logfile group 4 ('/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog4a.log','/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog4b.log') size 100m;

alter database add standby logfile group 5 ('/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog5a.log','/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog5b.log') size 100m;

alter database add standby logfile group 6 ('/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog6a.log','/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog6b.log') size 100m;

alter database add standby logfile group 7 ('/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog7a.log','/u01/app/oracle/product/10.2.0/oradata/jchdg1/standbylog7b.log') size 100m;

select group#,status from v$standby_log;

3.配置网络

在tnsnames.ora文件中添加dg2连接串

DG2=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=dg2)(PORT=1521))

(CONNECT_DATA=

(SERVER=DEDICATED)

(SERVICE_NAME=jchdg2)

)

4.修改主库dg1参数文件

sqlplus / as sysdba

create pfile from spfile;

exit

在第一台机器上创建jchdg1库的归档目录

mkdir -p /home/oracle/arch/jchdg1

在第二台机器上创建jchdg2库的归档目录

mkdir -p /home/oracle/arch/jchdg2

调整主数据库pfile参数文件内容

(1)删除local_listener参数,确保jchdg2动态注册到1521端口上

*.local_listener='LISTENER2'

(2)保留其他参数的同时添加如下参数,添加主库角色参数

##parameter for Primary Database

db_name='jchdg1' 数据库名字,主库与备库必须一致,这个参数已经有了

db_unique_name=jchdg1 数据库实例名

log_archive_format=%t_%s_%r.arc 归档日志格式

log_archive_config='DG_CONFIG=(LEO1,LEO3)' 罗列一个DG中所以实例名

log_archive_dest_1='location=/home/oracle/arch/LEO1 valid_for=(all_logfiles,all_roles)

db_unique_name=LEO1' 本地LEO1归档日志目录和实例名

log_archive_dest_2='service=LEO3 lgwr sync valid_for=(online_logfiles,primary_role)

db_unique_name=LEO3' 备库 LGWR 同步

log_archive_dest_state_1=enable 是否启动归档->enable

log_archive_dest_state_2=enable 是否启动归档->enable

remote_login_passwordfile=exclusive 远程登录密码,要求DG中所有sys用户密码一致

##parameter for Standby Database

(3)添加备库角色参数

fal_server=LEO3 fetch_archive_log_server=抓取服务端,指向主库连接串

fal_client=LEO1 fetch_archive_log_client=抓取客户端,指向备库连接串

standby_file_management=auto 备库是否动态关联主库的动作

db_file_name_convert='LEO3','LEO1' 主备库数据文件转换目录

log_file_name_convert='LEO3','LEO1' 主备库日志文件转换目录

(4)通过pfile重建spfile

sqlplus / as sysdba

shutdown immediate

create spfile from pfile;

二 备库dg2配置,在第二台机器上操作

1.创建密码文件

注意密码文件需要保持与主库一致,我们采用复制主库密码文件到备库的方式,如果用重建的方式可能引起两边不一致报错

cd /u01/app/oracle/product/10.2.0/db_1/dbs

scp orapwjchdg1 dg2:/u01/app/oracle/product/10.2.0/db_1/dbs/

mv orapwjchdg1  orapwjchdg2

2.创建转储目录

mkdir -p /u01/app/oracle/product/10.2.0/db_1/admin/jchdg2/adump

mkdir -p /u01/app/oracle/product/10.2.0/db_1/admin/jchdg2/bdump

mkdir -p /u01/app/oracle/product/10.2.0/db_1/admin/jchdg2/cdump

mkdir -p /u01/app/oracle/product/10.2.0/db_1/admin/jchdg2/udump

3.冷备主库

(1)主库冷备tar包

cd $ORACLE_BASE/product/10.2.0/oradata

tar -czvf jchdg1.tar jchdg1

(2)拷贝jchdg1.tar 和 initjchdg1.ora文件到备库并重命名

scp jchdg1.tar dg2:$ORACLE_BASE/product/10.2.0/oradata

scp initjchdg1.ora dg2:/u01/app/oracle/product/10.2.0/db_1/dbs/

mv initjchdg1.ora initjchdg2.ora

(3)解开tar包还原jchdg1主库数据文件

tar -xzvf jchdg1.tar

mv jchdg1 jchdg2

(4)删除jchdg2中原主库控制文件

cd /u01/app/oracle/product/10.2.0/oradata/jchdg2

rm control01.ctl

rm control02.ctl

rm control03.ctl

4.生成备库的控制文件

jchdg1

sqlplus / as sysdba

startup mount

alter database create standby controlfile as '/home/oracle/control01.ctl'; 创建具有备库属性的控制文件

scp control01.ctl dg2:/u01/app/oracle/product/10.2.0/oradata/jchdg2/

cp control01.ctl /u01/app/oracle/product/10.2.0/oradata/jchdg2/control02.ctl

cp control01.ctl /u01/app/oracle/product/10.2.0/oradata/jchdg2/control03.ctl

5.准备备库的参数文件initjchdg2.ora

vim initjchdg2.ora

(1)修改控制文件内容

*.control_files='/u01/app/oracle/product/10.2.0/oradata/jchdg2/control01.ctl','/u01/app/oracle/product/10.2.0/oradata/jchdg2/control02.ctl','/u01/app/oracle/product/10.2.0/oradata/jchdg2/control03.ctl'

(2)需要修改jchdg1->jchdg2

DB_NAME='jchdg1'

DB_UNIQUE_NAME=jchdg2

LOG_ARCHIVE_CONFIG='DG_CONFIG=(jchdg1,jchdg2)'

LOG_ARCHIVE_DEST_1=

'LOCATION=/home/oracle/arch/jchdg2

VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

DB_UNIQUE_NAME=jchdg2'

LOG_ARCHIVE_DEST_2=

'SERVICE=LEO1 LGWR ASYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

DB_UNIQUE_NAME=jchdg1'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

FAL_SERVER=jchdg1

FAL_CLIENT=jchdg2

DB_FILE_NAME_CONVERT='jchdg1','jchdg2'

LOG_FILE_NAME_CONVERT='jchdg1','jchdg2'

STANDBY_FILE_MANAGEMENT=AUTO

6.启动备库

export ORACLE_SID=jchdg2

sqlplus / as sysdba

create spfile from pfile;

startup nomount

tail -20f alert_jchdg2.log

alter database mount;

startup mount

主库

alter database open;

可以看到, 已经在向备库传输日志:

注:备库只有在mount状态的时候可以应用日志,read only状态不能应用日志

应用日志调用2个MRP进程启动jchdg2库日志应用并后台运行

alter database recover managed standby database disconnect from session parallel 2;

或前台运行

alter database recover managed standby database parallel 2;

7.检查备库归档日志应用情况和主备库状态

select sequence#,applied from v$archived_log;

查看jchdg1库状态

select database_role,switchover_status from v$database;

查看jchdg2库状态

select database_role,switchover_status from v$database;

检查tnsnames.ora和监听状态,重启主库来重新探测备库传输日志

alter system switch logfile;

三 第一次切换

换前jchdg1库上创建swtich_tbs表空间 -> 切换 -> 检查表空间和对应的数据文件是否应用到了jchdg2库

创建表空间

create tablespace swtich_tbs datafile '/u01/app/oracle/product/10.2.0/oradata/jchdg1/swtich_tbs.dbf' size 10m;

这时jchdg2的tablespace:

切换日志并完成归档

alter system archive log current;

jchdg1的alert日志:

jchdg2的alert日志:

时刻打开alert日志观察jchdg2库的恢复状况

cd /u01/app/oracle/product/10.2.0/db_1/admin/jchdg2/bdump

tail -20f alert_jchdg2.log

select * from v$tablespace;

查看jchdg2的tablespace:发现多了jchdg1库新建的switch_tbs表空间:

查看jchdg1库状态

select database_role,switchover_status from v$database;

查看jchdg2库状态

select database_role,switchover_status from v$database;

主库切换成备库,并终止存活的会话..必须先主库切换到  备库,再备库切换到主库。

alter database commit to switchover to physical standby with session shutdown;

主库日志:

select status,instance_name from v$instance; 主库处于异常关闭状态

shutdown immediate

startup mount;    --要切换成备库,所以是mount状态

select database_role,switchover_status from v$database;

alter database recover managed standby database disconnect from session parallel 2;

主库切换成了备库:

备库切换成主库,并终止存活的会话

【alter database recover managed standby database cancel;】

select database_role,switchover_status from v$database;

alter database commit to switchover to primary with session shutdown;

alter database open;

select database_role,switchover_status from v$database;

select sequence#,applied from v$archived_log;

四 第二次切换

切换前jchdg2库上创建一张表 -> 切换 -> 检查表和记录是否应用到jchdg1库上

create table jchdg2 as select * from dba_objects;

select count(*) from jchdg2;

日志切换并完成归档

alter system archive log current;

备库jchdg1的alert中记录着恢复的过程

cd /u01/app/oracle/product/10.2.0/db_1/admin/jchdg1/bdump

tail -20f alert_jchdg1.log

jchdg2的日志:

jchdg1的日志:

jchdg1上检查jchdg2表,如果可以查到说明我们传递成功

select count(*) from jchdg2;

jchdg2库切换成备库状态

select database_role,switchover_status from v$database;

alter database commit to switchover to physical standby with session shutdown;

shutdown immediate

startup mount;

alter database recover managed standby database disconnect from session parallel 2;

select database_role,switchover_status from v$database;

jchdg1库切换成主库状态

【alter database recover managed standby database cancel;】

select database_role,switchover_status from v$database;

alter database commit to switchover to primary with session shutdown;

alter database open;

select database_role,switchover_status from v$database;

jchdg2备库还可以取消日志应用,启动到read only状态(只可读不可写,可以对外提供报表服务)

alter database recover managed standby database cancel;

alter database open read only;

select open_mode from v$database;

select database_role,switchover_status from v$database;

小结:到此我们的DG实验讲解完成,大家在学习的过程中重点理解DG应用场景和实现原理以及优缺点,在完成实验之后你应该可以在遇到故障时知道如何处理。

第10课_dg的更多相关文章

  1. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

  2. OpenCL 第10课:kernel,work_item和workgroup

    转载自:http://www.cmnsoft.com/wordpress/?p=1429 前几节我们一起学习了几个用OPENCL完成任务的简单例子,从这节起我们将更详细的对OPENCL进行一些“理论” ...

  3. 第10课 C++中的新成员

    1. 动态内存分配 (1)C++通过new关键字进行动态内存申请,是以类型为单位来申请空间大小的 (2)delete关键字用于内存释放 ▲注意释放数组时要加[],否则只释放这个数组中的第1个元素. [ ...

  4. bayaim——听课笔记_01.Docker基础应用 10课.txt

    ===========2019年8月5日18:39:06====================10.20.100.21rootbayaim ==========01-Docker介绍======== ...

  5. 【Deep Learning Nanodegree Foundation笔记】第 10 课:Sentiment Analysis with Andrew Trask

    In this lesson, Andrew Trask, the author of Grokking Deep Learning, will walk you through using neur ...

  6. 缓冲区溢出分析第10课:Winamp缓冲区溢出研究

    前言 Winamp是一款非常经典的音乐播放软件,它于上世纪九十年代后期问世.与现在音乐播放软件行业百家争鸣的情况不同,当时可以说Winamp就是听音乐的唯一选择了,相信那个时代的电脑玩家是深有体会的. ...

  7. Android 学习第10课,Android的布局

    Android的布局 线性布局

  8. 第10课 std::bind和std::function(1)_可调用对象

    1. 几种可调用对象(Callable Objects) (1)普通函数指针或类成员的函数指针 (2)具有operator()成员函数的类对象(仿函数).如c++11中的std::function类模 ...

  9. noip第10课资料

随机推荐

  1. SQL中如何使用UPDATE语句进行联表更新(转)

    在本例中: 我们要用表member中的name,age字段数据去更新user中的同字段名的数据,条件是当user 中的id字段值与member中的id字段值相等时进行更新. SQL Server语法: ...

  2. 模块化利器:RequireJS常用知识

    1. 模块化 目前常见的模块化开发方式,全局空间方式是最基本的一种,另外常见的还有遵循AMD规范的开发方式,遵循CMD规范的开发方式,和ECMAScript 6的开发方式.需要说明的是,CMD和ES6 ...

  3. .net TxetBox控件设置ReadOnly=True后台取值问题

    1.为TxetBox添加onfocus=this.blur()进行模拟 2.通过 Request.From["TextBox"].Trim()取值; 3.后台CS文件设置TextB ...

  4. 基本文件的I/O

    System.IO命名空间包含允许在数据流和文件上进行同步,异步及写入的类型.文件是一些永久存储及具有特定顺序的字节组成的一个有序的,具有名称的集合.与文件有关的概念是目录路径和磁盘存储等.流提供了一 ...

  5. 前端开发必备的Sublime 3插件

    Sublime的大名已经无需我介绍了,首先先介绍如何启用插件安装功能: 打开Sublime 3,然后按 ctrl+` 或者在View → Show Console 在打开的窗口里黏贴这个网站上的代码( ...

  6. Sublime 学习记录(一) Sublime 的快捷键

    Ctrl + Shift + P : 打开命令面板 Ctrl + P : 搜索项目中的文件 Ctrl + W : 关闭当前打开的文件 Ctrl + G : 跳转到第几行 Ctrl + Shift + ...

  7. java中驼峰与下横线格式字符串互转算法

    public static final char UNDERLINE = '_'; /** * 驼峰格式字符串转换为下划线格式字符串 * * @param param * @return */ pub ...

  8. C# 数组的应用

    //数组的应用: //(一).冒泡排序. //1.冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数. //2.趟数=n-1:次数=n-趟数. //3.里层循环使用if比较相临的两个数的大小 ...

  9. discuz二次开发笔记(二)------跳转函数运用

    前几天在增加修改功能时,突然用到一个提示函数,有点不理解,看了他的由来后果断做下笔记,感觉这在以后的开发中肯定还是要用的上的.有些地方不是很理解,在以后慢慢纠正.查补. Htm页面中用的js跳转: $ ...

  10. 开发移动端web应用, 使用手机自带键盘的搜索按钮

    很多时候在移动端的web页面中, 需要使用搜索功能, 然而页面中并没有太多的空间来放置一个像pc端上那样的搜索按钮, 这时候就需要借用手机输入法自带的搜索按钮来实现点击搜索 虽然不是什么大的功能, 但 ...