拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle项目案例
  3. Oracle数据库迁移方案
  4. 正文

迁移方案5:Linux迁移至Linux-不完全恢复(方法:重新载入备份位置)

2023年4月3日 1578点热度 1人点赞 0条评论

目录

  • 一、环境准备
    • 1、源库环境
    • 2、目标库环境
    • 3、迁移方法
    • 4、注意事项:
  • 二、Linux源库备份
    • 1、切换归档日志和检查点,让所有在redolog的数据落盘
    • 2、rman备份数据库
    • 3、备份传输
  • 三、Linux目标数据库还原
    • 1、安装新的数据库,并且数据库名称要和源库的一致
    • 2、启动数据库到nomount状态
    • 3、对当前库的参数文件做备份(备份为pfile)
    • 4、因为是异机,从rman备份文件进行spfile恢复。
      • (1)先启动当前数据库到nomount状态
      • (2)利用spfile的备份文件,进行还原
      • (3) 编辑spfile.ora为pfile.ora(使用strings spfile.ora获取到内容);
    • 5、rman还原控制文件(可以在当前pfile模式下还原,前提是sid等一样)
    • 我们使用密码加密,进行解密即可:
    • 6、查看当前控制文件记录的内容
    • 7、查看当前控制文件加载的备份片信息
    • 8、核对备份文件
    • 9、删除失效的备份文件
    • 10、更新备份文件(指向新的备份片)-如果有必要,一般还原了控制文件后就不需要了
    • 11、查看重新加载的备份片信息
    • 12、还原数据库
      • (1)如果目标端文件路径没有更改,可以直接使用
      • (2)如果目标端数据文件路径有更改,可以使用newname方式更改
    • 13、还原归档日志(备份的归档日志也需要还原)
      • (1)还原归档日志---全部还原(这个容易出现错误,可以使用scn方式还原)
      • (2)还原归档日志——根据scn或seq,
    • 14、恢复数据库(这里是重点)
      • (1)使用backup和until cancel进行恢复
      • (2)如果此时没有归档日志,可以使用隐藏参数,直接resetlogs方式(但容易丢数据,慎用):
    • 15、如果可以在源库还可以正常使用
      • (4)将源库的归档拷贝到目标库
      • (5)resetlogs打开数据库
  • 四、数据库日志文件调整(如果需要调整)
    • 1、查看日志文件信息
    • 2、添加日志组和文件
    • 3、查看当前的状态
    • 4、删除组1,2,3,再创建1,2,3组
  • 五、创建临时文件(如果不存在临时文件)
    • 1、查看当前临时文件
    • 2、创建其他临时表空间,并设置为默认
    • 3、删除原来的临时表空间temp
    • 4、创建新的临时表空间temp,并设为默认
    • 5、删除temp2临时表空间
  • 六、升级数据字典
      • 1、通过 startup upgrade 启动实例
    • 2、升级数据字典
    • 3、重启实例
  • 七、测试数据库
    • 八、如果使用非完全恢复模式(且使用隐藏参数进行强制启动数据库),一定要做这个测试
    • 1、查询所有表的数据量对比
    • 2、对索引进行分析(如果可以对所有索引对比最好)是否报错

Linux—Linux—RMAN实现Linux平台迁移到另一台Linux(方法:重新载入备份位置方法)—不完全恢复,但可以通过归档追到最新数据

一、环境准备

1、源库环境

操作系统:Redhat/Oracle/CentOS Linux 7.9
字 符 集:AL32UTF8
数据库版本:11.2.0.4.0

2、目标库环境

操作系统:Redhat/Oracle/CentOS Linux 7.9
字 符 集:AL32UTF8
数据库版本:11.2.0.4.0

3、迁移方法

源库进行RMAN备份,新库进行RMAN还原

4、注意事项:

源库和目标库的字符集一定要一致,否则会出现乱码。目标库在dbca的时候,要根据源库的字符集设置。

二、Linux源库备份

1、切换归档日志和检查点,让所有在redolog的数据落盘

SQL>alter system switch logfile;
SQL>alter system switch logfile;
SQL>alter system switch logfile;
SQL>alter system switch logfile;
SQL>alter system switch logfile;
SQL>alter system switch logfile;
SQL>alter system checkpoint;

2、rman备份数据库

这个过程会自动备份数据文件,控制文件和参数文件。

[oracle@qdmes219:/oracle]$rman target /
RMAN> backup database;

3、备份传输

将上述备份的文件拷贝到linux中。

