1. 综述
2. 原库备份
2.1. 创建备份集目录:
2.2. 创建Rman用户
2.3. 备份数据库
3. 准备目标服务器环境(安装Oracle)
3.1. 配置目标服务器环境
安装缺失rpm
检查HostName
配置系统内核参数
3.2. 创建Oracle用户
3.3. 配置Oracle用户环境
创建相应目录
修改Oracle启动环境
准备安装程序
3.4. 运行安装程序
3.5. 创建测试库,测试安装环境
4. 在目标数据库上还原数据库
拷贝备份集
启动数据库和Rman
还原控制文件
还原初始配置文件
还原数据库
5. 检查迁移
本次试验主要目的是,利用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) 请严格按照以下步骤进行。
以下操作在源服务器A上进行。
以Orcle用户运行:
mkdir –p /home/oracle/store
创建的目录用于存储备份集。
创建表空间
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;
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
以下命令在A上以root用户执行。
目标服务器为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,查看 /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
groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle (设定oracle用户为oinstall、dba用户组的成员)
# passwd oracle (设定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用户下的 .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文件),也可以右键解压。
如果本身是已经解压好的文件直接复制、粘贴即可
以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个
运行$ORACLE/bin/dbca 创建数测试据库,测试安装效果。
若不能远程连接,可运行$ORACLE/bin/netca 配置监听。
把源服务器(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服务器的相应文件夹下。
注意:目录结构一定要一致。
修改/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;
还原完成。