环境信息:
源库 | 目标库 | |
---|---|---|
操作系统 | WIN7 | WIN SVR 2012 R2 |
系统盘符 | C,D,E,F | C,D |
IP | x.x.x.216 | x.x.x.112 |
数据库版本 | 10.2.0.4.0 - 64bi | 10.2.0.4.0 - 64bi |
存储方式 | 单实例 | 单实例 |
ORACLE_HOME | D:\oracle\product\10.2.0\db_1 | D:\oracle\product\10.2.0\db_1 |
ORACLE_SID | ORCL | ORCL |
数据库迁移思路:
- 目标系统创建新的数据库
- 将源库中所有控制文件,数据文件复制到目标库中
- 重建控制文件修改相应路径(如果文件路径有变更)
- 介质恢复所有数据文件
- 启动数据库
具体恢复步骤:
- 源库中查询控制文件、REDO 文件、数据文件位置并且记录下来,并且查询数据库 DBID 记录下来
select name from v$datafile;
select name from v$controlfile;
select * from v$logfile;
select dbid from v$database;
- 进行切换日志组,触发检查点,确保数据由脏块进入数据文件中。
alter system switch logfile;
alter system checkpoint;
shutdown immediate;//可选[取决于是否停机迁库]
- 关闭目标数据库 (以下皆在目标数据库进行操作)
shutdown immediate;
- 以 notmount 模式启动,并且设置数据库 DBID 后关闭数据库
startup nomount;
set dbid=1526707455;//(源库DBID)
shutdown immediate;
- 将所有控制文件、REDO 文件及数据库文件复制到新的系统环境中(因为 216 系统盘与 112 系统盘不一致,故移动到目标库 D 盘某一固定文件夹中)
因为本次复制并无参数文件故控制文件(3 个)需放在 ORACLE10G 默认控制文件的路径下 D:\oracle\product\10.2.0\oradata\orcl - 启动 mount 模式启动目标数据库
startup mount;
- 导出控制文件重建语句
alter database backup controlfile to trace as 'c:\REBUILDCTL.SQL';
-
编辑 REBUILDCTL.SQL 文件夹,将数据文件,REDO 文件,临时文件等替换为放置到目标系统后的相对文件路径。
(需修改的路径不止途中圈出的,需修改所有路径为目标系统规划路径)
关闭数据库,并且运行 REBUILDCTL.SQL 文件
shutdown immediate;
@c:\REBUILDCTL.SQL;
- 以 mount 模式进行启动,并且对所有数据文件进行介质恢复(因为重建控制文件会导致 scn 更新,导致与数据文件中不统一)
recover database;
- 清除重做日志打开数据库
alter database open resetlogs;
- 验证数据库(验证源数据库中的数据是否到目标数据库中)
PS
- 之前想通过 windows 命令创建虚拟盘符 E,F 来避免为了修改数据文件的路径而去对控制文件进行重建,然而发现 oracle 识别不到虚拟盘符的路径,所以还是得老老实实得去重建修改掉相对路径。
- 其他参考地址:
- https://jingyan.baidu.com/article/ca00d56c6d0d9de99eebcf82.html
- https://www.cnblogs.com/Snowfun/articles/4805048.html