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. 檢查遷移