[oracle@qdmes219:/home/oracle]$scp -r /oracle/archivelog/MESORCL/archivelog/ oracle@192.168.20.220:/backup/rman/backup

三、Linux目标数据库还原

1、安装新的数据库,并且数据库名称要和源库的一致

我们此处使用mesorcl。

2、启动数据库到nomount状态

SQL> startup nomount;

3、对当前库的参数文件做备份(备份为pfile)

SQL> create pfile='/backup/rman/pfile.ora' from spfile;

4、因为是异机,从rman备份文件进行spfile恢复。

(1)先启动当前数据库到nomount状态

SQL> startup nomount;

(2)利用spfile的备份文件,进行还原

--如果有密码,此处需要设置密码:

RMAN> set decryption identified by 'mesorcl';
RMAN> restore spfile to '/oracle/spfile.ora' from '/oracle/rman/20221019/spfile_20_1_1118505194_1.spf';

--如果不用密码,直接还原即可

RMAN> restore spfile to '/oracle/spfile.ora' from '/oracle/rman/20221019/spfile_20_1_1118505194_1.spf';

(3) 编辑spfile.ora为pfile.ora(使用strings spfile.ora获取到内容);

SQL> startup pfile='/oracle/pfile.ora' nomount;

5、rman还原控制文件(可以在当前pfile模式下还原,前提是sid等一样)

如果rman备份使用了密码,需要解密:

否则会报:

ORA-19870: error while restoring backup piece /oracle/rman/20221019/cntl_21_1_1118505195_1.ctl
ORA-19913: unable to decrypt backup
ORA-28365: wallet is not open

我们使用密码加密,进行解密即可:

RMAN>set decryption identified by 'mesorcl';
RMAN> restore controlfile from '/oracle/rman/20221019/cntl_21_1_1118505195_1.ctl';
SQL> alter database mount;

6、查看当前控制文件记录的内容

可以看到,当前控制文件记录的数据文件都是源库的目录信息;

SQL> set line 300
SQL> col name for a60
SQL> select file#,name,status from v$datafile;
SQL> select file#,name,status from v$tempfile;

记录位置


7、查看当前控制文件加载的备份片信息

RMAN> list backup;

8、核对备份文件

CROSSCHECK 命令用于核对备份文件,以确保 RMAN 资料库与备份文件保持同步。

当执行该命令时,如果 RMAN 资料库记录的状态与实际备份文件不匹配,则会更新资料库里的状态使其与实际备份文件状态一致;若备份文件处于 expired 状态,那么说明该备份已失效,可以删除。

RMAN> crosscheck backup;

9、删除失效的备份文件

RMAN> delete expired backup;

10、更新备份文件(指向新的备份片)-如果有必要,一般还原了控制文件后就不需要了

--catalog start with '/backup/rman/backup/';  -- 注意此处的目录

--注意:如果还原过程中,备份目录有其他文件,先清理后再还原,否则会出现报错:

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

11、查看重新加载的备份片信息

RMAN> list backup;

12、还原数据库

--如果有加密,需要先解密

RMAN>set decryption identified by 'mesorcl';

(1)如果目标端文件路径没有更改,可以直接使用

RMAN>run{
allocate channel d1 type disk; 
allocate channel d2 type disk;
restore database;
release channel d1; 
release channel d2; 
}

(2)如果目标端数据文件路径有更改,可以使用newname方式更改

RMAN>run{
allocate channel d1 type disk;
allocate channel d2 type disk;
set newname for datafile 1 to '/oracle/app/oracle/oradata/mesorcl/system01.dbf';
set newname for datafile 2 to '/oracle/app/oracle/oradata/mesorcl/sysaux01.dbf';
set newname for datafile 3 to '/oracle/app/oracle/oradata/mesorcl/undotbs01.dbf';
set newname for datafile 4 to '/oracle/app/oracle/oradata/mesorcl/users01.dbf';
set newname for datafile 5 to '/oracle/app/oracle/oradata/mesorcl/test01.dbf';
restore database;
switch datafile all;
release channel d1;
release channel d2;
}

注意:有可能会报错:
RMAN-03002: failure of restore command at 09/03/2022 15:39:56
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 4 found to restore
RMAN-06023: no backup or copy of datafile 3 found to restore
RMAN-06023: no backup or copy of datafile 2 found to restore
RMAN-06023: no backup or copy of datafile 1 found to restore

--分析:这是incarnation的问题,重置后即可

RMAN> list incarnation;

