场景说明:oracle数据库为10.2 ,图形和属性数据约为10GB。GIS空间数据引擎为ArcSDE。要求快速从源服务器迁移到目标服务器上面,整个迁移时间要求在30分钟内完成。
1、 到源服务器上面,获取数据库信息,了解数据文件 、重做重做日志文件位置 、控制文件的位置,用sys用户,进入PLSQL,执行如下查询,保留好查询结果:
select name from v$datafile ;
select * from v$logfile ;
select * from v$controlfile ;
2、 检查服务器是否设定了快速闪回区,如果设定,则有闪回区大小和路径,则在恢复时,在目标数据库上面需要设定相同的路径。
3、 然后停止源服务器上面的oracle服务;根据第一个步骤,将datafile、logfile、control备份到一个文件夹中。
4、 然后备份参数文件(pfile) 、服务器参数文件(spfile)、密码文件。备份位置一般为 $/oracle/product/10.2.0/db_1/database 下面。参数文件在$/oracle/product/10.2.0/db_1/ database下面,如果找不到参数文件,则表明数据库用spfile启动,可以不需要备份。
参数文件命名为:init+oracle实例名.ora;
服务器参数文件命名为:SPFILE+oracle实例名.ora;
密码文件命名为:PWD+ oracle实例名.ora;
1、 然后到目标服务器上面安装oracle软件,创建相同名称的oracle实例(名称必须相同)。数据文件存放到在相同的盘区。
2、 把前面数据备份的 数据文件 、重做日志文件、控制文件覆盖 新安装的oracle位置。
3、 初始化参数文件、服务器参数文件覆盖、密码文件覆盖。
4、 重启动oracle服务即可,可能会提示监听错误,反复在windwos服务管理下面启动几次监听,或者重启一下机器。
或者进入sqlplus 如:
Sqlplus / as sysdba
运行:shutdown immediate ;
运行:startup open ;如果提示数据库打开,表示已经恢复成功,如果没有打开,则会有相应的错误提示。
上面的恢复都是要求数据文件在同一目录下面,这样限制太死,假如原始数据存放在D盘下面,而目标数据库服务器中没有D盘,怎么办呢。其实还是有办法的。
下面分2种情况详细说明,一种是当源和目标数据库的控制文件位置相同,部分数据文件位置不相同。一种是源数据库和目标数据库中控制文件、数据文件位置均不相同的情况,尤其是存放盘符不同。
方法:参数文件和密码文件、数据文件只需要直接覆盖,控制文件重建,然后再重置临时表空间位置。
举例:如源数据库和目标数据库的控制文件存放在D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/下面,原始数据文件test.ora存放在D:/tablespace目录下面,而目标数据库要求存放在D:/tabspa_new下面,怎么实行迁移,具体如下所示:
1、先查询源始库的数据文件位置,如下图所示:
2、从源数据库中备份数据文件和重做重做日志文件(这里不需要备份控制文件),覆盖到目标库的位置。
3、在新的实例上面,采用nomount的方式启动实例,数据库不做装载,然后建立控制文件,这里记得修改数据文件新的位置,将test.ora存放到D:/tabspa_new文件夹下面。
4、执行一次数据恢复,保证控制文件和数据文件的一致性,然后就可以打开数据库,打开数据库后,还需要重置临时表空间位置。具体操作如下所示:
5、做完上述操作后,数据库则迁移完成,执行查询,可以返回对应的结果。
方法:用源数据库的密码文件覆盖目标数据库中的密码文件,服务器参数文件spfile不需要理会,将目标数据库用参数文件pfile启动。然后重建控制文件,再重置临时表空间位置。
举例:假如源数据库在实例建在D盘,目标数据库要求迁移到E盘。
1、原始数据库的控制文件和数据文件位置:
2、停止源数据库的服务,然后备份数据文件、重做重做日志文件和密码文件。
3、在目标数据库上面创建新的oracle实例,新实例的数据文件、重做重做日志文件、密码文件位置为E盘oracle_data目录下面。启动实例后,进入sqlplus,根据服务器参数文件spfile创建一份参数化文件(pfile)。Create pfile from spfile,文件创建完后,默认位置为$/oracle/product/10.2.0/db_1/database下面。
4、然后关闭oracle实例,将$/oracle/product/10.2.0/db_1/database下面的SPfile重命名(注意是spfile,不是pfile)。同时将步骤 2备份的数据文件、重做日志文件、密码文件覆盖到目标数据库相应位置。
5、以nomount方式启动数据库,然后重建控制文件。
6、重建控制文件后执行一次恢复,如果弹出oracle 264错误,表示数据库是一致的,不需要恢复,打开数据库,如果打开成功表示数据迁移成功。然后在把临时表空间重建一下,如下图所示:
控制文件重建时,脚本比较麻烦,一不小心敲错一个字符就得重来,其实只要把控制文件备份成文本文件,然后用记事本打开修改里面的内容即可。命令为alter database backup controlfile to trace 。备份好的文本文件一般位于$:/oracle/product/10.2.0/admin/orcl/udump下面,文件大小一般为10KB左右。如下图所示: