无外网Oracle数据库迁移

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:         数据库迁移有多种方法可以实现,在有网络的情况下可以通过工具实现数据库迁移,简单稳定高效,而且停机时间可以控制在很短的时间甚至不需要停机。但是当没有外网的情况下就方式就比较少了,下面介绍通过Rman备份恢复的方式来迁移Oracle数据库,将停机时间最小化。

        数据库迁移有多种方法可以实现,在有网络的情况下可以通过工具实现数据库迁移,简单稳定高效,而且停机时间可以控制在很短的时间甚至不需要停机。但是当没有外网的情况下就方式就比较少了,下面介绍通过Rman备份恢复的方式来迁移Oracle数据库,将停机时间最小化。

一、收集源库信息

1、查看当前数据库的实际大小

select sum(a.bytes - b.bytes)/1024/ 1024 "sum_used MB"
   from (select tablespace_name, sum(bytes) bytes  
               from dba_data_files  
                  group by tablespace_name) a,  
           (select tablespace_name, sum(bytes) bytes  
               from dba_free_space  
                  group by tablespace_name) b  
  where a.tablespace_name = b.tablespace_name;

2、查看数据库安装目录

  ①通过.bash_profile查看ORACLE_SID、ORACLE_HOME、ORACLE_BASE的路径
  ②查看源数据库的审计文件目录
        show parameter audit
  ③查看控制文件的路径和数量、数据文件的路径
        控制文件:show parameter control
        数据文件:select name from v$datafile;
  ④查看是否开启闪回区,如果开启查看对应路径和大小
        show parameter recover
  ⑤查看归档文件路径
        show parameter log_archive_dest
  ⑥查看数据库服务器内存,目标实例配置要大于等于这个配置,否则在还原参数文件时可能会出现SGA不够的情况
        查看服务器内存:grep MemTotal /proc/meminfo
        查看SGA大小:show parameter sga

二、准备目标服务器环境

        根据上面源库的信息安装Oracle软件(不需要dbca创建数据库),需要注意的是要提前创建审计目录,在创建的时候要和源库查询出来的目录一致,同时归档日志目录、数据文件目录、闪回区的目录也一并创建完成。

三、迁移数据库

        在环境全部准备完成后,开始准备迁移数据库。迁移的策略为:迁移开始--全备--传输--恢复--增量备份--传输--增量恢复--增量归档恢复--关闭数据库--拷贝redolog--完全恢复--迁移结束。

1、源库进行0级全量备份

[oracle@vbox66 ~]$ rman target /

恢复管理器: Release 11.2.0.4.0 - Production on 星期六 9月 15 15:54:15 2018

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

已连接到目标数据库: VBOX66DB (DBID=3269052407)

RMAN> run {
2>     allocate channel c1 device type disk;
3>     allocate channel c2 device type disk;
4>     allocate channel c3 device type disk;
5>     backup incremental level 0 database format '/u01/backup/all_db_%U.bak';
6>       }

具体选择channel可以根据数据库表空间的大小和数量,此时查看下当前数据库的日志信息,以便之后拷贝增量日志。

2、通过中间介质传输到目标服务器进行恢复

①这里我通过scp来代替中间介质传输