List of Database Incarnations
DB Key Inc Key  DB Name     DB ID         STATUS    Reset SCN       Reset Time
------- ------- -------- ---------------- ------- -------------- ----------------------
1         1      MESORCL 3048150118       PARENT     1            2013-10-09 18:23:38
2         2      MESORCL 3048150118       PARENT   897124         2022-09-02 09:20:40
3         3      MESORCL 3048150118       CURRENT  948244         2022-09-03 10:20:17

RMAN> reset database to incarnation 2;

database reset to incarnation 2
RMAN> list incarnation;

13、还原归档日志(备份的归档日志也需要还原)

--如果备份过程有加密,需要先解密

RMAN>set decryption identified by 'mesorcl';

(1)还原归档日志---全部还原(这个容易出现错误,可以使用scn方式还原)

RMAN> run{
 set archivelog destination to '/oracle/rman/archivelog';
 restore archivelog all;
}

(2)还原归档日志——根据scn或seq,

在选择scn或seq范围前,可以先执行14步,查看需要哪个归档日志,然后再根据需要的scn号还原;或先在rman中根据控制文件记录内容,list backup查看对应某个归档的scn号。

--1-先执行恢复如下语句,查看需要用哪个scn号

SQL> recover database using backup controlfile until cancel;

--2-list backup,查看这个scn号在哪个备份的arc文件中,且最大是多少

502875522附近的最早的是502578757,最大是502890274。可以选择这两个点还原

--直接恢复备份的归档,scn号在502578757和502890274(502957205大一些也可以)之间。

RMAN> run{
set archivelog destination to '/oracle/rman/archivelog';
restore archivelog scn between  502578757 and 502890274;
}

--发现sequence 21728在还原的归档中,执行14恢复即可。

14:21:46 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oracle/rman/archivelog/1_21728_1081589810.dbf

14、恢复数据库(这里是重点)

(1)使用backup和until cancel进行恢复

这里提示要哪个序列的归档,就到上述还原的归档目录中去查找。

【注意:在rman不完全恢复中,restore后,必须要执行recover database using backup controlfile  until cancel,即使只有一个archivelog或redolog日志,也必须要恢复,否则无法resetlogs方式open数据库,即使使用隐藏参数强制拉起数据库,也会出现丢失数据的情况。】

SQL> recover database using backup controlfile until cancel;
ORA-00279: change 502875522 generated at 10/18/2022 02:00:04 needed for thread 1
ORA-00289: suggestion : /oracle/rman/o1_mf_1_21728_knv744j5_.arc
ORA-00280: change 502875522 for thread 1 is in sequence #21728

14:12:20 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oracle/rman/archivelog/1_21728_1081589810.dbf
ORA-00279: change 502890274 generated at 10/18/2022 02:18:44 needed for thread 1
ORA-00289: suggestion : /oracle/rman/o1_mf_1_21729_knv9ygjk_.arc
ORA-00280: change 502890274 for thread 1 is in sequence #21729
ORA-00278: log file '/oracle/rman/archivelog/1_21728_1081589810.dbf' no longer needed for this recovery

14:22:07 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel

--此时可以resetlogs方式打开数据库了。

SQL>alter database open resetlogs;

Database altered

(2)如果此时没有归档日志,可以使用隐藏参数,直接resetlogs方式(但容易丢数据,慎用):

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;

--最后将源数据库关闭,关闭监听,再开启数据库

SQL> shutdown immediate;
[oracle@qdmes219:/home/oracle]$lsnrctl stop
SQL> startup

15、如果可以在源库还可以正常使用

可以将最新的redo数据进行归档(执行归档次数,比redo log的个数多一次)

SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;

(4)将源库的归档拷贝到目标库

[oracle@qdmes219:/home/oracle]$scp -r /oracle/archivelog/MESORCL/archivelog/ oracle@192.168.20.220:/backup/rman/backup

(5)resetlogs打开数据库

SQL> alter database open resetlogs;

四、数据库日志文件调整(如果需要调整)

1、查看日志文件信息

SQL> col member for a100
SQL> select a.group#,a.thread#,a.bytes,a.status,b.member from v$log a,v$logfile b where a.group#=b.group#;

GROUP#       THREAD#     BYTES        STATUS                     MEMBER
---------- ---------- ---------- ---------------- ----------------------------------------------------------------------------------------------------
3              1       52428800       UNUSED        /oracle/app/oracle/product/11.2.0/db_1/dbs/D:APPADMINISTRATORORADATAMESORCLREDO03.LOG
2              1       52428800       UNUSED        /oracle/app/oracle/product/11.2.0/db_1/dbs/D:APPADMINISTRATORORADATAMESORCLREDO02.LOG
1              1       52428800       CURRENT       /oracle/app/oracle/product/11.2.0/db_1/dbs/D:APPADMINISTRATORORADATAMESORCLREDO01.LOG

