数据库迁移手记

来源:互联网 发布:想做网站ubuntu和linux 编辑:程序博客网 时间:2024/04/27 21:31

数据库迁移:
服务器A: solaris 8 64位 + oracle 9204 + 裸设备
服务器B:solaris 10 64位 + oracle 9204 + 文件系统

服务器:A -> B
操作系统:SOLARIS 8 X86_64 -> SOLARIS 10 X86_64
数据库版本:9204 -> 9204
文件系统:裸设备 -> 文件系统

本次迁移最麻烦的地方是:
1、两个服务器路径不一致
2、文件系统不一致
3、源数据库服务器空间不足

最终采取蚂蚁搬家的方法完成了这次迁移,下面是具体步骤:
迁移步骤:
一、在B机上安装数据库软件、并升级到9204
步骤略
二、在A机rman备份数据、拷贝到B机
由于A机是裸设备、B机打算用文件系统,所以选择使用rman备份的方式做。
A机空间不足,不能一次全库备份,只能采取蚂蚁搬家的方式做:每次备份部分表空间,然后把备份集传到B机后,删除备份集,如此几次,直到把数据库搬完。

run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/ndmain_%U';
backup tablespace NDMAIN;
release channel c1;
}

拷贝到异地,删除备份集
run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/lt_ndmain_%U';
backup tablespace LT_INDEX_TS ;
release channel c1;
}
拷贝到异地,删除备份集
run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/ndx_undo_%U';
backup tablespace NDINDEX,UNDOTBS1 ;
release channel c1;
}
拷贝到异地,删除备份集
-- 注意,rman认为log是关键字,所以要用双引号括起来,否则报错
run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/lt_ts_%U';
backup tablespace "LOG",S101,LT_TS03,LT_TS06,LT_TS11,LT_TS15,LT_TS16,LT_TS12,LT_TS05,LT_TS04;
release channel c1;
}
拷贝到异地,删除备份集
-- 注意,rman认为test是关键字,所以要用双引号括起来,否则报错
run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/other_%U';
backup tablespace LT_TS01,LT_TS09,PERFSTAT,LT_TS14,LT_TS13,LT_TS10,LT_TS08,LT_TS02,LT_TS07,INDX,"TEST",SYSTEM,XDB,USERS,CWMLITE,ODM,DRSYS,TOOLS ;
release channel c1;
}
拷贝到异地,删除备份集

备份归档:
run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/arch_%U';
backup archivelog all;
release channel c1;
}

备份当前控制文件
run{
allocate channel c1 device type disk format '/opt/oracle/oradata/oradata/bjdb01/archive/backup/con_%U';
backup current controlfile;
release channel c1;
}


三、在B机上创建需要的路径
mkdir -p /data/oracle/admin/precen/{cdump,bdump,udump}
mkdir -p /data/archivelog/precen

如果不是用oracle用户创建的话,还要进行授权。
chown -R oracle:oinstall /data
chown -R 755 /data

四、处理参数文件
在A库生成pfile,传到B机上,然后结合B机环境修改相关参数(主要是instance_name和与目录相关的几个参数)


五、创建密码文件
密码文件的名称要与设置的新的ORACLE_SID相一致:
orapwd file=orapwprecen password=test entries=10

六、还原数据库

1、做软链接
由于源服务器和新服务器的路径不一样,必须要做软链接使得rman可以正确读取到放到新服务器上的备份集:
-bash-3.00# mkdir -p /opt/oracle/oradata/oradata/bjdb01/archive/
-bash-3.00# ln -s /data/soft/backup/precen /opt/oracle/oradata/oradata/bjdb01/archive/backup

2、启动实例
-bash-3.00$ export ORACLE_SID=precen
-bash-3.00$ sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sat Aug 25 12:39:30 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

SQL> startup nomount pfile=?/dbs/init@.ora
ORACLE instance started.

Total System Global Area 1413451696 bytes
Fixed Size 733104 bytes
Variable Size 620756992 bytes
Database Buffers 788529152 bytes
Redo Buffers 3432448 bytes