目标库
  scp 192.168.3.66:/u01/backup/* ./

②全备文件传输完成后首先还原参数文件

a、首先创建一个哑参,目标数据库启动到nomount状态,登录Rman恢复源库spfile

cd $ORACLE_HOME
cd dbs
vi ceshi.ora
db_name='aaa'
sqlplus / as sysdba
startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/ceshi.ora'

b、从全备文件中还原参数文件

RMAN> restore spfile to '/u01/app/oracle/product/11.2.0/db_1/dbs/spfilevbox66in.ora' from '/u01/backup/all_db_1rtd6bac_1_1.bak';

启动 restore 于 2018-09-15 17:44:06
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 设备类型=DISK

通道 ORA_DISK_1: 正在从 AUTOBACKUP /u01/backup/all_db_1rtd6bac_1_1.bak 还原 spfile
通道 ORA_DISK_1: 从 AUTOBACKUP 还原 SPFILE 已完成
完成 restore 于 2018-09-15 17:44:08

RMAN> 

spfile在那个备份集中可以在源库Rman中执行list backup进行查看

③、目标实例在还原完参数文件之后还原控制文件

a、在还原控制文件之间先将以ceshi.ora参数文件启动的实例关闭,以还原的参数文件启动到nomount进行还原控制文件


shutdown immediate;
exit;
sqlplus / as sysdba
startup nomount;

b、还原控制文件


RMAN> restore controlfile from '/u01/backup/all_db_1qtd6b8b_1_1.bak';

启动 restore 于 2018-09-15 17:51:15
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 设备类型=DISK

通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:03
输出文件名=/u01/app/oracle/oradata/vbox66db/control01.ctl
输出文件名=/u01/app/oracle/oradata/vbox66db/control02.ctl
完成 restore 于 2018-09-15 17:51:19

RMAN> 

④、控制文件还原完成之后开始还原全备数据文件

a、控制文件还原完成将数据库启动到mount状态

SYS@vbox66in>alter database mount;

b、还原数据文件


先将备份集注册到控制文件中
RMAN> catalog start with '/u01/backup';

使用目标数据库控制文件替代恢复目录
搜索与样式 /u01/backup 匹配的所有文件

数据库未知文件的列表
=====================================
文件名: /u01/backup/all_db_1rtd6bac_1_1.bak
文件名: /u01/backup/all_db_1qtd6b8b_1_1.bak
文件名: /u01/backup/all_db_1otd6b7h_1_1.bak
文件名: /u01/backup/all_db_1ntd6b7g_1_1.bak

是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes
正在编制文件目录...
目录编制完毕

已列入目录的文件的列表
=======================
文件名: /u01/backup/all_db_1rtd6bac_1_1.bak
文件名: /u01/backup/all_db_1qtd6b8b_1_1.bak
文件名: /u01/backup/all_db_1otd6b7h_1_1.bak
文件名: /u01/backup/all_db_1ntd6b7g_1_1.bak

开始还原数据文件:


RMAN> restore database;

启动 restore 于 2018-09-15 17:57:01
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=17 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00006 还原到 /u01/app/oracle/oradata/vbox66db/testdb01.dbf
通道 ORA_DISK_1: 将数据文件 00007 还原到 /u01/app/oracle/oradata/vbox66db/JRJCTEST.dbf
通道 ORA_DISK_1: 将数据文件 00008 还原到 /u01/app/oracle/oradata/vbox66db/oggtbs.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/backup/all_db_1ptd6b7h_1_1.bak
通道 ORA_DISK_1: 段句柄 = /u01/backup/all_db_1ptd6b7h_1_1.bak 标记 = TAG20180915T155528
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:35
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 /u01/app/oracle/oradata/vbox66db/system01.dbf
通道 ORA_DISK_1: 将数据文件 00004 还原到 /u01/app/oracle/oradata/vbox66db/users01.dbf
通道 ORA_DISK_1: 将数据文件 00009 还原到 /u01/app/oracle/oradata/vbox66db/migtbs.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/backup/all_db_1otd6b7h_1_1.bak
通道 ORA_DISK_1: 段句柄 = /u01/backup/all_db_1otd6b7h_1_1.bak 标记 = TAG20180915T155528
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:01:15
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00002 还原到 /u01/app/oracle/oradata/vbox66db/sysaux01.dbf
通道 ORA_DISK_1: 将数据文件 00003 还原到 /u01/app/oracle/oradata/vbox66db/undotbs01.dbf
通道 ORA_DISK_1: 将数据文件 00005 还原到 /u01/app/oracle/oradata/vbox66db/test01.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/backup/all_db_1ntd6b7g_1_1.bak
通道 ORA_DISK_1: 段句柄 = /u01/backup/all_db_1ntd6b7g_1_1.bak 标记 = TAG20180915T155528
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:01:45
完成 restore 于 2018-09-15 18:00:37

RMAN> 

3、对源库进行1级增量备份

①此次为模拟,在全备之后在源库进行操作模拟正常数据库工作

SYS@vbox66in>create table scott.gaowen(id int,name varchar(30));
SYS@vbox66in>insert into scott.gaowen values(1,'aaa');
SYS@vbox66in>insert into scott.gaowen values(2,'bbb');
SYS@vbox66in>insert into scott.gaowen values(3,'ccc');
SYS@vbox66in>commit;
SYS@vbox66in>alter system archive log current;
系统已更改。
SYS@vbox66in>alter system archive log current;
系统已更改。
SYS@vbox66in>alter system archive log current;
系统已更改。
SYS@vbox66in>

②进行1级增量备份

RMAN> backup incremental level 1 database format '/u01/backup/incr_db_%U.bak';

启动 backup 于 15-9月 -18
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动增量级别 1 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00002 名称=/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/vbox66db/system01.dbf
输入数据文件: 文件号=00008 名称=/u01/app/oracle/oradata/vbox66db/oggtbs.dbf
输入数据文件: 文件号=00006 名称=/u01/app/oracle/oradata/vbox66db/testdb01.dbf
输入数据文件: 文件号=00007 名称=/u01/app/oracle/oradata/vbox66db/JRJCTEST.dbf
输入数据文件: 文件号=00009 名称=/u01/app/oracle/oradata/vbox66db/migtbs.dbf
输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/vbox66db/users01.dbf
输入数据文件: 文件号=00005 名称=/u01/app/oracle/oradata/vbox66db/test01.dbf
通道 ORA_DISK_1: 正在启动段 1 于 15-9月 -18
通道 ORA_DISK_1: 已完成段 1 于 15-9月 -18
段句柄=/u01/backup/incr_db_1std6jag_1_1.bak 标记=TAG20180915T181335 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:35
通道 ORA_DISK_1: 正在启动增量级别 1 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 15-9月 -18
通道 ORA_DISK_1: 已完成段 1 于 15-9月 -18
段句柄=/u01/backup/incr_db_1ttd6jdf_1_1.bak 标记=TAG20180915T181335 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 15-9月 -18
RMAN> 

4、通过中间介质将增量备份传输到目标实例进行恢复

①这里通过scp来模拟代替中间介质传输

scp 192.168.3.66:/u01/backup/inc* ./

②还原增量备份

a、先将备份集注册到控制文件中

RMAN> catalog start with '/u01/backup';

搜索与样式 /u01/backup 匹配的所有文件

数据库未知文件的列表
=====================================
文件名: /u01/backup/incr_db_1std6jag_1_1.bak
文件名: /u01/backup/incr_db_1ttd6jdf_1_1.bak

是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes
正在编制文件目录...
目录编制完毕

已列入目录的文件的列表
=======================
文件名: /u01/backup/incr_db_1std6jag_1_1.bak
文件名: /u01/backup/incr_db_1ttd6jdf_1_1.bak

RMAN> 

b、恢复增量备份

RMAN> catalog start with '/u01/backup';

搜索与样式 /u01/backup 匹配的所有文件

数据库未知文件的列表
=====================================
文件名: /u01/backup/incr_db_1std6jag_1_1.bak
文件名: /u01/backup/incr_db_1ttd6jdf_1_1.bak

是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes
正在编制文件目录...
目录编制完毕

已列入目录的文件的列表
=======================
文件名: /u01/backup/incr_db_1std6jag_1_1.bak
文件名: /u01/backup/incr_db_1ttd6jdf_1_1.bak

RMAN> recover database;

启动 recover 于 2018-09-15 18:22:01
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始还原增量数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
数据文件 00001 的还原目标: /u01/app/oracle/oradata/vbox66db/system01.dbf
数据文件 00002 的还原目标: /u01/app/oracle/oradata/vbox66db/sysaux01.dbf
数据文件 00003 的还原目标: /u01/app/oracle/oradata/vbox66db/undotbs01.dbf
数据文件 00004 的还原目标: /u01/app/oracle/oradata/vbox66db/users01.dbf
数据文件 00005 的还原目标: /u01/app/oracle/oradata/vbox66db/test01.dbf
数据文件 00006 的还原目标: /u01/app/oracle/oradata/vbox66db/testdb01.dbf
数据文件 00007 的还原目标: /u01/app/oracle/oradata/vbox66db/JRJCTEST.dbf
数据文件 00008 的还原目标: /u01/app/oracle/oradata/vbox66db/oggtbs.dbf
数据文件 00009 的还原目标: /u01/app/oracle/oradata/vbox66db/migtbs.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/backup/incr_db_1std6jag_1_1.bak
通道 ORA_DISK_1: 段句柄 = /u01/backup/incr_db_1std6jag_1_1.bak 标记 = TAG20180915T181335
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:15

正在开始介质的恢复

无法找到归档日志
归档日志线程=1 序列=56
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/15/2018 18:22:19 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 56 的归档日志以及起始 SCN 2027595

RMAN> 

        从恢复的信息中我们可以看到数据没有完全恢复,需要增量归档日志文件。接下来需要将全备之后生成的增量日志传输到目标实例

5、传输源库增量日志到目标实例进行数据恢复

①从增量恢复信息中我们可以看到需要56号归档日志,那么就需要将56号之后的归档日志传输到目标实例,我这里通过scp代替中间介质

scp 192.168.3.66:/u01/app/oracle/oradata/arch/1_56_974146828.dbf ./
scp 192.168.3.66:/u01/app/oracle/oradata/arch/1_57_974146828.dbf ./
scp 192.168.3.66:/u01/app/oracle/oradata/arch/1_58_974146828.dbf ./

②进行增量日志恢复

RMAN> recover database;

启动 recover 于 2018-09-15 18:33:38
使用通道 ORA_DISK_1

正在开始介质的恢复

归档日志文件名=/u01/app/oracle/oradata/arch/1_56_974146828.dbf 线程=1 序列=56
归档日志文件名=/u01/app/oracle/oradata/arch/1_57_974146828.dbf 线程=1 序列=57
归档日志文件名=/u01/app/oracle/oradata/arch/1_58_974146828.dbf 线程=1 序列=58
无法找到归档日志
归档日志线程=1 序列=59
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/15/2018 18:33:39 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 59 的归档日志以及起始 SCN 2040040

RMAN> 

从增量日志恢复信息中可以看到还需要59号日志文件,如果此时59号文件就是当前redo log文件的话就关闭源实例数据库,将redo file文件拷贝到目标实例进行恢复,如果不是那就重复上诉步骤直到是redo file文件为止,这样就可以最小化停机时间。

③由于这里是模拟,59号文件就是当前redo file,现在关闭远视力数据库进行拷贝redo file文件到目标实例

a、源实例关闭数据库

shutdown immediate;

b、将当前redo file传输到目标实例

scp 192.168.3.66:/u01/app/oracle/oradata/vbox66db/redo* ./

6、当redo file拷贝完成后进行最后的恢复数据库

①进行恢复数据库

RMAN> recover database;

启动 recover 于 2018-09-15 18:42:00
使用通道 ORA_DISK_1

正在开始介质的恢复

线程 1 序列 59 的归档日志已作为文件 /u01/app/oracle/oradata/vbox66db/redo02.log 存在于磁盘上
归档日志文件名=/u01/app/oracle/oradata/vbox66db/redo02.log 线程=1 序列=59
介质恢复完成, 用时: 00:00:00
完成 recover 于 2018-09-15 18:42:01

RMAN> 

②以resetlogs方式打开数据库


SYS@vbox66in>alter database open resetlogs;

数据库已更改。

SYS@vbox66in>

③查看之前创建的表数据

SYS@vbox66in>select * from scott.gaowen;

    ID NAME
---------- ------------------------------
     1 aaa
     2 bbb
     3 ccc

SYS@vbox66in>

7、重建临时表空间

由于备份恢复时不备份临时表空间,所以还原之后临时表空间文件就没有,需要重建。

SYS@vbox66in>create temporary tablespace temp2 tempfile '/u01/app/oracle/oradata/vbox66db/temp02.dbf' size 10M autoextend on;
SYS@vbox66in>alter database default temporary tablespace temp2;
SYS@vbox66in>drop tablespace temp including contents and datafiles;
SYS@vbox66in>create temporary tablespace temp tempfile '/u01/app/oracle/oradata/vbox66db/temp01.dbf' size 10M autoextend on;
SYS@vbox66in>alter database default temporary tablespace temp;
SYS@vbox66in>drop tablespace temp2 including contents and datafiles;

至此数据库迁移完毕!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
20天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
135 64
|
10天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
20 7
|
10天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
13 6
|
10天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
13 5
|
15天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
26 3
|
17天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
19天前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
18 1
|
26天前
|
存储 Oracle 关系型数据库
【数据库-Oracle】《Oracle 数据库探秘:基础知识点全攻略》
《Oracle 数据库探秘:基础知识点全攻略》深入介绍 Oracle 数据库的基础知识点,包括数据类型、表结构、查询语句等。通过详细讲解、代码示例和流程图,帮助读者快速掌握 Oracle 数据库的基本操作,为数据库开发和管理打下坚实基础。
29 0
|
2月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
45 3

推荐镜像

更多