暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

dataguard迁移:从windows到linux

原创 徐sir 2025-05-08
411

客户计划购买一套新的服务器+存储替换原有的数据库服务器:

原服务器是一台老的HP服务器+HP阵列单机

新购的H3C服务器+H3C 3PAR存储

原服务器是windows,新的环境客户想用linux,数据库版本不能变(客户特意要求的。。),停机时间不能太久。

这种情况就不能使用rman备份(windows要用rman恢复到linux,只能在mount模式备份,然后恢复到linux,不能Recover归档)恢复或者冷拷贝文件了。

可以进行跨windows-linux之间做DATAGUARD然后做迁移(根据MOS 文章1602437.1dg异构支持可以看出支持)按要求是需要打补丁13104881,但是我实际测试了,不打也能成功。。。

下面大概说一下操作步骤

1、新旧数据库环境

原数据库服务器操作系统:windows 2008r2sp1

原数据库服务器数据库版本:oracle database 企业版 11.2.0.1

原数据库文件路径:

D:\APP\ADMINISTRATOR\ORADATA\ORCL\

E:\RM\SJ\

E:\RM\SJ\GCSJ\

F:\ORCLDB\

新数据库服务器操作系统:centos7.9

新数据库服务器数据库版本:oracle database 企业版 11.2.0.1

新数据库文件路径:

/oradata/orcl_datafile1/

/oradata/orcl_datafile2/

/oradata/orcl_datafile3/

/oradata/orcl_datafile4/

2、准备阶段

以下在windows执行:

查看数据库的模式:

select LOG_MODE,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,GUARD_STATUS,FORCE_LOGGING from v$database;

开启logging在业务不忙时

SQL> alter database force logging;

查看联机日志

col member format a50;
select a.thread#,a.group#,a.bytes/1024/1024,b.member from v$log a,v$logfile b where a.group#=b.group#;

主库增加standby redo

alter database add standby logfile  group 11 ('F:\ORCLDB\REDO101.LOG') size 2500m;
alter database add standby logfile  group 12 ('F:\ORCLDB\REDO102.LOG') size 2500m;
alter database add standby logfile  group 13 ('F:\ORCLDB\REDO103.LOG') size 2500m;
alter database add standby logfile  group 14 ('F:\ORCLDB\REDO104.LOG') size 2500m;
alter database add standby logfile  group 15 ('F:\ORCLDB\REDO105.LOG') size 2500m;
alter database add standby logfile  group 16 ('F:\ORCLDB\REDO106.LOG') size 2500m;
alter database add standby logfile  group 17 ('F:\ORCLDB\REDO107.LOG') size 2500m;

检查增加情况

select group#,type,member from v$logfile order by 2;

修改主库参数

alter system set log_archive_config='dg_config=(orcl,orcldg)';
alter system set log_archive_dest_1='location=F:\orcldb\ORCL\ARCHIVELOG valid_for=(all_logfiles,all_roles) db_unique_name=orcl';
alter system set log_archive_dest_2='service=orcldg  async noaffirm valid_for=(online_logfiles,primary_role) db_unique_name=orcldg' scope=both;
alter system set standby_file_management=auto scope=both;
alter system set fal_client='orcl' scope=both;
alter system set fal_server='orcldg' scope=both;
alter system set log_archive_max_processes=10 scope=both;

修改主库TNSnames,增加如下

ORCLDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

以下在linux执行:

创linux侧库参数文件

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.control_files='/oradata/orcl_controlfile/control01.ctl','/oradata/orcl_controlfile/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert=('D:\APP\ADMINISTRATOR\ORADATA\ORCL\','/oradata/orcl_datafile1/','E:\RM\SJ\','/oradata/orcl_datafile2/','E:\RM\SJ\GCSJ\','/oradata/orcl_datafile3/','F:\ORCLDB\','/oradata/orcl_datafile4/')
*.log_file_name_convert=('F:\ORCLDB\','/oradata/orcl_logfile/')
*.db_name='orcl'
*.db_recovery_file_dest_size=500G
*.db_recovery_file_dest='/oradata/fast_recovery_area'
*.diagnostic_dest='/u01/app/oracle'
*.fal_client='orcldg'
*.fal_server='orcl'
*.log_archive_config='DG_CONFIG=(orcl,orcldg)'
*.log_archive_dest_1='location=/archivelog/orcl_archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcldg'
*.log_archive_dest_2='service=orcl  ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=orcl'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.processes=2000
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
*.db_unique_name='orcldg'
*.service_names='orcl'
*.undo_tablespace='UNDOTBS1'
*.memory_target=90g
*.db_files=8000 

创建linux侧 监听文件

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
    )
  )

创建linux侧TNS

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
ORCLDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

3、搭建ADG

在备库create spfile from spfile;

拷贝口令文件到备库

启动备库到mount模式
互相tnsping检查解析是否正确
备库执行

[oracle@oracle admin]$ rman target sys/123456@orcl auxiliary sys/123456@orcldg

Recovery Manager: Release 11.2.0.1.0 - Production on Mon Sep 26 18:28:54 2022

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=4221934329)
connected to auxiliary database: ORCL (not mounted)

复制库:
duplicate target database for standby from active database nofilenamecheck;

查看linux侧库状态

select DBID,NAME,OPEN_MODE,DATABASE_ROLE from v$database;

启动恢复进程

sqlplus / as sysdba
alter database recover managed standby database disconnect  from session;

使用LGWR同步(实时)

alter database open;
alter database recover managed standby database using current logfile disconnect from session;

4、新旧服务器切换

通知业务停机

1、在windows侧检查切换

select switchover_status from v$database;

如查返回to standby或者session active表示可以进行切换

2、新旧服务器切换,在win侧执行

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
关闭数据库
SHUTDOWN IMMEDIATE;

3、新服务器linux侧执行

alter database commit to switchover to primary with session shutdown;
SHUTDOWN IMMEDIATE;
再次打开变成主库
STARTUP;

4、启动win侧数据库

STARTUP NOMOUNT;
ALTER DATABASE MOUNT STANDBY DATABASE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

5、检查校验业务、数据。没问题之后可以关闭DG传输,修改linux侧dg参数为正常单机。windows服务器下线。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论