linux下怎么将oracle配置成双机热备

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下怎么将oracle配置成双机热备相关的知识,希望对你有一定的参考价值。


【DataGuard高可用性】

DataGuard确保企业数据的高可用性,数据保护以及灾难恢复。在主数据库故障无法修复时启动DataGuard的备份库,可以像主库一样继续对外提供服务而不影响业务的持续运行。


主备数据库之间通过日志传输实现数据库数据同步。


日志传输过程

1、在主系统中利用LNS进程(日志传输进程)将日志传输到备用系统

2、备用系统利用RFS(日志接收进程)接收主库传输过来的日志并利用MRP(日志恢复进程)同步数据

3、DataGuard环境中必须保证3个进程正常工作,否则此DataGuard环境将不能满足灾备需要。


【DG可以解决的问题】

1、在主库停机维护时,备份库顶上,使业务应用影响最小

   (1)主库安装OS补丁或Oracle补丁

   (2)主库进行数据整理

2、一个新的数据迁移项目,将数据迁移同型号更高端IBM服务器与存储中,主库数据2T,并且此迁移操作必须停机时间控制在30分钟以内(此次时间远远适于迁移数据库文件所需时间),怎么办?

    (1)把备份库顶上去


3、由于主库(仓库)数据量非常巨大(50T),所以没有常规备份,但此系统存在DataGuard灾备系统,如果主库某数据文件由于某种原因导致介质故障,你将如何对其进行恢复。


4、异地归档日志

------------------------------------------------------------------------------

主库:18.150  备库:18.160


1、主库和备库:开启归档模式

archive log list;-----------查看归档启动否


shutdown immediate;---------开启归档前要正常关库


startup mount;-------------启动Mount状态


alter database archivelog;-------开启归档模式


alter database open;--------开启数据库



2、确认主库强制写日志

select force_logging from v$database;

(所有sql语句nologging操作时 也会强制写日志)


SQL> alter database force logging;


3、修改主备数据库的参数文件

【主】

SQL>create pfile from spfile;


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


vi initTEST.ora

  DB_UNIQUE_NAME=TEST

  LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB150,DB160)'

  LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST'  

  LOG_ARCHIVE_DEST_2='SERVICE=DB160 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'

  FAL_SERVER=DB150           

  FAL_CLIENT=DB160

  STANDBY_FILE_MANAGEMENT=AUTO

【备】

SQL>create pfile from spfile;


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


vi initTEST.ora

  DB_UNIQUE_NAME=TEST

  LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB150,DB160)'

  LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=TEST'  

  LOG_ARCHIVE_DEST_2='SERVICE=DB150 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TEST'

  FAL_SERVER=DB160           

  FAL_CLIENT=DB150

  STANDBY_FILE_MANAGEMENT=AUTO


4、主库和备库

都配置“监听”、“传输文件”,并开启监听


5、主库和备库

都创建“归档日志”目录:mkdir /home/oracle/archive


6、主库和备库

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

rm -rf spfileTEST.ora

sqlplus / as sysdba

SQL> startup force;

SQL>create spfile from pfile;


7、备库

SQL> shutdown immediate

[oracle@sq18 admin]$ sqlplus sys/lipengfei as sysdba

(连接成功)

SQL> startup nomount force;


8、主库

SQL> show parameter ARCHIVE(查看到刚才配置的值生效了)


9、备库

(报错没有相应目录)

