1. 综述
本次试验主要目的是,利用Rman完成Oracle数据库的迁移:
源服务器:A RedHat Linux Enterprise 4 Oracle 10
目标服务器:B RedHat Linux Enterprise 4 Oracle 10
迁移中的几个要点:
(1) 这是一种欺骗rman的思路,把在A服务器上的备份完全搬到B服务器上,在B服务器上营造还原环境,目的就是让rman“感觉”就像在A上做还原一样。从而使还原后的数据库与A上的数据库完全一致。
(2) 在源服务器(A)上用rman进行create catalog和regist database的时候是在同一个数据库上进行的,也就是存储库和目标库是一个库。
(3) 要确保两个服务器上的以下完全目录相同:
l ROACLE_HOME
l ORALCE_BASE
l ORALE_HOME/admin/$ORACLE_SID 及其子目录
l 备份集目录,就是存放备份集的目录
(4) 请严格按照以下步骤进行。
2. 原库备份
以下操作在源服务器A上进行。
2.1. 创建备份集目录:
以Orcle用户运行:
mkdir –p /home/oracle/store
创建的目录用于存储备份集。
2.2. 创建Rman用户
创建表空间
SQL>create tablespace rman datafile ‘/home/oracle/oracle/product/10.2.0/oradata/orcl/rman.rdf’
size 125m autoextend on next 50m maxsize 500m;
创建用户
SQL>create user rman identified by rman;
SQL>alter user rman default tablespace rman quota unlimited on rman;
授权
SQL>grant recovery_catalog_owner to rman identified by rman;
2.3. 备份源数据库
export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_4
export ORACLE_SID=orcl
cd $ORACLE_HOME/bin
rman catalog rman/rman
创建catalog:
RMAN> create catalog;
RMAN> exit;
注册数据库:
rman target / catalog rman
RMAN> register database:
开始备份:
注意,format中设置的路径,一定要是在2.1步中创建的备份集目录。
RMAN>run {
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/store/ %F';
allocate channel d1 type disk;
allocate channel d2 type disk;
backup incremental level=0 database format '/home/oracle/store /d_%T_%s.bak';
release channel d1;
release channel d2;
}
原数据库备份完毕。会在备份集目录中看到备份集,本例中为:
d_20100903_2.bak
d_20100903_1.bak
c-1229209037-20100903-00
3. 准备目标服务器环境(安装Oracle)
以下命令在A上以root用户执行。
3.1. 配置目标服务器环境
安装缺失rpm
目标服务器为RedHat Enterprise 4,为了正常安装Oralce,需要安装一下程序包:
compat-libstdc++-33-3.2.3-47.3.i386.rpm
libaio-0.3.105-2.i386.rpm
libaio-devel-0.3.105-2.i386.rpm
在RedHat的光盘镜像中可以找到以上包,拷贝到RedHat中,双击安装,或通过命令安装:
rpm –vih path
检查HostName
运行命令hostname,得到hostname,查看 /etc/hosts中是否有hostname的配置,如果没有,添加。
配置系统内核参数
修改在/etc/sysctl.conf文件,在该文件中添加以下参数:
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
3.2. 创建Oracle用户
groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle (设定oracle用户为oinstall、dba用户组的成员)
# passwd oracle (设定oracle用户的密码)
3.3. 配置Oracle用户环境
重启B,以oracle用户登录。
创建相应目录
分析原服务器,明确以下路径:
(1)oracle_home: /home/oracle/oracle/
(2)oracle_base: /home/oracle/oracle/product/10.2.0/db_4
(3)oraInventory: /home/oracle/oraInventory
以上三个目录在安装Oracle时需要指定。
(4)$ORACLE_HOME/damin/orcl/ 及其子目录,在本例中在本例中是:/home/oracle/oracle/product/10.2.0/db_4/admin/orcl
(5)备份集目录,就是在备份数据库的时候存放备份集的那个目录:
/home/oracle/store
创建以上目录:
mkdir –p /home/oracle/oracle/product/10.2.0/db_4
mkdir –p /home/oracle/oracle/product/10.2.0/db_4
mkdir –p /home/oracle/oraInventory
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/udump
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/pfile
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/dpdump
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/cdump
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/bdump
mkdir –p /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/adump
mkdir –p /home/oracle/store
创建存储Oraclea安装文件的目录:
mkdir –p /home/oracle/software
修改Oracle启动环境
以oracle用户登录,修改oracle用户下的 .bash_profile 文件。增加以下参数:
vi .bash_profile (执行vi命令来修改.bash_profile)
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
# 以下是我们所需配置的内容(ORACLE_HOMEh和ORALE_BASE根据实际情况自己定)
umask 022
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/home/oracle/oracle/; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_4; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
#LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL
注意:设定完毕一定要重启系统。
准备安装程序
以oralce用户运行:
复制和解压10201_database_linux32.zip文件到/home/oracle/software下:
# unzip /home/oracle/software/10201_database_linux32.zip (解压zip文件),也可以右键解压。
如果本身是已经解压好的文件直接复制、粘贴即可
3.4. 运行安装程序
以oracle用户运行:
$ /home/oracle/software /database/./runInstaller
安装期间注意:
(1)选择高级安装。
(2)设置一下目录为之前创建的目录,一定要和原服务器一致:
oracle_home: /home/oracle/oracle/
oracle_base: /home/oracle/oracle/product/10.2.0/db_4
oraInventory: /home/oracle/oraInventory
(3)不要创建数据库实例,只安装Oracle软件。便于调试错误。
注:如何区分ORACLE_HOME和ORACLE_BASE
ORACLE_BASE下是admin和product
ORACLE_HOME下则是Oracle的命令、连接库、安装助手、listener等等一系列的东东。
这只是ORACLE自己的定义习惯。ORACLE_HOME比ORACLE_BASE目录要更深一些。也就是说:ORACLE_HOME=$ORACLE_BASE/product/version,但是如果安装的不标准,会造成这两个目录不按以上规则组织,这时候就按以上提供的信息区分。
ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。
简单说,你如果装了2个版本的oracle,那么ORACLE_BASE可以是一个,但ORACLE_HOME是2个
3.5. 创建测试库,测试安装环境
运行$ORACLE/bin/dbca 创建数测试据库,测试安装效果。
若不能远程连接,可运行$ORACLE/bin/netca 配置监听。
4. 在目标数据库上还原数据库
拷贝备份集
把源服务器(A)上的以下文件拷贝到目标服务器(B)上的相应文件夹中:
(1)备份集目录下的所有文件:
也就是/home/oracle/store 下的所有文件
(2)源服务器上的初始化文件:
在源服务器A的 /home/oracle/oracle/product/10.2.0/db_4/admin/orcl/pfile 文件夹下,有个init.ora.xxxxxxxxx 文件,xxxxxxxxx是一串数字,本例中为:init.ora.928200991354。拷贝到B服务器的相应文件夹下。
注意:目录结构一定要一致。
启动数据库和Rman
修改/home/oracle/oracle/product/10.2.0/db_4/admin/orcl/pfile/init.ora.928200991354 文件,添加参数:
_allow_resetlogs_corruption=true
启动数据库:
在目标服务器B上,以oracle用户至执行:
export ORACLE_SID=orcl
sqlplus “/as sysdba”
SQL> startup pfile=”/home/oracle/oracle/product/10.2.0/db_4/admin/orcl/pfile/init.ora.928200991354” nomount;
SQL> exit;
启动rman:
在源服务器(A)中,查询dnid:
select dbid from v$database;
记住这个数,本例中dbid为:1229209037
运行:
$ORACLE_HOME/bin/rman
RMAN> connect target / ;
RMAN> set dbid=1229209237;
还原控制文件
RMAN> restore controlfile from '/home/store/rman/c-1229209037-20100903-00’;
还原初始配置文件
RMAN> restore spfile from '/home/store/rman/c-1229209037-20100903-00';
还原数据库
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
RMAN> Alter database open resetlogs;
RMAN> exit;
还原完成。
5. 检查迁移