windows操作系统由于本身的稳定性的问题,以及操作系统在联网的情况下自动更新补丁可能会造成系统异常,在这种情况下,选用一款比较靠谱的linux操作系统就显得非常的重要了,同时搭载oracle 11g数据库,对于业务系统来说因该是相当稳定的。某些特殊的情况下,linux操作系统要定期打补丁,这个下一节在讨论,本次讨论11g windows环境迁移到linux环境。

迁移思路:

(1)采用备份还原的方式;

(2)为减少迁移的停机时间,采用level0和level1级别备份,增量附加方式。

一、环境介绍

1、操作系统

(1)源库:windows 2019

     目标库:Centos 7.8 x64

(2)数据库 oracle 11g 11.2.0.4

2、地址信息

序号

名称

地址

备注

1

11g源库(windows)

192.168.10.200

N/A

2

11g目标库(Centos 7.8)

192.168.10.201

N/A

二、备份源库

备份包括参数文件、控制文件、数据文件等。

(1)备份脚本(level 0 + level 1)windows

Level 0级别备份

backup_level0.bat

@echo off

set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%

mkdir d:\backup\%timestamp%_level0

rman target / nocatalog CMDFILE 'd:\scripts\full_backup0.sql' log 'd:\scripts\log\rman_backup_level0_%timestamp%.log' append

full_backup0.sql

run{

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

allocate channel ch00 device type disk;

allocate channel ch01 device type disk;

allocate channel ch02 device type disk;

allocate channel ch03 device type disk;

crosscheck backup;

crosscheck archivelog all;

delete noprompt expired archivelog all;

delete noprompt expired backup;

report obsolete;

delete noprompt obsolete;

backup INCREMENTAL LEVEL 0 as compressed backupset database format 'D:\backup\%T_level0\full_level0_%T_%u_%p.%d' tag='FULLDB_level0-%T'

plus archivelog format 'D:\backup\%T_level0\arch_%T_%u_%p.%d'  delete all input;

sql 'alter system archive log current';

backup current controlfile format 'D:\backup\%T_level0\control_%T_%u_%p.%d.bak';

backup spfile format 'D:\backup\%T_level0\spfile_%T_%u_%p.%d.bak';

crosscheck backup;

crosscheck archivelog all;

delete noprompt expired archivelog all;

delete noprompt expired backup;

report obsolete;

delete noprompt obsolete;

release channel ch00;

release channel ch01;

release channel ch02;

release channel ch03;

}

Level 1级别备份

run{

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

allocate channel ch00 device type disk;

allocate channel ch01 device type disk;

allocate channel ch02 device type disk;

allocate channel ch03 device type disk;

crosscheck backup;

crosscheck archivelog all;

delete noprompt expired archivelog all;

delete noprompt expired backup;

report obsolete;

delete noprompt obsolete;

backup INCREMENTAL LEVEL 1 as compressed backupset database format 'D:\backup\%T_level1\full_level1_%T_%u_%p.%d' tag='FULLDB_level1-%T'

plus archivelog format 'D:\backup\%T_level1\arch_%T_%u_%p.%d'  delete all input;

sql 'alter system archive log current';

backup current controlfile format 'D:\backup\%T_level1\control_%T_%u_%p.%d.bak';

backup spfile format 'D:\backup\%T_level1\spfile_%T_%u_%p.%d.bak';

crosscheck backup;

crosscheck archivelog all;

delete noprompt expired archivelog all;

delete noprompt expired backup;

report obsolete;

delete noprompt obsolete;

release channel ch00;

release channel ch01;

release channel ch02;

release channel ch03;

}

备注:改下bat脚本即可。

(2)执行完整备份并拷贝到linux备机

三、恢复linux备机

1、安装备机数据库软件(安装过程略)

2、恢复参数文件

由于windows参数文件和linux参数文件目录不一致,使用备份的参数文件恢复参数文件,需要改下目录即可;

[oracle@db1 ~]$ cat pfile.ora

orcl.__db_cache_size=2063597568

orcl.__java_pool_size=16777216

orcl.__large_pool_size=33554432

orcl.__oracle_base='/u01/app/oracle' #ORACLE_BASE set from environment

orcl.__pga_aggregate_target=872415232

orcl.__sga_target=2583691264

orcl.__shared_io_pool_size=0

orcl.__shared_pool_size=436207616

orcl.__streams_pool_size=0