[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/adump

[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/bdump

[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/cdump

[oracle@sq18 admin]$ mkdir -p /oracle/app/flash_recovery_area

[oracle@sq18 admin]$ mkdir -p /oracle/app/admin/TEST/udum


保证数据库两边的密码文件中的密码一致(主备数据库sys用户密码必须相同,如果备库中没有orapwTEST,从主库中拷贝到来)


10、主库

mkdir /home/oracle/db_bak/

rman target /

RMAN> backup full database format='/home/oracle/db_bak/%U' include current controlfile for standby;

(别退出RMAN,第12步用)

11、备库

mkdir /home/oracle/db_bak/


12、主库(把全库备份的文件拷贝到备库)

cd /home/oracle/db_bak/

scp 备份文件 oracle@192.168.18.160:/home/oracle/db_bak/

RMAN>connect auxiliary sys/lipengfei@DB160

RMAN> duplicate target database for standby nofilenamecheck;----异机(备库)恢复,保证主备库的数据和状态一样


13、备库

cd /oracle/app/oradata/TEST

ls -------->查看有没有文件

sqlplus / as sysdba

SQL>select open_mode from v$database;----------mount状态


14、主库

SQL> select process from v$managed_standby;

(没有灾备的进程)

SQL> alter system switch logfile;

SQL> select process from v$managed_standby;


PROCESS

---------

ARCH

ARCH

LNS

已经有了进程,lns传输进程)


15、备库

SQL> select process from v$managed_standby;


PROCESS

---------

ARCH

ARCH

RFS

RFS

(已经有了进程,rfs接收进程)


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


SQL>  select process from v$managed_standby;


PROCESS

---------

ARCH

ARCH

RFS

RFS

MRP0


16、主库

SQL>create table haha as select * from dba_objects;

SQL>insert into haha select * from haha;

SQL>alter system switch logfile;


17、备库

SQL> alter database recover managed standby database cancel;

(备库上,只有把恢复日志进程MRP0取消,才可以打开数据库)

SQL> alter database open;

SQL> select count(*) from haha



【注意】

(1)备用数据库在日志恢复过程中(MRP进程存在期间)数据库处于MOUNTED状态,此时备用数据库无法打开供读取使用

(2)打开备用数据库

     停止备用库的日志恢复进程MRP

     alter database recover managed standby database cancel;

     open备用数据库,备用数据库默认打开为只读方式

     alter database open;

(3)重新启动备用数据库的MRP进程,数据库自动从OPEN状态转换到MOUNT 状态

     alter database recover managed standby database disconnect from session;

(4)mrp进程停止期间,只要RFS进程存在,那么不影响日志的接收


兄弟,以上就是关于oracle DG构架的实验材料,希望可以帮到你!

参考技术A 如果你是Redhat Linux ,可以使用Redhat Cluster Server, 简称 RHCS, 在安装的 ISO 中有, 推荐你使用 Redhat Enterprise Linux 6 系列的版本。

有个建议:
既然你有支持双机热备的硬件存储和2台服务器,为什么不弄成 RAC呢, RAC的数据安全性、稳定性,以及硬件资源的充分利用,都双比双机热备好。
参考技术B 如果指的是rac,clusterware或者grid里面自带详细操作步骤的,或者付费找oracle的来干啊哈哈 参考技术C 1. 最简单的办法:采购一套商业热备软件(Rose双机/赛门等)
2. 操作系统自带的集群模块:比较复杂,Linux平台的下目前这个模块还不是太成熟和完成
3. 数据库自带冗余组件:缺点是只管数据库本身状态,其余硬、软件、网络等故障时不作为。
从配置调试和后期运维管理来看,推荐使用商业软件实现,毕竟也不贵。
谢谢!本回答被提问者和网友采纳
参考技术D 做oracle 的RAC可以实现

Oracle之双机热备部署+切换故障问题解决

  最近实施的一个项目中使用了某国产双机热备产品,但是在数据库做双机热备时出现了一些问题,没办法。不得不研究一番了!经过两天的研究终于问题得以解决。将问题处理步骤记录下来以备后用,也希望能帮助到需要的人。
一、首先介绍下我们的环境:两台服务器+一个存储+两个双机热备软件
二、双机热备工作流程:在两台服务器上分别安装一个双机热备软件,并且两台服务器都挂载了存储,双机热备软件一直在监测两台服务器上配置的服务项是否正常,当监测到某台服务器上双机软件中配置的服务启动不了或者出现故障,双机软件自动切换另一台服务器上并启动双机软件配置的所有服务。
三、当然本片文章是以数据库的双机热备为主,我就将oracle数据库的双机搭建过程和问题处理做一总结
        第一步:挂载存储至两台服务器上(例如两台服务器的挂载盘符为E盘);
        第二步:在服务器A上安装oracle:将oracle安装文件安装在D盘下,数据文件安装在存储E盘上,安装完成后并将Oracle服务设置为手动;
        第三步:关掉服务器A并进入服务器B:将服务器A安装在存储E盘的oracle的数据文件更改其他名称;
        第四步:按照第二步的步骤在服务器B上安装oracle(需要注意的是B和A服务器安装Oracle的安装文件和数据文件路径必须完全一样);
        第五步:在双机热备软件上配置oracle服务,并配置一个虚拟IP供外部访问,到时候应用软件只需连接该虚拟IP和端口就可以访问数据库了;
 以上是oracle双机的安装步骤,那样只是安装完成但是实际上是有隐患的,我这边就真正出现了,
四、问题现象:只要双机热备软件切换数据库那么整个数据库就宕了!无法启动;
五、问题原因:因为最初一个服务器A上Oracle正常运行的时候,Oracle控制文件已经记录下了该数据库运行的所有状态,当oracle双机切换到服务器B的时候,oracle监测到控制文件保存的状态和存储上的数据文件真实状态一不一致,那么自然数据库就不会切换到B上了。
六、解决方法:自定义初始化文件,并修改自定义的初始文件的配置内容,使得控制文件都加载的是存储上的控制文件用以保持两台服务器的控制文件和数据文件状态一致,并使两台服务器的数据库启动时都加载自定义的初始化文件,具体方法如下:
      1、使用pl/sql dev 执行CREATE PFILE=‘C:\INIT.ORA‘ FROM SPFILE;语句,并且修改*.control_files参数到E盘下的控制文件,将生成的INIT.ORA复制到D:\app\mypfile\;

orcl.__db_cache_size=1946157056
orcl.__java_pool_size=67108864
orcl.__large_pool_size=16777216
orcl.__oracle_base=\d:\\app\\Administrator\#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=1811939328
orcl.__sga_target=2717908992
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=654311424
orcl.__streams_pool_size=0
*.audit_file_dest=\d:\\app\\Administrator\\admin\\orcl\\adump\
*.audit_trail=\db\
*.compatible=\11.2.0.0.0\
*.control_files=\e:\\app\\Administrator\\oradata\\orcl\\control01.ctl\,\e:\\app\\Administrator\\oradata\\orcl\\control02.ctl\
*.db_block_size=8192
*.db_domain=\\
*.db_name=\orcl\
*.db_recovery_file_dest=\d:\\app\\Administrator\\flash_recovery_area\
*.db_recovery_file_dest_size=4102029312
*.diagnostic_dest=\d:\\app\\Administrator\
*.dispatchers=\(PROTOCOL=TCP) (SERVICE=orclXDB)\
*.memory_target=4518313984
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=\EXCLUSIVE\
*.undo_tablespace=\UNDOTBS1\

2、编写sql脚本test.sql并将脚本放置到D:\app\mypfile\,内容:

connect / as sysdba
shutdown immediate
startup pfile=\D:\\app\\mypfile\\init.ora\;
exit;

3、编写批处理脚本test.bat,内容:

sqlplus /nolog @D:\\app\\mypfile\\test.sql

4、这时候在双机热备软件中在oracle启动前添加test.bat,这样问题解决了;














以上是关于linux下怎么将oracle配置成双机热备的主要内容,如果未能解决你的问题,请参考以下文章

Linux Keepalived双机热备

Linux服务器双机热备详细过程

哪位能介绍下oracle的RAC、集群、双机热备、Dataguard这些东西?

Linux系统下使用MySql双机热备功能

Linux系统下使用MySql双机热备功能

Oracle之双机热备部署+切换故障问题解决