3、还原控制文件
Recovery Manager: Release 9.2.0.4.0 - 64bit Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: precen (not mounted)

RMAN> set dbid=3255963758;

executing command: SET DBID

RMAN> restore controlfile from '/data/backup/precen/con_v9iq711m_1_1';

Starting restore at 25-AUG-07

using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=15 devtype=DISK
channel ORA_DISK_1: restoring controlfile
channel ORA_DISK_1: restore complete
replicating controlfile
input filename=/data/oradata/precen/control01.ctl
output filename=/data/oradata/precen/control02.ctl
output filename=/data/oradata/precen/control03.ctl
Finished restore at 25-AUG-07

RMAN> alter database mount;

database mounted

4、修改日志文件的路径
在SQLPLUS执行:
SQL> alter database rename file '/opt/oracle/oradata/oradata/bjdb01/archive/redo/log01.ora' to '/data/oradata/precen/log1.ora';

Database altered.

安装这种方法把所有的日志路径都修改了,否则在后面open resetlogs时会出错。

5、还原数据库
虽然备份的时候我们是分多次备份的方式,但是在还原的时候因为空间足够,我们就没必要这样做了,直接全库恢复就行了,rman会自动从多个备份集中读取需要的数据。
因为备份过来的控制文件记录的的文件位置还是原库的路径,所以在还原前需要修改路径:

用下面的SQL按照一定格式重命名数据文件:
SELECT 'set newname for datafile ''' || FILE_NAME ||
''' to ''/data/oradata/precen/' ||lower(TABLESPACE_NAME)||
row_number() over (partition by tablespace_name order by file_id)|| '.ora'';' sql
FROM DBA_DATA_FILES;

在RMAN中执行生成的语句:
run
{
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
set newname for datafile '/opt/oracle/oradata/oradata/bjdb01/cwmlite01.dbf' to '/data/oradata/precen/cwmlite1.ora';
set newname for datafile '/opt/oracle/oradata/oradata/bjdb01/drsys01.dbf' to '/data/oradata/precen/drsys1.ora';
......
set newname for datafile '/opt/oracle/oradata/oradata/bjdb01/xdb01.dbf' to '/data/oradata/precen/xdb1.ora';
set newname for datafile '/opt/oracle/oradata/oradata/bjdb01/xdb02.dbf' to '/data/oradata/precen/xdb2.ora';
restore database;
switch datafile all;
recover database;
alter database open resetlogs;
release channel c1;
release channel c2;
}


6、添加临时表空间
ALTER TABLESPACE TEMP ADD TEMPFILE '/data/oradata/precen/temp1.ora'
SIZE 2047M REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
ALTER TABLESPACE NDTEMP ADD TEMPFILE '/data/oradata/precen/temp2.ora'
SIZE 2047M REUSE AUTOEXTEND OFF;
ALTER TABLESPACE NDTEMP ADD TEMPFILE '/data/oradata/precen/temp3.ora'
SIZE 2047M REUSE AUTOEXTEND OFF;
ALTER TABLESPACE NDTEMP ADD TEMPFILE '/data/oradata/precen/temp4.ora'
SIZE 2047M REUSE AUTOEXTEND OFF;
ALTER TABLESPACE NDTEMP ADD TEMPFILE '/data/oradata/precen/temp5.ora'
SIZE 2047M REUSE AUTOEXTEND OFF;
ALTER TABLESPACE NDTEMP ADD TEMPFILE '/data/oradata/precen/temp6.ora'
SIZE 2047M REUSE AUTOEXTEND OFF;
ALTER TABLESPACE NDTEMP ADD TEMPFILE '/data/oradata/precen/temp7.ora'
SIZE 2047M REUSE AUTOEXTEND OFF;


三、修改数据库名称:
export ORACLE_SID=precen
create spfile from pfile;
nid target=sys/test dbname=precen logfile=~/nid.log

修改参数,把db_name修改为precen
重建密码文件:
orapwd file=orapwprecen password=test entries=10

四、打开数据库
修改db_name后需要以resetlogs方式打开数据库:
alter database open resetlogs;

 

来源:http://space.itpub.net/231499/viewspace-63851