当前位置:文档之家› oracle复制数据文件迁移方法

oracle复制数据文件迁移方法


一、迁移背景

总局为了整合资源,需要把原有服务器130.9.1.49迁移到另外一台服务器上,IP地址不变;

由于操作系统(AIX7.0)版本、分区类型不变,数据库版本(11.2.0.3)相同,数据库处于非归档模式下,数据量也大,exp效率太低,所以决定采用数据文件进行恢复。

二、数据迁移步骤

1、查找原库物理文件位置

--查看数据文件
select name from v$datafile;

--查看临时文件
select name from v$tempfile;

--查看日志文件
select member from v$logfile;

--查看控制文件
select name from v$controlfile;

此时要分析数据文件所在的不同路径,需要在新服务器上建立相应的文件夹

2、关闭原服务器数据库,修改原服务器IP。
原服务器为临时IP(100.16.91.70),新服务器IP(130.9.1.49)

3、130.9.1.49 oracle环境配置
创建oracle用户
复制100.16.91.70配置文件/home/oracle/.profile到130.9.1.49下/home/oracle/.profile下,./.profile使其生效

4、新服务器安装oracle软件(只安装软件,不建库)
因为是只安装数据库软件,比较简单,此处省略安装方法

又因为30.9.1.49 oracle用户配置文件是复制100.16.91.70而来,所以安装后两个服务器数据库环境一样

5、复制文件(目录不存在的需要新建)

a)第一步查询出的所有物理文件复制到130.9.1.49上采用 rcp命令,此命令使用方法附在最后

b)复制100.16.91.70 oracle安装的配置目录文件
oracle目录下的admin、flash_recovery_area(我这里没这个目录),database(PWDfile、pfile 也没)、dbs(spfile)、NETWORK\ADMIN(listener.ora、tnsnames.ora

c)rcp -Rf说是复制的时候会一同复制文件的属性和所有者信息,但我发现复制过来的文件夹及文件的所有者变成root:system了
所以要修改以上两个步骤复制的所有文件夹及文件的所有者
比如:chown -Rf oracle:dba $ORACLE_HOME/admin

5、启动数据库

startup

测试数据库,测试监听情况



三、碰到的问题

由于粗心,复制原数据库数据文件时,只停了应用,没有关闭原数据库,导致在新服务器上启动数据库的时候碰到几个问题,记录如下:

启动数据库报错
Total System Global Area 7482626048 bytes
Fixed Size 2236048 bytes
Variable Size 989856112 bytes
Database Buffers 6476005376 bytes
Redo Buffers 14528512 bytes
Database mounted.
ORA-01172: recovery of thread 1 stuck at block 208 of file 3
ORA-01151: use media recovery to recover block, restore backup if needed

采取恢复此文件
recover datafile 3;

SQL> recover datafile 3;
ORA-03113: e

nd-of-file on communication channel
Process ID: 13959320
Session ID: 232 Serial number: 3

看来是复制数据文件没关数据库的问题,只好重新复制此文件
先通过语句找出文件名:
select file_name from dba_data_files where file_id='3'

重新复制文件
rcp -rp /langchaodata/O817/undotbs01.dbf rcp1:/langchaodata/O817

再恢复此文件又报错
SQL> recover datafile 3;
ORA-00283: recovery session canceled due to errors
ORA-01122: database file 3 failed verification check
ORA-01110: data file 3: '/langchaodata/O817/undotbs01.dbf'
ORA-01207: file is more recent than control file - old control file

唉,控制文件的问题,继续处理吧

重建控制文件
SQL> alter database backup controlfile to trace as '/oracle/oradata/test.sql';

此时生成一个test.sql脚本,里边包含了各种数据库模式下重建控制问价你的方式

我选择了,保存到aa.sql里,部分内容如下

CREATE CONTROLFILE REUSE DATABASE "O817" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1530
LOGFILE
GROUP 1 '/oracle/oradata/redo01.log' SIZE 512M BLOCKSIZE 512,
GROUP 2 '/oracle/oradata/redo02.log' SIZE 512M BLOCKSIZE 512,
GROUP 3 '/oracle/oradata/redo03.log' SIZE 512M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/langchaodata/O817/system01.dbf',
'/langchaodata/O817/sysaux01.dbf',
'/langchaodata/O817/undotbs01.dbf',
'/langchaodata/O817/users01.dbf',
。。。。。。。

'/langchaodata/O817/DATA_BS1_15.DBF',
'/langchaodata/O817/DATA_BS1_11.DBF'
CHARACTER SET ZHS16GBK
;

然后执行此脚本

SQL> recover database;
SQL> alter database open;



rcp命令配置方法:
比如要把主机A的文件复制到主机B
配置主机A:
vi /etc/hosts ,打开文件后最后边添加
主机B的IP rcp2
根目录编辑文件(没有则创建)
vi /.rhosts 添加 rcp2 root


配置主机B:
vi /etc/hosts ,打开文件后最后边添加
主机A的IP rcp1
根目录编辑文件(没有则创建)
vi /.rhosts 添加 rcp1 root

配置完成后,比如把主机A /oracle/test.sql复制到主机B /test目录
则执行
rcp /oracle/test.sql rcp2:/test

相关主题
文本预览
相关文档 最新文档