利用RMAN進行Oracle數據庫的異構遷移(Windows to Linux)

1、 名詞解釋
RMAN:RMAN(Recovery Manager)是一種用於備份(backup)、還原(restore)和恢復(recover)數據庫的 Oracle 工具。

冷備:數據庫關閉狀態時進行備份

CRS:Cluster Ready Service(Oracle集羣就緒服務)

RAC:RAC是real application clusters的縮寫,譯爲“實時應用集羣”, 是Oracle新版數據庫中採用的一項新技術,是高可用性的一種,也是Oracle數據庫支持網格計算環境的核心技術。

2 、 方案說明
爲了保障系統能橫向擴展,使用RAC架構,操作系統爲Linux系統。由此需要Windows 向 Linux ASM RAC 遷移的方案。
方案主要分成4大塊,分別是源端數據備份、目標端還原、還原後的調整、RAC相關參數調整,以下是對每個步驟的時間預估。預估時間前每個步驟都做了測試,業務數據約1.5T。

3、 源端備份
3.1 一致性關閉數據庫
Oracle 在Windows下的redo 不支持在Linux進行還原,所以備份必須是冷備。
命令:

sqlplus / as sysdba
shutdown immediate
startup mount

3.2 創建pfile
生成pfile文件
命令:

create pfile='c:\rmanbackup\pfile.ora' from spfile;

3.3 創建備份
此處使用RMAN對數據庫進行備份,以下的備份命令會進行壓縮,是否使用壓縮需要考慮傳輸速度快還是CPU壓縮數據快。如果源端Windows服務器磁盤IO/CPU性能不怎麼樣,建議不要壓縮。
命令:

rman target /

run{
allocate channel c1 type disk maxpiecesize=30G;
allocate channel c2 type disk maxpiecesize=30G;
allocate channel c3 type disk maxpiecesize=30G;
allocate channel c4 type disk maxpiecesize=30G;
allocate channel c5 type disk maxpiecesize=30G;
allocate channel c6 type disk maxpiecesize=30G;
allocate channel c7 type disk maxpiecesize=30G;
allocate channel c8 type disk maxpiecesize=30G;
allocate channel c9 type disk maxpiecesize=30G;
allocate channel c10 type disk maxpiecesize=30G;
backup as compressed backupset database tag 'dbfull' format 'c:\rmanbackup\full_%U_%T';
backup current controlfile format 'c:\rmanbackup\ctl_%U_%T';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}

3.4 修改pfile文件
將一系列目錄改爲linux上的對應目錄,注意sga和PGA的修改,控制文件位置做好調整,調整後將RMAN備份文件、pfile文件傳到linux上。
修改:

#*.audit_file_dest='C:\app\Administrator\admin\ORCL\adump'
*.audit_file_dest= "/u01/app/oracle/admin/ORCL/adump"
*.audit_trail='db'
*.compatible='11.2.0.4.0'
#*.control_files='C:\app\Administrator\oradata\ORCL\control01.ctl','C:\app\Administrator\fast_recovery_area\ORCL\control02.ctl'
*.control_files='+DATA/ORCL/controlfile/control01.ctl','+DATA/ORCL/controlfile/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORCL'
#*.db_recovery_file_dest='C:\app\Administrator\fast_recovery_area'
*.db_recovery_file_dest='+LOG'
#*.db_recovery_file_dest_size=4385144832
*.db_recovery_file_dest_size=512G
#*.diagnostic_dest='C:\app\Administrator'
*.diagnostic_dest="/u01/app/oracle"
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.pga_aggregate_target=2G
*.sga_max_size=3G
*.sga_target=3G

4、 目標端還原
4.1 創建路徑
目標環境創建pfile中幾個參數的路徑:包括audit_file_dest、control_files、數據文件路徑。其中audit_file_dest需要在兩個節點中分別創建。
命令:

su - oracle
mkdir -p /u01/app/oracle/admin/ORCL/adump
exit
su - grid
asmcmd <<eof
mkdir +DATA/ORCL
mkdir +DATA/ORCL/controlfile
mkdir +DATA/ORCL/datafile
exit
eof
exit
chmod 777 /rmanbackup/ -R

4.2 nomount啓動數據庫
在節點1上啓動數據庫到nomount狀態,如報錯,根據報錯排查對應錯誤。
命令:

