客户计划购买一套新的服务器+存储替换原有的数据库服务器:
原服务器是一台老的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服务器下线。