2、添加日志组和文件

alter database add logfile group 5 '/oracle/app/oracle/oradata/mesorcl/redo05.log' size 50m;
alter database add logfile group 6 '/oracle/app/oracle/oradata/mesorcl/redo06.log' size 50m;
alter database add logfile group 7 '/oracle/app/oracle/oradata/mesorcl/redo07.log' size 50m;

3、查看当前的状态

SQL> select a.group#,a.thread#,a.bytes,a.status,b.member from v$log a,v$logfile b where a.group#=b.group#;

GROUP#       THREAD#     BYTES        STATUS                       MEMBER
---------- ---------- ---------- ---------------- ----------------------------------------------------------------------------------------------------
3             1        52428800        UNUSED     /oracle/app/oracle/product/11.2.0/db_1/dbs/D:APPADMINISTRATORORADATAMESORCLREDO03.LOG
2             1        52428800        UNUSED     /oracle/app/oracle/product/11.2.0/db_1/dbs/D:APPADMINISTRATORORADATAMESORCLREDO02.LOG
1             1        52428800        CURRENT    /oracle/app/oracle/product/11.2.0/db_1/dbs/D:APPADMINISTRATORORADATAMESORCLREDO01.LOG
5             1        52428800        UNUSED     /oracle/app/oracle/oradata/mesorcl/redo05.log
6             1        52428800        UNUSED     /oracle/app/oracle/oradata/mesorcl/redo06.log
7             1        52428800        UNUSED     /oracle/app/oracle/oradata/mesorcl/redo07.log

4、删除组1,2,3,再创建1,2,3组

--利用语句切换删除

SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;
SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> alter database drop logfile group 1;

--物理删除redo01.log,redo02.log,redo03.log

alter database add logfile group 1 '/oracle/app/oracle/oradata/mesorcl/redo01.log' size 50m; 
alter database add logfile group 2 '/oracle/app/oracle/oradata/mesorcl/redo02.log' size 50m; 
alter database add logfile group 3 '/oracle/app/oracle/oradata/mesorcl/redo03.log' size 50m;

五、创建临时文件(如果不存在临时文件)

1、查看当前临时文件

SQL> select * from v$tempfile;
SQL> select * from dba_temp_files;
SQL> select file_name,file_id,tablespace_name,bytes,status from dba_temp_files;

2、创建其他临时表空间,并设置为默认

SQL> create temporary tablespace temp2 tempfile '/oracle/app/oracle/oradata/mesorcl/temp02.dbf' size 20m autoextend on;
SQL> alter database default temporary tablespace temp2;

3、删除原来的临时表空间temp

SQL> drop tablespace temp including contents and datafiles;
[oracle@qdmes219:/oracle/app/oracle/oradata/mesorcl]$rm -rf temp01.dbf

4、创建新的临时表空间temp,并设为默认

SQL> create temporary tablespace temp tempfile '/oracle/app/oracle/oradata/mesorcl/temp01.dbf' size 20m autoextend on;
SQL> alter database default temporary tablespace temp;

5、删除temp2临时表空间

SQL> drop tablespace temp2 including contents and datafiles;

如果此时卡住,则退出SQL,重新执行删除操作即可,因为当前SQL可能在使用这个临时表空间。

六、升级数据字典

1、通过 startup upgrade 启动实例

--停库

SQL> shutdown immediate

--启动到upgrage模式

SQL> startup upgrade;

2、升级数据字典

大约5-10分钟

SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql
...
Final Actions
. 00:00:00
Total Upgrade Time: 00:04:26

PL/SQL procedure successfully completed.

3、重启实例

--停库

SQL> shutdown immediate

--启动到正常模式

SQL> startup;

七、测试数据库

查询表数据、进行日志切换等操作。

八、如果使用非完全恢复模式(且使用隐藏参数进行强制启动数据库),一定要做这个测试

1、查询所有表的数据量对比

SQL>select * from test1 union all
select * from test2 union all
select * from test3;

2、对索引进行分析(如果可以对所有索引对比最好)是否报错

SQL> analyze index mes_prd.IX_NEIP_TASK_CBANHAO validate structure online;
SQL> analyze index mes_prd.PK_NEIP_TASK_ID validate structure online;
SQL> analyze index mes_prd.IX_NEIP_LOG_CMSGID validate structure online;

 

 

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年9月16日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号