su - oracle
export ORACLE_SID=ORCL1
sqlplus / as sysdba <<eof
startup nomount pfile='/rmanbackup/pfile.ora';
exit
eof

4.3 catalog 備份文件
備份文件存放的位置是記錄在控制文件中的,前面做了控制文件的還原,能查詢到所有的備份信息。但是記錄的備份位置都是Windows的路徑,此處主要做了備份的校驗刪除失效的備份信息,加載傳輸到Linux系統上的備份文件信息。其中/rmanbackup是本次演示備份文件存放的位置,根據實際情況做好調整。
命令:

rman target / <<eof
restore controlfile from '/rmanbackup/CONTROL_04UHB8EN_1_1';
sql 'alter database mount';
crosscheck backup;
delete expired backup;
yes
catalog start with '/rmanbackup/FULL_';
yes
eof

4.4 還原數據庫
以下RMAN命令,會將備份還原出一個新庫,set newname for database to '+DATA/ORCL/datafile/dbf_%U’指的是將數據文件指定到一個新的目錄下。這裏存在一個問題,數據文件名稱就不再和以前一致了。
命令:

rman target / <<eof
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate channel c7 type disk;
allocate channel c8 type disk;
allocate channel c9 type disk;
allocate channel c10 type disk;
set newname for database to '+DATA/ORCL/datafile/dbf_%U';
restore database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}
switch database to copy;
exit
eof

5、 目標端還原後的調整
5.1 創建spfile
前面啓動時直接指定了pfile文件,爲了方便參數調整,通過pfile創建一個spfile,保存到ASM磁盤組中,再將默認pfile的內容修改爲spfile的位置。
注意,如果實例名與本方案不一樣,需要注意調整實例名、路徑、文件名。
命令:

sqlplus / as sysdba <<eof
alter database open resetlogs upgrade;
create spfile='+DATA/ORCL/spfileORCL.ora' from pfile='/rmanbackup/pfile.ora';
! echo "spfile=+DATA/ORCL/spfileORCL.ora" > $ORACLE_HOME/dbs/initORCL1.ora
eo

5.2 創建redo日誌組
RAC數據庫在啓用其他節點前,需要爲這個節點添加redo日誌。日誌的存放位置,可以根據需要做調整,爲了保證節點奔潰後事物能繼續,需要將redo文件存放在ASM磁盤組中。
命令:

sqlplus / as sysdba <<eof
alter database add logfile thread 1 group 11 ('+LOG') size 1024M;
alter database add logfile thread 1 group 12 ('+LOG') size 1024M;
alter database add logfile thread 1 group 13 ('+LOG') size 1024M;
alter database add logfile thread 1 group 14 ('+LOG') size 1024M;
alter database add logfile thread 1 group 15 ('+LOG') size 1024M;
alter database add logfile thread 1 group 16 ('+LOG') size 1024M;
alter database add logfile thread 1 group 17 ('+LOG') size 1024M;
alter database add logfile thread 1 group 18 ('+LOG') size 1024M;
alter database add logfile thread 2 group 21 ('+LOG') size 1024M;
alter database add logfile thread 2 group 22 ('+LOG') size 1024M;
alter database add logfile thread 2 group 23 ('+LOG') size 1024M;
alter database add logfile thread 2 group 24 ('+LOG') size 1024M;
alter database add logfile thread 2 group 25 ('+LOG') size 1024M;
alter database add logfile thread 2 group 26 ('+LOG') size 1024M;
alter database add logfile thread 2 group 27 ('+LOG') size 1024M;
alter database add logfile thread 2 group 28 ('+LOG') size 1024M;
eof

5.3 查詢自動生成的redolog
查詢數據庫根據原Windows環境自動創建的redolog,並記住group#號。這部分日誌會自動生成在$ORACLE_HOME/dbs目錄下,需要刪除掉。
命令:

$sqlplus / as sysdba
set lines 300
set pages 300
col member for a60

5.4 刪除自動生成的redolog
前面查的是三組,這裏就切3次日誌。如果遇到無法刪除的,再次切換日誌並觸發檢查點操作。
命令:

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;

