侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

RMAN完整迁移数据库至异机(非归档模式)

与晚风述往事
2021-11-28 / 0 评论 / 0 点赞 / 181 阅读 / 3,303 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-11-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

本次迁移的服务器是两台CentOS 7的操作系统,Oracle的版本为11G,原数据库处于正常运行的状态。

说明

非归档模式下进行迁移需要停数据库。
迁移数据库到异机需要分步骤执行,按流程将其分为以下步骤:

  1. 原数据库使用RMAN备份
  2. 新服务器安装Oracle数据库软件和监听
  3. 迁移备份集至新服务器中
  4. 新服务器创建必要的目录
  5. 使用RMAN还原新服务器的数据库

步骤

原数据库使用RMAN备份

1、启动数据库至MOUNT状态。

非归档模式下的数据库,要想使用RMAN备份数据库,需要先启动到MOUNT模式下。
进入到SQLPLUS命令行

[oracle@localhost ~]$ sqlplus / as sysdba

立即关闭数据库

SQL> shutdown immediate

启动数据库至MOUNT模式

SQL> startup mount

2、备份数据库全库

创建备份目录
创建存储备份集的目录dump,建议创建到可用空间较大的磁盘。

[oracle@localhost ~]$ mkdir /home/oracle/dump

进入到RMAN命令行

[oracle@localhost ~]$ rman target /

配置备份压缩类型
使用RMAN备份压缩数据库,减少备份集大小。启用压缩后会增加备份时间,但压缩后的备份集会比原来的小很多。
建议使用MEDIUM压缩类型,压缩率和压缩速度都不会特别极端,其它两个格式要么是极慢的速度要么是压缩率特别大。
注意,执行命令后立即生效。

RMAN> configure compression algorithm 'MEDIUM';

image.png
启动控制文件自动备份

RMAN> configure controlfile autobackup on;

image.png

修改控制文件备份目录

RMAN> configure controlfile autobackup format for device type disk to '/home/oracle/dump/cf_%F';

image.png

备份整个库的数据文件
由于配置了自动备份控制文件,我们在备份全库的时候会默认也备份控制文件。

RMAN> backup as compressed backupset section size 40g tag='INC_0' database format '/home/oracle/dump/df_0_%T_%u_%p_%c.dbf';

image.png

新服务器安装Oracle数据库软件和监听

在新的服务器中安装Oracle软件和监听,但不要创建数据库。这里我就不再写了,如果不会的话,可以参考此链接:图形界面安装Oracle 11G

迁移备份集至新服务器中

1、新服务器创建同样的备份目录

[oracle@localhost ~]$ mkdir -p /home/oracle/dump

2、拷贝数据库备份集。

将备份的数据文件集和控制文件拷贝至新的服务器中。
生产环境中这里通常拷贝会达到几百G甚至上T,拷贝时间较长,并且拷贝完成后建议对比MD5来保证文件传输中没有改变。

[oracle@localhost dump]$ scp * oracle@192.168.3.113:/home/oracle/dump

image.png

新服务器创建必要的目录

数据库启动必须要有以下目录:

  • admin
    • orcl 实例名
      • adump 审计日志的默认存储目录
      • dpdump 数据泵(data pump)的默认存储目录
      • pfile pfile文件的备份目录
  • oradata
    • orcl 实例名
  • fast_recovery_area
    • orcl 实例名

这些目录可以根据原服务器的数据库路径来配置,也可以改目录创建。建议跟原数据库目录一致,减少操作步骤。我这里两台服务器Oracle目录完全一致,所以只演示完全一致的创建方法。
注意,orcl仅表示我这里的实例名。如果你的实例名不是orcl,则应该以实际实例名和相应路径来替换。
创建admin/orcl目录

[oracle@localhost ~]$ mkdir -p /home/oracle/admin/orcl

进入admin/orcl目录

[oracle@localhost ~]$ cd /home/oracle/admin/orcl

创建admin/orcl子目录

[oracle@localhost orcl]$ mkdir adump dpdump pfile

创建数据文件目录

[oracle@localhost orcl]$ mkdir -p /home/oracle/oradata/orcl

创建快速闪回区目录

[oracle@localhost orcl]$ mkdir -p /home/oracle/fast_recovery_area/orcl

使用RMAN还原新服务器的数据库

新服务器中执行。

1、设置数据库的DBID并启动到NOMOUNT状态

进入RMAN命令行

[oracle@localhost ~]$ rman target /

设置数据库的DBID
新服务器的ID可以从备份的控制文件名中得到,也可以查源库。%F格式的控制文件第一个-前面显示的是字母c,第二个显示的是DBID,第三个显示的是备份时间,第四个显示的是份数。

RMAN> set dbid 1612777860;

image.png
启动数据库至NOMOUNT状态

RMAN> startup nomount

image.png
这里的报错不需要处理,当然你也可以拷贝原数据库的initorcl.ora文件至目标库(如果你的源库有)。

2、恢复参数文件

注意,实例名需要跟实际情况修改,我这里的实例名是orcl。

RMAN> restore spfile to'/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora' from '/home/oracle/dump/cf_c-1612777860-20211128-00';

image.png

3、恢复控制文件并启动至MOUNT

恢复数据文件目录的控制文件

RMAN> restore controlfile to'/home/oracle/oradata/orcl/control01.ctl' from '/home/oracle/dump/cf_c-1612777860-20211128-00';

恢复快速闪回区的控制文件

RMAN> restore controlfile to'/home/oracle/fast_recovery_area/orcl/control02.ctl' from '/home/oracle/dump/cf_c-1612777860-20211128-00';

image.png
启动到MOUNT状态

RMAN> alter database mount;

image.png
如果这里报错,则关闭数据库,启动至MOUNT状态就可以了。很奇怪的是,有时候数据库又不需要重启,有时候又需要,暂时不纠结这个问题。

4、关闭原数据库并拷贝redo log

由于是MOUNT状态,其实不拷贝也不会丢失数据,主要就不想看到RMAN恢复时报错,所以还是将原数据库的redo log拷贝至新服务器的oradata/orcl目录。
关闭原数据库

SQL> shutdown immediate

image.png
进入原数据库的数据文件目录

[oracle@localhost ~]$ cd /home/oracle/oradata/orcl

拷贝redo log至新服务器

[oracle@localhost orcl]$ scp redo*.log oracle@192.168.3.113:/home/oracle/oradata/orcl

image.png

5、使用备份集恢复新的数据库

由于两边的数据库目录完全一致,就不需要执行catalog向控制文件中重新注册备份集。
还原备份集中的数据文件

RMAN> restore database;

image.png
恢复redo log(介质恢复)

RMAN> recover database;

image.png

6、打开新服务器的数据库

打开数据库

RMAN> alter database open resetlogs;

image.png
从上图可以看到,我们本次的恢复是不完全恢复。

结束

至此,从原服务器的Oracle数据库就完整的迁移到了新的服务器中运行。接下来,你就可以根据需要,释放原服务器资源或者做其它操作了。

0

评论区