*.audit_file_dest=/u01/app/oracle/admin/orcl/adump

*.audit_trail='db'

*.compatible='11.2.0.4.0'

*.control_files='/oradata/CONTROL01.CTL','/oradata/CONTROL02.CTL'#Restore Controlfile

*.db_block_size=8192

*.db_domain=''

*.db_name='orcl'

*.db_create_file_dest='/oradata'

*.db_recovery_file_dest='/flash_recovery_area'

*.db_recovery_file_dest_size=43851448320

*.db_unique_name='orcldg'

*.diagnostic_dest='/u01/app/oracle/'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.log_archive_format='ARC%S_%R.%T'

*.nls_language='SIMPLIFIED CHINESE'

*.nls_territory='CHINA'

*.open_cursors=300

*.pga_aggregate_target=858783744

*.processes=1500

*.remote_login_passwordfile='EXCLUSIVE'

*.sessions=1655

*.sga_target=2576351232

*.undo_tablespace='UNDOTBS1'

3、恢复控制文件

恢复控制文件:RMAN> restore controlfile from '/home/oracle/O1_MF_S_1237894078_O4P85YY4_.BKP';

SQL> alter database mount;

4、恢复数据文件

RMAN> catalog start with '/home/oracle/20260706_level0';

RMAN>report schema;(显示备份文件目录情况)

备注:使用默认的恢复restore database,文件恢复到/u01/app/oracle/product/11.2.0/dbhome_1/dbs/下了,建议根据report schema目录做出目录变更。

run {

set newname for datafile 4 to '/oradata/orcl/USERS01.DBF'; 

set newname for datafile 3 to '/oradata/orcl/UNDOTBS01.DBF';

set newname for datafile 2 to '/oradata/orcl/SYSAUX01.DBF';

set newname for datafile 1 to '/oradata/orcl/SYSTEM01.DBF';

set newname for datafile 5 to '/oradata/orcl/DATA01.DBF';            

restore database;

switch datafile all;

}

RMAN>recover database;

5、启动数据库resetlogs

SQL> alter database open resetlogs;

SQL> select name,open_mode from v$database;

NAME          OPEN_MODE

ORCL          READ WRITE

6、修改redo日志

创建日志组:

SQL> alter database add logfile group 10 size 50M;

SQL> alter database add logfile group 11 size 50M;

SQL> alter database add logfile group 12 size 50M;

切换日志组:

SQL> alter system switch logfile;

删除现有空闲日志组:

SQL> alter database drop logfile group 1;

SQL> alter database drop logfile group 2;

SQL> alter database drop logfile group 3;

SQL> alter database drop logfile group 4;

SQL> alter database drop logfile group 5;

SQL> alter database drop logfile group 6;

7、创建temp1表空间,删除现有temp表空间;

SQL> create temporary tablespace temp1 tempfile '/oradata/orcl/temp1.dbf' size 100M autoextend on ;

SQL> alter database default temporary tablespace temp1;

SQL> drop tablespace temp including contents;

8、检查备机数据库运行状况

(1)日志无报错

(2)查询数据

四、增量恢复数据(进行增量恢复,无需进行resetlogs,最后一次性open resetlogs)

(1)录入测试数据

(2)备份增量数据库

(3)将增量数据level 1文件放到目标库level0一个文件夹

(4)将数据库启动到nomount状态恢复level1级别控制文件

(5)恢复数据文件

run {

set newname for datafile 4 to '/oradata/orcl/USERS01.DBF'; 

set newname for datafile 3 to '/oradata/orcl/UNDOTBS01.DBF';

set newname for datafile 2 to '/oradata/orcl/SYSAUX01.DBF';

set newname for datafile 1 to '/oradata/orcl/SYSTEM01.DBF';

set newname for datafile 5 to '/oradata/orcl/DATA01.DBF';            

restore database;

switch datafile all;

}

(6)recover database

(7)修改redo文件位置

(8)重建temp文件

(9)检查增量数据是否一致

至此:数据库增量恢复完成。(增量恢复减少了文件拷贝时间,文件存在,部分文件不用更新)

总结:增量恢复主要以下几点;一是在恢复侧level1文件和level0文件可以可以放在一起,二是第一次level0恢复不要进行resetlogs 三是最终恢复完成后,需要修改redo路径和重建temp文件。至于性能诊断,后面一一分析。

2026-07-06

  于合肥

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