5.5 創建UNDO2
源庫是單實例數據庫時,通常只有1個undo表空間,而RAC中每個節點都需要1個UNDO表空間,所以雙節點的RAC需要再加多一個UNDO表空間。
命令:

create undo tablespace UNDOTBS2 datafile '+DATA/orcl/datafile/undotbs02.dbf' size 100M AUTOEXTEND ON next 200M;

5.6 重建TEMP表空間
還原後,所有的temp表空間都需要重新創建,通過查詢就能發現,其對應的文件路徑還是Windows環境下的路徑。
命令:

select file#, ts# ,name ,status from v$tempfile;

根據查詢,確定目前有多少個臨時表空間,這裏只有一個。將其刪除,重建。數據庫的默認臨時表空間是不然刪除的。所以,如果只有一個表空間,就需要一個臨時頂替的臨時表空間。
命令:
#創建新的tempfile:

CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '+data/orcl/datafile/TEMP2.DBF' SIZE 200m AUTOEXTEND ON ;

#將新的temp表空間設置爲默認表空間:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

#刪除原默認temp 表空間:

drop tablespace temp;

#重新創建原temp表空間:

CREATE TEMPORARY TABLESPACE temp TEMPFILE '+data/orcl/datafile/TEMP01.DBF' SIZE 1G REUSE AUTOEXTEND ON NEXT 200M  MAXSIZE 30G;

#將數據庫默認temp表空間設置爲原表空間:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

#刪除剛剛創建的temp2 臨時表空間:

DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

注意:上一步修改完之後, 刪除temp表空間可能會宕住,需要退出再重新進sqlplus。

5.7 重新編譯數據庫
重新編譯PLSQL代碼塊,並重新編譯無效對象,注意不是utlrp腳本,而是使用utlirp。如果系統版本存在升級,需要根據readme.html中的要求執行腳本。如果存在新的補丁的,執行補丁對應的SQL腳本。
命令:

@?/rdbms/admin/utlirp.sql

#執行升級腳本(如果不存在版本升級,不需要執行):

#@?/rdbms/admin/catupgrd.sql

6 、 目標端RAC參數調整
6.1 修改數據庫參數
經過前面一系例操作,數據庫跨操作系統的問題就全部都解決了。到目前爲止,接下來的操作和調整,是爲了啓用RAC。
命令:

startup mount force
alter system set instance_name='ORCL1' scope=spfile sid='ORCL1';
alter system set instance_name='ORCL2' scope=spfile sid='ORCL2';
alter system set instance_number=1 scope=spfile sid='ORCL1';
alter system set instance_number=2 scope=spfile sid='ORCL2';
alter system set thread=1 scope=spfile sid='ORCL1';
alter system set thread=2 scope=spfile sid='ORCL2';
alter system set undo_tablespace='UNDOTBS1' scope=spfile sid='ORCL1';
alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='ORCL2';
alter system set cluster_database_instances=2 scope=spfile sid='*';
alter system set cluster_database=TRUE scope=spfile sid='*';

6.2 重新啓動數據庫並打開節點2
調整完後需要重啓數據庫。
命令:

SHUTDOWN IMMEDIATE
STARTUP
alter database enable thread 2;

6.3 編譯無效對象
再次編譯無效對象。
命令:

@?/rdbms/admin/utlrp.sql

6.4 添加CRS資源並測試啓停數據庫
操作完這一波,遷移就算完成了。注意這個操作是在oracle用戶下完成,其中-d 是數據庫唯一名、-p spfile、-i 實例名/SID、-n node 。
命令:

srvctl add database -d ORCL -o $ORACLE_HOME -p +DATA/orcl/spfileorcl.ora
srvctl add instance -d ORCL -i ORCL1 -n db01
srvctl add instance -d ORCL -i ORCL2 -n db02
srvctl start database -d ORCL -o open
srvctl stop database -d ORCL
srvctl start database -d ORCL -o open

6.5 創建密碼文件
創建密碼文件用來存放sys用戶的密碼,如果沒有密碼文件,sys用戶無法通過遠程連接數據庫。
節點1
命令:

orapwd file=$ORACLE_HOME/dbs/orapwdORCL1 password=oracle123

節點2
命令:

orapwd file=$ORACLE_HOME/dbs/orapwdORCL2 password=oracle123
發佈了61 篇原創文章 · 獲贊 92 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章